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

Audio QueueでSin波再生

2,139

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
2,139
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
7
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. おわり
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×