【发布时间】:2011-05-17 02:31:22
【问题描述】:
我想增加语音数据缓冲区的音量。关键是我正在使用 DirectSound,并且我有一个主缓冲区和一个辅助缓冲区 - 所有流混合都是手动完成的。在语音聊天中,所有参与者都可以有独立的音量级别。我将每个流数据乘以一个值(增益)并将其相加到一个缓冲区。一切正常,但是当我尝试将数据乘以大于 1.0f 的值时 - 我听到一些剪辑或什么。
我尝试过使用 Audacity 效果压缩器,但这无助于减少奇怪的噪音。
也许我应该以其他方式修改增益?还是只是使用另一种后处理算法?
更新:哇,我刚刚发现了有趣的事情!我在增加音量之前和之后都转储了音频。
这是图片
对不起质量 - 我认为这就是声音应该出现的方式(我自己画了红线)。确实看起来值超出了示例数据类型。但我不明白为什么?我的样本缓冲区是 BYTE,但我只能通过短指针访问它。它已签名,但即使 *ptr 约为 15-20 千,也会发生剪裁。
【问题讨论】:
-
什么是“一些剪辑或什么” - 您的值实际上是否超出了示例数据类型的界限? “尝试使用 Audacity 效果压缩器”是什么意思?是在裁剪后的输出上还是在裁剪前的输出上?
-
样本为 200ms 音频,采样率为 22050hz。 2 个字节 - 短。如果我将此样本乘以 1.f - 原始体积 - 一切都很好。如果我乘以小于 1.f 的值 - 音量会变小。但是如果我将它乘以例如1.3f - 音量变高但有难看的刮擦声。我在混合缓冲区(带剪辑)上使用了大胆的效果压缩器。
-
这是我用一些代码回答的问题 - 这不是我的想法,所以不要指望它会按原样工作。
标签: c++ volume directsound audio-processing audacity