PlaySectionsで使われている3種類のPlayer API
PlaySectionsは、再生するファイルに合わせて、内部で3種類のPlayer APIを使いわけています。
- Audio Unit (Core Audio)を使った独自Player
- MPMusicPlayerController
- AVPlayer (AVQueuePlayer)
1. Audio Unit (Core Audio)を使った独自Player
DRMコンテンツを除く、一般的なオーディオファイルを再生する場合には、Core AudioのAudio Unitを使った独自のPlayerが使われています。
Audio Unitを使ってわざわざ独自のPlayerを実装しているのは、以下の理由からです。
- サンプル単位の精度でシーク、ループ制御するため
- Audio Unitに標準装備されている、再生速度・ピッチ変更機能 、イコライザを使うため
- ボーカルキャンセル機能を実装するため
ちなみに、オーディオファイルのデコードには、Extended Audio File Servicesを利用しています。
2. MPMusicPlayerController
Version 1.2.0から、Apple MusicのコンテンツなどのDRM保護されたファイルの再生に対応しました。DRM保護されたファイルは、Music Libraryからファイルを書き出すことができません。そのため、Core Audioで扱うことができないので、仕方なくMPMusicPlayerControllerを使って再生しています。
MPMusicPlayerControllerを使う際の制限は以下のとおりです。
- PCMデータにアクセスできないので波形表示に対応できない
- 高精度なループ再生制御ができない
- ピッチ変更、イコライザ、ボーカルキャンセルができない
3. AVPlayer (AVQueuePlayer)
Version 2.0.0から、オーディオだけでなく、ビデオ再生にも対応しました。ビデオファイルの場合には、AVPlayer (AVQueuePlayer)を使って再生しています。
iOS 10から、AVPlayerLooperを使えばかんたんにシームレスなループ再生が可能になりました。PlaySectionsでも利用しています。
AVPlayerを使った場合、独自Playerに比べると以下の制約があります。
- ピッチ変更、イコライザ、ボーカルキャンセルができない
まとめ
1つのアプリケーションの中で3種類ものPlayerを使い分けているケースは、あまりないと思います。上記のとおり、3つの中でオーディオファイルを最も細かく再生制御できて機能が一番多いのは、独自Playerを使った場合です。
そのため、たとえばApple Musicのコンテンツを読み込んだ後に、より細かなことをやりたい、と思った場合には、同じ曲のCDを買って取り込むか、iTunes Storeで曲を購入してPlaySectionsに読み込んでもらうのが、一番理想的です。
本当は、DRM保護されたファイルもCore Audioで扱えるようになるのが、開発者としては理想的なのですが、著作権保護の観点から、きっと今後もAppleがサポートすることはないでしょう。
また、Apple MusicやSpotifyなどの定額制ストリーミングサービスが今後ますます普及すると、DRM保護されたファイルを扱わなければならないケースが増えると思い、PlaySectionsではMPMusicPlayerControllerを使った再生にも対応するようにしました。
DRM保護されたオーディオファイルや、ビデオファイルの再生にも対応している点は、他の耳コピ系アプリと比べて、PlaySectionsの大きな特徴の1つだと思います。