iOS 使用 AudioQueueNewOutput 在左右声道输出声音
Posted
技术标签:
【中文标题】iOS 使用 AudioQueueNewOutput 在左右声道输出声音【英文标题】:iOS using AudioQueueNewOutput to output sound in both left and right channel 【发布时间】:2015-07-16 13:14:55 【问题描述】:我正在开发一个显示罪波的应用程序。
我正在使用 AudioQueueNewOutput 输出单声道声音是可以的,但是当我来到立体声输出时,我不知道该怎么做。
我知道mChannelsPerFrame = 2
可以在左右声道中产生波形。
我也想知道左右声道发送字节的顺序是什么?第一个字节是左声道,第二个字节是右声道吗?
代码:
_audioFormat = new AudiostreamBasicDescription();
_audioFormat->mSampleRate = SAMPLE_RATE; // 44100
_audioFormat->mFormatID = kAudioFormatLinearPCM;
_audioFormat->mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
_audioFormat->mFramesPerPacket = 1;
_audioFormat->mChannelsPerFrame = NUM_CHANNELS; // 1
_audioFormat->mBitsPerChannel = BITS_PER_CHANNEL; // 16
_audioFormat->mBytesPerPacket = BYTES_PER_FRAME; // 2
_audioFormat->mBytesPerFrame = BYTES_PER_FRAME; // 2
和
_sineTableLength = _audioFormat.mSampleRate / SAMPLE_LIMIT_FACTOR; // 44100/100 = 441
_sineTable = new SInt16[_sineTableLength];
for(int i = 0; i < _sineTableLength; i++)
// Transfer values between -1.0 and 1.0 to integer values between -sample max and sample max
_sineTable[i] = (SInt16)(sin(i * 2 * M_PI / _sineTableLength) * 32767);
和
AudioQueueNewOutput (&_audioFormat,
playbackCallback,
(__bridge void *)(self),
nil,
nil,
0,
&_queueObject);
static void playbackCallback (void* inUserData,
AudioQueueRef inAudioQueue,
AudioQueueBufferRef bufferReference)
SInt16* sample = (SInt16*)bufferReference->mAudioData;
// bufferSize 1024
for(int i = 0; i < bufferSize; i += _audioFormat.mBytesPerFrame, sample++)
// set value for *sample
// 9ms sin wave and 4.5ms 0
...
...
AudioQueueEnqueueBuffer(...)
【问题讨论】:
我只看到***.com/questions/12353033/…,我需要使用AudioUnitSetProperty吗? 【参考方案1】:几天后,我找到了答案。
首先:AudioStreamBasicDescription
可以像this 一样设置;
然后:bufferSize
从 1024
更改为 2048
;
并且:SInt16
中的 SInt16* sample = (SInt16*)bufferReference->mAudioData;
全部更改为 SInt32
。因为通道加倍,比特加倍;
最后:sample
中每 16 位包含左声道或右声道所需的数据,随便输入即可。
【讨论】:
以上是关于iOS 使用 AudioQueueNewOutput 在左右声道输出声音的主要内容,如果未能解决你的问题,请参考以下文章
使用 SmartFace.io 录制音频(Android - Ios)