Wie mischen Sie den S / PDIF-Eingang und den PCM-Ausgang (um PCM und S / PDIF gleichzeitig zu hören) in Linux?

2294
Lissanro Rayen

Im alsamixer kann ich entweder PCM Out oder IEC958 In auswählen (das ist mein S / PDIF-Eingang), aber nicht beides. Gibt es eine Lösung?

Hinweis: Ich brauche Stereoton, daher ist die Auswahl von IEC958 In für einen Kanal und PCM Out für den anderen keine Option.

Ich habe sogar OSS4 ausprobiert, aber es ist dasselbe: Ich kann den S / PDIF-Eingang und den PCM-Ausgang nicht gleichzeitig hören. Ich habe das Gefühl, dass mir etwas fehlt, was offensichtlich ist, und ich würde mich über jede Hilfe freuen.

Der Grund, warum ich das will, ist folgender: Ich habe zwei Computer und benutze beide. Um jedoch den Sekundärcomputer voll ausnutzen zu können, muss ich die Sounds hören, ohne die Kanäle in alsamixer manuell umzuschalten (ja, ich weiß, es ist möglich, ein Skript zu schreiben und es einer Verknüpfung zuzuweisen, aber das löst mein Problem nicht).

2

1 Antwort auf die Frage

2
Lissanro Rayen

Ich habe endlich die Lösung gefunden. Ich habe viele Dinge ausprobiert, aber alle anderen Konfigurationen / Methoden gaben mir entweder einen schlechten Klang oder funktionierten in der Praxis ähnlich, waren jedoch komplexer. Ich werde hier die einfachste Lösung geben, die für mich funktioniert hat (und einige Alternativen erwähnen, die wahrscheinlich für einige Leute funktionieren werden). Ich benutze Debian-Testing. Einige Dinge, die ich erwähne, sind Debian-spezifisch. In anderen Distributionen sollte es nicht zu schwer sein.

Installieren Sie JACK

apt-get install qjackctl jackd2 

ALSA konfigurieren

Führen Sie den folgenden Befehl aus: sudo apt-get install libasound2-plugins Hier ist meine /etc/asound.conf, Sie können den Inhalt in ~ / .asoundrc eingeben - aber /etc/asound.conf ist besser, da es systemweit ist. Wie Sie sehen können, ist es relativ einfach. Das Gerät "all" ist für JACK vorgesehen und! Default - für alle Nicht-JACK-Anwendungen. Es ist wichtig, dass die Standardeinstellung vom Typ plug und nicht von der Buchse ist. Andernfalls werden alle möglichen seltsamen Probleme auftreten. Sie können meine asound.conf problemlos an Ihre Bedürfnisse anpassen - es ist hoffentlich naheliegend, Audiogeräte und Kanäle hinzuzufügen oder zu entfernen. Wenn nicht, lesen Sie die Dokumentation ( http://alsa-project.org/main/index.php/Asoundrc ).

Das einzige Problem in meiner asound.conf ist, dass der analoge Eingang (normalerweise Mikrofon) nicht als Mono verwendet werden kann, wenn Sie einen analogen Stereo-Eingang wie ich angegeben haben. Eine andere merkwürdige Sache ist, dass ich eine Menge XRUNs in JACK bekomme, aber sie beeinflussen [i] nicht die Klangqualität in meinem Fall, daher ignoriere ich sie.

WICHTIGER HINWEIS: Wenn Ihre Soundkarte Hardware mischen kann, benötigen Sie keinen! Standardabschnitt mit dem ALSA JACK-Plug-In, um den Ton von Nicht-JACK-Anwendungen zu hören. Wenn Sie sich nicht sicher sind, wozu Ihre Karte geeignet ist, führen Sie Folgendes aus:

cat /proc/asound/card0/pcm*/info | grep count 

Wenn mindestens einige Geräte mehr als ein Subgerät haben, kann Ihre Karte mit der Hardware gemischt werden. Wenn auf Ihren Standardkanälen Hardware-Mixing verfügbar ist, können Sie den! Default-Abschnitt aus meinem Beispiel für die Datei asound.conf entfernen.

Alternative ALSA-Konfiguration (NICHT empfohlen!) Es ist möglich, asound.conf ohne ALSA JACK-Plug-In zu schreiben. In meinem Fall wurden jedoch trotz sehr großer buffer_size (manchmal wenige Artefakte pro Minute) schlechte Sounds mit häufigen Klick-Artefakten an den Eingängen erzeugt, manchmal ein Artefakt pro paar Minuten), auch nach dem Upgrade auf den PF-Kernel (später erkläre ich, was es ist). Kein Wunder, denn JACK muss Ihre Audiogeräte so direkt wie möglich verwenden. Dies ist hier nicht der Fall. Wenn Sie dies trotzdem versuchen möchten, lesen Sie meine /etc/asound.conf ohne ALSA JACK-Plug-In ( http://science.su/stuff/linux/sound/jack/without_alsa_jack_plugin/asound.conf)). Es ist komplexer als das erste, aber ich habe versucht, es so lesbar wie möglich zu machen. Vergewissern Sie sich vor dem Ausprobieren, dass Sie in JACK und asound.conf die gleichen Werte für period_size und perioden verwenden. Ich lasse diese alternative Konfiguration als Beispiel, von der ich lernen kann (Sie können sehen, wie verschiedene Typen in der asound.conf verwendet werden, wie Mono auf Stereo hochgemischt wird usw.).

Konfigurieren Sie JACK

Hier ist ein Screenshot meiner Einstellungen in qjackctl . Die wichtigsten Einstellungen sind "Echtzeit", "Eingabegerät" und "Ausgabegerät". Alles andere ist nur ein Beispiel für ein funktionierendes Setup.

Upgrade auf einen besseren Kernel

Es ist eine gute Idee, zu versuchen, auf den RT-Kernel zu migrieren (der Vanilla-Kernel wird möglicherweise eine ähnliche Echtzeitunterstützung enthalten. In absehbarer Zukunft müssen Sie jedoch einen gepatchten Kernel verwenden, wenn Sie eine akzeptable Audio-Latenz ohne Artefakte wünschen, insbesondere von den Audioeingaben). ). Um den RT-Kernel in Debian Testing oder höher zu testen, müssen Sie einfach diesen Befehl ausführen (ich nehme an, Sie benötigen einen NVidia-Treiber; wenn nicht, installieren Sie stattdessen den Treiber, den Sie benötigen):

