AudioQueueNewInput降低AVAudioPlayer的播放音量

时间:2009-05-21 12:29:55

标签: iphone

我正在使用Stephen Celis的SCListener课程来录制iPhone麦克风音频电平。我也通过使用AVAudioPlayer播放音频。例如,用户按下“播放”以启动在后台播放的声音,然后可以选择吹入麦克风以播放更多更短的声音。代码一切正常,在播放时播放所有声音,但是,当您开始使用SCListener进行监听时,AVAudioPlayer音量大大会减少。我已经在SCListener源代码中将罪魁祸首缩小到这一行:

AudioQueueNewInput(& format,listeningCallback,self,NULL,NULL,0,& queue);

我已经绞尽脑汁,一旦这条线执行完毕,就无法知道如何将播放音量保持在最高水平。我也和Stephen Celis谈过,他不知道发生了什么。我想,有可能在使用麦克风时iPhone会降低输出音量,这样就不会引入反馈,但似乎应该有办法禁用它。

总结:

  1. 使用AVAudioPlayer开始播放长音频文件 - 100%音量(响亮)。
  2. 启用SCListener并开始侦听(调用AudioQueueNewInput)。
  3. AVAudioPlayer声音的输出音量大大降低
  4. 调用[[SCListener sharedListener] stop]处理队列
  5. AVAudioPlayer声音恢复更高的播放音量
  6. 有没有人见过这样的内容,或者对如何保持播放音量更高有任何想法?我已经明确地将音量参数设置为1.0f,以确保增益处于最高水平。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

答案 1 :(得分:0)

我不熟悉Stephen Celis的工作,但是如果tposchel的建议不起作用,那么在调试模式下查看InputQueue的值与OutputQueue的音频值可能有一些价值(但这很棘手,因为这些方法的回调是实时线程。)

这可能会提供信息,因为它会告诉您操作系统认为它发送到您的输出设备(耳机或内置扬声器)的内容。

解决此问题的强力方法是手动规范化(或按比例放大)OutputQueue回调中的值。这可能不会解决您的根本问题,但在您找到答案之前可能是一个黑客攻击。