- 音楽プレイヤー
    - コントロールセンター
        - ○曲名、アルバム名などの表示
        - ○シークバーの表示
        - ○一時停止、再開の実装
        - ○アルバムアートワークの表示
    - 機能
        - ○シャッフルモードの実装
        - ○リピートモードの実装
        - ○イヤホン抜き時の一時停止
        - ○他アプリでの音声再生時
- アプリ側
    - ●再生ボタンなどの実装
    - ●音楽プレイヤーの各種delegateに対応
        - ●再生中の曲情報
        - ●再生リストの項目の色変えなど
        - ●再生状態による再生ボタンの切り替え
        - ●シャッフルモードボタン、リピートモードボタンの切り替え
    - ●再生リストの編集機能
    - ●プレイリスト編集機能
    - ●アルバムクエリのソート変更機能
    - ●再生リストが空のときの表示調整(アルバムタイトルなどを---にするなど)
- 再生リスト画面と音楽再生部分
    - 再生速度の変更機能
    - 音楽再生中は再生リストタブのアイコンを波アニメアイコンにする？
    - ●再生リストの再生中判定をもうちょっと正確に行う(今はcurrentIndexとの比較だっけ？、そこから、nonshuffleindexでの比較とかに変更)
    - 任意秒単位でのジャンプ機能(15秒とか)
    - 「次のアルバムを再生」機能
    - 「次の曲をランダムに再生」機能
    - ●デフォルトアルバムアートワークの見栄えを良くする( 今はいかにもEmptyな感じなので )
    - ●再生リスト画面もカスタムタイトルバーにする
    - △再生リストの「保存」「クリア」ボタンのアイコンを用意する(メニュー項目にしたので不要かも)
    - ●再生リスト画面の現在再生中の曲のタイトルだけが少し右にずれているように見えるのをなんとかする(フォントサイズが大きいからずれて見える)
    - ●再生リストの曲の詳細情報の表示機能
    - 起動直後の再生画面をもっと親切にする(メッセージを表示するとか？)
    - 再生曲情報の変更時に何かしらアニメーションを行うようにする
    - ●再生曲情報のタイトル名部分が寂しいのでデザインの変更を検討する(->フォントを変更した)
    - ●シャッフルボタンタップ時、現在と同じシャッフルモードを選択時に再シャッフルする
    - ●シークバーを更新をもっとスムーズにする
    - シークバー操作時、タップ位置が下になるほど移動量が小さくなるようにする
    - ミニアルバムアートワークのアスペクト比を元の画像のアスペクト比に合わせる
    - 再生リストを右スワイプで、曲名->アルバム名->アーティス名の順に表示を切り替える。左スワイプで曲名表示に戻す。
    - AudioQueue使用時に電話割り込みなどに対処できているか確認する(AudioSessionが関係しているらしい)
    - 曲の重複設定
    - 重複曲を再生するときにランダムで違う曲を再生する機能
    - ランダム混入機能 : たまに再生リストにない曲が混入して再生される( 新鮮味のため )
- オプション画面
    - ●アルバムアートワークの表示設定
    - アルバムシャッフルの設定(アルバム内の順番->トラック番号順、プレイリスト番号順、シャッフル)
    - セルの文字数オーバー時の挙動を設定できるようにする
        - セルの自動スクロール
        - 末尾...
        - 中間...
        - 文字サイズ縮小
    - シングル曲判定時の収録曲数
    - バージョン情報の表示
