Как я могу создать виртуальную звуковую карту pulseaudio в Linux без звукового оборудования?

735
DhP

У меня есть докер под управлением Alpine Linux. Аппаратного аудиоустройства нет вообще.

Мне удалось заставить работать pulaudio, казалось бы, нормально под пользователем.

Я экспериментировал с попыткой заставить PA функционировать как виртуальную звуковую карту с целью потоковой передачи аудио из докера с помощью ffmpeg. Но пока без удачи. И я еще не сталкивался с примерами, в которых не использовался компьютер, на котором не было аудиооборудования.

Моя главная задача - заставить VICE (x64, эмулятор Commodore 64) правильно использовать «пульс» вместо «фиктивного». Я скомпилировал VICE с «--with-pulse», и «pulse» действительно отображается в меню настроек.

Хотя, когда я переключаюсь на «пульс» вместо «фиктивного», x64 жалуется, что не может его инициализировать, а затем отключает собственный вывод звука.

пактл и пакмд похоже, нет проблем с управлением сервером pulseaudio.

Я пробовал следующее (а также модуль-труба)

$ pacmd load-module module-null-sink sink_name=VirtSoundCard sink_properties=device.description=Virtual-Sound-Card  $ pacmd set-default-sink VirtSoundCard 

Хотя пока без удачи. Так что надеюсь услышать от кого-нибудь, кто может знать, как это можно сделать, пока я провожу остаток ночи, пытаясь.

«Default.pa», который я использую: atms: http://bitbucket.org/duckhuntpr0/pyvice/src/pyvice_base/src/fs/home/pyvice/default.pa.

1

1 ответ на вопрос

1
dirkt

Pulseaudio может создавать различные приемники (то, что вы называете «виртуальными звуковыми картами», но приемники предназначены для вывода, источники для ввода, и они также связаны с реальным звуковым оборудованием).

Взгляните на список модулей, который включает в себя приемники и примеры синтаксиса. У вас есть выбор между использованием RTP / SDP, ROAP .

Вы также можете получить доступ к серверу pulseaudio на хосте через собственный procotol, в этом случае вам не нужно запускать сервер pulseaudio в док-клиенте.

До сих пор не было необходимости использовать ffmpeg. Если вы действительно хотите использовать ffmpeg, вы также можете создать нулевой приемник и подключить его к источнику монитора ffmpeg. Это ближе всего подходит к вашей идее о «виртуальной звуковой карте», но это также наименее эффективная альтернатива.

Наконец, я не совсем понимаю, почему вы должны запускать VICE (эмулятор) внутри образа докера - поскольку это уже эмулятор, вы можете просто запустить его на хосте; нет опасности, что эмулируемая программа C64 сделает что-то плохое.

Спасибо за советы. Я попробую их сегодня. Что касается того, почему используется докер; Это так, что мне не нужно связываться с моей собственной системой. И чтобы другим было проще в настройке. Идея состоит в том, чтобы сделать простое базовое решение для наличия (в моем случае, Python) ИИ, играющего в Commodore. Следовательно, почему у него есть порт telnet к монитору VICE, и vnc (пока) открыт. И ffmpeg был бы полезен для записи любой "NEAT" эволюции, для удаленной машины это желание. Надеемся, что все это заставит его работать в течение продолжительных сессий, не слишком много мешая с персональным компьютером хоста или пользователя. :) DhP 5 лет назад 0
_ "и они также связаны с реальным звуковым оборудованием" _, я думаю, в этом и заключается проблема. Ура снова DhP 5 лет назад 0
Я не уверен, понимаю ли я второй комментарий, но в случае, если моя формулировка была неясной: есть источники и приемники, которые связаны с реальным звуковым оборудованием (модули имеют ALSA в их названии), и есть источники и приемники, которые не «т. Я не вижу никаких проблем с этим (за исключением правильной терминологии). dirkt 5 лет назад 0
Да, вы поняли это правильно, я думаю. Модули, которые я пробовал, даже перечислены в разделе ** Драйверы устройств **, когда нет реального устройства. Каким-то образом я пропустил это. Так что я думаю, что использование то есть петлевого сетевого устройства в сочетании с вашими советами по протоколам (например, использование netcat) может быть лучшим решением DhP 5 лет назад 0
Устройство обратной связи ALSA (если вы это имеете в виду) действительно отстой, я попробовал это. И вы понесете много задержек. Устройство обратной связи `lo` не поможет вам выбраться из контейнера; в конце концов, вы хотите связаться с вашим хостом, чтобы он воспроизводил аудио. Я не уверен, почему вы не пытаетесь использовать какие-либо другие решения, которые я перечислил? Но это твоя проблема ... dirkt 5 лет назад 0
Нет не относится к сетевому устройству lo. Я думаю, что добился определенных успехов, используя: `load-module module-null-sink sink_name = VirtSoundCard load-module module-rtp-send source = VirtSoundCard.monitor loop = True injit__toto_suspend = всегда`, в _default.pa_. При использовании _paplay_ (с wav-файлом) я теперь могу видеть через _pamon_, что что-то происходит через него. Хотя pulseaudio, по-видимому, отключается через некоторое время простоя, что делает _paplay_ и _pamon_ более невозможным для соединения. Поэтому я пытаюсь понять, как предотвратить это в данный момент. DhP 5 лет назад 0
Хотя, используя сеть _lo_, я думаю, что ffmpeg может взять ее из сети lo как _input_ для ffmpeg, так как тогда это RTP. И сделать любую (пере) кодировку через ffmpeg. DhP 5 лет назад 0
Я думаю, что проблема решена :) Еще раз спасибо! https://imgur.com/a/pViCBPf DhP 5 лет назад 0

Похожие вопросы