私は昨日これに苦労しており、本当に助けていただければ幸いです.
マルチチャンネル ミキサー オーディオ ユニットがあり、各チャンネルに割り当てられたコールバックは、呼び出されたときに必要なオーディオ バッファを満たします。データをファイルに書き込んで、同じコールバック内で記録しようとしています。
現時点では、AudioUnitRender を呼び出さないとオーディオがノイズとして記録され、呼び出すと 2 つのエラーが発生します。エラー 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;
何が間違っているのかよくわかりません。
ステレオは、ファイルに書き込む前に記録されたデータを処理する方法にどのように影響しますか?