Audio 我需要担心节目中的整体音频增益吗?

Audio 我需要担心节目中的整体音频增益吗?,audio,volume,Audio,Volume,数字音频链中是否存在级别限制 我正在和OpenAL一起做一个塔楼防御游戏,将会有许多塔楼同时开火,都使用相同的音效(至少现在是这样)。我担心的是,同时触发太多声音可能会导致扬声器被吹坏,或者至少会让用户头疼 在我看来,应该在软件或声卡硬件级别设置一个音量限制器,以防止像我这样的傻瓜这样做 有人能证实这一点吗?如果是的话,告诉我这个限制器在哪里?谢谢 事实上,如果在信号到达DAC之前在软件中简单地截取信号,那你就幸运了。您可以自己轻松地实现这一点。当我说“clipped”时,我的意思是超过最大值的

数字音频链中是否存在级别限制

我正在和OpenAL一起做一个塔楼防御游戏,将会有许多塔楼同时开火,都使用相同的音效(至少现在是这样)。我担心的是,同时触发太多声音可能会导致扬声器被吹坏,或者至少会让用户头疼

在我看来,应该在软件或声卡硬件级别设置一个音量限制器,以防止像我这样的傻瓜这样做


有人能证实这一点吗?如果是的话,告诉我这个限制器在哪里?谢谢

事实上,如果在信号到达DAC之前在软件中简单地截取信号,那你就幸运了。您可以自己轻松地实现这一点。当我说“clipped”时,我的意思是超过最大值的振幅被设置为最大值,而不是允许溢出、包裹或其他不太令人不快的结果。在这个阶段剪辑通常听起来很糟糕,但我提到的备选方案听起来更糟

实际上,在这方面有一个很大的考虑因素:您是用float还是int进行渲染?如果是int,你的净空是多少?使用int,您几乎可以在任何阶段进行剪辑或溢出。对于浮点,这只会作为一个严重的设计缺陷发生。当然,在与DAC/硬件接口时,您最终通常必须转换为int。DAC将限制输出,因为它在非常特定的限制内处理信号。在最坏的情况下,这将相当于0 dB FS的(采样)白噪声(这对用户来说可能是一种可怕的体验)。所以DAC起到限制器的作用,尽管这一阶段只会大大降低信号导致听力或设备损坏的可能性

无论如何,你可以很容易地避免这种情况,我建议你自己做,因为你可以直接控制声音的数量和振幅。在最坏的情况下,峰值为0 dB FS的样本将全部收敛于同一样本,您需要将信号(放炮总数)乘以放炮总数的倒数:

output[i]=numShots>1?allThoseShots[i]*(1.0/numShots):allThoseShots[i]

这在很多情况下都不理想(因为会有夸张的俯冲声)。因此,除了整体减少同时放炮的数量外,实际上还应该引入一个限制器。然后,您以较低的因子回退放炮信号,因为它们的峰值不可能在同一时间点收敛。一个具有10毫秒前瞻性的简单限制器应该可以防止你做一些糟糕的事情。在调试模式下检测重限制也是一个好主意,这样可以捕获上游设计问题


无论如何,你一定要考虑适当的增益补偿你的责任-你永远不想剪辑输出DAC。事实上,您希望留下一些净空(参考:采样间峰值)。

事实上,如果在信号到达DAC之前在软件中简单地剪裁信号,您将很幸运。您可以自己轻松地实现这一点。当我说“clipped”时,我的意思是超过最大值的振幅被设置为最大值,而不是允许溢出、包裹或其他不太令人不快的结果。在这个阶段剪辑通常听起来很糟糕,但我提到的备选方案听起来更糟

实际上,在这方面有一个很大的考虑因素:您是用float还是int进行渲染?如果是int,你的净空是多少?使用int,您几乎可以在任何阶段进行剪辑或溢出。对于浮点,这只会作为一个严重的设计缺陷发生。当然,在与DAC/硬件接口时,您最终通常必须转换为int。DAC将限制输出,因为它在非常特定的限制内处理信号。在最坏的情况下,这将相当于0 dB FS的(采样)白噪声(这对用户来说可能是一种可怕的体验)。所以DAC起到限制器的作用,尽管这一阶段只会大大降低信号导致听力或设备损坏的可能性

无论如何,你可以很容易地避免这种情况,我建议你自己做,因为你可以直接控制声音的数量和振幅。在最坏的情况下,峰值为0 dB FS的样本将全部收敛于同一样本,您需要将信号(放炮总数)乘以放炮总数的倒数:

output[i]=numShots>1?allThoseShots[i]*(1.0/numShots):allThoseShots[i]

这在很多情况下都不理想(因为会有夸张的俯冲声)。因此,除了整体减少同时放炮的数量外,实际上还应该引入一个限制器。然后,您以较低的因子回退放炮信号,因为它们的峰值不可能在同一时间点收敛。一个具有10毫秒前瞻性的简单限制器应该可以防止你做一些糟糕的事情。在调试模式下检测重限制也是一个好主意,这样可以捕获上游设计问题


无论如何,你一定要考虑适当的增益补偿你的责任-你永远不想剪辑输出DAC。事实上,您希望留下一些净空(参考:样本间峰值)。

非常好的响应,谢谢!我们正在考虑实现一些类似于您提供的代码的东西,但我们认为一个压缩器/限制器可以平滑整体效果。既然它似乎没有神奇地为我们提供一个,那么有没有关于如何编写它的建议/链接?我很难找到关于它的任何文档。@Dean非常欢迎=)就实现而言:我从来没有插入过这个套件,因为我知道如何自己编写它们。然而,这是一个好的(开放的)介绍性参考——基于多年前的阅读。它是由“chunkware”编写的,但原始站点已不再处于活动状态,因此您可以在这里找到它的重新宿主:它提供压缩程序、限制器、门和信封处理器