Большой Воронежский Форум
» Программирование>Анализ звуковой информации
CH@$ER 19:39 30.01.2011
Понадобилось изучить такую вот тему. В частности интересует интенсивность музыки, интенсивность басов, средних и высоких частот. На данный момент использую быстрые преобразования фурье для нахождения спектра волны, но пока не хватает знаний все это понять. Может быть посоветуете какие-нибудь книжки на эту тему? [Ответ]
alexz 23:09 30.01.2011
если надо понять что есть преобразовние фурье, то есть книжка "Без паники! Цифровая обработка сигналов для школьников". Просто и местами понятно [Ответ]
CH@$ER 23:29 30.01.2011
собственно "что есть преобразование фурье" понятно, пока что не понятно как его можно применить ну в общем спасибо за наводку [Ответ]
Part!zan 00:17 31.01.2011
CH@$ER, имея спектр сигнала, ты легко можешь узнать уровень нужных частот. [Ответ]
CH@$ER 10:04 31.01.2011
Вот не совсем понятно что этот уровень представляет собой. Получаются какие-то числа. На данный момент у меня считаются три уровня: басы (200Hz - 700Hz), средние (700-1700) и высокие (1700-11000). Для некоторого числа композиций я посчитал средние значения этих параметров, а потом вывел среднее среди этих значений. У меня получились такие числа: 6000 для басов, 1300 для средних и 320 для высоких. Максимальные же значения превышают средние в три раза. Что мне нужно, так это найти какую-то точку опоры, по которой я бы сказал, что сейчас уровень "басов" - высокий. Пока что вот использую вот эти средние значения.

Но это частотный анализ, а что насчет временного? Вот например играли в Audiosurf? Там при увеличении интенсивности музыки ускоряется весь процесс. [Ответ]
Part!zan 18:55 31.01.2011

Сообщение от CH@$ER:
найти какую-то точку опоры, по которой я бы сказал, что сейчас уровень "басов" - высокий

я не вполне понимаю, как ты все это оцениваешь, но обычно уровень оценивается в децибелах или вольтах (смотря как удобнее). [Ответ]
Hopkroft 23:09 31.01.2011
CH@$ER , посмотри книжку Обработка звука на PC. Автор Секунов Н.
Книжка старая, но там практически все интересующие тебя вопросы освещены. Код на С++. [Ответ]
CH@$ER 19:18 02.02.2011

Сообщение от Part!zan:
я не вполне понимаю, как ты все это оцениваешь, но обычно уровень оценивается в децибелах или вольтах (смотря как удобнее).

В том-то и дело, что я и сам не понимаю. После прогонки входящего сэмпла через быстрое преобразование фурье получаются числа для частот от 0 до 11000 герц. Причем числа лежат в диапазоне от 0 до 18 тыс и выше (для условно выбранных частот в диапазоне 200-700 герц, которые я назвал басами). Примерно посчитал для нескольких песен средние значения - 6000. Теперь я считаю что все что выше 6000 - это высокий уровень. Пик басов выделяю так:

bass /= 6000
peak = min(max(bass - 1.5, 0) / 1.5, 1.0)

получается число от 0 до 1. Достаточно хорошо отражает "бухи".

Hopkroft, спасибо [Ответ]
Part!zan 19:39 02.02.2011
CH@$ER, ну а разрядность и уровень входного сигнала у тебя какие? Нарисуй график, хотя бы в ехеле. Ты бы и правда почитал книжки, а то какими-то эмпирическими способами пытаешься цос изучать... [Ответ]
CH@$ER 19:49 02.02.2011
А входной сигнал идет напрямую из винампа!
Да мне в принципе точность не нужна, поэтому опытным путем всего получаю))
А книжка вроде стоящая, правда много матана, придется вкуривать... [Ответ]
Part!zan 22:15 02.02.2011

Сообщение от CH@$ER:
А входной сигнал идет напрямую из винампа!

