2017/11/14

サウンド系API事情03 Mac/iOS系API

前回はWindowsのサウンドAPIについて説明したが、今回はMac/iOSのサウンドAPIに関して説明する。

新しいMacはiOSとAPIを同規格にしているものが多い為、昨今のAPIはiOSでも使用出来る。
ただし、サポートしている機能が異なったりレイテンシなどの品質が異なるなど、差異があるため注意が必要だ。
モバイルではバッテリ消費などを気にするため、品質や作法が異なる結果になるようだ。


CoreAudio


CoreAudioはiOSやMacアプリ開発に使用される基本モジュールの一つで、標準だがレイテンシの面などがかなり高品質なサウンドAPIとなっている。
再生、録音、エフェクトなどの機能が提供されていて、MacとiOS間で同じコードで実装できる場合が多い。
のちに説明するが、OpenALという3D音源シミュレーションを含むので、3Dサウンドが使用できる。

CoreAudioのAPIはコールバックに対応しているため、実装も比較的にしやすい。
またAudioUnitというプラグイン構造を採用しており、その規格でイコライザなどエフェクトが実装されている。AudioUnitをつなぐことで信号処理グラフを直感的に構築することができる。

いくつかのサウンドファイル形式に対応しているが、CAF形式というCoreAudio用のファイル形式を持っているのが特徴的だ。
音声ファイル形式でありながらコンテナ形式である、というもので、かなり柔軟にできている。

Macの方ではMIDIを扱うことができるが、iOSでは現時点ではその機能はない。

iOSの方ではモバイルならではの機能がいくつか用意されている。
正確にはCoreAudioの一部ではないが、オーディオセッションという、現在の再生出力先(スピーカかイヤホンか、など)を制御できる機能と連携を行うことが多い。音声再生中にイヤホンが抜けたら音声が止まる実装は、この機能の恩恵による。
また、AVAudioPlayerという簡単に音声を再生できるAPIも用意されている。


番外:OpenAL


OpenALはMac/iOSに限らず広く実装されているし、Mac/iOSではCoreAudioの一部なのでここで扱うか迷うが、実質サウンドを実装する際に「CoreAudioで組むか?それともOpenALで組むか?」みたいな話になるのでここで扱う。
OpenALはグラフィクスのOpenGLに影響を強く受けた音声再生のAPIで構成されるが、3D音源シミュレーション機能を持つためゲームなどによく使用されている。先に述べたように多くのプラットフォームで実装されているが、他に3D音源シミュレーションAPIを持っているプラットフォームでは若干やる気のない実装が見られる(個人的見解)。

3D音源シミュレーションは現実世界の物理モデルに沿って聞こえ方を再現することもできるし、簡易モデルで負荷が少ないシミュレーションを行うこともできる。また、ドップラー効果などのシミュレーションにも対応している。

ただコールバックなどが標準では実装されていないので、ストリーミング再生を行う場合は実装が必要になる。
あと音声のデータ形式はPCMのみなので、音声ファイルを自前でデコードする必要がある。

注意点としては、プラットフォームによってはライセンスに気をつける必要があるところが挙げられる(LGPLなど)。


今回はMac/iOSのサウンドAPIの紹介だったが、現時点で使用できるAPIは少ないため紹介した内容も少ない。
一見、選択肢が少ないように思われるが、それだけCoreAudioの品質がいいためあまり不満も出ないようだ。
次回はLinux系サウンドAPIについて説明したい。

0 件のコメント:

コメントを投稿