- クエリビュー
    - その場再生機能
    - アルバム名などのコピー機能
    - 重複追加機能
    - △追加済みの場合の-アイコンのデザインをグレースケールではなく、テーマ色によるアウトラインに変更する？
    - 追加/削除操作時に、わかりやすいように演出を入れる？( MBProgressHUDで何か表示するとか、再生リストタブの背景を明滅させるとか、色を緑(or赤)にするとか )
    - ●クエリビューがモーダルの場合に表示される下部ツールバーをもっと目立たせる
    - ソート時(表示オプション変更時)もHUDを表示する(応答性能改善)
    - ●Podcastを別枠にする
        ●- Podcastのトラック番号は配信日が遅い順に割り当てることにする
    - ●クエリビューでの曲の詳細情報の表示機能
    - ●クエリビューでの一括追加操作の改善(階層潜らなくてもできるようにする) -> +ボタンの実装
    - クエリビューのパフォーマンス改善or反応性改善
    - ●フィルタ編集画面の吹き出し画像を用意する
    - フィルタ編集画面で範囲を設定できるようにする
    - ●フィルタ編集画面でリリース日を設定できるようにする
    - ●表示オプションに表示されるフィルタ内容ラベルを自動スクロールさせる
    - 表示オプションの「フィルタを追加」ラベルの色を変える？(テーマ色か薄いグレー)
    - 表示オプションにリセットボタンをつける
    - ×プレイリストの中身を表示中のときは項目番号を表示するようにする -> 不要
    - ×プレイリストの中身を表示中のときは曲の時間を表示するようにする -> 不要
    - ×項目名が省略されている場合、セル長押しでスクロールさせる？ -> 不要(自動スクロールで済ます)
    - ●アルバムとPodcastのグループ項目ではサブラベルに曲数だけでなく、アーティスト名も表示する
    - ●アーティストのグループ項目ではサブラベルに曲数だけでなく、アルバム名も表示する
    - アーティス名の自動分割
        - = , / & ( ) Feat. × 、+ を区切りとする
        - 空白を除去
        - CV. CV:を除去
    - ●最初のカテゴリ画面に作業内容を表示する。(「再生リストへ追加」「プレイリストへ追加」「タグへ追加」など) -> 完了ボタンを「プレイリストへの追加を完了」などのようにすることで実現
    - ×セクションヘッダを自動スクロールさせる -> 問題があったので中止
    - 曲時間でソート
    - +ボタンに追加先を表すアイコンも表示する(再生リスト、プレイリスト、タグ)
    - ●項目がない場合はセクションヘッダに何も表示しないようにする
    - 再生リストへ追加時に、「再生リストをクリアして追加」できるようにする
    - タグ、プレイリストの項目も用意する
    - タグでフィルタできるようにする
    - 曲リストでさらにグループ化(クエリ追加)
    - グループ化の解除
    - シングルアルバム判定方法を改善する
        - どちらかのタイトル名が完全に含まれる and 再生時間がほぼ一致
    - サブラベルの内容をソート方法で変える
    - フィルタ設定でデフォルトを「一致する」ではなく「含む」に変える
    - フィルタなどの入力履歴を保存して選択できるようにする
    - インターフェイスの改善( フィルタやソートへ一発でアクセスできるようにツールバー的なものを作る？ )
    - アルバムのディスクごとの表示
- プレイリスト
    - ●プレイリストの削除機能
    - ●プレイリストの追加機能(再生画面から追加、新規に追加)
    - ●プレイリストの並べ替え機能
    - ●プレイリスト名の変更機能
    - ●プレイリスト内項目の削除機能
    - ●プレイリスト内項目の追加機能
    - ●プレイリスト内項目の並べ替え機能
    - ●iTunesプレイリストから独自プレイリストへのコピー機能
    - ●プレイリスト一覧画面に+ボタン
    - プレイリストの作成日、更新日
    - ●プレイリスト画面にもセクションヘッダーを表示(追加先:○○のやつ)
    - プレイリストへの項目追加時、プレイリストからの項目追加をできるようにする？
    - ●新規プレイリスト作成時、先にプレイリスト名を入力する
    - ●プレイリスト名が重複できないようにする
    - ●プレイリストが無いときは「編集」ボタンを無効にする
    - ●プレイリストが無いときはセクションヘッダを隠す
    - ●プレイリストから取り除くときの「Delete」ボタンの名前を「取り除く」に変える
    - ●空名チェック
    - ●編集中はセル長押しでのメニュー表示をしないようにする
    - タグプレイリスト( 内部的にはタグの+/-ボタン操作のリスト )