sudo apt-get install linux-image-3.4-trunk-rt-amd64 linux-headers-3.4-trunk-rt-amd64 nvidia-kernel-dkms 

Wenn der RT-Kernel für Sie funktioniert, können Sie den Rest dieser Nachricht überspringen. Mit dem RT-Kernel hören Sie einen perfekten Ton mit niedriger Latenz. Leider funktionieren viele NVidia-Karten nicht mit RT-Kerneln, und meine war eine davon (GeForce GTX 295). Daher konnte ich RT nicht verwenden.

Hinweis: Mit Vanilla-Kernel habe ich einige Male pro Minute in analogen und digitalen Eingängen mit Klick-artigen Artefakten gestoßen, selbst mit relativ großen buffer_size - dies war nicht akzeptabel, so dass der Vanilla-Kernel für meinen Zweck nicht funktionierte. Wenn es für Sie funktioniert und Sie mit relativ hoher Audio-Latenz (Puffer) in Ordnung sind, die Sie für akzeptablen Sound tolerieren müssen, müssen Sie Ihren Kernel offensichtlich nicht ändern.

Der NVidia-Treiber in Debian enthält bereits Modifikationen, um mit dem 3.4-RT-Kernel zu arbeiten. Sie müssen ihn nicht ändern. Leider kann dies zu einem schwarzen Bildschirm anstelle Ihrer grafischen Benutzeroberfläche führen. In diesem Fall müssen Sie den RT-Kernel deinstallieren und etwas anderes ausprobieren, beispielsweise den PF-Kernel ( http://pf.natalenko.name ). Der Autor stellt keine deb-Dateien zur Verfügung, aber Links zu Websites von jemandem, die dies tun ( http://kernel.night-leshiy.ru ) - diese Seite ist in nicht-englischer Sprache verfasst, aber in welcher Sprache auch immer, es ist nicht erforderlich, sie zu verstehen Laden Sie einfach deb-Dateien mit dem pf-Kernel und seinen Kopfzeilen herunter und installieren Sie sie mit:

sudo dpkg -i linux-*-pf*.deb 

Der PF-Kernel enthält den BFS-Scheduler. In meiner Xeon-basierten Quad-Core-Workstation mit 8 Hardwarethreads (das Betriebssystem sieht das als 8 CPUs aus) reduzierte er die Latenzzeiten von Echtzeitprozessen (wie JACK) von Hunderten von Millisekunden auf wenige Millisekunden (in meinem Fall weniger als 2 ms). Dies ist natürlich ein sehr schlechtes Ergebnis, wenn Sie mit einem RT-Kernel (mit Worst-Case-Latenzzeiten von Echtzeitprozessen im Bereich von 10 bis 30 Mikrosekunden ) vergleichen, aber VIEL besser als der Vanillekern. Persönlich verwende ich 128 buffer_size mit 2 Perioden - das ist ~ 5ms Latenz; In meinem Fall reicht dies aus, um Artefakte im Klang nach wenigen Teststunden zu vermeiden. Mit dem RT-Kernel sollten noch bessere Ergebnisse möglich sein.

BFS ist nicht der beste Scheduler, aber es funktioniert viel besser als der Scheduler im Vanilla-Kernel, wenn Sie eine geringe Latenzzeit wünschen und der RT-Kernel nicht für Sie geeignet ist. Falls Sie ohne RT-Kernel möglichst kleine Latenzzeiten wünschen, gibt es eine verbesserte BFS mit O (1) -Komplexität anstelle von O (n) und wahrscheinlich sogar einen besseren Scheduler - RIFS. Sie finden sie hier ( http://code.google.com/p/rifs-scheduler/downloads/list ), wenn Sie einen eigenen Kernel erstellen möchten. Wenn ja, installieren Sie das Kernel-Paket und lesen Sie dieses Howto ( http://vanilja.org/kernel ).

Hoffe, dass meine Erfahrung jemandem nützlich sein wird.