ホーム > iPhone Dev > iPhone+OpenAL入門

iPhone+OpenAL入門

移転しました http://d.hatena.ne.jp/Yusk/

最近作ったアプリで、独自ピッカーを動かす際に効果音を鳴らそうと思って、まず最も実装が簡単であろうAVFoundationを使ってみた。すると、ピッカーをゆっくり動かす分には問題ないのだが、少しでも速く動かすと、再生遅延が起こってうまく再生されず、最悪の場合再生されなくなってしまった。

そこで、遅延が少ないらしいOpenALで実装してみたので、そのときの手順をまとめてみる。


フレームワーク追加

  • AudioToolbox.framework
  • OpenAL.framework


インポート

#import <OpenAL/al.h>
#import <OpenAL/alc.h>
#import <AudioToolbox/AudioToolbox.h>


デバイス取得・コンテキストの生成と登録

ALCdevice *device = alcOpenDevice(NULL);
if (device)
{
    ALCcontext *context = alcCreateContext(device, NULL);
    alcMakeContextCurrent(context);
}

alcOpenDeviceでデバイスを取得する。引数は、NULLにしておくと最適なデバイスを返してくれる(iPhoneではデバイスはひとつしかないのでNULL以外の選択肢はない)。
次にalcCreateContextでコンテキストの生成を行い、それをalcMakeContextCurrentで現在の《状況》として登録する。
コンテキストとは《状況》のことであり、alcMakeContextCurrentで登録を行うと、以後OpenALで行うすべての操作は、そのコンテキストに適応されることになる(大雑把な書き方でわかり難いと思うが、普通に使う分にはひとつ作成して登録しておくだけでいい。コンテキストを切り替えて使う場合がある)。


音声ファイルのデータを取得する

iPhoneでは容量の関係から、音声ファイルはcaf形式で使用するのが好ましいらしい。変換はターミナル上で行う。変換のコマンドは、検索すると沢山出てくるが、一応mp3からcafへの変換コマンド書いておく。音声ファイルがあるところまでターミナルで移動してから、以下のコマンドを実行。

mp3→caf

/usr/bin/afconvert -f caff -d LEI16@44100 -c 1  変換前.mp3 変換後.caf
カテゴリー:iPhone Dev
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す