PlaySectionsで使われている3種類のPlayer API

Hiroshi Kajihata
PlaySections
Published in
4 min readOct 11, 2016

PlaySectionsは、再生するファイルに合わせて、内部で3種類のPlayer APIを使いわけています。

  1. Audio Unit (Core Audio)を使った独自Player
  2. MPMusicPlayerController
  3. AVPlayer (AVQueuePlayer)

1. Audio Unit (Core Audio)を使った独自Player

DRMコンテンツを除く、一般的なオーディオファイルを再生する場合には、Core AudioAudio 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を使う際の制限は以下のとおりです。

  1. PCMデータにアクセスできないので波形表示に対応できない
  2. 高精度なループ再生制御ができない
  3. ピッチ変更、イコライザ、ボーカルキャンセルができない

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つだと思います。

--

--