[О блоге] [наверх] [пред] [2022-06-22 22:26:11+03:00] [4c55b5fba23f7cb0d7e7484731a34721d94cab5a]
Темы: [multimedia][tip]

Использую virtual_oss

После обновления FFmpeg-а, mpv перестал собираться. Видимо API первого
сильно поменялся без обратной совместимости. А я использую очень старый
mpv, так как возвращение OSS4 поддержки в нём у меня выдавало сплошные
шумы (adbf57283a55d771f4647a1f00e9b6ef336c9bf2).

Снова взял последнюю версию mpv из git-а. Обломался из-за того, что оно
теперь требует Xpresent, которого у меня нет в Xorg-е. Но, благо, это
всего лишь несколько последних коммитов. Откатился чуть назад и... звук
в USB наушниках на работе появился!

Вернулся домой и снова шумы. А разница в том, что моя домашняя звуковуха
переводится в bitperfect режим (acbd6a153fbb4fb375be43d87a2ad055b80681e3).
Я вру: там всё же не шумы, а жуткие искажения, что очевидно говорит о
разных форматах кодирования звука. Но это я обнаружил не сразу, так как
когда поставил WavPack файл, то всё ok, а когда поставил видео файл, то
всё стало плохо. Поставил MP3 -- тоже плохо. В выводе mpv заметил что в
первом случае он выводит в 16-бит формате, а в двух других в 32-бит,
который выдаёт декодер MP3.

Добавление --af=format=s16, форсируя выдачу в 16-бит формате, помогло.
Но у меня всё равно применяется не совсем 100% bitperfect, а с
включёнными vchan-ами OSS-а, которые в идеале бы надо отключать чтобы
полностью убрать возможность resampling-а и прочего.

Добиться вывода звука без vchan-ов у меня с mpv не вышло. Уверен, что
причина в том, что звуковуха, судя по dmesg-у, умеет только 24-bit S-LE,
а mpv 24-бит не поддерживает формат. Помню что уже встречался с этим
прежде.

Решил попробовать virtual_oss. С ходу мне эта софтина очень не
понравилась тем, что в man-е нет описания даже обязательных параметров.
А описания многих других оставляют желать лучшего. Но это просто старая
версия virtual_oss в портах, когда оно ещё даже не переехало
разрабатываться на GitHub. Взял последнюю версию с него -- собралась без
проблем на моей не новой системе.

В общем с его помощью я сделал отдельное виртуальное OSS DSP устройство,
в которое выводит звук mpv и другие программы, а оно уже выводит это в
звуковую карту, опционально делая resampling:

    virtual_oss -S -Q 0 -C 2 -c 2 -r 48000 -b 24 -s 8ms \
        -R /dev/null -P /dev/dsp4.0 -d dsp10

    [оставить комментарий]