Добро пожаловать в плохо документированный мир 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, чтобы найти свои эффекты, а затем проверьте его сгенерированный код и выясните, как он подключен. В этом посте он объясняет, как это работает. Он не всегда предлагает замену вашего собственного кода, но это идеальное место, чтобы увидеть, как все должно быть организовано. Удачи