FLAC から ALAC へのトランスコーダーに取り組んでおり、ExtAudioFile を使用して ALAC に書き込もうとしています。FLAC ライブラリのコールバック ベースのシステムを使用して FLAC ファイルを読み込みます。つまり、FLAC ファイルのすべてのフレームで関数呼び出しが発生します。その呼び出し内で、バッファーをセットアップし、次のように ExtAudioFileWrite コードを呼び出します。
AudioBufferList * fillBufList;
fillBufList = malloc(sizeof *fillBufList + (frame->header.channels - 1) * sizeof fillBufList->mBuffers[0]);
fillBufList->mNumberBuffers = frame->header.channels;
for (int i = 0; i < fillBufList->mNumberBuffers; i++) {
fillBufList->mBuffers[i].mNumberChannels = 1; // non-interleaved
fillBufList->mBuffers[i].mDataByteSize = frame->header.blocksize * frame->header.bits_per_sample / 8;
fillBufList->mBuffers[i].mData = (void *)(buffer[i]);
NSLog(@"%i", fillBufList->mBuffers[i].mDataByteSize);
}
OSStatus err = ExtAudioFileWrite (outFile, 1, fillBufList);
さて、最終行の数字 1 は、FLAC ファイルの 1 フレームが対応する ALAC ファイルの 1 フレームにおそらく対応すると考えたので、私が選択したマジック ナンバーのようなものですが、そうではないようです. ExtAudioFileWrite を呼び出すたびに、エラー値 -50 (ユーザー パラメータ リストのエラー) が返されます。明らかな原因は、frame パラメーターに指定した値です。
では、私はどのような価値を提供すればよいのでしょうか。
それとも、間違った木を吠えていますか?
(補足: param 関連のエラー値にもかかわらず、本当の問題はバッファーのセットアップにあるのではないかと疑ったので、何が起こるかを確認するためだけに、ゼロに設定されたダミー バッファーを割り当てようとしました。同じエラーです。)