AVFoundation / AudioKit 播放低频声音会产生点击/弹出

时间:2021-03-24 22:16:53

标签: ios avfoundation audiokit

我正在创建一种鼓垫应用程序,看起来 AKPlayer 是 AudioKit 中用于播放我的样本的许多类中最好的。

问题是,当我开始播放低频(低音音符)样本时,播放样本时总是会发出咔哒声(或“砰”声)!

通过从 AudioKit Playgrounds 运行未经修改的“混合节点”演示,可以轻松听到这一点。调低除低音以外的所有声音的音量,您会注意到每次低音采样循环时都会发出咔嗒声。

我还使用 AVFoundation 测试了该问题,情况也是如此。这只发生在像低音这样的低频声音中。铅和其他声音不会产生这种声音。我还用我自己的低音样本进行了测试,这里也有同样的问题。

这是两者的代码:

import AudioKitPlaygrounds
import AudioKit

import AVFoundation


//: This section prepares the players
let drumFile = try AKAudioFile(readFileName: "drum.wav")
let bassFile = try AKAudioFile(readFileName: "bass.wav")
let guitarFile = try AKAudioFile(readFileName: "guitar.wav")
let leadFile = try AKAudioFile(readFileName: "lead.wav")

var drums = AKPlayer(audioFile: drumFile)
var bass = AKPlayer(audioFile: bassFile)
var guitar = AKPlayer(audioFile: guitarFile)
var lead = AKPlayer(audioFile: leadFile)

bass.play() // will produce click/pop
guitar.play() // will not produce click/pop, only low frequency samples produce click


let path = Bundle.main.path(forResource: "3", ofType:"aac")!
let url = URL(fileURLWithPath: "path")

var bombSoundEffect = try AVAudioPlayer(contentsOf: bassFile.url)
bombSoundEffect.prepareToPlay()

// uncomment below for AVFoundation
// bombSoundEffect.numberOfLoops = -1
// bombSoundEffect.play()

我怎样才能摆脱这种点击/弹出?

1 个答案:

答案 0 :(得分:2)

重新制作您的低音样本,使其开始和结束时都保持沉默。

为了避免循环时的咔嗒声和爆裂声,接缝处的值必须是连续的,即它们不能相差太大。它们的速度也需要匹配,不确定加速度。您可以通过将样本加载到内存中并将其乘以具有上述属性的曲线来轻松实现这一点。开始时从 0 到 1 缓和,然后在结束时返回。

还要在声音编辑器中加载您的样本并检查开头和结尾。可能结局被截断得太厉害了。