Evaluation von Jack aus audiophiler Sicht

Antworten
Nova Auralis
Aktiver Hörer
Beiträge: 109
Registriert: 27.04.2015, 13:43
Wohnort: Rhein-Sieg-Kreis

Evaluation von Jack aus audiophiler Sicht

Beitrag von Nova Auralis »

Ein gespanntes "Hallo" in die Runde,

ich bin aktuell meinen Falt-/Wiedergaberechner am Vorbereiten und daher mit ALSA, Jack Audio und BruteFIR am Experimentieren. Nun stehe ich vor einer Grundsatzentscheidung: Entweder ich schlage den Weg über Jack Audio ein und erleichtere mir somit einen möglichen zukünftigen Umstieg auf moderne und noch mehr von PulseAudio abhängige Distributionen, oder aber belasse das System so minimalistisch wie möglich direkt über "plain" ALSA.

Vorhin habe ich dazu einmal einen Vergleichstest zwischen der Wiedergabe von Audacious über Jack (Abtastrate 192 kHz, Periodengröße 8192 Bytes, Anzahl Perioden 4) und eben direkt über ALSA (Resampling: beste Sinc-Interpolation, Bittiefe/Format S32_LE, Abtastrate 192 kHz, Periodengröße 8192 Bytes, Anzahl Perioden 4) gemacht. Ich muss dazusagen, dass ich wohl eher noch kein trainiertes Goldohr bin, ich meine aber eigentlich nicht unerhebliche Änderungen im Klangbild festzustellen. :|

Da man sich jedoch schnell auch einen vormachen kann, wenn man bereits teilweise voreingenommen an etwas herangeht, würde ich gerne einmal von euren Erfahrungen oder Meinungen diesbezüglich hören. :cheers: Ich selbst frage mich nämlich seit Anfang an, was es genau mit der Abtastrate bei Jack auf sich hat. Es steht zwar nirgendwo etwas zu verwendetem Resampling geschrieben, aber wie soll Jack dann ohne solches das Software-Mixing händeln? Schaue ich mir außerdem unter /proc/asound beim entsprechenden Ausgabegerät die hw_params an, dann steht da bei einer 44,1 kHz Wiedergabe z.B. folgendes:

Code: Alles auswählen

access: MMAP_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 192000 (192000/1)
period_size: 8192
buffer_size: 32768
Wenn ich ferner in Jack die Abtastrate auf beispielsweise 8192 kHz beschränke, fehlen der Wiedergabe jegliche Höhen. Was lässt dies nun einen anderen Schluss zu, als dass Jack scheinbar Resampling betreibt?

Geht man jetzt genau hiervon aus, stellt sich mir logischerweise die Frage, welcher Algorithmus dabei verwendet wird? Betrachte ich im Vergleich zum Resampling mit ALSA die Prozessorauslastung, so liegt diese mit Jack bei etwa einem Zehntel! :shock: Der oben genannte hochqualitative Resampler aus dem Paket libsamplerate wird also sicher nicht verwendet. :?

Hinzu kommt noch, dass Jack in keinem Wort mit guter Klangqualität beworben wird, sondern nur mit niedrigen Latenzen sowie dem komfortablen Routing zwischen unterschiedlichen Audio-Anwendungen.

Wäre natürlich schön, wenn ihr mir meine Bedenken austreiben könntet, bitte dann aber begründet! :lol:

Beste Grüße,
Jannis
Bild
frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

Nova Auralis hat geschrieben: Hinzu kommt noch, dass Jack in keinem Wort mit guter Klangqualität beworben wird, sondern nur mit niedrigen Latenzen sowie dem komfortablen Routing zwischen unterschiedlichen Audio-Anwendungen.
Hallo Jannis,

ich würde sagen, wenn Du weder niedrige Latenzen brauchst (das ist vielleicht bei einem Rechner in einem Studio-Aufnahme-Setup oder in einem Live-Setup interessant) noch ganz viele jack-kompatible Audio-Anwendungen verbinden willst, dann brauchst Du auch kein jack. Ich habe auch noch nie gesehen, dass jemand die audiophile Qualität als Grund angeführt hätte, um jack zu nutzen.

Auf meinen Audio-Rechnern ist jack nicht installiert, und auch kein pulseaudio, ecasound oder Ähnliches.

