Фильтр низких частот - PullRequest
       74

Фильтр низких частот

0 голосов
/ 26 февраля 2020

В настоящее время я использую AVAudioEngine для получения аудиосэмплов с микрофона и успешно реализованного FFT. Для стабильных значений частоты я также реализовал окно Ханна для сэмплов аудио до FFT. Теперь я хотел реализовать фильтр низких частот на аудиосэмплах для устранения высоких частот. Я провел некоторое исследование относительно фильтра нижних частот в iOS, но большинство ответов было найдено с помощью AVAudioUnit. Меня смущает, возможно ли реализовать фильтр низких частот только в AVAudioEngine? Можно ли применить фильтр низких частот к аудиосэмплам? Если да, то какой подход мы должны следовать? Заранее спасибо.

1 Ответ

2 голосов
/ 04 мая 2020

Добро пожаловать в плохо документированный мир AVAudioEngine.

Не уверен, как вы настроили свой AVAudioEngine, но в качестве краткого обзора, я предполагаю, что вы будете смотреть на что-то длинное, эти строки:

Создание двигателя let engine = AVAudioEngine() Создание узла эффекта var equalizer = AVAudioUnitEQ(numberOfBands: 1) Присоединение узлов engine.attach(equalizer) Подключение узла engine.connect(equalizer, to: engine.mainMixerNode, format: audioFormat) Подготовка и запуск двигателя. engine.prepare();try engine.start(); Вы также подключите и подключите playerNode для ваших аудиосэмплов.

Что касается вашего вопроса. AVAudioUnits - это подклассы, которые используются вашими узлами эффектов, чтобы позволить AVAudioEngine управлять аудио. Вы используете их косвенно с AVAudioEngine через узлы, которыми вы манипулируете.

Чтобы позволить AVAudioEngine управлять фильтром нижних частот, вы можете создать экземпляр AVAudioUnitEQ с одной полосой (как описано выше). А затем управляйте эффектом с помощью функции, которая смещает частоту фильтра:

    func setLowPassFilter(frequency: Float){
        filter.bands[0].filterType = .lowPass
        filter.bands[0].frequency = frequency
        filter.bands[0].bypass = false
    }

Ключ с этими эффектами AVAudioUnitEQ должен установить bypass = false, иначе он будет игнорировать ваш эффект.

Надеюсь, это поможет. Мир AVAudioEngine довольно одинок, поэтому я хотел бы указать вам на это бесплатное приложение: Phonique

Это приложение, созданное настоящим профессионалом AudioEngine - Крисом Дэвисом - и позволяет вам легко поэкспериментируйте с AVAudioEngine, чтобы найти свои эффекты, а затем проверьте его сгенерированный код и выясните, как он подключен. В этом посте он объясняет, как это работает. Он не всегда предлагает замену вашего собственного кода, но это идеальное место, чтобы увидеть, как все должно быть организовано. Удачи

...