Radan писал(а):sabb писал(а):PureBasic 4.41 (Windows - x86) ткните носом как можно поменять частоты. насколько я понял строки с 137 по 243 каким образом велись вычисления?
По поводу того, как считать частоты, напишу попозже.
Handle = BASS_RecordStart(22050, 1, 0, Nothing, 0), где – 22050(может быть 11025, 44100) это частота дискретизации сигнала, 1 (моно, 2 – для стерео, 4 – квадро) - число каналов.
BASS_ChannelGetData(Handle,@FFT(),#BASS_DATA_FFT4096) , где - BASS_DATA_FFT4096 (может быть от 256 до 8192) - это константа, которая задаёт 4096 выборок. Функция возвращает 2048 значений для моно сигнала (1 канал) в массив FFT. Вторая половина массива для моно - пустая!
Каждый период времени можно получать данные амплитуд на определенных частотах.
FFT(f) - значении амплитуды на частоте (f). Т.е. для каждой частоты в массиве будет своя амплитуда.
Чтобы получить суммарную амплитуду в определённом частотном диапазоне, нужно просто просуммировать все необходимые значения массива и усреднить результат.
Шаг одной выборки при заданных значениях: 22050/4096 = 5,4 Гц
Делаем первых 300 выборок и усредняем.
for x= 1 to 300
freq=freq+(fft(x))
next
req=freq/300
Получили усреднённую частоту в диапазоне 0-1620 Гц (300*5,4Гц). Средняя частота – 810 Гц. Частоты возрастают логарифмически, посмотрите хотя бы на эквалайзер, там сделано также.
Конечно, лучше всего сделать частоты настраиваемые, например с помощью 2 регуляторов, начало и конец частоты. И запоминать настройки в файл. На этой неделе уже вряд ли получится, но вообще-то планирую добавить и эту весьма полезную функцию.