1

我有两个波形文件,我从中提取了数字样本。我需要同时玩两个。如何组合这两个样本以生成同时播放两种声音的输出样本。对于 N 个同时样本,这是如何做到的?是否像添加样本并取平均值一样简单?

4

3 回答 3

4

组合声音(以相同的采样率)只涉及两个数组的元素相加。除非您对净空有问题,否则您不需要除以 N。如果总和的值超过最大输出电平,这将导致削波,产生可听失真。

除非你有一个大的 N,或者你的每个源声音都被归一化到最大输出电平的小 N,否则你应该不会遇到削波问题。如果您事先知道信号的波形,您可以简单地预先按相同的标量值缩放每个波形,这样输出就不会削波。或者,如果您要离线渲染声音,您可以只对波形求和,然后对复合信号进行归一化,使其不会削波。

如果您正在处理 N 个源的实时输入流,您可以使用限制器来最小化削波。

http://en.wikipedia.org/wiki/Dynamic_range_compression#Limiting

于 2013-11-08T01:07:05.883 回答
1

是的,您可以简单地将两者相加,然后除以二。确实,这是平均水平。

当两个样本具有相同的采样率时,它真的就这么简单。

于 2013-11-07T22:06:38.553 回答
1

通过将各个样本添加在一起来组合数字音频。

将几个不相关的声源组合起来会有响度增加,但响度与N个声源之间的关系不是线性的。四个同时发出的声音大约是一个声音的两倍,而不是四倍。(增加了 6dB。)

正如您所怀疑的那样,您确实需要记住同时播放多个声音时的最终输出音量,但是在组合 N 个同时源时除以 N 不是正确的方法。

最简单的方法是在您的应用程序中添加音量控制。当声音太大时,用户会拒绝您的应用程序。当组合少量声音时,这很简单并且通常是正确的方法。

手动音量控制并不是所有问题的正确解决方案。例如第一人称射击游戏。想象一下从一条安静的走廊跑到一场激烈的枪战中。声音环境将从只有几个声源的非常安静到有很多声源的非常响亮。在这些情况下,您可能需要某种形式的自动增益控制

于 2013-11-08T00:42:02.093 回答