Audio 如何混合音频样本?

Audio 如何混合音频样本?,audio,mixer,Audio,Mixer,我的问题与编程不完全相关,但我认为这是一个正确的问题 在我的程序中,我生成一些音频数据并将曲目保存到WAV文件中。只要一个声音发生器,一切正常。但现在我想添加更多生成器,并将生成的音频数据混合到一个文件中。不幸的是,它比乍一看要复杂得多。 此外,关于如何混合一组音频样本,我没有找到多少有用的信息 有人能给我提建议吗 编辑: 我正在用C++编程。但这并不重要,因为我对混音两个音轨背后的理论很感兴趣。我的问题是,我不能简单地总结样本,因为这经常会产生失真的声音。您从未说过什么编程语言和平台,但是现在

我的问题与编程不完全相关,但我认为这是一个正确的问题

在我的程序中,我生成一些音频数据并将曲目保存到WAV文件中。只要一个声音发生器,一切正常。但现在我想添加更多生成器,并将生成的音频数据混合到一个文件中。不幸的是,它比乍一看要复杂得多。 此外,关于如何混合一组音频样本,我没有找到多少有用的信息

有人能给我提建议吗

编辑:


我正在用C++编程。但这并不重要,因为我对混音两个音轨背后的理论很感兴趣。我的问题是,我不能简单地总结样本,因为这经常会产生失真的声音。

您从未说过什么编程语言和平台,但是现在我假设Windows使用C


非常棒的开源库,涵盖了您在大多数音频操作中遇到的许多内容。

我想您的问题是,对于您添加的每个音频源,您都必须降低音量

如果应用程序将控制权交给用户,只需让他们直接控制级别即可。性感是他们的责任,不是你的。这是“求和”

如果混合是自动的。如果没有限制,您可能需要压缩。(限制是压缩的一个极端版本。)

请注意,您对音频所做的任何操作(包括压缩和限制)都是一种失真形式,因此您将对音频进行着色。您选择的压缩和限制算法将影响声音

由于您没有实时生成音频,因此有可能进行“砖墙”限制。那是因为你对层次有先见之明。实时限制更为有限,因为你不知道接下来会发生什么——你必须反应

这是音乐,音效,声音,什么


程序员一直在处理这个问题。

混合音频样本意味着将它们相加,仅此而已。通常,您会将它们添加到一个更大的数据类型中,这样您就可以检测溢出并在将其转换回目标缓冲区之前钳制这些值。如果您事先知道会有溢出,那么您可以在加法之前缩放它们的振幅-只需乘以0和1之间的浮点值,再次记住精度问题,可能首先转换为更大的数据类型


如果您有一个特定的问题没有通过此解决,请随时更新您的原始问题。

两个样本的混搭

mix = (a + b) - a * b * sign(a + b)

什么编程语言和平台?您使用什么语言?什么图书馆?请提供更多详细信息。感谢您猜对了我的原始问题;)正如你可能想象的那样,这是一个非常常见的问题。当然,我在ActionScript3中混合了两个生成的声音遇到了同样的问题。谢谢你的链接,看起来我有一些关于压缩机的阅读要做!夹紧是硬限制,听起来很糟糕。他更可能想要一个膝盖。:-)他可能会,但从技术上讲,这不是他所要求的:)