LINUX.ORG.RU

Сбылась мечта идиота

 , ,


3

2

Таки Subj! Мой маленький, грязный хак визуализации аудио-потока.

Поясню: до сих пор графическое представление звука было отдано на откуп главным образам всевозможным плагинам некоторых плееров. И у каждого плеера они свои, а то их и вообще нет. Т.ч. если вы хотите посмотреть на выхлоп mpd или там mplayer, то увы, скорей всего у вас ничего не выйдет.

Мне известна одна единственная программа, позволяющая подобное: extace, но работает она только с Esound и мне к сожалению запустить её за все эти годы так толком и не удалось.

И вот свершилось: в новом релизе OBSD добавили monitoring mode в родной аудио сервер aucat(1), позволяющий считывать обратно то, что на данный момент проигрывает звуковая карта. Конечно, что-то подобное можно соорудить и с ALSA или PulseAudio, но первое это linux-only, да и второго нет под OBSD.

Рад как слон. За код не ругать: это PoC, да и было уже поздно.

>>> Просмотр (1280x800, 577 Kb)

★★★★★

Проверено: post-factum ()
Последнее исправление: Dmitry_Sokolowsky (всего исправлений: 1)

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

OpenBSD ставить ради такого - извращение еще то

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

just for lulz

да в принципе ни какой. сбылась древняя мечта визуализации аудио-потока независимо от плеера. теперь я могу слушать веб-радио через mplayer и наслаждаться красивенькими прыгающими точечками на мониторчике «медиа»-сервера. вот и всё.

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

да кто ж спорить будет, но всё равно приятно!

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

в каком месте? хотя щас оно и работает именно так, как задумывалось, но от конструктивной критики и идей никогда не откажусь. т.ч. давай, буду рад.

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

красиво.

читаем 16 bit signed из потока и скармливаем это FFT (пока что не нормированно, т.к. я особой разницы не заметил, но думаю таки нормирование добавить), от комплексного выхлопа FFT берём абсолютное значение с коррекцией в sqrt(f) (см. код ниже, так думаю понятней будет), полученый результат скалируем, берём соответствущее значение из палетты и выводим на экран.

void
dofft(fftw_plan plan, double *in, double *out, int n)
{
        int     i;

        memset(out, 0, n * sizeof(double));
        fftw_execute(plan);
        for (i = 1; i < n / 2; i++)
                out[i - 1] = sqrt((out[i] * out[i] + out[n - i] * out[n - i]) * i) / (double)n;
}
beastie ★★★★★
() автор топика
Ответ на: комментарий от beastie

Там не просто FFT.
Там всё бъётся на блоки (это правильно), но дальше от них делается оконное Фурье с перекрытием.
Иначе ерунда будет получаться и назад ты из картинки ничего не соберёшь. Да и некрасиво.

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

полученый результат скалируем, берём соответствущее значение из палетты и выводим на экран.

Логарифм возьми.

float base = 10*255/decibels;
int value = qBound(0,255 + (int) roundf(
                    base*log10f(spectr_value[c][i][mel?mels[j]:j]/spectr_value_max)
                ),255);

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

я это тоже уже пробовал, но результат мне что-то не очень понравился. вяло как-то получалось. а вот по поводу оконной функции — это да, это надо добавить.

beastie ★★★★★
() автор топика

> Т.ч. если вы хотите посмотреть на выхлоп mpd или там mplayer, то увы, скорей всего у вас ни чего не выйдет.

У mpd можно сделать второй вывод аудиопотока в пайп и там уже с ним делать что угодно. ncmpcpp умеет (в консоли) рисовать подобную ерунду.

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

убавь яркость ;) на моём монеторе всё чики-пики

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

так я именно об этом — с mpd можно, xmms это может тоже умеет. а вот что делать с mplayer, xmp, ffmpeg и т.д. по списку? так вот, мой меленький хак именно этот вопрос и решает: теперь я хот cat-ом проигрывать могу и всё работает.

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

>с mpd можно, xmms это может тоже умеет. а вот что делать с mplayer, xmp, ffmpeg и т.д. по списку?

jack

lazyklimm ★★★★★
()

Удалось нарисовать звуковой спектр? История успеха, че.

dm1024 ★★★
()

А sndpeek не то же самое делает?

ei-grad ★★★★★
()

Может, эта визуализация и не самая нужна в мире вещь, но мне понравилось:) Вместе с OpenBSD выглядит особенно круто:) Стоит имхо отослать скрин на их сайт или где там официально показывают, что такое OpenBSD.)

crypt ★★★★★
()

Параллельные питчи хорошо видно. Так можно повырезать определенные сосавные части из общего произведения. Например, речь. Только с высокими будет проблема. На шипящих звуках, на высоких частотах питч уже не будет легко опозаваемым.

Вообще, отслеживание питча — это один из способов к решению задачи speech segregation.

Zubok ★★★★★
()

Вот сейчас посмотрел, чуть плохо не стало☹

Dmitry_Sokolowsky ★★★★★
()

насчет BSD не знаю, но OCP, точно так же сие визуализирует музыку, что играет в данный момент.

joy4eg ★★★★★
()

> За код не ругать: это PoC, да и было уже поздно.

Тут кроме кода ругать еще вагон и маленькую тележку.

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

дык, с него, за скудностью фантазии, и рисовалось

beastie ★★★★★
() автор топика

А в лялихе есть aloop ^_^

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