MPMusicPlayerControllerに挙動不審


MPMediaPickerControllerとMPMusicPlayerControllerとを組合せた音楽プレーヤーで発生しました。

  • 追加記入 : 2019年12月24日、著者記事へのアクセスは、本記事最上部の「Try-Jizy」をクリックするとアクセス可能なリストが表示されます。よって、記事最下部の「著者記事等へのアクセス案内」からこの部分を削除しました。
  • 追加記入 : 2019年12月09日に『AudioUnit(iOS)を20個以上用いて「ラウドネス周波数特性補正付き音楽再生アプリ」を独学で造り上げた奮闘記 [ その後 -2 ]』を投稿しました。
  • 追加記入 : "iOS-12.1"に対応させた"私のApp"を、2019-03-16に"Ver-2.2"としてリリースしました。長いトンネルでした。後日、詳細や顛末を投稿させて頂きます。2019-03-17 by Try-Jizy
  • iOS側で変更した正確なタイミングは確認出来ませんが、"私のApp"では、「iOS 11.3」で異変に遭遇し、バグと考えて待機。「iOS 11.4」での修正を待ちましたがダメでした。
  • 挙動不審内容
    (1)「skipToPrevious(前の曲に移動)」を操作すると、同じ曲の先頭からの再生になる。
    (2)「skipToPrevious」を操作したすぐ後で、「skipToNext(次の曲に移動)」の操作すると「曲とび」が発生する。
    (3) 再生中に「Artwork Image」を呼び出すと、次の曲の「Artwork Image」が表示される。
    (4) 選曲リストを最初から最後まで「自動的に順送り再生する」場合では、問題は発生しない。
    (5)「skipToNext(次の曲に移動)」の操作のみの再生では、問題は発生しない。
  • MPMediaPickerControllerの役割
    (A) iPod Libraryにアクセスして、Pickerの表示と選曲リストの作成。
    (B) 選曲リストは、「play」を実行すると設定が実行されるらしい。
    (C) 曲情報は、nowPlayingItem(currentItem)として呼び出す。
    (D) 曲情報に含まれる主たる情報。
     ・ 音楽 Data File 。
     ・ 曲やアルバムのArtwork Image。
     ・ 曲の Title / Artist / AlbumArtist 等の名前テキスト。
     ・ 曲の再生時間など。
     ・ 選曲リストの総局数と曲順番号、シャッフルの曲順設定。
  • MPMusicPlayerControllerの構成
     通常、下記のPlayerと組合せて選曲リストの曲を再生する。
     ・ applicationMusicPlayer
     ・ applicationQueuePlayer
     ・ systemMusicPlayer
  • MPMusicPlayerControllerによる操作
     Playerの操作
     ・ Play / Pause / Stop など。
     ・ Next(次の曲) / Previous(前の曲) / Beginning(曲の頭から再生) など。
     ・ repeat(リピート再生) / shuffle(曲順をシャッフル) など。
  • 挙動不審の原因を分析
    (a) 色々と動作確認を重ねて、「曲の再生をスタートして"短い時間経過" or "アクセスする"とnowPlayingItemに次の曲の曲情報がセットされる」ためと考えました。
    (b) しかし、プログラムがどのように変わったのかまでは調べられないので、ViewControllerのコードで「カット&トライ」を繰り返し、必要な動作を確保しました。結構ややこしいコントロールになります。
  • 関連資料にアクセス
     ・
    < DeveloperのiPodLibraryAccessGuideへ>
     ・ < DeveloperのMPMusicPlayerControllerへ>
  • < まとめ >
    ▪️私と同様な事例でお悩みの方には、「ズバリの解決策」としては提示出来ていません。それは、"私のApp"では「チョット古臭いデザインのオリジナル操作面 & ロジックを使っているため参考にはならない」と考えたからです。もちろん、"私のApp"では解決済みです。
    ▪️著者 : Try-Jizy (トライ・ジジー) / (2018-8-7 脱稿)
    ▪️著者記事等へのアクセス案内 : < AppStore内 "私のApp" == "dddAFPlayer" へ >