LoginSignup
151
144

More than 5 years have passed since last update.

iOSのオーディオまわり(CoreAudio)まとめ

Last updated at Posted at 2014-09-28

iOSでサウンドの再生をしたい。
でもいろいろな再生方法があって、ややこしいので整理しておく。
公式ドキュメント:Core Audioの概要

なお、OSXでしか扱えないものは割愛している。iOS特化。

CoreAudioアーキテクチャ

iOSでは、オーディオまわりの機能はCoreAudioというアーキテクチャにまとめられている。
iOSのCoreAudioは5つののフレームワークから成り、各フレームワークにはサービスと呼ばれる各種機能が入っていたりいなかったり。

  • AVFoundation.framework
    • AVAudioPlayerクラス(サービスに分類)
  • AudioToolbox.framework
    • Audio Converter Services
    • Audio File Services
    • Audio File Stream Services
    • Audio Format Services
    • Audio Processing Graph Services
    • Audio Queue Services
    • Audio Session Services(iOS7.0から非推奨)
    • System Sound Services
  • AudioUnit.framework
    • Audio Unit Services
  • OpenAL.framework
    • OpenAL(サービスに分類)
  • CoreAudio.framework

フレームワーク概要

AVFoundation.framework

iOS専用のフレームワーク(OSXでは使えない)。
これだけObjective-Cインターフェイス。
オーディオの再生と録音を行う。ビデオも扱える。

AudioToolbox.framework

オーディオファイルの再生や録音、フォーマット変換などを行う。
サイズの大きいデータを少しずつ分割して読み込みながら再生する、ストリーミング再生もできる。
普通にサウンドを扱うだけならこれで十分。

AudioUnit.framework

「オーディオユニット」と呼ばれるオーディオ処理用のプラグインを使用するためのインターフェースを提供する。
任意長のサウンド再生や複数サウンドの同時再生など、低レベルな制御を行う。
凝ったことをしようとしたらこれを使わないといけない。

OpenAL.framework

オープンソースのクロスプラットフォームAPI、OpenALを使用するためのフレームワーク。
3Dサウンドが扱えたりする。ゲームとの親和性が高い。

CoreAudio.framework

すべてのCore Audioのサービスに共通のデータ型や、ハードウェアとのやり取りに使用する低レベルのAPI。

サウンド再生関連サービス概要

サウンドが再生できるサービスはこちら。お手軽順(OpenALの位置が難しいとこだけど)。

  • System Sound Services(AudioToolbox.framework)
  • AVAudioPlayerクラス(AVFoundation.framework)
  • Audio Queue Services(AudioToolbox.framework)
  • OpenAL(OpenAL.framework)
  • Audio Unit Services(AudioUnit.framework)

System Sound Services(AudioToolbox.framework)

一番お手軽だけど機能がかなり限られる。
その名の通りシステムサウンド向け。

  • 30秒以下のサウンドファイルを再生する
  • リニアPCMまたはIMA4(IMA/ADPCM)フォーマット / .caf、.aif、.wav
  • 複数同時再生不可
  • ボリューム制御不可
  • ループ不可

AVAudioPlayerクラス(AVFoundation.framework)

おそらく大抵の場合はこれで機能的には事足りると思う。

  • ファイルだけでなくメモリバッファからのサウンド再生も可能
  • 任意の長さのサウンドの再生が可能
  • 複数同時再生可
  • ボリューム制御可
  • ループ可
  • サウンドファイル内での特定の位置へのシークが可能
  • .aif, .caf, .mp3, .aac, .m4a, .mp4, .wav

以降、AVAudioPlayerクラスと同じことはできるみたい。

Audio Queue Services(AudioToolbox.framework)

  • 再生したいデータアプリケーション側で用意したバッファに入れ、それをキューにためていくと順次再生してくれる方式
  • ストリーミング再生だったり、長いオーディオファイルの部分部分を任意の順番で再生だったりに向いている

OpenAL(OpenAL.framework)

  • 以下の3つの要素からなる
    • Buffer: オーディオデータを管理
    • Source: Bufferにあるデータを使って音を発生させるオブジェクト。3次元空間に配置する
    • Listener: Sourceの発生させた音を聞き取るオブジェクト。3次元空間に配置する
  • SourceとListenerの位置関係によって、3次元的な音の再生が可能(ドップラー効果やパンニングなど)
  • 再生開始までのタイムラグが少ない(低レイテンシ)ので、ゲームのように画面表示と同期させて音を鳴らしたいときなどによい。

Audio Unit Services(AudioUnit.framework)

  • 一番ハードウェアに近い低レベルAPI
  • こちらも低レイテンシで再生が可能
  • 「オーディオユニット」という、オーディオデータに対して特定の処理を行うプラグインがあり、これを好きなようにつなげていくことで、再生時のオーディオデータの捌き方をカスタマイズできるイメージ。
151
144
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
151
144