Пользовательский EQ AudioUnit на iOS - PullRequest
6 голосов
/ 16 марта 2011

Единственный эффект AudioUnit на iOS - это «iTunes EQ», который позволяет использовать только предустановки эквалайзера.Я хотел бы использовать настроенный эквалайзер в своем звуковом графике

Я наткнулся на этот вопрос по теме и увидел ответ, предлагающий использовать этот код DSP в рендере.Перезвоните.Это выглядит многообещающе, и люди, кажется, используют это эффективно на различных платформах.Тем не менее, моя реализация имеет тонну шума даже с плоским эквалайзером.

Вот моя интеграция из 20 строк в класс MixerHostAudio примера приложения Apple «MixerHost» (все в одном коммите):

https://github.com/tassock/mixerhost/commit/4b8b87028bfffe352ed67609f747858059a3e89b

Любые идеи о том, какЯ мог бы заставить это работать?Любые другие стратегии для интеграции эквалайзера?

Редактировать: Вот пример искажения, которое я испытываю (с эквалайзером): http://www.youtube.com/watch?v=W_6JaNUvUjA

Ответы [ 2 ]

0 голосов
/ 21 марта 2011

Этот код кажется неправильным более чем одним способом.

Цифровой фильтр обычно представлен коэффициентами фильтра , которые постоянны , фильтром историей внутреннего состояния (поскольку в большинстве случаев выходной сигнал зависит от история) и топология фильтра , которая является арифметикой, используемой для вычисления выходных данных с учетом входных данных и фильтра (коэффициенты + история состояний). В большинстве случаев и, конечно же, при фильтрации аудиоданных вы ожидаете получить 0 на выходе, если подаете 0 на вход.

Проблемы в коде, с которым вы связаны:

  • Коэффициенты фильтра изменены при каждом вызове метода обработки:

    es-> f1p0 + = (es-> lf * (образец - es-> f1p0)) + vsa;

  • Входная выборка обычно умножается на коэффициенты фильтра, а не добавляется к ним. Это не имеет никакого физического смысла - выборка и коэффициенты фильтра даже не имеют одинаковые физические единицы.

  • Если вы вводите 0, вы не получите 0 на выходе, только некоторые значения, которые не имеют никакого смысла.

Я предлагаю вам поискать другой код - другой вариант - его отладка, и это будет сложнее.

Кроме того, вам будет полезно прочитать о цифровых фильтрах:

http://en.wikipedia.org/wiki/Digital_filter

https://ccrma.stanford.edu/~jos/filters/

0 голосов
/ 20 марта 2011

В коде в EQ3Band.c коэффициенты фильтра используются без инициализации. Метод init_3band_state инициализирует только коэффициенты усиления и частоты, но сами коэффициенты - es->f1p0 и т. Д. Не инициализируются и поэтому содержат некоторые значения мусора. Это может быть причиной плохого вывода.

...