Ну разрядность-то и уровень у него все равно есть...

Сообщение от CH@$ER:
мне в принципе точность не нужна, поэтому опытным путем всего получаю))

а потом получаются программы, которые работают непонятно как... [Ответ]
CH@$ER 22:23 02.02.2011

Сообщение от Part!zan:
Ну разрядность-то и уровень у него все равно есть...

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

Этот массив я прогоняю через БПФ (сам алгоритм позаимствовал) и на выходе получаю такой же массив из 512 элементов (хотя по идее должно быть 256). Таким образом получаю спектр звука. Максимальные числа в нем обычно не превышали 25 тысяч кажется, и то такие уровни довольно редки были.

Все это дело я прогнал на нескольких песен и собрал статистику, о которой писал выше.

Аа, кстати, wave данные - это однобайтные числа, т.е. там от -128 до 127 уровень. Наверное это Вы и хотели узнать

Сообщение от Part!zan:
а потом получаются программы, которые работают непонятно как...

Да в общем-то работает, и нормально, просто что параметры выведены путем проб и ошибок.
[Ответ]
Part!zan 19:23 03.02.2011

Сообщение от CH@$ER:
Аа, кстати, wave данные - это однобайтные числа, т.е. там от -128 до 127 уровень

Это называется 8-битная разрядность. Если ты даже о таких простых вещах не знаешь, то как же ты вообще программы цос пишешь? Это какое-то радиолюбительство... Читай книжки.

Сообщение от CH@$ER:
и на выходе получаю такой же массив из 512 элементов (хотя по идее должно быть 256).

По идее ты получаешь (в зависимости от вида БПФ) либо комплексный спектр, либо зеркальный спектр. Кстати, в описаниях функций цос обычно указывается в какой разрядности д. б. входные и выходные данные.

Сообщение от CH@$ER:
Максимальные числа в нем обычно не превышали 25 тысяч кажется

Ну а у выходных данных какая разрядность? Подозреваю, что 16 бит.

Сообщение от CH@$ER:
Да в общем-то работает, и нормально, просто что параметры выведены путем проб и ошибок

это и называется непонятно как. когда прога написана на основе каких-то эмпирических знаний, нельзя быть уверенным, что она всегда будет хорошо работать. [Ответ]
CH@$ER 14:26 08.02.2011

Сообщение от Part!zan:
Это называется 8-битная разрядность. Если ты даже о таких простых вещах не знаешь, то как же ты вообще программы цос пишешь? Это какое-то радиолюбительство... Читай книжки.

Я для этого и создал тему, чтобы узнать какие книжки читать

Сообщение от Part!zan:
По идее ты получаешь (в зависимости от вида БПФ) либо комплексный спектр, либо зеркальный спектр. Кстати, в описаниях функций цос обычно указывается в какой разрядности д. б. входные и выходные данные.

Получаю модуль комплексного числа. БПФ - разложение сигнала в спектр (т.е. это кажется обратное преобразование).

Сообщение от Part!zan:
Ну а у выходных данных какая разрядность? Подозреваю, что 16 бит.

Выход - числа с плавающей точкой одинарной точности
[Ответ]
Part!zan 19:45 09.02.2011

Сообщение от CH@$ER:
Я для этого и создал тему, чтобы узнать какие книжки читать

Если у тебя хорошо с английским, то советую глянуть http://dspguide.com/
Очень доступная книжка по прикладной цос.

Сообщение от CH@$ER:
Получаю модуль комплексного числа. БПФ

Во, наконец-то луч света. )

Сообщение от CH@$ER:
разложение сигнала в спектр (т.е. это кажется обратное преобразование).

Обратное преобразование это когда спектр в сигнал. [Ответ]
CH@$ER 21:19 10.02.2011
Я просто в понятиях путаюсь пока, для меня это новая область совсем.
Спасибо за ссылку, вроде не заумно написано (читать проще чем обработку звука на PC). [Ответ]
Вверх