两个音频文件之间的交叉淡入淡出 - Swift

时间:2018-02-05 16:03:49

标签: swift

过去一周我一直在寻找解决方案,但仍未找到。

我的目标是在两个音频文件之间交叉淡入淡出,每个音频文件都使用DidSelectItem加载到集合视图中。问题是让一个人停下来而另一个人无缝地玩耍而没有点击或弹出。

我尝试过的事情:

  1. Github cephalopod图书馆
  2. 多个AVAudioPlayers
  3. 如果有人能指出我正确的方向,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

我会调查AVMutableAudioMixInputParameters。具体来说是setVolumeRamp(fromStartVolume: toEndVolume: timeRange: CMTimeRange)

您可以在淡化其他曲目的同时淡化一个曲目的音量,这将导致两者之间的“无缝”过渡。

答案 1 :(得分:0)

当您使用压缩的音频格式(如本文所述)时,我发现的点击或弹出也可能发生。.https://forums.macrumors.com/threads/avaudioplayer-avoiding-glitches-when-playing-looped-sounds.640862/

这样做的原因是比较压缩音频的存储方式 到未压缩的音频。例如,假设您有一个未压缩的 声音文件的长度为23600个样本,您将文件另存为.CAF 使用AAC压缩的文件,为简单起见, 压缩比例为4:1。忽略文件头和(再次) 为简单起见,文件中的数据存储在 1024个样本。以4:1压缩23600个样本等于5900个样本,因此 您可能希望您的文件看起来像这样;

块0:1024个采样块1:1024个采样块2:1024个采样 区块3:1024个样本区块4:1024样本区块5:780个样本

如您所见,因为声音文件的实际长度为 不是1024个样本的精确倍数,最后一个块仅包含 780个样本。因为不允许使用可变的块长度( 我知道的任何压缩格式,但我可能是错的-这肯定是 MP3 / AAC的情况如此),编码器必须通过 保持沉默。因此,在实际的AAC文件中 您将拥有;

块0:1024个采样块1:1024个采样块2:1024个采样 区块3:1024个样本区块4:1024样本区块5:780个样本+ 244个无声样本/ 0

这对于非循环声音很好,但是如果您 尝试播放此期望无缝循环。您的声音文件应该 在第5900个样本处循环,因为这将在一个 1024个样本的块,直到244才真正发生循环 稍后采样,因此您在循环时会稍有停顿或毛刺 点。

从.mp3切换为.wav可以解决我在剪辑之间出现的咔嗒声。