Russian Qt Forum

Программирование => Алгоритмы => Тема начата: Firefox от Ноябрь 10, 2010, 15:41



Название: эхо фильтр
Отправлено: Firefox от Ноябрь 10, 2010, 15:41
Здравствуйте. мне нужно сделать эхо фильтр. то есть прочитать файл исходный . wav, дойти до данных и далее считав их наложить их ещё раз на себя с задержкой по времени. считала в QByteArray data1 данные, а вот как сделать сдвиг и наложить не могу понять.


Название: Re: эхо фильтр
Отправлено: kosya от Ноябрь 29, 2011, 20:47
а по какому алгоритму накладывать то?


Название: Re: эхо фильтр
Отправлено: Rem Norton от Ноябрь 30, 2011, 01:35
Дело было давно, но кое что еще помню. Так, для обработки wav-файла надо:

1. Вычислить нулевую точку. Тут все зависит от количества бит на семпл. Для 8 бит нулевая точка = 127, для 16 бит = 32766 и т.д.
2. Преобразовать массив беззнаковых данных в знаковые: new = old - zero.    old - то, что было в файле, zero - нулевая точка
3. Наложение 2-х и более сигналов производится путем арифметического сложения семплов: out = in1 + in2.
4. Регулировка громкости выполняется путем умножения семплов на какой-то коэффициент (<1 - еменьшить, > 1 - увеличить)

Смещение вычисляется из частоты дискретизации (есть в заголовке). Например, если частота 44100 Гц, то для смещения на 0.5 сек. надо пропустить первые 44100*0.5 = 22050 семплов и начать обработку с 22051-го.

Ну и перед выводом или записью в файл данные преобразовать обратно в беззнаковые: out += zero;

Ну как то так.

P.S. Ах да, еще момент: не упусти из виду, что семплы идут вперемешку (если стерео): правый, левый.