Wie kann ich unter Linux eine virtuelle Pulseaudio-Soundkarte ohne Audio-Hardware erstellen?

1159
DhP

Ich habe einen Docker, auf dem Alpine Linux läuft. Es gibt überhaupt kein Hardware-Audiogerät.

Ich habe es geschafft, dass pulseaudio unter dem Benutzer scheinbar einwandfrei läuft.

Ich habe mit dem Versuch experimentiert, PA als virtuelle Soundkarte zu nutzen, mit der Absicht, das Audiosignal mit Hilfe von ffmpeg vom Docker zu streamen. Aber bisher ohne Glück. Und ich habe noch keine Beispiele gefunden, bei denen es keinen Computer gab, dem keine Audio-Hardware fehlte.

Mein Hauptanliegen ist es, dass VICE (x64, The Commodore 64-Emulator) "Puls" anstelle von "Dummy" richtig verwendet . Ich habe VICE mit '--with-pulse' kompiliert, und 'pulse' erscheint tatsächlich im Einstellungsmenü.

Wenn ich jedoch anstelle von "dummy" auf "pulse" umstelle, beschwert sich x64, dass es nicht initialisiert werden kann, und deaktiviert dann die eigene Soundausgabe.

pactl und pacmd scheinen kein Problem damit zu haben, den pulseaudio-Server zu steuern.

Ich habe folgendes probiert (und auch Modulpipe)

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

Obwohl bisher ohne Glück. Ich hoffe, von jedem zu hören, der vielleicht weiß, wie es geht, während ich den Rest der Nacht damit versuche, es zu versuchen.

Das 'default.pa' benutze ich atm: https://bitbucket.org/duckhuntpr0/pyvice/src/pyvice_base/src/fs/home/pyvice/default.pa

1

1 Antwort auf die Frage

1
dirkt

Pulseaudio kann verschiedene Senken erzeugen (was Sie als "virtuelle Soundkarten" bezeichnen, aber Senken dienen der Ausgabe, Quellen dienen der Eingabe, und sie werden auch mit echter Soundhardware verknüpft).

Schauen Sie sich die Modulliste mit den Senken und Syntaxbeispielen an. Sie haben die Wahl zwischen RTP / SDP und ROAP .

Sie können auch über das native Procotol auf einen Pulseaudio-Server auf dem Host zugreifen. In diesem Fall müssen Sie im Docker-Client keinen Pulseaudio-Server ausführen.

Bisher war keine Verwendung erforderlich ffmpeg. Wenn Sie wirklich verwenden möchten ffmpeg, können Sie auch eine Nullsenke erstellen und deren Monitorquelle mit verbinden ffmpeg. Das kommt Ihrer Vorstellung einer "virtuellen Soundkarte" am nächsten, ist aber auch die am wenigsten effiziente Alternative.

Schließlich verstehe ich nicht wirklich, warum Sie VICE (einen Emulator) in einem Docker-Image ausführen müssen - da es bereits ein Emulator ist, können Sie es einfach auf dem Host ausführen. Es besteht keine Gefahr, dass das emulierte C64-Programm etwas Schlechtes macht.

Danke für die Tipps. Ich werde sie heute ausprobieren. Warum ein Docker? Ist so, dass ich mich nicht mit meinem eigenen System herumschlagen muss. Und um anderen die Einrichtung zu erleichtern. Die Idee ist, eine einfache Basislösung für einen (in meinem Fall Python) KI zu schaffen, der Commodore spielt. Daher hat es einen Telnet-Port zum Monitor von VICE und ist vnc (vorerst) geöffnet. Und ffmpeg wäre nützlich, um jede "NEAT" -Evolution aufzunehmen, die von einem entfernten Rechner gewünscht wird. Dies alles hoffentlich für lange Sitzungen, ohne den Host- oder den Personalcomputer des Benutzers zu sehr zu belästigen. :) DhP vor 5 Jahren 0
_ "und sie werden auch mit echter Sound-Hardware verknüpft" _, ich denke, da liegt das Problem dann. Prost nochmal DhP vor 5 Jahren 0
Ich bin mir nicht sicher, ob ich den zweiten Kommentar verstehe, aber für den Fall, dass meine Phrasierung unklar war: Es gibt Quellen und Senken, die mit echter Soundhardware verknüpft werden (die Module haben ALSA im Namen), und es gibt Quellen und Senken, die sich nicht verbinden t Ich sehe kein Problem damit (außer um die Terminologie richtig zu machen). dirkt vor 5 Jahren 0
Ja, du hast es richtig verstanden, denke ich. Die Module, die ich ausprobiert habe, sind sogar unter ** Gerätetreiber ** aufgeführt, wenn kein echtes Gerät vorhanden ist. Irgendwie hatte ich das vermisst. Ich denke also, das Loopback-Netzwerkgerät in Kombination mit Ihren Protokolltipps (z. B. mit netcat) könnte die beste Lösung sein DhP vor 5 Jahren 0
Das ALSA-Loopback-Gerät (wenn Sie das meinen) ist wirklich scheiße, ich habe es ausprobiert. Und Sie werden viel Zeit verlieren. Das Loopback-Netzwerkgerät "lo" wird Ihnen nicht dabei helfen, den Container zu verlassen. Schließlich möchten Sie Ihren Host erreichen, um Audio abzuspielen. Ich bin nicht sicher, warum Sie nicht versuchen, eine der anderen Lösungen zu verwenden, die ich aufgeführt habe. Aber es ist dein Problem ... dirkt vor 5 Jahren 0
Nein, es wurde auf das Netzwerkgerät verwiesen. Ich denke, ich habe einige Fortschritte gemacht mit: `load-module module-null-sink sink_name = VirtSoundCard load-module module-rtp-send source = VirtSoundCard.monitor loop = True inhibit_auto_suspend = always`, in _default.pa_. Wenn ich _paplay_ (mit einer wav-Datei) verwende, kann ich jetzt durch _pamon_ sehen, dass etwas durch sie läuft. Obwohl Pulseaudio nach einer Weile im Leerlauf heruntergefahren zu sein scheint, können sich _paplay_ und _pamon_ nicht mehr verbinden. Also versuche ich herauszufinden, wie ich das im Moment verhindern kann. DhP vor 5 Jahren 0
Durch die Verwendung des _lo_-Netzwerks denke ich, dass ich ffmpeg aus dem lo-Netzwerk als _input_ für ffmpeg nehmen kann, da es dann RTP ist. Und mache jede (Neu-) Kodierung durch ffmpeg. DhP vor 5 Jahren 0
Ich denke Problem gelöst :) Nochmals vielen Dank! https://imgur.com/a/pViCBPf DhP vor 5 Jahren 0