Я реализовал элементарный фильтр нижних частот, используя значение, основанное на времени. Это нормально, но попытка найти правильный временной отрезок требует догадок и дает разные результаты в зависимости от разных входных аудиофайлов. Вот что у меня есть сейчас:
- (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);
}
}
Что я могу сделать, чтобы преобразовать этот код в код, который позволит мне обрезать частоты выше определенного Гц на определенный уровень дБ?