Falls Du Spaß daran hast, mit Deinem Linux-Rechner in Bezug auf Klangqualität etwas zu experimentieren, könnte dieser Beitrag Dich interessieren (und vielleicht auch einige Dinge die zuvor im gleichen Thread diskutiert wurden).

Viele Grüße,
Frank
Bild
Nova Auralis
Aktiver Hörer
Beiträge: 109
Registriert: 27.04.2015, 13:43
Wohnort: Rhein-Sieg-Kreis

Beitrag von Nova Auralis »

Hallo Frank,

ich danke dir für deine Antwort! Ich bewundere deine Projekte sehr, für mich als Linux-Anfänger wäre das aber wohl vorerst zu kompliziert und damit das Risiko der Frustration einfach zu hoch.

Ferner liegt bei mir aktuell vermutlich noch andernorts größeres Potenzial verborgen, z.B. sollte ich mich sicherlich irgendwann einmal an die Optimierung der Stromversorgung meines Rechners wagen oder mein Betriebssystem in einer RAMDisk booten.

Eine erste Lösung auf meinem Rechner sollte im Groben folgendes bieten:
- Kompatibilität zu einer modernen (unabgespeckten) Distribution wie beispielsweise OpenSUSE oder KaOS, welche mir nämlich auch gleichzeitig als alltägliches Betriebssystem dienen können muss.
- Jegliche Audio-Signale, stammen sie nun vom Audioplayer (Audacious), vom Videoplayer (VLC), oder vom Browser (Firefox), müssen stets korrekt gefaltet über die jeweils unterschiedlichen Geräte (M-Audio Delta Audiophile 192, Amanero Combo384 1 + 2) ausgegeben werden, welche dann alle getrennten Wege meiner geplanten vollaktiven Lautsprecher ansteuern.

Weil ich mit den oben genannten Distributionen also höchstwahrscheinlich gezwungen bin mich mit PulseAudio zu arrangieren, ist die Frage, wie sich dabei am besten BruteFIR integrieren ließe? Eine Möglichkeit des Einklinkens von BruteFIR wäre ja über die Jack I/O Module, aber ginge dies stattdessen ebenfalls über die ALSA I/O Module, während die Software als allererstes auf PulseAudio zugreift? Könnte man hier etwas entsprechendes über load-module module-alsa-sink device=... in der /etc/pulse/default.pa konfigurieren?

Beste Grüße,
Jannis
Bild
frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

Hallo Jannis,

wenn Du einen Rechner aufsetzen willst mit graphischer Benutzeroberfläche und der nicht nur die Audiowiedergabe machen soll, dann benötigst Du natürlich auch pulseaudio (oder etwas Äquivalentes) und Du wirst auch nicht erwarten, dass bei dem Setup die ultiimative Klangqualität zu erreichen ist. Da alle Klänge zusammengemischt werden sollen, ist auch ein Resamplen auf eine gemeinsame Rate nicht zu vermeiden. Aber Du kannst natürlich versuchen, unter den gegebenen Nebenbedingungen ein möglichst gutes Ergebnis zu erhalten.

Bei einem Linux-System würde ich nicht anstreben, das ganze System im RAM laufen zu lassen. Der RAM ist besser für die Anwendungen zu verwenden, oder eventuell zum Laden von Musikdateien vor dem Abspielen. Die Dateien, die regelmäßig gelesen werden, sind ohnehin im Cache (also RAM) und Dateien, die Du selbst beim Arbeiten am Rechner erstellst, sollten natürlich eh auf der Platte gespeichert werden. Du kannst etwas optimieren, indem regelmäßig beschriebene Dateien (Log-Dateien) auf RAM-Disks gelegt werden (Du könntest schauen, wie voyage-Linux das macht, oder voyage sogar als Grundlage nehmen (das ist ein sehr schlankes Debian und alles kann nachinstalliert werden)).

In diesem Beitrag hat Forent Martin mal beschrieben, wie man nur mit ALSA alle Klänge über ein Filterprogramm, das zum Beispiel brutefir verwendet, mittels eines Loop-Devices umlenken kann.

