audio queueでsin波再生

33
Audio QueueSin波再生 2013.03.30 ふじしげ ゆういち @nakiwo

Upload: yuichi-fujishige

Post on 13-Jan-2015

1.536 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Audio QueueでSin波再生

Audio QueueでSin波再生

2013.03.30ふじしげ ゆういち@nakiwo

Page 2: Audio QueueでSin波再生

• ふじしげ ゆういち• @nakiwo• 株式会社フィードテイラーhttp://feedtailor.jp/

そら案内

8bitter

Page 3: Audio QueueでSin波再生

• ふじしげ ゆういち• @nakiwo• http://www.nakiwo.com/

洞窟物語

めがね(Mac AppStore)

Page 4: Audio QueueでSin波再生
Page 5: Audio QueueでSin波再生
Page 6: Audio QueueでSin波再生

今日のテーマ

• Audio Queue Services でSin波を再生する

• https://github.com/nakiwo/AudioQueueToneSample

Page 7: Audio QueueでSin波再生

音の再生• System Sound Services • AVAudioPlayer• Audio Unit• Open AL• Audio Queue Services

Page 8: Audio QueueでSin波再生

Audio Queue Services

• Core Audio• AudioToolbox

Page 9: Audio QueueでSin波再生

Audio Queue Services

•なにがうれしいか

Page 10: Audio QueueでSin波再生

Audio Queue Services

•めんどくさいだけかも!

Page 11: Audio QueueでSin波再生

Audio Queue Services

•単純にサウンドファイルを鳴らすだけなら他の方法をお勧めします。

Page 12: Audio QueueでSin波再生

Audio Queue Services

•録音と再生。今日は再生だけ。

Page 13: Audio QueueでSin波再生

Audio Queue

•オーディオのキュー

Page 14: Audio QueueでSin波再生

Audio Queue

• Audio BufferのQueue

Page 15: Audio QueueでSin波再生

Audio Buffer

•波形のバッファ

Page 16: Audio QueueでSin波再生

•波形バッファに音を詰めてキューに放り込むと音が鳴る

Page 17: Audio QueueでSin波再生
Page 18: Audio QueueでSin波再生

波形データのフォーマット

Page 19: Audio QueueでSin波再生

http://upload.wikimedia.org/wikipedia/commons/b/bf/Pcm.svg

Linear PCM

Page 20: Audio QueueでSin波再生

サンプリングレート:時間軸の解像度

Page 21: Audio QueueでSin波再生

量子化bit数:1サンプルのbit数

Page 22: Audio QueueでSin波再生

サンプル

Page 23: Audio QueueでSin波再生

フレーム

L

R

Page 24: Audio QueueでSin波再生

パケット• フォーマット上都合のよいデータの区切り• Linear PCMは1パケット1フレーム

Packet

L

R

LPCM

Packet

L

R

L

R

L

R

L

R

AAC等

Page 25: Audio QueueでSin波再生

Audio Queueで再生• AudioQueueNewOutput• AudioQueueAllocateBuffer• AudioQueueEnqueueBuffer• AudioQueueStart•コールバックが呼ばれるのでバッファを詰める

Page 26: Audio QueueでSin波再生

AudioQueueNewOutput

•再生するデータのフォーマットとコールバックを登録

Page 27: Audio QueueでSin波再生

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波再生

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波再生

static void audioQueueOutputCallback( void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer){ AppDelegate *object = (__bridge AppDelegate *)inUserData;

[object audioQueueOutputWithAudioQueue:inAQ buffer:inBuffer];}

再生コールバック

Page 30: Audio QueueでSin波再生

- (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波再生

• Audio Queue Services Programming Guide

•WWDC 2010 - Fundamentals of Digital Audio for Mac OS X and iPhone OS

Page 32: Audio QueueでSin波再生

• iPhone Core Audioプログラミング」•これを読めば無敵。しかし入手困難

Page 33: Audio QueueでSin波再生

おわり