- タグ
    - ●タグが無いときは「編集」ボタンを無効にする
    - ●タグが無いときはセクションヘッダを隠す
    - タグのタブ用アイコンを用意する
    - ●タグ外すときの「Delete」ボタンの名前を「タグを外す」に変える
    - ●空名チェック
    - ●編集中はセル長押しでのメニュー表示をしないようにする
    - タグの複製
    - タグ間の親子関係の設定
    - ●タグもプレイリストのように並び替えができるようにする
    - ●再生リスト追加時に「このタグで絞り込み」と「このタグ以外で絞り込み」の機能
    - タグからアルバム一覧表示機能
    - アルバムタグ : アルバムに対して付けることができるタグ。アルバムタグはアルバム内の各曲に自動でタグ付けされる(タグが付いているものとみなされる)
- クロスフェード
    - ●設定
        - ●クロスフェード ON/OFF
            - ●クロスフェード開始タイミング          曲終了n秒前
            - ●フェードアウト時間                    n秒
            - ●フェードイン時間                      n秒
            - ●手動切替/シーク時のフェードアウト時間 n秒
            - ●手動切替/シーク時のフェードイン時間   n秒
            - ●手動切替時クロスフェード              ON/OFF
            - ●シーク時クロスフェード                ON/OFF
            - ●1曲リピート時クロスフェード           ON/OFF
        - クロスフェードパラメータのランダム化( 飽きを防止するため )
        - プリセット機能
        - 再生リスト画面でのOn/Off設定、プリセット選択機能
        - 曲ごとのクロスフェード設定
- バグ
    - ●ナビゲーションバーにカスタムタイトルバーを使っている箇所のタイトル名が長い場合のはみ出し
    - ●クエリオプションの変更は階層をさかのぼったときに元に戻すようにする
    - ●プレイリスト画面のナビゲーションバーのタイトルをカスタムタイトルビューにする
    - ●再生リスト画面のカスタムタイトルビューの位置がセンタリングされていない
    - ●アルバムシャッフルでアルバム内の曲順がトラック番号順になっていない
    - ●アルバムアートワークの画像サイズのアスペクト比が維持されていない(「ラブミーギミー」で顕著)
    - ●再生リストの編集での項目移動時に移動先がずれる
    - △再生リストの編集中のスクロールがカクつく(処理落ち？充電中のみ？)
    - ●再生リスト画面で編集モードに移行するときに、カスタムタイトルビューの位置がずれる(初回のみ？) -> iPhone6plusだとタイトルビューがいつのまにか無くなる
    - ●アルバムシャッフル,全曲シャッフルで項目数が2個の場合、シャッフルされない
    - ●再生リストの項目削除時に項目インデックスが更新されていない
    - ●手動でシーク位置を変更したときに、コントロールセンターでのシーク位置が反映されていない
    - AirPlay時、自動での曲の切り替わりタイミングでシークバーの位置や曲情報などの反映が遅れる(手動で次の曲にしたときは問題ない)
    - ●たまにMarqueeLabelによる自動スクロールがされない
    - ●プレイリストクリア時にカレントインデックスがクリアされていない？
    - ●iTunesプレイリスト画面でメニューから「名前を変更」を出来てしまう
    - ●タグ画面でタグ編集中にセル長押しでタグ名を変更するとおかしなことになる
    - ●iTunesプレイリストからのコピーで、独自プレイリスト名が重複できてしまう
    - ●再生リストからのプレイリスト保存時の名前が重複や空文字チェックをしていない
    - ●クエリビューで曲リスト時のサブタイトルラベルの自動スクロール設定がデフォルトのまま
    - ●ライセンス表記のテキストフィールドが編集できてしまう
    - オーディオブックは再生できないので認識しないようにする
    - iOSのコントロールメニュー(画面下からスワイプで出すやつ)を出すときにタブが選択されてしまうことが多い
