5

iPhoneのボイスチェンジャーアプリ(Objective c)の場合、サンプリングされた整数値を録音オーディオキューバッファーから取得し、関数で処理して、変更された値を再生バッファーに書き戻そうとしています。現時点ではこのようなものを使用しています

AudioBuffer audioBuffer = bufferList->mBuffers[0];
int bufferSize = audioBuffer.mDataByteSize / sizeof(SInt32);
SInt32 *frame = audioBuffer.mData;
SInt32  signalInput[22050];
for( int i=0; i<bufferSize; i++ ) {
    SInt32 currentSample = frame[i];
    *(signalInput +i) = currentSample;
}

サンプリングされた値を抽出し、かなりうまく機能しているようです(signalinputは、整数サンプルを書き込むためのターゲットベクトルであると想定されています)。しかし、それらをバッファに書き戻すことは依然として問題です...私は解決策を見つけるためにドキュメントと多くのフォーラムを検索しましたが、まだ成功しませんでした。

だからidはアドバイスにとても感謝しています、事前に感謝します、lukas

4

1 に答える 1

4

オーディオをリアルタイムで変更したい場合は、代わりにRemoteIOAudioUnitを使用してみてください。

オーディオキューを使用する場合は、録音キューコールバックからのデータを保存し、後で別の時間に別のコールバックで処理されたデータを再生キューコールバックにフィードする必要があります。このためには、おそらく中間キューまたはデータバッファを使用する必要があります。これを機能させるには、録音サウンドアプリを実行してから、サンプル再生アプリを実行してから、2つを組み合わせてみるとよいでしょう。

追加した:

サンプル値をオーディオ出力キューに書き込むソースコードの例を次に示します。

http://lists.apple.com/archives/coreaudio-api/2008/Dec/msg00173.html https://bitbucket.org/ddribin/a440/wiki/Home

正弦波の代わりに、独自の前処理済みサンプルを使用するだけです。

于 2011-01-28T18:53:01.973 に答える