2

高性能オーディオ用の RemoteIO へのアクセスに AudioUnit を使用しています。私のアプリは、マイクから受信した音声に埋め込まれた信号をデコードします。精度を上げるために、オーディオのフィルタリングと操作を最小限に抑える必要があります。私はオーディオセッションに対してこれを行います:

UInt32 mode = kAudioSessionMode_Measurement;
Float32 zeroF = 0;
UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_Mode, sizeof(mode), &mode);
AudioSessionSetProperty(kAudioSessionProperty_InputGainScalar, sizeof(zeroF), &zeroF);
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory);

そしてこれをオーディオユニットに:

UInt32 one = 1;
UInt32 zero = 0;
AudioUnitSetProperty(rioUnit, kAUVoiceIOProperty_BypassVoiceProcessing, kAudioUnitScope_Input, 0, &one, sizeof(one));
AudioUnitSetProperty(rioUnit, kAUVoiceIOProperty_VoiceProcessingEnableAGC, kAudioUnitScope_Input, 0, &zero, sizeof(zero));
AudioUnitSetProperty(rioUnit, kAUVoiceIOProperty_DuckNonVoiceAudio, kAudioUnitScope_Input, 0, &zero, sizeof(zero));

これは機能しているように見えますが、まだゲイン補正が行われていることは間違いありません。

私の問題は、ユーザーがホームボタンを押してアプリを終了し、アプリのアイコンをタップしてアプリに戻るときです。オーディオに何か変化があり、iOS がノイズ抑制とゲイン コントロールを有効にしているようです。これはオーディオのスペクトログラムです。グラフの途中で、オーディオ スペクトル全体にわたってパワーが大幅に低下していることに注意してください。これは、アプリを終了してから再度開いたときです。

  • X軸は時間
  • Y 軸は周波数 (0 ~ 22050 Hz)
  • ピクセルの明度はべき乗 (黒 = -128 dB、白 = 0 dB)

オーディオユニットの停止と再起動、オーディオセッションの停止と再起動など、すべてを試したような気がします...何も役に立たないようです。何を試すかについてのヒントがあれば幸いです。

スペクトログラム

4

0 に答える 0