Saitei, ну ты определись для начала с библиотекой, в ней вся соль будет Кроме bass есть ещё FMod, OpenAL, cAudio (поправьте если не прав). Можно и через DirectX звук воспроизводить
Смотри bass библиотеку. Скачай архив с исходниками, и библиотекой. Там есть примеры на C/Delphi, один из них - fxtest, использует ползунки для настройки частот проигрываемой песни. Посмотри его исходник, добавь частот и получится эквавалайзер. Еще вот исходники, эквавалайзера на bass/Delphi.
Saitei, именно с помощью bass.dll и можно сделать эквалайзер. Очень давно я делал проигрыватель на Delphi по уроку ( http://delphiexpert.ru/view_lesson.php?id=77 ).
Тогда это зовется не эквалайзер, а визуализатор спектра.
Добавлено (18.07.2012, 15:05) --------------------------------------------- И в bass (в том архиве что я дал ссилку) есть компонент - spectrum, и пример к нему.
Сообщение отредактировал -=WarChief=- - Среда, 18 Июля 2012, 15:07
В bass для этого плагин был, а в FMod, насколько я понимаю, ручками делать придётся
Далее идут мои размышления на этот счёт. Скажу сразу, что никогда этим не интересовался и в своих размышлениях рассматриваю пока только визуализацию в виде гистограммы, а как сделать всякие мерцающие в такт музыке круги или переливающуюся дымку я вообще не представляю.
Я всегда представлял себе работу визуализатора следующим образом: определяемся с количеством столбцов гистограммы. Скажем, 16 штук. Берём частоту дискретизации файла, допустим, 32000 Герц. Следовательно, на каждый столбец у нас приходится диапазон в 2000 Гц. Далее нужно снять уровень звука в децибелах для каждой частоты. Получать на выходе массив с 32000 элементов и считать среднее арифмитическое каждых 2000 элементов не хотелось бы, но я не знаю, как сделать иначе
Другое дело, работать в связке с FMod. Там есть функция getSpectrum(), которая, насколько я понял из справки, возвращает массив из N элементов, где N является степенью двойки, и 64 <= N <= 8192. Каждый элемент массива имеет тип float и находится в диапазоне от 0.0 до 1.0. На основании этих данных можно рассчитать децибелы по формуле 10.0f * (float)log10(val) * 2.0f, где val - элемент массива.
А дальше берёшь любимый API и отрисовываешь столбики. Это уже другая история