- その他
    - ●メニューの選択セルの背景色を変える(現在は青固定)
    - ヘルプ(使い方、説明、注意など)
    - iPhone4,iPhone6,iPadなどでの動作確認(iOS8も)
    - △テーマ色(明るさ)でステータスバーの色を黒と白を自動で切り替える -> これをやると、ステータスバーだけでなく、ナビゲーションバーやボタンの文字色も買えなくてはいけなくて大変
    - テーマ色を2色(背景色、文字色)にわける？
    - ●国際化(一部の英語になっている部分だけでいいかもしれない)
        - ●セル削除時の"Delete"
        - ●モーダルの"Cancel"と"Done"
    - ●設定タブの名前を"設定"から"オプション"に変える(設定だけでなく、ライセンス表記などもあるので)
    - メモリプレッシャー時に現在の再生位置を保存する
    - バックグラウンド時(スリープ時)、各種更新を切ってCPUコストを下げる
    - iPodLibraryにすべてのMediaTypeのデータを入れて動作確認する
        - MPMediaTypeMusic         = 1 << 0,
        - MPMediaTypePodcast       = 1 << 1,
        - MPMediaTypeAudioBook     = 1 << 2,
        - MPMediaTypeAudioITunesU  = 1 << 3,  // available  in  iOS  5.0
        - MPMediaTypeAnyAudio      = 0x00ff ,
        - MPMediaTypeMovie         = 1 << 8,
        - MPMediaTypeTVShow        = 1 << 9,
        - MPMediaTypeVideoPodcast  = 1 << 10,
        - MPMediaTypeMusicVideo    = 1 << 11,
        - MPMediaTypeVideoITunesU  = 1 << 12,
        - MPMediaTypeAnyVideo      = 0xff00 ,
    - iPodLibrary更新によるiPodDataControllerの再構成
    - ●Podcastアルバムのトラック番号をリリース日で行うようにする
    - ●弱参照にするべきところをなおす
        - ●MPSongのTagList
        - ●LMPTagのSongList
    - ●キーボードを出している箇所で、「改行」ボタンなどの名前を適切なものにする
    - ●デバッグコードの除去
        - ●DDLogDebug
        - ●再生リスト画面のメニューのデバッグ項目
    - オーディオブックの動作確認
    - 独自再生カウントとその表示
    - 選択タブをもっとわかりやすくする( 背景色を変えるなど )
    - ●未ダウンロード曲も項目として扱えるようにする
    - ●曲に紐づいた保存データは曲が消えても、消さないようにする( 一時的に見えなくなっているだけかもしれないし )
    - ●曲永続情報からMPSongを取得できなかった場合の処理( HintNumberを使わずに、アルバム名や曲名から探し、それでも見つからなかった場合は無効MPSongとして保持する )
    - 保存データのバージョン管理( UserDefault, SongExtraData, PlaylistList, TagList )
        - バージョン情報の保持
            - UserDefault
            - SongExtraData // 未実装
            - PlaylistList
            - TagList
- iPhone4対応
    - ●起動画面イメージ
    - ●再生リスト画面、再生リストテーブルビューの高さ
    - ●プレイリスト画面、リストテーブルビューの高さ
- iPad対応
    - ●起動画面イメージ
    - ●再生リスト画面、影エフェクトの位置
    - ●再生リスト画面、現在曲のラベルの左端がフェードしている
    - ×ランドスケープモード時、タイトルビューの位置が横になる
    - ●曲詳細画面、アルバムアートワークが小さいのと縮小が汚い
    - ●プレイリスト画面、タブ位置
    - ●プレイリスト画面、独自プレイリストのセクションヘッダ文字位置
    - ●プレイリスト画面、テーブルビューサイズ(高さ)
    - ●ライセンス表記、テキストフィールドのサイズ
- iCloud対応
    - ●ファイルが削除された場合の処理を実装( 現在メモリ上にあるデータを破棄するかどうかユーザーに確認する？ ) -> メモリ上のデータからファイルへ保存することにした。
    - ●バックアップ機能
