Software Experimente mit Linux

Musikwiedergabe über PC und Mac

Beitragvon Daihedz » 15.12.2017, 07:16

dietert hat geschrieben: ...Bei mir ist gestern so ein AVB-Testkit von MiniDSP eingetroffen, aber wenn ich das hier lese, und die Sachen bei "frankl's stereo pages", vielleicht geht das ja auch mit Ethernet ohne die AVB Echtzeit-Erweiterung.

Aktuell:
Server <-> Slave -> Soundkarte -> Von dort Audio Stereo Standard über NF-Koax weiterverteilt.

AVB wird wohl die Zukunft sein, mit garantierten, niedrigen Laufzeiten im Falle von
Server <-> Slave1 -> Soundkarte1
Server <-> Slave2 -> Soundkarte2
Server <-> Slave_n <-> Soundkarte_n

Mir geht es hier vor allem darum, die prinzipielle Lösung mit der .asoundrc zu zeigen. D.h., dass das gesamte Audio, welches in einem PC (=Server) produziert werden kann, an zentraler Stelle in einen Netzwerkstream geführt werden kann. Ob es dann auch Stereo mittels Standard-Ethernet weitergehen kann, muss sich dann noch weisen.

Es würde mich sehr interessieren zu einem späteren Zeitpunkt zu lesen, was Du mit Deinem DSP-AVB-Kit für Erfahrungen gemacht hast.

Beste Grüsse.
Simon
Bild
Daihedz
Aktiver Hörer
 
Beiträge: 521
Registriert: 25.06.2010, 14:09

Beitragvon Daihedz » 31.12.2017, 15:15

Ein Hallo in die Runde der experimentierwilligen und -freudigen Audio-Linuxer

Eine ALSA-Konfigurationsdatei /home/xyz-user/.asoundrc machts möglich: Laustärkeeinstellung, RACE, LoCo und DRC einfach und standardmässig für sämtliche Audio-Inhalte eines Linux-Rechners ... dies, ohne Pulseaudio und/oder Jackd, sondern ausschliesslich innerhalb des (untersten) ALSA-Layers mittels einer Pipe und, in den folgenden Beispielen mittels brutefir sowie volrace hübsch aufbereitet.

Zwischenzeitlich habe ich denn etwas weiter mit dem "file"-plugin der ALSA-Konfigurationsdateien http://www.alsa-project.org/alsa-doc/al ... ugins.html experimentiert und zwei Varianten ausprobiert, welche sämtliche Audioinhalte eines Linux-Rechners, welchen Formats (an dieser Stelle nochmals ein Danke an Frank(l) für die entsprechenden Tips) und welcher Herkunft auch immer ganz nach meinem Gusto defaultmässig weiterverarbeiten.

