AudioQueueNewInput 降低 AVAudioPlayer 的播放音量

Posted

技术标签:

【中文标题】AudioQueueNewInput 降低 AVAudioPlayer 的播放音量【英文标题】:AudioQueueNewInput decreases playback volume for AVAudioPlayer 【发布时间】:2009-05-21 12:29:54 【问题描述】:

我正在使用 Stephen Celis 的 SCListener 类来记录 iPhone 麦克风的音频电平。我还通过使用 AVAudioPlayer 播放音频。例如,用户按下“播放”以启动在后台播放的声音,然后可以选择对着麦克风吹气以播放更多、更短的声音。代码一切正常,在应该播放的时候播放所有声音,但是,当您开始使用 SCListener 收听时,AVAudioPlayer 的音量大大降低了。我已经将罪魁祸首缩小到 SCListener 源代码中的这一行:

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

我绞尽脑汁,不知道如何在执行此行后将播放音量保持在最高水平。我也和斯蒂芬·塞利斯谈过,他不知道发生了什么。我想,iPhone 可能会在使用麦克风时调低输出音量,以免引入反馈,但似乎应该有一种方法可以禁用它。

总结:

    开始使用 AVAudioPlayer 播放长音频文件 - 100% 音量(响亮)。 启用 SCListener 并开始监听(调用 AudioQueueNewInput)。 AVAudioPlayer 声音的输出音量大大降低 调用 [[SCListener sharedListener] stop] 来处理队列 AVAudioPlayer 声音恢复更高的播放音量

有没有人见过这样的事情,或者对如何保持更高的播放音量有任何想法?我已将音量参数明确设置为 1.0f,以确保增益处于最高水平。

【问题讨论】:

在苹果开发者论坛上找到了这个可能的解决方案:默认情况下,苹果音频会话设置在同时从麦克风录制时仅将播放音频重新路由到耳机插孔(禁用扬声器输出)。您必须通过会话属性启用扬声器输出才能在录制时向扬声器输出。 【参考方案1】:

你可以试试这个:

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

【讨论】:

【参考方案2】:

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

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

解决此问题的蛮力方法是手动标准化(或按比例放大)OutputQueue 回调中的值。这可能并不能解决您的根本问题,但在您找到答案之前可能是一个技巧。

【讨论】:

以上是关于AudioQueueNewInput 降低 AVAudioPlayer 的播放音量的主要内容,如果未能解决你的问题,请参考以下文章

銆怞ava123銆慗ava浠g爜鐨勫彲瑙嗗寲

如何使用 AVA 进行单元测试?

使用 AudioQueueStart() 时的延迟

ava数据集可视化ava数据集ID可视化 A Video Dataset of Spatio-temporally Localized Atomic Visual Actions

AVA实战总结:面向未来的Node.js测试框架

使用 AVA 和 TypeScript 测试 Nuxtjs 应用程序