我昨天一直在努力解决这个问题,非常感谢您的帮助。
我有一个多通道混音器音频单元,分配给每个通道的回调在调用时填充所需的音频缓冲区。我试图通过将数据写入文件来在同一个回调中进行记录。
目前,如果我不调用 AudioUnitRender 并且如果我调用它,音频会记录为噪音,我会收到两个错误。错误 10877 和错误 50。
回调中的录制代码如下所示
if (recordingOn)
{
AudioBufferList *bufferList = (AudioBufferList *)malloc(sizeof(AudioBuffer));
SInt16 samples[inNumberFrames];
memset (&samples, 0, sizeof (samples));
bufferList->mNumberBuffers = 1;
bufferList->mBuffers[0].mData = samples;
bufferList->mBuffers[0].mNumberChannels = 2;
bufferList->mBuffers[0].mDataByteSize = inNumberFrames*sizeof(SInt16);
OSStatus status;
status = AudioUnitRender(audioObject.mixerUnit,
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
bufferList);
if (noErr != status) {
printf("AudioUnitRender error: %ld", status);
return noErr;
}
ExtAudioFileWriteAsync(audioObject.recordingFile, inNumberFrames, bufferList);
}
在每个通道回调中写入数据是否正确,还是应该将其连接到远程 I/O 单元?
我正在使用 LPCM,录制文件 (caf) 的 ASBD 是
recordingFormat.mFormatID = kAudioFormatLinearPCM;
recordingFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger |
kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsPacked;
recordingFormat.mSampleRate = 44100;
recordingFormat.mChannelsPerFrame = 2;
recordingFormat.mFramesPerPacket = 1;
recordingFormat.mBytesPerPacket = recordingFormat.mChannelsPerFrame * sizeof (SInt16);
recordingFormat.mBytesPerFrame = recordingFormat.mChannelsPerFrame * sizeof (SInt16);
recordingFormat.mBitsPerChannel = 16;
我不确定我做错了什么。
立体声如何影响在写入文件之前必须处理记录的数据的方式?