In einer ersten Variante für meine Zweit-Stereoanlage (2-Kanal mit passiven Cabasse Sampan Lautsprechern Bild "cabasseqws4s.jpg" anzeigen.) erfolgt die Ausgabe mit 96kHz über eine nach wie vor sehr brauchbare RME HDSP Multiface I (im Bild unterhalb der Logitech Touch) und deren SPDIF-Schnittstelle an ein Wolfson WM8741-Evalboard als DA-Wandler (im Bild das 19"-Gehäuse über dem Verstärker).

pcm.!default {
   type file
   file "| chrt -f 92 taskset -c 1 sox --buffer 1024 -b %b -c 2 -D -e signed-integer -r %r -t raw - -b 64 -c 2 -e floating-point -t raw - \
      | chrt -f 93 taskset -c 1 sox --buffer 4096 -b 64 -c 2 -D -e floating-point -r 44100 -t raw - -t raw - vol -2dB \
      | chrt -f 94 taskset -c 1 sox --buffer 4096 -b 64 -c 2 -D -e floating-point -r 44100 -t raw - -t raw - rate -v -I 192000 \
      | chrt -f 95 taskset -c 1 brutefir -nodefault /home/privat/_brutefir/Cabasse/brutefir_config_cabasse \
      | chrt -f 96 taskset -c 1 volrace --buffer-length=8192 --fading-length=24000 --param-file=/home/privat/_frankl/volrace.save --verbose \
      | chrt -f 97 taskset -c 1 sox --buffer 4096 -b 64 -c 2 -D -e floating-point -r 192000 -t raw - -t raw - rate -v -I 96000 \
      | chrt -f 98 taskset -c 1 sox --buffer 4096 -b 64 -c 2 -D -e floating-point -r 96000 -t raw - -b 32 -c 2 -e signed-integer -t raw - \
      | chrt -f 99 taskset -c 1 playhrt --buffer-size=4096 --device=hdsp_analog --extra-bytes-per-second=-10 --extra-frames-out=24 --hw-buffer=8192 --loops-per-second=1000 --max-bad-reads=100000  --non-blocking-write --number-channels=2 --sample-format=S32_LE --sample-rate=96000 --sleep=1000000 --stdin --verbose --verbose"
   format "raw"
   slave {
      pcm null
   }
}

pcm.hdsp {
#   HDSP: No --mmap option in case of multiface!
#   HDSP: Set soundcard to correct sample frequency, otherwise no hardware access possible
    type hw
    card 1
}

ctl.hdsp {
    type hw
    card 1
}

pcm.hdsp_analog {
   type plug
    slave {
      pcm hdsp
   }
}

pcm.null {
   type null
}

Audio wird zunächst über 3x Sox nach 192kHz/64Bit/Float hochtransformiert und als Clipping-Schutz um 2dB heruntergerechnet. Danach passiert es Brutefir, wo mittels einer geeigneten Config LoCo und die Hörplatz-Korrektur gerechnet wird. Danach kommt Volrace, wo die gleitende Lautstärkeeinstellung und RACE erfolgen kann. Danach wird es mit 2x Sox Soundkarten- und DA-Wandlertauglich nach 96kHz/32Bit/SignedInteger (S32_LE) zurückgerechnet. Und von der Multiface in den DA-Wandler eingespiesen.

Eine zeite, etwas einfachere "All-In-One"-Lösung für den dergestalt audiophil aufgehübschten Laptop im Solo-Betrieb ohne die RME Multiface sieht folgendermassen aus (merci nochmals an Frank(l) für die Tips mit seiner eigenen Laptop-Version):

pcm.!default {
   type file
   file "| chrt -f 92 taskset -c 1 sox --buffer 1024 -b %b -c 2 -D -e signed-integer -r %r -t raw - -b 64 -c 2 -e floating-point -t raw - \
      | chrt -f 93 taskset -c 1 sox --buffer 4096 -b 64 -c 2 -D -e floating-point -r 44100 -t raw - -t raw - vol -2dB \
      | chrt -f 94 taskset -c 1 sox --buffer 4096 -b 64 -c 2 -D -e floating-point -r 44100 -t raw - -t raw - rate -v -I 192000 \
      | chrt -f 95 taskset -c 1 brutefir -nodefault /home/privat/_brutefir/Cabasse/brutefir_config_W500 \
      | chrt -f 96 taskset -c 1 volrace --buffer-length=8192 --fading-length=24000 --param-file=/home/privat/_frankl/volrace.save --verbose \
      | chrt -f 97 taskset -c 1 sox --buffer 4096 -b 64 -c 2 -D -e floating-point -r 192000 -t raw - -t raw - rate -v -I 96000 \
      | chrt -f 98 taskset -c 1 sox --buffer 4096 -b 64 -c 2 -D -e floating-point -r 96000 -t raw - -b 32 -c 2 -e signed-integer -t raw - \
      | chrt -f 99 taskset -c 1 playhrt --buffer-size=4096 --device=hw:0,0 --extra-bytes-per-second=-10 --extra-frames-out=24 --hw-buffer=8192 --loops-per-second=1000 --max-bad-reads=100000  --non-blocking-write --number-channels=2 --sample-format=S32_LE --sample-rate=96000 --sleep=1000000 --stdin --verbose --verbose"
   format "raw"
   slave {
      pcm null
   }
}

pcm.null {
   type null
}

In beiden Beispielen ist die Pipe mit
<Audioquelle> -> sox | sox | sox | brutefir | volrace | sox | sox | playhrt
etwas langfädig, aber für meine Experimentierzwecke absichtlich so gewählt.

Einfacher wäre
<Audioquelle> -> sox | brutefir | volrace | sox | playhrt
in welcher pro eine Instanz sox sämtliche Transformationen in einem Rutsch gerechnet würden

Ich möchte hiermit keine Lösungen anpreisen, sondern vor allem auf die fantastischen Möglichkeiten hinweisen, innerhalb des ALSA-Layers mittels einer geeigneten Konfigurationsdatei praktisch beliebige Dinge mit Audiomaterial anstellen zu können, dies ganz nach Bedarf und/oder defaultmässig automatisiert.

Altjahresgrüsse
Simon
Bild
Daihedz
Aktiver Hörer
 
Beiträge: 521
Registriert: 25.06.2010, 14:09

Vorherige

Zurück zu Computer-HiFi

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste