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 {{category2 プログラミング言語,Objective-C}}