- 実装難易度高 or 実装優先度低
    - ●タグ機能
    - 自動タグ機能(アルバム名、アーティスト名、作曲者などで自動でタグ付け)
    - 曲詳細からタグの付け外しをできるようにする
    - ランドスケープモードへの対応
    - ●クロスフェード再生
    - ●ラベルのアニメーション(Marquee)
    - 統計情報(総再生時間、アーティスト別再生時間、再生回数ランキングなど )
    - iPod Library画面の最初のセルリスト用にアイコンを用意
    - 再生リスト画面でアルバムアートワークの拡大表示モードの実装(再生リストを隠してスペース確保？)
    - ●iCloud対応
    - ×Dropbox対応
    - ×last.fm対応(last.fmにあるメタ情報は微妙なので、やるとしたらscrobbleのみ)
    - 再生リストをスライドすることで、曲名->アーティスト名(+アルバム名)と表示項目を変える機能
    - 曲のレーティング機能(iPodLibraryでのレーティングからの設定機能、iPodLibraryに手動で反映させるための変更レーティング一覧表示機能も欲しい)
    - 再生履歴機能
    - タイマー機能(タイマー停止？)
    - プログラマブル再生機能(曲の再生方法、終了方法、独自のループなどを自由に決められる)
    - 検索画面
        - リアルタイムリストアップ
        - オートコンプリート
    - いいねボタン(ハート)
        - いいねボタンは再生リスト画面に表示し、曲再生ごとに1回だけ押せる仕様(つまり、曲が切り替わったらまた押せるようになる)
    - SongExtraDataにRabbitPlayer認識日時データを追加( 新曲が見つけやすくなる )
        - iPodLibrary画面に最近追加カテゴリをつける？それとも最近追加フィルタスイッチ？
    - ホーム画面にショートカットアイコンを置けないかどうか調査(完全に別アプリにしたほうがいいかも)

///////////////////////////////
// テスト項目
///////////////////////////////
- iTunesで曲ファイルが存在しない曲データをiPhoneと同期させた場合、アプリ内で表示されないことを確認
- iTunesStoreで買っただけでまだダウンロードしていない曲がある場合、アプリ内で表示されないことを確認

///////////////////////////////
// 実装メモ
///////////////////////////////
- 不正な曲データの扱い
    - songDictへは追加されない
    - SongExtraDataはiPodDataController初期化時に不正な曲データを検索し削除
    - iTunesプレイリストはiPodDataController初期化時にLeonPlaylistへの変換時に無視される
    - 独自プレイリストはiPodDataController初期化時に無視される

///////////////////////////////
// 音楽プレイヤー仕様
///////////////////////////////

再生
    停止状態の場合:
        再生リストのカレントインデックスの曲を再生する
    一時停止状態の場合:
        再生リストのカレントインデックスの曲とプレイヤー曲が一致する場合、プレイヤーを再開する。
        一致しない場合、再生リストのカレントインデックスの曲を頭から再生する。
    再生中の場合:
        再生リストのカレントインデックスの曲とプレイヤー曲が一致する場合、何もしない。
        一致しない場合、再生リストのカレントインデックスの曲を頭から再生する。
一時停止
    プレイヤーが存在する場合、一時停止させる
停止
    プレイヤーが存在する場合、シーク位置を先頭にして、一時停止させる
カレントインデックスの変更
    カレントインデックスの変更

///////////////////////////////
// タグデータ構造
///////////////////////////////

- データ復元手順
    - TagListを復元
    - SongListを作成(iPodLibraryから)
    - TagListを走査し、TagとSongの関連付けを行う(アクセスの高速化のため)
        - SongIDからSongを見つけ出し、SongのTagListへTagを追加、TagのSongListへSongを追加
- データ保存手順
    - TagListを保存する

- 所有( => )
    - iPodDataController => TagList => LMPTag -> songID
- 参照( -> )
    - LMPTag -> SongList -> MPSong
    - MPSong -> TagList  -> LMPTag


//////////////////////// 旧

- 所有
    - iPodDataController -> TagNameDict -> LMPTag
    - iPodDataController -> SongExtraDataDict -> SongExtraData
- 参照
    - Tag 1.* <-> 1.* Song
        - LMPTag -> SongList
        - MPSong -> SongExtraData -> TagList
    - iPodDataController -> TagNameList -> TagName

- 曲のPersistentIDに紐付いた独自データ構造(LMPSongExtraData)にタグ情報(LMPTag)を持たせる
- LMPSongExtraData
    - LMPTag
        - NSString* TagName
    - playCount