Viele Grüße,
Frank
Bild
Nova Auralis
Aktiver Hörer
Beiträge: 109
Registriert: 27.04.2015, 13:43
Wohnort: Rhein-Sieg-Kreis

Beitrag von Nova Auralis »

Hallo und danke Frank,

mir ist bewusst, dass ich um Kompromisse (wie sowieso überall im Leben) nicht umher komme. Ich verzichte gut und gerne auf die letzten paar Prozent Klangqualität, wenn ich dafür ein komfortables und einfach zu bedienenden Betriebssystem beibehalten kann. Nur unnötigen Qualitätsverlust durch beispielsweise einen schlechten Resampler möchte ich natürlich vermeiden. Außerdem möchte ich ja auch noch zukünftig etwas zum Optimieren haben, sonst wird mir nachher langweilig. :cheers:

Was eine RAMDisk-Variante von Linux anbetrifft, so würde ich dies trotzdem gerne umsetzen. Ich sehe dabei keine wirklichen Nachteile, nur potenzielle Vorteile. So kann ich damit meine SSD von unnötigen Schreibzugriffen entlasten, kann mein System nicht "kaputt-spielen" bzw. immer nur funktionierende Zustände wieder zurück auf die SSD sichern, und habe nicht zuletzt einen großen Performancezuwachs. Da ich 16 GB Arbeitsspeicher besitze, bleibt danach ferner sicherlich noch genügend Speicherplatz übrig, ebenfalls gesamte aktuell wiedergegebene Musikalben in den RAM zu kopieren, womit ich dann auch den möglichen Klangvorteil habe.
frankl hat geschrieben:In diesem Beitrag hat Forent Martin mal beschrieben, wie man nur mit ALSA alle Klänge über ein Filterprogramm, das zum Beispiel brutefir verwendet, mittels eines Loop-Devices umlenken kann.
Danke für den Hinweis auf Martins Beitrag. Ich verstehe noch nicht so richtig, wieso Martin hier einen so umständlichen Ansatz mit Loopback verfolgt, während in den meisten anderen BruteFIR-Konfigurationen stets nur Direktzugriffe auf ALSA-Geräte zu sehen sind. Gehen solche Konfigurationen (z.B. hier) ausschließlich von Convolving-PCs aus, welche das Audio Signal über einen Eingang empfangen, die entsprechenden Faltungen erledigen, um das Ganze dann wieder über einen bzw. mehrere Ausgänge rauszuschicken? Würde eine solche Konfiguration in meinem Fall scheitern, weil der Zugriff auf ALSA-Geräte normalerweise exklusiv geschieht, sprich immer nur eine Software zur selben Zeit darauf zugreifen kann?

Für den Fall, dass meine Vermutungen stimmen, hatte ich folgende Überlegungen zu einem vielleicht möglichen Trick angestellt. Was wäre, wenn ich meine Wiedergabe-Software stattdessen dazu anhalte auf ein virtuelles Gerät (dmix) zuzugreifen, welches wiederum als "Slave" einen Dummy-Ausgang (HDMI) nutzt? Auch BruteFIR wird dabei im Eingang auf dieses virtuelle Gerät konfiguriert, die Ausgänge können dann ungestört über die korrekten ursprünglich geplanten ALSA-Geräte laufen. Hier eine Konfiguration, wie in etwa ich mir das vorstelle:

Ausschnitt aus der asound.conf:

Code: Alles auswählen

pcm.VIA_PCI {
	type hw
	card 2
	device 0
}

pcm.Dummy_HDMI {
	type hw
	card 0
	device 3
}

pcm.dmixer {
	type dmix
	ipc_key 1024
	slave.pcm "Dummy_HDMI"
	slave {
		periods 2
		period_size 4096
		buffer_size 8192
		rate 96000
		format S32_LE
		channels 2
	}
	bindings {
		0 0
		1 1
	}
}

pcm.!default {
	type plug
	slave.pcm "dmixer"
}
Ausschnitt aus der .brutefir_config:

Code: Alles auswählen

input "left_in", "right_in" {
        device: "alsa" { device: "pcm.!default"; ignore_xrun: true; };
};

output "left_out", "right_out" {
        device: "alsa" { device: "pcm.VIA_PCI"; ignore_xrun: true; };
};
Beste Grüße,
Jannis
Bild
Antworten