在 AudioKit 中过滤音频
Filtering audio in AudioKit
我需要做的事情:
- 录制音频文件;
- 因为它是从 iPhone/iPad 麦克风录制的,所以它可能很安静,所以我需要过滤它以使其更响亮;
- 保存筛选记录;
我是音频编程的新手,但据我所知,到目前为止我需要“All Pass”过滤器(如果不是请纠正我)。
对于这个任务,我找到了两个库:Novocaine 和 AudioKit,但是 Novocaine 是用 C 编写的,所以更难实现它在 swift 中,我决定使用 AudioKit,但我没有在那里找到 "All Pass" 过滤器。
有人知道如何在 AudioKit 中实现它并保存过滤后的文件吗?谢谢!
你有几个选择,对于音乐录音我推荐AKBooster,因为它纯粹提升音频,你必须小心提升多少,否则你可能会导致削波。
对于口语音频,我推荐 AKPeakLimiter。它将为您提供最大音量而不会削波。将 attackTime 和 decayTime 设置为较低的值以听到更明显的效果。
在您移动滑块之前,滑块的值不会代表参数的值。
import UIKit
import AudioKit
class ViewController: UIViewController {
let mic = AKMicrophone()
let boost = AKBooster()
let limiter = AKPeakLimiter()
override func viewDidLoad() {
super.viewDidLoad()
mic >>> boost >>> limiter
AudioKit.output = limiter
AudioKit.start()
let inset: CGFloat = 10.0
let width = view.bounds.width - inset * 2
for i in 0..<4 {
let y = CGFloat(100 + i * 50)
let slider = UISlider(frame: CGRect(x: inset, y: y, width: width, height: 30))
slider.tag = i
slider.addTarget(self, action: #selector(sliderAction(slider:)), for: .valueChanged)
view.addSubview(slider)
}
boost.gain = 1
}
@objc func sliderAction(slider: UISlider) {
switch slider.tag {
case 0:
boost.gain = slider.value * 40
case 1:
limiter.preGain = slider.value * 40
case 2:
limiter.attackTime = max(0.001, slider.value * 0.03)
case 4:
limiter.decayTime = max(0.001, slider.value * 0.06)
default: break
}
}
}
我需要做的事情:
- 录制音频文件;
- 因为它是从 iPhone/iPad 麦克风录制的,所以它可能很安静,所以我需要过滤它以使其更响亮;
- 保存筛选记录;
我是音频编程的新手,但据我所知,到目前为止我需要“All Pass”过滤器(如果不是请纠正我)。
对于这个任务,我找到了两个库:Novocaine 和 AudioKit,但是 Novocaine 是用 C 编写的,所以更难实现它在 swift 中,我决定使用 AudioKit,但我没有在那里找到 "All Pass" 过滤器。
有人知道如何在 AudioKit 中实现它并保存过滤后的文件吗?谢谢!
你有几个选择,对于音乐录音我推荐AKBooster,因为它纯粹提升音频,你必须小心提升多少,否则你可能会导致削波。
对于口语音频,我推荐 AKPeakLimiter。它将为您提供最大音量而不会削波。将 attackTime 和 decayTime 设置为较低的值以听到更明显的效果。
在您移动滑块之前,滑块的值不会代表参数的值。
import UIKit
import AudioKit
class ViewController: UIViewController {
let mic = AKMicrophone()
let boost = AKBooster()
let limiter = AKPeakLimiter()
override func viewDidLoad() {
super.viewDidLoad()
mic >>> boost >>> limiter
AudioKit.output = limiter
AudioKit.start()
let inset: CGFloat = 10.0
let width = view.bounds.width - inset * 2
for i in 0..<4 {
let y = CGFloat(100 + i * 50)
let slider = UISlider(frame: CGRect(x: inset, y: y, width: width, height: 30))
slider.tag = i
slider.addTarget(self, action: #selector(sliderAction(slider:)), for: .valueChanged)
view.addSubview(slider)
}
boost.gain = 1
}
@objc func sliderAction(slider: UISlider) {
switch slider.tag {
case 0:
boost.gain = slider.value * 40
case 1:
limiter.preGain = slider.value * 40
case 2:
limiter.attackTime = max(0.001, slider.value * 0.03)
case 4:
limiter.decayTime = max(0.001, slider.value * 0.06)
default: break
}
}
}