一段时间后,使用音频单元进行开发,我知道有一些错误是开发人员所熟知的,他们使用低级别的音频缓冲区。
错误是mac上的缓冲区大小错误并显示 512 而不是 1024 ,其中 iDevice 上的相同软件显示 1024 。
问题是,有一种方法可以解决这个问题,这样我就可以在 mac 上也有 1024 位缓冲区?那样工作有点困难,因为模拟与设备不同。
这是我从麦克风输入检查缓冲区的回调函数:
static OSStatus recordingCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
AudioBuffer buffer;
buffer.mNumberChannels = 1;
buffer.mDataByteSize = inNumberFrames * 2;
buffer.mData = NULL;
AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0] = buffer;
OSStatus status;
status = AudioUnitRender(audioUnit,
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
&bufferList);
int16_t *q = (int16_t *)(&bufferList)->mBuffers[0].mData;
// inNumberFrames, is 512 on a mac ,and 1024 on a device
(顺便说一下,扬声器输出回调是相同的=512 位)。
音频单元设置的一部分:
AudioStreamBasicDescription audioFormat;
audioFormat.mSampleRate = 44100.00;//44100.00;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 1;
audioFormat.mBitsPerChannel = 16;
audioFormat.mBytesPerPacket = 2;
audioFormat.mBytesPerFrame = 2;
好吧,我在这里发现有人说你必须在 mac(视网膜是我的)上设置 midi 工具中的采样率,我检查了一下,但它的 44100 在那里。香奈儿是 24 位的,我尝试使用 16 位但没有好的结果。我的 Mac 上的缓冲区大小仍然为 512 位。我有一个 mac 视网膜显示器 2012。