From 4c55b5fba23f7cb0d7e7484731a34721d94cab5a Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 22 Jun 2022 22:26:11 +0300 Subject: [PATCH] =?utf8?q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83?= =?utf8?q?=D1=8E=20virtual=5Foss?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit После обновления 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 -- 2.48.1