私はiOS用の周波数検出アプリケーションで作業していましたが、マイクからのオーディオサンプルでユーザー定義のAudioBufferListを埋め込む問題があります。リモートI/Oで録音、AudioUnitRender -50リターンコード
InputCallbackメソッドでAudioUnitRenderを呼び出すと、リターンコードが-50になります。これは私のパラメータの1つが無効であることを意味します。私はそれがAudioBufferListだと思っていますが、何が間違っているのか理解できませんでした。 ASBDで指定したデータ形式と一致するように設定したと思います。以下は
は、リモートI/Oの設定で、機能は私が正しくない可能性が信じていることを呼び出します。ASBD:
size_t bytesPerSample = sizeof(AudioUnitSampleType);
AudioStreamBasicDescription localStreamFormat = {0};
localStreamFormat.mFormatID = kAudioFormatLinearPCM;
localStreamFormat.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical;
localStreamFormat.mBytesPerPacket = bytesPerSample;
localStreamFormat.mBytesPerFrame = bytesPerSample;
localStreamFormat.mFramesPerPacket = 1;
localStreamFormat.mBitsPerChannel = 8 * bytesPerSample;
localStreamFormat.mChannelsPerFrame = 2;
localStreamFormat.mSampleRate = sampleRate;
InputCallback宣言:
err = AudioUnitSetProperty(ioUnit, kAudioOutputUnitProperty_SetInputCallback,
kAudioUnitScope_Input,
kOutputBus, &callbackStruct, sizeof(callbackStruct));
AudioBufferList宣言:
// Allocate AudioBuffers
bufferList = (AudioBufferList *)malloc(sizeof(AudioBuffer));
bufferList->mNumberBuffers = 1;
bufferList->mBuffers[0].mNumberChannels = 2;
bufferList->mBuffers[0].mDataByteSize = 1024;
bufferList->mBuffers[0].mData = calloc(256, sizeof(uint32_t));
InputCallback機能:
AudioUnit rioUnit = THIS->ioUnit;
OSStatus renderErr;
UInt32 bus1 = 1;
renderErr = AudioUnitRender(rioUnit, ioActionFlags, inTimeStamp, bus1, inNumberFrames, THIS->bufferList);
注意すべきいくつか:
- サンプルレート= 22050ヘルツ
- リモートI/Oデータの標準フォーマットが8.24ビットの固定小数点であるので、私はサンプルはそれぞれ32ビット(または4バイト)であると仮定します。 unsigned intは4バイトなので、私はそれを使って自分のオーディオバッファを割り当てます。
- オーディオデータフローを入力のみではなくPassThruとして実装すると、オーディオを正しくレンダリングするために同じコードを取得できます。
- リモートI/Oで既にMichael Tyson's blog postを見ました。私がやっていることとは違う何かが見えなかった。
ありがとうございました。
Demetri氏
最後に私が言及した周波数検出アプリケーションを終了しました。私は興味のある人のためのソースコードとともに書面を掲示しました。編集:リンク... http://sleepyleaf.com/2011/01/25/pitch-detection-in-ios-4-x/ – irtemed88
上記のコードにはコードが見つかりませんでした。リンクsleepyleaf.com/2011/ 01/25/pitch-in-ios-4-x - irtemed88 –
申し訳ありませんが、私のドメインを更新しました。新しいリンク:http://demetrimiller.com/2011/01/25/pitch-detection-in-ios-4-x/ – irtemed88