LINUX.ORG.RU

Нужен хэлп с фильтрами для визуализатора спектра

 , , ,


0

2

Почти доделал spectrumyzer, однако если посмотреть cava, то можно увидеть топовую анимацию.

Курил сорсы: там гравитация, интегральный фильтр и monstercat-filter. Было бы неплохо, если бы кто-нибудь помог или обьяснил.


Ответ на: комментарий от HaCk3D

даже мне, далекому от программирования человеку все понятно. В Job :D

А если серьезно, то что реально неясно?

dikiy ★★☆☆☆
()
Ответ на: комментарий от HaCk3D

че там не понятного? Все вычисления в цикле smoothing.

массив f - отсчеты вычитанные в текущий момент времени t.
fpeak - массив в котором собсно держаться отсчеты, которые будут рисоваться. flast - массив отсчетов в момент времени t-1. fall - массив со скоростями падения.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

смысл таков - fpeak уменьшается с каждым моментом времени, если текущий вычитанной уровень сигнала не превышает fpeak.

уменьшение происходит пропорционально квадрату отрезка времени, прошедшего с момента обновления fpeak текущим отсчетом f, если последний оказался больше.

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от dikiy

fpeak - массив в котором собсно держаться отсчеты, которые будут рисоваться

f и flastd рендерятся, если что, а fpeak - скачки (пики частот)

Все вычисления в цикле smoothing

цикла smoothing там нет (но это просто поправка)

Я просил обьяснить не значения переменных, а смысл вычислений

HaCk3D
() автор топика
Ответ на: комментарий от HaCk3D

бля, если б знал, что пишу в Development, не ответил бы. Это для Ъ-обитателя толксов западло :D

dikiy ★★☆☆☆
()

Зачем захардкодил 44100? Выноси в настройки.

Чому на питоне? Жрать будет ковшами.

А, по делу...

Дикий дико ответил умными словами. Я отвечу простыми.

Там это называется гравитацией, но правильно — average (как быстро будет спадать вниз последний показанный уровень). А еще бывает resistence (как долго будет опрозрачиваться последний показанный уровень), а еще бывает peak-hold (постоянное удержание максимумов). Но это все визуальные свистоперделки, которые к самому FFT отношения не имеют.

Так же, дикий сказал про квадратичность, но для простоты или для возможности выбора в конфиге алгоритмов можно запилить и линейные рассчеты.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

44100

Это ты где нашел?

Чому на питоне? Жрать будет ковшами

Не, все ок

Большая часть понятна, но что такое «опрозрачиваться» и «постоянное удержание максимумов», если можно пару примеров с freq и lastFreq.

Так к FFT онли фильтры

HaCk3D
() автор топика
Ответ на: комментарий от anonymous

Я смотрел blame, там несколько человек писало разные части фильтрации, да и вряд ли они мне толково обьяснят.

HaCk3D
() автор топика
Ответ на: комментарий от HaCk3D

где нашел?

https://github.com/HaCk3Dq/spectrumyzer/blob/master/src/impulse.c#L44

Не, все ок

Могу проверить на своем «почти-еееписи».

«опрозрачиваться»

Ты нарисовал точку, и за некоторое время увеличиваешь ей прозрачность до максимума, когда прозрачность стала максимальной — точку можно удалять. В твоем случае не точка, а «снимок» спектра (кривая линия верхней его границы).

«постоянное удержание максимумов»

Всегда отрисовываешь в верхней части «снимок» не падающих максимумов которые успели произойти с момента включения/сброса пикхолдера, а если в какой-то части спектра появился новый максимум — перерисовываешь эту часть.

Примеров не будет. Я говорил — никакого отношения к реальным уровням FFT эти визуальные свистоперделки не имеют. Даже твой «гравитационный» average, ибо его скорость спада тоже устанавливается «на глаз» и для красоты.

deep-purple ★★★★★
()
Ответ на: комментарий от HaCk3D

Так к FFT онли фильтры

В смысле онли фильтры?

HaCk3D тебе собственно всё озвучил.

Пришла к тебе звуковая волна, ты её в fft. После преобразования (всё грубо округляю, опускаю) у тебя получилось число, к примеру на N Гц ты его отражаешь на баре в значении Y. А вот дальше уже твоё дело что с ним делать. Можешь запомнить этот максимум и не изменять T секунд, или пока не придёт P следующих преобразований, получится «удержание максимумов», можешь оставить тонкую полоску на T секунд/преобразований а сам бар опустить, получится полоска в виде максимумов. Можешь плавно её опускать, до следующего максимума, будет так называемая тобой «гравитация». Да вообще всё, что душа пожелает.

p.s. на всякий http://slonpts.narod.ru/algo/math/furie/06.html

xSudo ★★★
()
Последнее исправление: xSudo (всего исправлений: 1)

Мну делал вот так: https://github.com/dim13/spectrogram (на лоре был ещё где-то screenshot, но мне лень искать)

TL;DR: я просто блитил копию последнего сигнала с уменьшеной альфой на заднем фоне линейно вниз. Выглядело тоже не плохо.

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.