4

私の問題は AudioUnits に関するものです。iPhone 用の音声変更アプリ (Objective-C xCode を使用) を設計するために、次の Web サイトの RemoteIO audioUnit サンプルを使用します。

http://atastypixel.com/blog/using-remoteio-audio-unit/

audioUnit バッファーは、256 サンプルの長さに設定されます。私のプロジェクトでは、さらに多くのものが必要です (約 22050)。引用されたページには、audioUnit バッファーの長さは次のように調整できると書かれています。

float aBufferLength = 0.005; // In seconds
AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, 
                        sizeof(aBufferLength), &aBufferLength);

ここで私の具体的な質問: AudioSession が使用されておらず、初期化されていないため、エラーが発生するため、上記のコードは前述の audioUnit には適していません。「kAudioSessionProperty_PreferredHardwareIOBufferDuration」を除いて、バッファ期間を調整する他の可能性はありますか? この場合、ドキュメントはあまり役に立ちません...よろしくお願いします、Lukas。

4

1 に答える 1

8

AudioSessionAudio-Unit でを定義して初期化することに問題はありません。これがRemoteIO、目的のバッファ長を設定する方法です。まさにこれを行うコードがいくつかありますが、家に帰って投稿できるようになるまで数時間かかります。Apple のAurioTouch code-sampleを見るか、後で投稿するまで待ってください。

とにかく2つのことを覚えておいてください:

  1. バッファー長はデバイス上でのみ変更されるため、変更してもシミュレーターで違いが見られなくても驚かないでください。
  2. 必要なバッファー長を取得することはできません。そのため、プロパティが呼び出されPreferredHardwareIOBufferDurationます。バッファ サイズは常に 2 のべき乗です。

それを念頭に置いて、独自のバッファーを割り当て、必要な数のサンプルが得られるまで蓄積することを検討しましたか?

編集

オーディオ セッションを初期化するためのコード (オーディオ ユニットが初期化される前に実行する必要があります):

OSStatus result;
result = AudioSessionInitialize(NULL, NULL, NULL, NULL);

UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
result = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory);

// set preferred buffer size
Float32 preferredBufferSize = .04; // in seconds
result = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize);

// get actuall buffer size
Float32 audioBufferSize;
UInt32 size = sizeof (audioBufferSize);
result = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareIOBufferDuration, &size, &audioBufferSize);

result = AudioSessionSetActive(true);

result可能性のあるエラーを探すために、各呼び出しの後に調べることができます/すべきです。詳細については のドキュメントを参照できますが、 4 つの引数すべてAudioSessionInitializeを渡すことNULLは引き続き機能します。たとえば、割り込みリスナーのコールバックを確立する必要がある場合は、変更する必要があります。

于 2011-02-01T14:37:47.373 に答える