Опубликовано 20 октября 2010, 13:05

В MPD есть замечательная возможность выводить проигрываемый PCM-поток в FIFO. Чтобы потом его, например, визуализировать. Казалось бы, UNIX-way, невероятная гибкость и прочие радости жизни. Только вот незадача: до сих пор не существует ни одного MPD-клиента, показывающего, например, пляшущий спектр. Что странно: эти клиенты обычно пишут студенты, и что, неужели им неинтересно приложить свежеизученное быстрое преобразование Фурье? Интересно, безусловно интересно, да только есть один issue 0002503: audio outputs are not kept in sync. Для тех, кому лень читать: через несколько минут содержимое FIFO-выхода начинает «обгонять» то, что реально подаётся на звуковую карту, а разработчики не понимают, почему это баг. Всё по Куперу: программисты не пойми зачем напрограммировали кучу функционала, никому кроме них не нужную. В самом деле: на что могут сгодиться рассинхронизированные выходы? Только на «повышение ЧСВ программиста», больше никуда. И они эту функцию задачу выполняют. Ну правда, что не так? Почему выходы должны быть синхронизированы?

Официальный Wiki словно издевается:

  • Visualization of the output can be done by an independent audio program.
  • An output plugin could help.
  • MPD clients could decode and visualize the file themselves in sync with the server.

Отличный медиасервер! Клиент может декодировать файл самостоятельно. Спасибо большое. Как в журнале «Радио» за 1989 год:

А не проще ли ничего не рисовать и не писать, и вообще не вставлять вашу кассету в магнитофон, а самому спеть всё, что там записано?

FIFO-выход MPD пришлось выкинуть, в .asoundrc написать:

pcm.!default {
    type plug
    slave {
        pcm rate44100Hz
    }
}

pcm.rate44100Hz {
    type rate
    slave {
        pcm writeFile
        format S16_LE
        rate 44100
    }
}

pcm.writeFile {
    type file
    slave {
        pcm card0
    }
    file "/var/run/alsa.fifo"
    format "raw"
}

pcm.card0 {
    type hw
    card 0
}

ctl.card0 {
    type hw
    card 0
}

И при запуске системы прежде чем кто-то успеет пикнуть (попытаться открыть аудиовыход), создавать в
/var/run/alsa.fifo пайп, откуда и читать нашим визуализатором.

При этом возникает ряд неудобств. Первое: визуализатор должен быть запущен постоянно. Потому что если его закрыть, все программы, выводящие звук, упадут с SIGPIPE. Второе: упрямому софту (тому же MPD) придётся вправлять мозги: явно указывать устройство вывода:

audio_output {
    type        "alsa"
    name        "My ALSA Device"
    device      "rate44100Hz"
}

Потому что если device не указать, он в обход нашей иерархии открое hw:0,0. А ещё у него по умолчанию огромный буфер (16384 байт для 44100/16 — визуализатор сможет рендерить аж 5 FPS), причём опция buffer_time не документирована и пришлось лезть в исходники. 125000 оказалось достаточно.

Если кому-то интересно, мой визуализатор — обычный светодиодный индикатор уровня на передней панели системника. Показывает интеграл сигнала за буфер, поэтому дрыгается будь здоров. Не в паблике, потому что уровни записи очень сильно разнятся: среднестатистическая нормально сделанная фонограмма будет прыгать по 90% индикатора, Burn The Priest - Bloodletting заставит его светиться полностью 95% времени (такого себе не позволяют даже авторы музыки в стиле «бум-бум»), а какой-нибудь сериал в самом громком месте едва ли дотянет до половины. Индикатор, очевидно, должен быть логарифмеским, но тогда он не так сильно прыгает, и получается некрасиво. Пацаны, посоветуйте

