Реализация после обработанного фильтра низкого прохода с использованием Core Audio

StackOverflow https://stackoverflow.com/questions/4162504

Вопрос

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

- (void)processDataWithInBuffer:(const int16_t *)buffer outBuffer:(int16_t *)outBuffer sampleCount:(int)len {   
    BOOL positive;
    for(int i = 0; i < len; i++) {
        positive = (buffer[i] >= 0);
        currentFilteredValueOfSampleAmplitude = LOWPASSFILTERTIMESLICE * (float)abs(buffer[i]) + (1.0 - LOWPASSFILTERTIMESLICE) * previousFilteredValueOfSampleAmplitude;
        previousFilteredValueOfSampleAmplitude = currentFilteredValueOfSampleAmplitude; 
        outBuffer[i] = currentFilteredValueOfSampleAmplitude * (positive ? 1 : -1);
    }
}

Что я могу сделать, чтобы преобразовать этот код в код, который позволит мне сократить частоты на определенный HZ на определенном уровне БД?

Это было полезно?

Решение

Я настоятельно рекомендую Численные рецепты в C. Отказ Снаружи этого я не уверен, что могу помочь вам.

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

Это внутри C ++ Но это должно вас начать. Извините, я не могу предоставить конкретный ответ.

Другие советы

То, что у вас есть, это IIR-фильтр, и для большего количества контроля я предлагаю использовать ель фильтр, который легче рассчитать коэффициенты для. Я создаю функцию окна:

y = sin (x * bandwidth) / (sin (x) * windowWidth)

Где WindowWidth - это сколько образцов широко вашего окна, х варьируется от -2 * Pi до 2 * Pi, а полоса пропускания:

bandwidth = 2 * frequency * n / sampleRate;

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

Я подвел свой собственный код для этого, поскольку исходный код довольно Crufty.

Я реализовал фильтр, используя Интерактивный фильтр дизайнер.

Вот несколько примерных кодов, с ним интегрирован: https://github.com/davidcairns/mediaplayerDemo.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top