4

每当我使用 VoiceChat 模式时,我自己的应用程序中的音频都太低了,所以作为一个白痴检查,我下载了 Apple 的音频单元编程示例代码 (SpeakHere) 并将 VoiceChat 模式添加到该应用程序。事实证明,问题也在那里发生:在该模式下运行会导致所有内容都达到所需音量的 20% 左右。

在设置 PlayAndRecord 类别之后,我在 SpeakHereController.mm 的第 267 行添加了这段代码:

    // set mode -- this results in audio being too soft
    UInt32 mode = kAudioSessionMode_VoiceChat;

    error = AudioSessionSetProperty(kAudioSessionProperty_Mode, sizeof(mode), &mode);
    if (error) printf("couldn't set audio session mode!");

我正在使用带有 RemoteIO 的 VoiceChat 模式,以便为免提电话使用回声消除;VoiceProcessingIO 可以工作(有点),但旧 iPhone (3GS) 的性能太差了,无法使用——这就是我改用 RemoteIO 的原因。我已确认扬声器路线是正确的。我什至尝试过设置测量模式并手动增加增益——我无法检测到任何改进。

关于在使用 AudioSession 模式时防止大音量下降的任何建议?

4

1 回答 1

1

事实证明,当 VoiceChat 模式设置为确定增益、回声消除等的最佳设置时,会使用 /current/ 音频路由。这意味着如果您要设置特定路由,则需要这样做在设置模式之前 - 不是之后。

按此顺序执行此操作为我解决了音量问题:

  • 设置播放和记录
  • 设置到扬声器的路线
  • 设置模式
  • 在我的音频单元中使用 VoiceProcessingIO
  • 保持较低的硬件采样率 (8k) 以在 3GS 等旧设备上保持良好的性能
于 2012-12-26T19:52:50.637 回答