过去一周我一直在寻找解决方案,但仍未找到。
我的目标是在两个音频文件之间交叉淡入淡出,每个音频文件都使用DidSelectItem加载到集合视图中。问题是让一个人停下来而另一个人无缝地玩耍而没有点击或弹出。
我尝试过的事情:
如果有人能指出我正确的方向,我将不胜感激!
答案 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可以解决我在剪辑之间出现的咔嗒声。