Фильтрация звука в AudioKit

Что я должен сделать:

  • записывать аудиофайл;
  • поскольку он записывается с микрофона iPhone / iPad, он может быть тихим, поэтому мне нужно отфильтровать его, чтобы сделать громче;
  • сохранить отфильтрованную запись;

Я новичок в программировании аудио, но насколько я понимаю, мне нужен фильтр "All Pass" (если нет, пожалуйста, поправьте меня).

Для этой задачи я нашел две библиотеки: Novocaine и AudioKit, но Novocaine написан на C, поэтому его сложнее реализовать быстро, и я решил использовать AudioKit, но я не нашел там фильтра "All Pass".

Кто-нибудь знает, как реализовать это в AudioKit и сохранить отфильтрованный файл? Спасибо!


person Roman Simenok    schedule 14.11.2017    source источник


Ответы (1)


У вас есть несколько вариантов, для музыкальных записей я рекомендую AKBooster, поскольку он чисто усиливает звук, вы должны быть осторожны, насколько вы усиливаете, иначе вы можете вызвать клиппирование.

Для разговорного звука я рекомендую AKPeakLimiter. Это даст вам максимальный объем без обрезки. Установите более низкие значения для AttimeTime и 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

        }
    }

}
person dave234    schedule 14.11.2017
comment
Привет, @Dave, разве ты не знаешь, что, если я использую метод normalized класса AKAudioFile, не должен ли я получить более громкий файл? P.S. Я пробовал, но получаю ошибку WARNING AKAudioFile: cannot normalize a silent file. Спасибо! - person Roman Simenok; 16.11.2017