http://iphone-dev.g.hatena.ne.jp/bricklife/20081003/1223024206
より
System Sound Services
短いサウンドファイルを鳴らすときに一番簡単
実例:Metronome
http://d.hatena.ne.jp/iphone_dev/20080624/1214311422
Audio Queue Services
音量とか複数音源とかループとかを制御するなら(バッファーキュー&コールバック方式)
実例:SpeakHere
http://decomo.info/cocoa/wiki/%E7%BF%BB%E8%A8%B3%E6%96%87%E7%AB%A0:%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA:audio_queue_service%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%AC%E3%82%A4%E3%83%89:%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB
注意:
http://discussions.apple.com/thread.jspa?threadID=1585197&tstart=42
m4a や mp3再生には以下のコードを AudioPlayer.m の setupAudioQueueBuffers を以下のように変更すること。
- (void) setupAudioQueueBuffers { // calcluate the size to use for each audio queue buffer, and calculate the // number of packets to read into each buffer [self calculateSizesFor: (Float64) kSecondsPerBuffer]; // prime the queue with some data before starting // allocate and enqueue buffers int bufferIndex; for (bufferIndex = 0; bufferIndex < kNumberAudioDataBuffers; ++bufferIndex) { AudioQueueAllocateBuffer ( [self queueObject], [self bufferByteSize], &buffers[bufferIndex] ); bool isFormatVBR=(audioFormat.mBytesPerPacket == 0 || audioFormat.mFramesPerPacket == 0); if(isFormatVBR) { packetDescriptions = (AudioStreamPacketDescription*)malloc(numPacketsToRead * sizeof(AudioStreamPacketDescription)); } else { packetDescriptions=NULL; } playbackCallback ( self, [self queueObject], buffers[bufferIndex] ); if ([self donePlayingFile]) break; } }
Audio UnitのRemote IO
レイテンシーが気になる場合その1。OSに統合されているオーディオ機能
http://ja.wikipedia.org/wiki/Audio_Units
http://d.hatena.ne.jp/iphone_dev/20080604/1212568727
OpenAL 1.1
レイテンシーが気になる場合その2。クロスプラットフォームのオーディオAPI
http://ja.wikipedia.org/wiki/OpenAL
http://openal.org/
http://www.dss.nifs.ac.jp/ito/memo/openal01.html
http://memeplex.blog.shinobi.jp/Category/4/
サンプル
http://www.appsamuck.com/day25.html
[通知用URL]
Tweet
最終更新時間:2012年07月08日 10時24分07秒