TuneFerry
IC レコーダー、iPhone のボイスメモ、業務用フィールドレコーダー。あらゆる録音物を iPhone 上の "自分のライブラリ" として整理・再生する、Apple ネイティブのオーディオプレイヤー。
かつて iPod classic がそうだったように、聴きたい曲を「持っている」感覚を取り戻すための iPhone アプリ。
こんな人のためのアプリ
音楽の素材を「自分のもの」として手元に置きたい人へ。配信サービスでは扱えない、自分で録った音・自分で持っている音のための場所。
練習録音を整理したい音楽家
ボーカル・楽器の自宅練習、レッスン録音、リハーサル、ライブ録音。IC レコーダーや iPhone のボイスメモで撮った素材を、日付・テイク・楽曲ごとに整理。後で聴き返して上達を確認できる。
フィールドレコーダー使い
ZOOM H シリーズ、Sound Devices MixPre、TASCAM 等で記録した素材を、業務メタデータ (BWF/iXML) を保ったまま iPhone に集約。シーン名や録音時刻が落ちないので、後の編集や納品で迷わない。
iPod classic を懐かしむ Apple ファン
かつて iPod に CD から曲を移して「自分のライブラリ」を作っていた頃の体験を、現代の iPhone で。Cover Flow、ハプティックなクリック感、Apple 純正フレームワーク (SwiftUI/AVAudioEngine) で実装された軽快な操作感。
主要機能
IC レコーダー / iPhone ボイスメモ / 業務フィールドレコーダー — 録音元を問わず、iPhone 上で「自分のライブラリ」を組み立てるための機能セット。
USB / SD / iPhone から取り込み
USB-C ストレージ・SD カード・Files.app に保存したボイスメモまで、ソースを問わず取り込み可能。フォルダを 1 度登録すれば、フォアグラウンド復帰時に新規ファイルを自動取り込み。原本は不変。
多軸ソート + スマート検索
追加日時 / タイトル / アーティスト / アルバム / 再生時間 / フォーマット / サンプルレート / ファイルサイズの 8 軸でソート + 全文検索。
アルバム化 + 一括編集
1 イベントで取り込んだ複数 Track を選択 → アルバム化 / 一括編集 (アーティスト・アルバム) / 一括ノーマライズ / 一括削除。
WAV 詳細メタデータ + 32bit float
RIFF / LIST-INFO / BWF (bext) / iXML を解析し、ZOOM F・Sound Devices などの業務メタデータを保持。Format Tag を読み取って 32bit float (IEEE Float) と PCM int を区別表示。マニフェスト JSON でファイル外にも記録。
ノーマライズ (Peak / RMS / Tilt EQ)
取り込み時に音量を自動正規化。ピーク / RMS (-16 dBFS) / RMS+Tilt EQ (-2 dB high-shelf @ 4 kHz) から選択可能。耳につく高音を緩和。
空間オーディオ + Head Tracking
AVAudioEngine + AVAudioEnvironmentNode (HRTFHQ) でステレオを 3D 配置。AirPods のヘッドトラッキングで音場が頭の動きに固定される。
ジャケット (PhotosPicker / AI 生成)
写真は短辺基準で正方形にトリミング。写真未指定時はジャンル毎の自動ジャケット生成。iOS 18.2+ で Image Playground による AI 生成にも対応。
バックグラウンド再生 + Now Playing
ロック画面・コントロールセンター・AirPods のリモコンに対応。再生キュー / 自動次曲遷移 / 電話などの割り込み復帰。
画面で見る TuneFerry
iPhone 上での実際の操作フローを 5 つの画面で紹介。iOS 17+ / iPhone 専用、Swift 5.9 + SwiftUI + SwiftData + AVAudioEngine で実装。
1 タップで複数曲をまとめて操作
「選択」モードに入ると、左の丸チェックで複数の録音をまとめて選べます。右上のメニューから アルバム化 / 一括編集 / ノーマライズ実行 / 削除 がワンアクション。練習録音 8 テイクを一気に「○月のレッスン」アルバムにまとめる、といった運用がスムーズです。
- 選択モードのトグルとチェック UI
- ボトムタブで「曲 / プレイリスト / USB / 設定」を切り替え
- Recorder_xxxx 連番ファイル (ZOOM 系) も自動で並ぶ
1 イベントを 1 アルバムへ
選択した曲をひとまとめにして、ジャケット (写真ライブラリから or AI 生成) とジャンルを与えるとアルバムができあがります。写真は 短辺基準で自動的に正方形にトリミング されるので、横向きの撮影でも縦向きでも迷わずジャケット風に整います。
- iOS 18.2+ なら Image Playground で AI 生成
- ジャンル選択でジャケットの色合いも自動調整
- アルバム化された曲は「曲」タブから外れ、リストがすっきり
横スワイプで切り替える、所有感のある音楽棚
プレイリストタブの上部は iPod / iTunes 時代の Cover Flow を彷彿とさせる横スワイプ式の大きいジャケット表示。下部はリスト / アイコン (2 列グリッド) を切り替え可能で、自分のコレクションを「所有している」感覚で並べ直せます。タップでそのまま全曲再生が始まります。
- カードタップで即再生、「ⓘ」で詳細画面
- アイコン表示はジャケットを並べる音楽棚風
- 長押しで「詳細 / 削除」のコンテキストメニュー
USB / SD / iPhone のボイスメモから自動取り込み
取り込み元のフォルダを「プロファイル」として一度だけ登録すれば、以降は アプリを開く・前面に戻すたびに新規ファイルだけを自動でライブラリにコピー。原本ファイルは触らず、TuneFerry 内部のコピーだけを管理対象にします。IC レコーダーの USB、SD カードリーダー、iPhone のボイスメモ、外付け SSD など、どのソースでも同じ仕組みで動作します。
- Security-Scoped Bookmark で次回もそのフォルダから開始
- 同名 + 同サイズで重複検出 → 確認ダイアログ
- 取り込み時に自動ノーマライズ (任意設定)
ノーマライズと空間オーディオを思いどおりに
取り込んだ録音物の音量を整える ノーマライズは 3 方式から選択: シンプルなピーク正規化 / RMS 正規化 / RMS + 4 kHz High-shelf -2 dB の Tilt EQ。フィールド録音で目立ちやすい「耳につく高音」を抑える設計まで含まれています。AirPods での空間オーディオ + ヘッドトラッキングも 1 タップで切替。
- 目標ピーク -1.0 dBFS をスライダーで微調整
- RBJ Audio EQ Cookbook 準拠の biquad フィルタ
- AirPods Pro / Max / 第 3 世代以降に対応
開発状況
Phase 1〜6 の実装フェーズで段階的にリリース。各 Phase 完了で TestFlight 配信。
Phase 0 — Bootstrap
プロジェクト雛形 / CI / TestFlight 配信パイプライン
Phase 1 — MVP
UIDocumentPicker 取り込み / AVFoundation 再生 / 基本ソート
Phase 2 — 永続化
SwiftData / プレイリスト / 多軸ソート + アルバム化 / アートワーク / Cover Flow
Phase 3 — Auto Import
USB プロファイル / 自動取り込み / Custom Folder Picker
Phase 4 — Format Expansion
WAV メタデータ抽出 / 32bit float 判別 / 3 方式ノーマライズ / マニフェスト JSON
Phase 5 — Spatial Audio
AVAudioEngine + AVAudioEnvironmentNode (HRTFHQ) + Head Tracking + Stereo Upmix + Ambisonics デコード
Phase 6 — Polish
バックグラウンド再生 / Now Playing / Haptic / Image Playground
テクニカルスペック
- 対応 OS
- iOS 17.0+ (iPhone 専用)
- 言語
- Swift 5.9+ / SwiftUI / Swift Concurrency
- データ層
- SwiftData (Track / Playlist / USBProfile @Model)
- 再生エンジン
- AVAudioEngine + AVAudioPlayerNode + AVAudioEnvironmentNode (HRTFHQ)
- 取り込み
- UIDocumentPicker + Security-Scoped Bookmark + コピー方式 (原本不変)
- メタデータ
- AVURLAsset.commonMetadata + RIFF/INFO/bext/iXML パーサー + WAV Format Tag 解析 (32bit float 判別) + マニフェスト JSON
- サンプル形式
- 16/24/32 bit PCM int + 32 bit float (IEEE Float) + Extensible (SubFormat GUID 解決) を判別表示
- 音量正規化
- Peak / RMS / RMS + High-shelf Tilt EQ (RBJ Audio EQ Cookbook)
- 空間オーディオ
- AVAudioEngine + AVAudioEnvironmentNode (HRTFHQ) + CMHeadphoneMotionManager (AirPods Pro / Max / 第3世代)
- AI ジャケット生成
- Image Playground (iOS 18.2+ / Apple Intelligence)
- CI/CD
- Jenkins (Tailscale 経由) / develop マージで自動 TestFlight 配信
- 署名
- Automatic Signing (Team: TNU5GR62GT)
- ライセンス
- Private (一般配布なし、TestFlight Internal のみ)