混合声波(iOS 上的 CoreAudio)

Posted

技术标签:

【中文标题】混合声波(iOS 上的 CoreAudio)【英文标题】:Mixing Sound Waves (CoreAudio on iOS) 【发布时间】:2011-12-18 01:41:16 【问题描述】:

在我看来,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

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

我想要的是一种方法,可以同时播放多个合成声音,而不会降低音量,并且听起来无缝。如果我用几种合成乐器演奏和弦,我不想要求单个音符实际上是无声的。

谢谢。

【问题讨论】:

【参考方案1】:

在单个样本的基础上突然改变音阶,这就是你的“if”语句所做的,听起来很糟糕,类似于剪辑。

您可以研究自适应 AGC(自动增益控制),它会更缓慢地改变比例因子,但在快速瞬变期间仍可能会削波或突然改变音量。

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

如果您确实使用 AGC,那么孤立的音符听起来可能比在和弦中演奏时的音量要大得多,这可能无法正确代表乐曲的意图(尽管这种类型的压缩在烦人的电视和广播中很常见广告)。

缩小混音器的输出音量,以使音符永远不会剪辑或降低音量,除非乐曲表明会导致大量通道的音量大大降低(这就是正确再现古典音乐的原因收音机里的声音常常太安静,无法吸引足够多的观众来赚足够的钱)。

这都是一个权衡。

【讨论】:

谢谢。我将尝试不同的技术,看看什么是最好的。在找到最佳解决方案之前,我将欢迎更多答案。【参考方案2】:

我不认为这是一个问题。如果您知道所有波的最大幅度(一直),它应该可以工作。确保不要在每个样本的基础上改变幅度,而是决定每个“音符”。这是一个非常简单的算法,但可以满足您的需求。

【讨论】:

以上是关于混合声波(iOS 上的 CoreAudio)的主要内容,如果未能解决你的问题,请参考以下文章

CoreAudio AUGraph 没有声音

在 IOS 上使用 AVComposition 混合两个音频文件

在 iOS 上使用音频单元混合多个信号

Phonegap混合iOS应用程序中加载的远程网页可以将数据保存到iOS文件系统吗?

如何在 iOS 下使用设备上的 CoreAudio 以编程方式创建一定长度的空 .m4a 文件?

iOS与Flutter混合开发