audio queueでsin波再生
DESCRIPTION
Audio QueueでSin波再生。 第49回 Cocoa勉強会関西の発表資料。TRANSCRIPT
![Page 1: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/1.jpg)
Audio QueueでSin波再生
2013.03.30ふじしげ ゆういち@nakiwo
![Page 2: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/2.jpg)
• ふじしげ ゆういち• @nakiwo• 株式会社フィードテイラーhttp://feedtailor.jp/
そら案内
8bitter
![Page 3: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/3.jpg)
• ふじしげ ゆういち• @nakiwo• http://www.nakiwo.com/
洞窟物語
めがね(Mac AppStore)
![Page 4: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/4.jpg)
![Page 5: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/5.jpg)
![Page 6: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/6.jpg)
今日のテーマ
• Audio Queue Services でSin波を再生する
• https://github.com/nakiwo/AudioQueueToneSample
![Page 7: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/7.jpg)
音の再生• System Sound Services • AVAudioPlayer• Audio Unit• Open AL• Audio Queue Services
![Page 8: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/8.jpg)
Audio Queue Services
• Core Audio• AudioToolbox
![Page 9: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/9.jpg)
Audio Queue Services
•なにがうれしいか
![Page 10: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/10.jpg)
Audio Queue Services
•めんどくさいだけかも!
![Page 11: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/11.jpg)
Audio Queue Services
•単純にサウンドファイルを鳴らすだけなら他の方法をお勧めします。
![Page 12: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/12.jpg)
Audio Queue Services
•録音と再生。今日は再生だけ。
![Page 13: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/13.jpg)
Audio Queue
•オーディオのキュー
![Page 14: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/14.jpg)
Audio Queue
• Audio BufferのQueue
![Page 15: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/15.jpg)
Audio Buffer
•波形のバッファ
![Page 16: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/16.jpg)
•波形バッファに音を詰めてキューに放り込むと音が鳴る
![Page 17: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/17.jpg)
![Page 18: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/18.jpg)
波形データのフォーマット
![Page 19: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/19.jpg)
http://upload.wikimedia.org/wikipedia/commons/b/bf/Pcm.svg
Linear PCM
![Page 20: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/20.jpg)
サンプリングレート:時間軸の解像度
![Page 21: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/21.jpg)
量子化bit数:1サンプルのbit数
![Page 22: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/22.jpg)
サンプル
![Page 23: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/23.jpg)
フレーム
L
R
![Page 24: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/24.jpg)
パケット• フォーマット上都合のよいデータの区切り• Linear PCMは1パケット1フレーム
Packet
L
R
LPCM
Packet
L
R
L
R
L
R
L
R
AAC等
![Page 25: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/25.jpg)
Audio Queueで再生• AudioQueueNewOutput• AudioQueueAllocateBuffer• AudioQueueEnqueueBuffer• AudioQueueStart•コールバックが呼ばれるのでバッファを詰める
![Page 26: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/26.jpg)
AudioQueueNewOutput
•再生するデータのフォーマットとコールバックを登録
![Page 27: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/27.jpg)
AudioStreamBasicDescription _outpufFormat;
_outpufFormat.mFormatID = kAudioFormatLinearPCM;_outpufFormat.mSampleRate = 44100;_outpufFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger|kAudioFormatFlagIsPacked;_outpufFormat.mBitsPerChannel = 16;_outpufFormat.mChannelsPerFrame = 1;_outpufFormat.mBytesPerFrame = 2;_outpufFormat.mFramesPerPacket = 1;_outpufFormat.mBytesPerPacket = 2;
AudioStreamBasicDescription
![Page 28: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/28.jpg)
AudioQueueNewOutput(&_outpufFormat, audioQueueOutputCallback, (__bridge void *)self, CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &_audioQueue);
UInt32 bufferSize = kFramesPerBuffer * _outpufFormat.mBytesPerFrame;
for (int i = 0; i < kNumBuffers; i++) { AudioQueueBufferRef buffer; AudioQueueAllocateBuffer(_audioQueue, bufferSize, &buffer);
[self audioQueueOutputWithAudioQueue:_audioQueue buffer:buffer];}
AudioQueueStart(_audioQueue, NULL);
![Page 29: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/29.jpg)
static void audioQueueOutputCallback( void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer){ AppDelegate *object = (__bridge AppDelegate *)inUserData;
[object audioQueueOutputWithAudioQueue:inAQ buffer:inBuffer];}
再生コールバック
![Page 30: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/30.jpg)
- (void)audioQueueOutputWithAudioQueue:(AudioQueueRef)inAQ buffer:(AudioQueueBufferRef)inBuffer{ inBuffer->mAudioDataByteSize = _outpufFormat.mBytesPerFrame * kFramesPerBuffer;
float freq = 440.0f; float phasePerSample = freq / kSampleRate; int16_t *sampleBuffer = (int16_t *)inBuffer->mAudioData;
for (int i = 0; i < kFramesPerBuffer; i++) { *sampleBuffer = (int16_t)((sinf((float)_frameIndex * phasePerSample * (M_PI*2.0f))) * 32767.0f); sampleBuffer++;
_frameIndex++; }
AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL);}
![Page 31: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/31.jpg)
• Audio Queue Services Programming Guide
•WWDC 2010 - Fundamentals of Digital Audio for Mac OS X and iPhone OS
![Page 32: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/32.jpg)
• iPhone Core Audioプログラミング」•これを読めば無敵。しかし入手困難
![Page 33: Audio QueueでSin波再生](https://reader036.vdocuments.mx/reader036/viewer/2022081414/54b4da5e4a7959e55c8b45f5/html5/thumbnails/33.jpg)
おわり