Комментарии (3)
ReDetection
20 октября 2010, 22:37
S Q #1
может, подсчитывать среднее по модулю значение за некоторое небольшое время, а от него и плясать?
И они эту функцию задачу выполняют.
хм.
может, подсчитывать среднее по модулю значение за некоторое небольшое время, а от него и плясать? <quote>И они эту функцию задачу выполняют.</quote> хм.
themylogin
20 октября 2010, 23:21
S Q #2
Сигнал прямоугольный, интеграл пропорционален среднему. Естественно, всё по модулю.
Сигнал прямоугольный, интеграл пропорционален среднему. Естественно, всё по модулю.
Александр Сергеев
24 октября 2010, 09:05
S Q #3
Попробуй применить АРУ: автоматическую регулировку усиления.
Попробуй применить АРУ: автоматическую регулировку усиления.
Добавить комментарий
Войдите через  Доступные тэги: <b>, <i>, <s>, <u>, <a href="">, <img src="" /> (загрузить), <pre>, <quote>
Теги
1nsk Alternative E-Business Embedded GNU/GPL-софт HTML/CSS ICQ KDE last.fm Linux Linuxnsk Live Lyceum game Microsoft Motivator MySQL New Age P2P Party Photoshop PHP Python Qt4/C++ SEO Sibnet thelogin.ru Timelapse Web 2.0 Webdev Webstream Windows Wireless А я говорил! Авто Админ Алексеев Аниме Атмосфера Безобразие Бесплатный Wi-Fi Блоги Большой бизнес Боты Бред Бухать Бытовуха Велосипед Весна Вечер Взлом Винил Винтаж Вконтакте Вода Воспоминания Гетто Гламур Гопота Горский Графити Грузовик Дача Двор Девушки Девченки!!! Деньги Дизайн Дом Домофоны Драка Драки Еда Железо Животные Заведения общественного отдыха Задроты Затулинка Зима Игрушки Игры Идея Интересно Интернет Исследование История Казань Карикатура Квартира Класс Компьютеры Коромшук Коты КПК Кран Красиво Криминал Крыша Курение Лето Литература Лицей Лицей НГТУ Лохи Магнитофоны Маркса Мат Математика Машинный перевод Мегафон Менты Метро Мечты Мифы Мне стыдно Мобайл Можга МТС Музыка Мультикасса Мультики Мы помним Надписи Наука НГТУ Недвижимость Непоняятно Новосибирск Носители Ноутбуки Ночь Обидно Обман Образование Общественный транспорт Омск Опечатки Орфография Осень Парк Периферия Пиратство Плохо Погода Поезд Помойка Праздники Презрение Природа Провайдеры Программирование Протест Радиотехника Растения Реклама Религия и вера Ретро Рисунок Руины Рэп Салют Сервер Серверы Сервис Сериалы Скринкаст Скриншоты Смешно СМИ Снег Собаки Совет Софт Спам Спасём Россию Спецтранспорт Стоп-ляп Стройка Студяга Танцы ТВ Типа страх Трамваи Транс Транспорт Уважаю Ужас Умный дом Утро Филдрепорты Философия Форум ФПМИ Хикки Хостинг Цитатник Школа Школа 208 ЭГ Эксперимент Юго-Западный
Twitter 20-10-2010
Lorem Ipsum
Сосу хуй до нового года
Lorem Ipsum
Я порекомендовал Жанна Фриске Ramwoolf
Lorem Ipsum
В составе шоколадного чудо-йогурта был обнаружен эфедрин, постановлением правительства РФ он массово изьят из продажи.
Lorem Ipsum
Бойцы ФСКН прочёсывают горский микрорайон в поисках подпольных лабораторий по экстракции, арендодатели в панике
Lorem Ipsum
Пропали однокомнатные квартиры и шоколадный чудо-йогурт
Lorem Ipsum
Хм, BMW X4
Lorem Ipsum
"Хорошо, Владимир, сейчас посмотрю что есть, перезвоню" x4
Lorem Ipsum
Flashforward тоже хуетень :-(
Lorem Ipsum
Не получается в ответ шутить на стену :( никому
Lorem Ipsum
Тритий день кумаров. тяжко очень )))