Audio QueueでSin波再生

6,488 views

Published on

Audio QueueでSin波再生。
第49回 Cocoa勉強会関西の発表資料。

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,488
On SlideShare
0
From Embeds
0
Number of Embeds
698
Actions
Shares
0
Downloads
9
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Audio QueueでSin波再生

  1. 1. Audio QueueでSin波再生 2013.03.30 ふじしげ ゆういち @nakiwo
  2. 2. • ふじしげ ゆういち • @nakiwo • 株式会社フィードテイラー http://feedtailor.jp/ そら案内 8bitter
  3. 3. • ふじしげ ゆういち • @nakiwo • http://www.nakiwo.com/ 洞窟物語 めがね (Mac AppStore)
  4. 4. 今日のテーマ •Audio Queue Services で Sin波を再生する •https://github.com/nakiwo/ AudioQueueToneSample
  5. 5. 音の再生 •System Sound Services •AVAudioPlayer •Audio Unit •Open AL •Audio Queue Services
  6. 6. Audio Queue Services •Core Audio •AudioToolbox
  7. 7. Audio Queue Services •なにがうれしいか
  8. 8. Audio Queue Services •めんどくさいだけかも!
  9. 9. Audio Queue Services •単純にサウンドファイルを鳴らすだけ なら他の方法をお勧めします。
  10. 10. Audio Queue Services •録音と再生。今日は再生だけ。
  11. 11. Audio Queue •オーディオのキュー
  12. 12. Audio Queue •Audio BufferのQueue
  13. 13. Audio Buffer •波形のバッファ
  14. 14. •波形バッファに音を詰めてキューに放 り込むと音が鳴る
  15. 15. 波形データの フォーマット
  16. 16. http://upload.wikimedia.org/wikipedia/commons/b/bf/Pcm.svg Linear PCM
  17. 17. サンプリングレート:時間軸の解像度
  18. 18. 量子化bit数:1サンプルのbit数
  19. 19. サンプル
  20. 20. フレーム L R
  21. 21. パケット • フォーマット上都合のよいデータの区切り • Linear PCMは1パケット1フレーム Packet L R LPCM Packet L R L R L R L R AAC等
  22. 22. Audio Queueで再生 •AudioQueueNewOutput •AudioQueueAllocateBuffer •AudioQueueEnqueueBuffer •AudioQueueStart •コールバックが呼ばれるのでバッファ を詰める
  23. 23. AudioQueueNewOutput •再生するデータのフォーマットとコー ルバックを登録
  24. 24. 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
  25. 25. 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);
  26. 26. static void audioQueueOutputCallback( void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer) { AppDelegate *object = (__bridge AppDelegate *)inUserData; [object audioQueueOutputWithAudioQueue:inAQ buffer:inBuffer]; } 再生コールバック
  27. 27. - (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); }
  28. 28. •Audio Queue Services Programming Guide •WWDC 2010 - Fundamentals of Digital Audio for Mac OS X and iPhone OS
  29. 29. •iPhone Core Audioプログラミング」 •これを読めば無敵。しかし入手困難
  30. 30. おわり

×