2011-12-18 101 views
1

在我看来,CoreAudio在混合到单个通道时将声波添加到一起。我的节目将制作合成声音。我知道每个声音的幅度。当我把它们放在一起时,我应该将它们加在一起,并将结果波形保持在范围内?我可以这样做:混合声波(iOS上的CoreAudio)

MaxAmplitude = max1 + max2 + max3 //Maximum amplitude of each sound wave 
if MaxAmplitude > 1 then //Over range 
    Output = (wave1 + wave2 + wave3)/MaxAmplitude //Meet range 
else 
    Output = (wave1 + wave2 + wave3) //Normal addition 
end if 

我可以这样做吗?我是否应该预先分析声波以找到实际的最大振幅(因为最高点可能与时间线上的不匹配)并使用它?

我想要的是一种方法来播放几个合成的声音在一起,而不会减少整个音量和声音的无缝。如果我用几种合成乐器演奏和弦,我不希望单个音符几乎无声。

谢谢。

回答

2

突然以单个样本为基础改变比例,这就是您的“if”语句所做的,听起来很糟糕,类似于裁剪。

您可以查看自适应AGC(自动增益控制),它可以更慢地改变比例因子,但在快速瞬变过程中仍然可以剪辑或获取突然的音量变化。

如果您使用AGC算法的前瞻性功能来防止突然的瞬变发生削波,那么您的延迟会变得更糟。

如果你确实使用AGC,那么孤立的音符可能听起来像他们比在和弦中演奏时响得大得多,这可能不能正确表示音乐作品的意图(尽管这种类型的压缩在烦人的电视和广播广告)。

缩小调音台输出音量,以便音符不会剪辑或减少音量,除非构图指示时会导致大量声道的音量大大减小的混音(这就是为什么正确再现经典收音机里的音乐往往太安静,不足以吸引足够的观众赚到钱)。

这都是一种折衷。

+0

谢谢。我会尝试不同的技术,看看最好的。我会欢迎更多的答案,直到找到最佳解决方案。 – 2011-12-19 18:09:56

0

我没有看到这是一个问题。如果你知道所有波的最大幅度(所有时间),它应该工作。请务必不要改变每个采样的幅度,而是要为每个“音符开”决定。这是一个非常简单的算法,但可以满足您的需求。