.asoundrc
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
In der Standardinstallation von Ubuntu übernimmt normalerweise ein Soundserver die Aufgabe, die verschiedenen Soundkanäle zu koordinieren. Dies funktioniert jedoch nicht immer problemlos und zufriedenstellend.
Eine Alternative stellt die direkte Nutzung von ALSA dar. ALSA ist bei jeder Standardinstallation bereits auf dem System vorhanden; es müssen also keine Pakete nachinstalliert werden.
Einführung¶
Die versteckte Datei ~/.asoundrc im Heimverzeichnis des Benutzers ist eine Steuerdatei für ALSA und dessen Plugins. Bei einem Mehrbenutzersystem kann man statt dessen die Datei /etc/asound.conf benutzen, welche für alle Benutzer gilt. Anlegen muss man diese Dateien nur dann, wenn die Soundkarten von ALSA erkannt wurde, die Soundausgabe jedoch unbefriedigend ist. Das ist z.B dann der Fall, wenn die verwendete Karte kein Hardwaremixing unterstützt, was unter anderem sehr häufig bei Onboard-Soundlösungen vorkommt. Hardwaremixing bedeutet, dass die Soundkarte fähig ist, mehrere Klangquellen gleichzeitig wiederzugeben.
Die Datei kann mit einer Vielzahl an Plugins versehen werden, welche vielerlei Funktionen erfüllen. Dabei lassen sich im Prinzip alle Plugins miteinander kombinieren, solange man keine unsinnigen Angaben macht und das Audio-Signal-Routing in sich schlüssig ist. Die Datei erstellt und bearbeitet man mit einem Editor [1].
Hinweis:
Damit durch die Direktiven in der .asoundrc keine Konflikte entstehen, müssen andere Programme zum Soundmanagement deaktiviert, und ein allein auf ALSA basierendes Soundsystem eingerichtet werden. Insbesondere PulseAudio (standardmäßig installiert) sollte vorher vollständig entfernt werden.
Initialisierung¶
Damit eine Soundkarte von ALSA sauber erkannt wird, muss sie in der .asoundrc bekanntgegeben werden; man definiert damit ein virtuelles Gerät:
pcm.snd_card { type hw card 0 device 0 } ctl.snd_card { type hw card 0 device 0 }
"snd_card" ist der Name des Gerätes. Der Name kann beliebig (Zeichen A bis z, der _ und alle Zahlen) gewählt werden, er dient als Alias für diese Soundkarte. "card 0" bedeutet, dass die als erste von ALSA gefundene Soundkarte im Rechner mit diesem Alias verknüpft wird. Sollten sich mehrere Soundkarten im Rechner befinden, oder kommen neuen Audio-USB-Geräte hinzu, so wird durchnummeriert: die zweite Karte ist als "card 1", die dritte als "card 2", usw. einzutragen.
Digital¶
SPDIF¶
Will man statt des Standard-Ausganges (dies ist in der Regel die analoge Ausgangsbuchse "Line Out", oben durch "device 0" festgelegt) den digitalen Ausgang aka SPDIF nutzen, so muss man dies nur in der Geräte-Definition mitteilen. Dazu muss die passende Geräte-Nummer ermittelt werden. Dies tut man in einem Terminal [2] mit dem Befehl "aplay -l" (die Befehls-Ausgabe wurde gekürzt):
$ aplay -l Karte 0: ICH5 [Intel ICH5], Gerät 0: Intel ICH [Intel ICH5] Karte 0: ICH5 [Intel ICH5], Gerät 4: Intel ICH - IEC958 [Intel ICH5 - IEC958]
Man sieht, dass "Gerät 4" den SPDIF-Ausgang darstellt; erkenntlich ist dies an der Bezeichnung "IEC958". Wenn man nun "device 4" statt des oben verwendeten "device 0" hineinschreibt, so verwendet ALSA den SPDIF-Anschluss.
HDMI¶
Wieder wird "aplay -l" aufgerufen:
$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: NVidia [HDA NVidia], device 0: STAC92xx Analog [STAC92xx Analog] Subdevices: 0/1 Subdevice #0: subdevice #0 card 1: NVidia_1 [HDA NVidia], device 3: HDMI 0 [HDMI 0] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: NVidia_1 [HDA NVidia], device 7: HDMI 0 [HDMI 0] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: NVidia_1 [HDA NVidia], device 8: HDMI 0 [HDMI 0] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: NVidia_1 [HDA NVidia], device 9: HDMI 0 [HDMI 0] Subdevices: 1/1 Subdevice #0: subdevice #0
Bekommt man nur eine Nummer für das Device, so kann man sich glücklich schätzen, und es direkt in die .asoundrc
eintragen. Wenn allerdings, wie in oben genannten Beispiel, eine ganze Reihe von Devices auftaucht, so hat man leider keine andere Wahl, als alle durch zu probieren. (Bei Nvidia-Karten könnte eventuell "device 9" eine gute Wahl sein).
Mixing¶
Häufigstes Einsatzszenario ist das Software-Mixing. Verfügt eine Soundkarte über keinen Hardware-Mixer (und das ist meistens der Fall), so müssen die verschiedenen Audio-Signale mittels Software zusammengemischt werden. Dies geschieht über das "dmix"-Plugin. Gleichzeitig wird definiert, dass alle Programme über das "dmix"-Plugin ihren Sound ausgeben. Dies geschieht mittels des "default"-Gerätes, welches alle Soundkanäle auf sich lenkt.
### Alles in einer Zeile nach dem Zeichen # ist ein Kommentar, und wird von ALSA ignoriert. # Das dmix-Plugin wird definiert. pcm.dmixer { type dmix ipc_key 1024 ipc_perm 0666 # Andere Benutzer können ebenfalls dmix gleichzeitig nutzen slave.pcm "snd_card" slave { ### buffer_size kann bei Problemen der jeweiligen Karte angepasst werden. period_time 0 period_size 1024 buffer_size 4096 ### bei Störungen kann die Konvertierung auf die Rate 44100 eingeschaltet werden. # rate 44100 ### einige Soundkarten benötigen das exakte Datenformat (zB ice1712) # format S32_LE ### Verfügbare Formate: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE S24_BE U24_LE U24_BE ### S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BE ### IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM ### Anzahl channels muss mit den bindings übereinstimmen channels 2 } bindings { 0 0 1 1 } } # Das dsnoop-Plugin, welches es erlaubt, mehrere Programme gleichzeitig aufnehmen zu lassen. pcm.dsnooper { type dsnoop ipc_key 2048 ipc_perm 0666 slave.pcm "snd_card" slave { period_time 0 period_size 1024 buffer_size 4096 # bei Störungen kann die Konvertierung auf die Rate 44100 eingeschaltet werden. # rate 44100 # einige Soundkarten benötigen das exakte Datenformat (zB ice1712) # format S32_LE ### Anzahl channels muss mit den bindings übereinstimmen channels 2 } bindings { 0 0 1 1 } } # Dies definiert unser Fullduplex-Plugin als Standard für alle ALSA-Programme. pcm.duplex { type asym playback.pcm "dmixer" capture.pcm "dsnooper" } pcm.!default { type plug slave.pcm "duplex" }
Man kann sehr schön erkennen, wie die Weiterleitung funktioniert: das default-Gerät nimmt alle Sound-Kanäle entgegen und leitet sie an das "duplex"-Gerät weiter. Dieses wiederum verteilt sie an "dmixer" für die Wiedergabe und an "dsnooper" für die Aufnahme. Das Gerät "dmixer" leitet die Kanäle direkt in das "dmix"-Plugin, welches das eigentliche Zusammenmischen übernimmt.
OSS¶
Es gibt noch viele Programme, die zur Sound-Ausgabe nur OSS (Open Sound System) unterstützen. Damit auch diese Programme ihren Sound über ALSA und das "dmix"-Plugin laufen lassen können, muss noch ein virtuelles OSS-Gerät definiert werden:
# DSP wird simuliert und benutzt das dmix-Plugin. pcm.dsp0 { type plug slave.pcm "duplex" } # OSS-Steuerung für dsp0 (falls es benötigt wird...) ctl.dsp0 { type plug slave.pcm "snd_card" } # OSS-Steuerung für dsp0 (falls es benötigt wird...) ctl.mixer0 { type plug slave.pcm "snd_card" }
Ein gängiges Programm, welches nur OSS unterstützt, ist Audacity. Schon seit 7.04 unterstützt Audacity ALSA. Auch viele Browser-Plugins kommunizieren nur mit der OSS-Schnittstelle.
JACK¶
Direkt¶
Um eine Schnittstelle zu jack (Jack Audio Connection Kit) zu bekommen, muss die .asoundrc folgendermaßen ergänzt werden:
pcm.jackplug12 { type plug slave { pcm "jack12" } } pcm.jack12 { type jack playback_ports { 0 alsa_pcm:playback_1 1 alsa_pcm:playback_2 } capture_ports { 0 alsa_pcm:capture_1 1 alsa_pcm:capture_2 } }
Programme, welche nur eine ALSA-Schnittstelle, aber keine direkte jack-Unterstützung haben, können nun über das "jackplug12"-Gerät mit jack kommunizieren. In diesem konkreten Fall wurden die Mono-Hardware-Kanäle 1 und 2 zum Stereo-Gerät "jackplug12" gebündelt.
Die benötigte Bibliothek libasound_module_pcm_jack.so ist ab Lucid im Paket libasound2-plugins, welches natürlich installiert werden muss.
Via virtueller Soundkarte¶
Man kann auch eine virtuelle Soundkarte benutzen um ALSA mit jack kommunizieren zu lassen. Der Vorteil ist die Persistenz der Verbindung, der Nachteil der erhöhte Ressourcenverbrauch. Zuerst muss man die virtuelle Soundkarte via Kernelmodul laden:
modprobe snd-aloop pcm_substreams=2
Dies erzeugt eine Soundkarte mit zwei Kanälen. Eine passende .asoundrc sieht zum Beispiel so aus:
# playback PCM device: using loopback subdevice 0,0 pcm.amix { type dmix ipc_key 1234 slave.pcm "hw:Loopback,0,0" } # capture PCM device: using loopback subdevice 0,1 pcm.asnoop { type dsnoop ipc_key 1235 slave.pcm "hw:Loopback,0,1" } # duplex device combining our PCM devices defined above pcm.aduplex { type asym playback.pcm "amix" capture.pcm "asnoop" } # for jack alsa_in and alsa_out: looped-back signal at other ends pcm.ploop { type plug slave.pcm "hw:Loopback,1,1" } pcm.cloop { type dsnoop ipc_key 1236 slave.pcm "hw:Loopback,1,0" } # default device pcm.!default { type plug slave.pcm "aduplex" }
Danach werden die Kanäle für jack erzeugt:
alsa_in -j cloop -dcloop -q1 & alsa_out -j ploop -dploop -q1 &
Diese können nun mit jack verbunden werden. Der Parameter q
legt die Qualität des Resamplings fest (Werte 0
bis 4
): je höher, desto besser, es braucht aber bei besserer Qualität signifikant mehr Rechenzeit.
Multiple virtuelle Soundkarten¶
Will man mehrere virtuelle Soundkarten erstellen (um zum Beispiel ein übersichtliches Routing in jack zu haben), so muss dies beim Laden des Moduls geschehen:
modprobe snd-aloop index=1,2,3 enable=1,1,1 pcm_substreams=8,2,6 id=xine,mplayer,vdr
Dies erstellt drei virtuelle Soundkarten, die erste davon mit dem Namen "xine" und 8 Kanälen, eine zweite mit dem Namen "mplayer" und zwei Kanälen, und eine dritte mit dem Namen vdr und sechs Kanälen. Die Nummern der Indizes richten sich natürlich nach den eigenen Gegebenheiten. Die Namen für die virtuellen Soundkarten sind in diesem Beispiel nicht willkürlich gewählt, denn die Programme neigen dazu (beim Spulen und/oder Umschalten) bei direkter Konnektierung mit jack xruns zu verursachen.
Phonon¶
Damit Phonon ein Gerät in der Liste der verfügbaren Ausgabegeräte anzeigt, muss folgendes in die .asoundrc eingefügt werden.
pcm.phonon { type plug slave.pcm "duplex" # Muss an die eigene Konfiguration angepasst werden hint { show on description "DMix" # Anzeigename in den Phonon-Einstellungen } }
Surround-Sound¶
Viele Signalquellen sind mittlerweile mehrkanalig. Sie alle werden unter dem Begriff "Surround-Sound" zusammengefasst. Man ist überein gekommen, zur Beschreibung eine "x.y"-Notation zu verwenden. Dabei stellt "x" die Anzahl der ungefilterten Kanäle dar, und "y" ggf. den Subwoofer-Kanal. Beispiel: "5.1" hat insgesamt 6 Kanäle ("Vorne links", "Vorne rechts", "Hinten links", "Hinten rechts", "Zentrum" und einen "Bass"). Ein Stereo-Signal hat demzufolge die Notation "2.0".
Vordefinierte Kanäle¶
ALSA bietet für viele Soundkarten bereits vordefinierte Surround-Geräte an. Ob die eigene Karte unterstützt wird, kann man einfach testen:
speaker-test -D surround51 -c 6
Damit werden nacheinander alle sechs Kanäle (Option "-c 6") über ein 5.1 Surround-Gerät (Option "-D surround51") angesprochen. Weitere vordefinierte Geräte heißen analog "surround40", "surround71", etc. Man muss beachten, dass der Punkt in der normalen Notation weggelassen wird.
Manuelle Festlegung¶
Da beim Surroundsound mehr Kanäle als bei Stereo verwendet werden, müssen die o.g. Definitionen angepasst werden. Beim "dmixer"-Plugin geschieht dies einfach durch eine Erweiterung der Kanal-Bindung. Beim "dsnooper"-Plugin macht dies nur Sinn, wenn die Karte tatsächlich mehr als zwei physikalische Kanäle für eine Aufnahme besitzt, und diese auch gleichzeitig nutzen kann.
bindings { 0 0 1 1 2 2 3 3 4 4 5 5 }
Dieses Beispiel gilt für ein 5.1-System. Bei einigen Soundchips sind die Kanäle intern anders nummeriert, so dass man hier evtl. umsortieren muss! Es wird definiert, dass die Karte 6 Kanäle hat, und dass Eingang Nummer x auf Ausgang Nummer x geleitet wird. Alternativ kann auch folgende Definition verwendet werden:
pcm.dmix51 { type dmix ipc_key 1024 slave { pcm "hw:0,0" rate 44100 channels 6 period_time 0 period_size 1024 buffer_time 0 buffer_size 4096 } }
wobei die Adresse des PCM-Gerätes statt "hw:0,0" auch "hw:0,1" o.ä. sein kann - dies hängt von der verwendeten Hardware ab.
Downmix¶
Mittels der .asoundrc kann man ein 5.1-Signal auf Stereo heruntermischen (5.1 auf 2.0):
pcm.51to20 { type route slave.pcm surround51 # hier wurde das vordefinierte Gerät "surround51" verwendet # falls "dmixer" entsprechend konfiguriert wurde, kann man ihn als slave.pcm angeben slave.channels 6 ttable.0.0 1 # front links -> links ttable.1.1 1 # front rechts -> rechts ttable.2.0 0.707 # hinten links -> links, Dämpfung 3dB ttable.3.1 0.707 # hinten rechts -> rechts, Dämpfung 3dB ttable.4.0 0.5 # zentrum -> links, Dämpfung 6dB ttable.4.1 0.5 # zentrum -> rechts, Dämpfung 6dB ttable.5.0 0.5 # basskanal -> links, Dämpfung 6dB ttable.5.1 0.5 # basskanal -> rechts, Dämpfung 6dB }
Nun kann man z.B. XINE das oben definierte "51to20"-Gerät als Audio-Ausgang zuweisen. Der Surround-Sound wird dadurch sauber auf ein Stereo-Signal heruntergemischt. Die erste Zahl nach ttable steht dabei für die Eingangskanäle (0 bis 5), die zweite Zahl steht für den Ausgangskanal (0 und 1 für links und rechts), die dritte Zahl steht für die Dämpfung des Eingang-Signals.
Upmix¶
Analog zum Downmix lässt sich ein Stereosignal auf ein 5.1-System hochmischen:
pcm.20to51 { type route slave.pcm surround51 slave.channels 6 ttable.0.0 1 ttable.1.1 1 ttable.0.2 1 ttable.1.3 1 ttable.0.4 0.5 ttable.1.4 0.5 ttable.0.5 0.5 ttable.1.5 0.5 }
Die beiden Kanäle des Stereosignals werden hierdurch lediglich kopiert und auf die Kanäle des 5.1-Systems verteilt.
Up- oder Downmix als Standard festlegen¶
Um den Up- oder Downmix als Standard festzulegen muss lediglich das Fullduplex-Plugin angepasst werden, um das vorher definierte Up- oder Downmix-Gerät zu verwenden:
Downmix:
pcm.duplex { type asym playback.pcm "51to20" capture.pcm "dsnooper" }
Upmix:
pcm.duplex { type asym playback.pcm "20to51" capture.pcm "dsnooper" }
Filter¶
Man kann virtuelle Geräte auch als Filter definieren. Hierbei ist es egal, welcher Filter verwendet wird. Eine große Auswahl an Filtern bietet LADSPA 🇬🇧 , welche sich problemlos in Linux einbinden lassen.
pcm.lowpass { type ladspa slave.pcm "plughw:0" path "/usr/lib/ladspa" plugins [ { label lpf input { controls [ 150 ] } } ] } pcm.test { type plug slave.pcm "lowpass" }
Das Beispiel definiert ein Gerät, welches einen Low-Pass-Filter einbindet; also nur Frequenzen unter 150 Hz passieren lässt. Angesprochen wird es über das zweite Gerät "test". Natürlich kann man das gefilterte Signal auch an einen zuvor definierten "dmixer" leiten. Dann muss beim Gerät "lowpass" das slave.pcm auf "plug:dmixer" zeigen.
Man muss immer darauf achten, dass der gewählte LADSPA-Filter den Anforderung genügt. Viele der Filter sind nur mono ausgelegt. Ist ein passender mehrkanaliger Filter nicht verfügbar, so muss man mehrere Mono-Filter in der .asoundrc mit dem passenden Routing von Hand einpassen.
Hinweis:
Leider hat Ubuntu in neueren Versionen (zumindest in 10.10) keine LADSPA-Unterstützung in ALSA einkompiliert. Dieser Post beschäftigt sich mit dem Problem.
Beispiele¶
Softwaremixing¶
Stereo¶
Alle Stereo-Kanäle werden auf das Standard-Gerät gelenkt, und dort in ein 44,1KHz Summensignal gewandelt. Aufnahme und Wiedergabe funktionieren nur Stereo.
pcm.snd_card { type hw card 0 device 0 } ctl.snd_card { type hw card 0 device 0 } pcm.dmixer { type dmix ipc_key 1024 ipc_perm 0666 slave.pcm "snd_card" slave { period_time 0 period_size 1024 buffer_size 4096 rate 44100 channels 2 } bindings { 0 0 1 1 } } pcm.dsnooper { type dsnoop ipc_key 2048 ipc_perm 0666 slave.pcm "snd_card" slave { period_time 0 period_size 1024 buffer_size 4096 rate 44100 channels 2 } bindings { 0 0 1 1 } } pcm.duplex { type asym playback.pcm "dmixer" capture.pcm "dsnooper" } pcm.!default { type plug slave.pcm "duplex" }
5.1 Surround¶
Alle Surround-Signale werden auf das Standard-Gerät gelenkt, und dort in ein 44,1KHz Summensignal gewandelt. Die Wiedergabe erfolgt in Surround, die Aufnahme bleibt stereo. Zusätzlich wird ein Gerät namens "upmix" erzeugt, welches Stereo-Soundquellen auf die 5.1-Boxen verteilt.
pcm.snd_card { type hw card 0 device 0 } ctl.snd_card { type hw card 0 device 0 } pcm.dmixer { type dmix ipc_key 1024 ipc_perm 0666 slave.pcm "snd_card" slave { period_time 0 period_size 1024 buffer_size 4096 rate 44100 channels 6 } bindings { 0 0 1 1 2 2 3 3 4 4 5 5 } } pcm.dsnooper { type dsnoop ipc_key 2048 ipc_perm 0666 slave.pcm "snd_card" slave { period_time 0 period_size 1024 buffer_size 4096 rate 44100 channels 2 } bindings { 0 0 1 1 } } pcm.duplex { type asym # Wenn man nur Stereo-Signale hat, so kann man alle upmixen lassen: # playback.pcm "upmix" # Falls nicht, so wählt man den normalen Weg playback.pcm "dmixer" # und spricht den upmix direkt an; zB "aplay -D upmix sound.wav" # In den allermeisten Fällen wird die Aufnahme nur Stereo sein: capture.pcm "dsnooper" } pcm.!default { type plug slave.pcm "duplex" } pcm.upmix { type route slave.pcm dmixer slave.channels 6 ttable.0.0 1 ttable.1.1 1 ttable.0.2 1 ttable.1.3 1 ttable.0.4 0.5 ttable.1.4 0.5 ttable.0.5 0.5 ttable.1.5 0.5 }
Kanal-Splitting¶
Bei einer 8-Kanal-Soundkarte werden 4 unabhängige Stereo-Ausgänge definiert. Diese müssen vom Player direkt angesprochen werden, ansonsten zieht das Standard-Gerät alles an sich. Eingebaut ist eine Ratekonversion auf 96KHz.
pcm.snd-card { type hw card 0 device 0 } ctl.snd-card { type hw card 0 device 0 } pcm.dmixer { type dmix ipc_key 1024 ipc_perm 0666 slave.pcm "snd-card" slave { period_time 0 period_size 1024 buffer_size 4096 rate 96000 channels 8 } bindings { 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 } } pcm.!default { type plug slave.pcm "dmixer" } pcm.stereo1 { type plug slave { pcm "dmixer" channels 8 } ttable.0.0 1 ttable.1.1 1 } pcm.stereo2 { type plug slave { pcm "dmixer" channels 8 } ttable.0.2 1 ttable.1.3 1 } pcm.stereo3 { type plug slave { pcm "dmixer" channels 8 } ttable.0.4 1 ttable.1.5 1 } pcm.stereo4 { type plug slave { pcm "dmixer" channels 8 } ttable.0.6 1 ttable.1.7 1 }
Permanenter Upmix¶
Hier wird ein permanenter Upmix realisiert, der gleichzeitige Wiedergabe von 5.1 und Stereo-Signalen erlaubt. Zudem sind die Werte für den Soundchip CMI8738-MC6 angepasst. Außerdem wurde ein Lautstärke-Regler definiert (Software Master), der auf alle Kanäle zugleich wirkt.
### asoundrc for CMI8738-MC6 # 6 channel dmix pcm.dmix6 { type dmix ipc_key 1024 ipc_key_add_uid false ipc_perm 0660 slave { pcm "hw:0,1" rate 48000 channels 6 period_time 0 period_size 1024 buffer_time 0 buffer_size 5120 } } # upmixing pcm.ch51dup { type route slave.pcm dmix6 slave.channels 6 ttable.0.0 1 ttable.1.1 1 ttable.0.2 1 ttable.1.3 1 ttable.0.4 0.5 ttable.1.4 0.5 ttable.0.5 0.5 ttable.1.5 0.5 } pcm.duplex { type asym playback.pcm "ch51dup" capture.pcm "hw:0" } pcm.!default { type softvol slave.pcm "duplex" control { name "Software Master" card 0 } } # for aoss pcm.dsp "duplex" pcm.dsp1 "duplex"
Unabhängige Stereokanäle¶
Speziell für den Soundchip "ice1712" (genauer: eine "M-Audio Delta 1010LT") ist diese Konfiguration geeignet. Natürlich muss mittels des Mixers envy24control die Karte ebenfalls auf 96kHz eingestellt worden sein.
pcm.ice { type hw card 0 device 0 } ctl.ice { type hw card 0 device 0 } pcm.dmixer { type dmix ipc_key 1024 ipc_perm 0666 slave.pcm "ice" slave { period_time 0 period_size 1024 buffer_size 4096 rate 96000 format S32_LE channels 8 } bindings { 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 } } pcm.dsnooper { type dsnoop ipc_key 2048 ipc_perm 0666 slave.pcm "ice" slave { period_time 0 period_size 1024 buffer_size 4096 rate 96000 format S32_LE channels 8 } bindings { 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 } } pcm.duplex { type asym playback.pcm "dmixer" capture.pcm "dsnooper" } pcm.!default { type softvol slave.pcm "plug:dmixer" control { name "Master" card 0 } } pcm.dsp "duplex" pcm.dsp1 "duplex" pcm.stereo1 { type plug slave { pcm "duplex" channels 8 } ttable.0.0 1 ttable.1.1 1 } pcm.stereo2 { type plug slave { pcm "duplex" channels 8 } ttable.0.2 1 ttable.1.3 1 } pcm.stereo3 { type plug slave { pcm "duplex" channels 8 } ttable.0.4 1 ttable.1.5 1 } pcm.stereo4 { type plug slave { pcm "duplex" channels 8 } ttable.0.6 1 ttable.1.7 1 }
Unabhängige Stereokanäle¶
Speziell für die Terratec Producer Phase26 ist diese Konfiguration geeignet. Die Karte sollte auf 16/48 eingestellt sein!
pcm.snd_card { type hw card USB1648 device 0 } ctl.snd_card { type hw card USB1648 device 0 } pcm.dmixer { type dmix ipc_key 1024 ipc_perm 0666 slave.pcm "snd_card" slave { period_time 0 period_size 1024 buffer_size 4096 rate 48000 format S32_LE channels 6 } bindings { 0 0 1 1 2 2 3 3 4 4 5 5 } } pcm.!default { type plug slave.pcm "dmixer" } pcm.all { type plug slave.pcm "dmixer" slave.channels 6 route_policy duplicate } pcm.stereo1 { type plug slave { pcm "dmixer" channels 6 } ttable.0.0 1 ttable.1.1 1 } pcm.stereo2 { type plug slave { pcm "dmixer" channels 6 } ttable.0.2 1 ttable.1.3 1 } pcm.stereo3 { type plug slave { pcm "dmixer" channels 6 } ttable.0.4 1 ttable.1.5 1 }
Mögliche Fehlerquellen¶
Anzahl der Kanäle falsch¶
Wenn mit channels bzw. bindings mehr Kanäle angegeben sind, als tatsächlich vorhanden sind, gibt es keine Ausgabe bzw. keine Aufnahme. Bei Mikrofoneingängen ist z.B. manchmal nur ein Kanal vorhanden.
Rate falsch¶
Klingt die Musik, wie bei einer schlecht geputzten CD, kann es sein, dass die Ausgabe mit einer Rate von 44100 Hz Abhilfe für die gegebene Soundkarte verschafft. Andere Soundkarten verlangen eine Rate von 48000 Hz. Will man z.B. die Rate für das Gerät "dmixer" umstellen, so geht man wie oben beschrieben vor. Alternativ kann man auch eine direkte Zuweisung vornehmen:
pcm.dmixer.slave.rate 44100
.asoundrc wird ignoriert¶
In seltenen Fällen wird die Datei vom Soundsystem ignoriert. Die Ursache ist unklar, hängt jedoch mit der verwendeten Hardware zusammen. Zudem tritt das Problem nur unter Ubuntu auf, andere Distributionen scheinen nicht betroffen. Es kann sein, dass speziell bei Ubuntu einige Konfigurationsdateien von Alsa verändert wurden, was bei bestimmter Hardware zu Problemen führt. Beim Autor war dies unter Karmic und einer HDA ATI SB Karte der Fall. Nach einem Austausch der Karte gegen eine mit einem ICE1712-Chip funktionierte alles wieder wie gewünscht. Wahrscheinlich würde auch helfen, ALSA aus den Quellen selbst zu bauen; getestet wurde dies jedoch nicht.
Links¶
Asoundrc 🇬🇧 - ALSA Wiki
Erweiterbares grafisches Skript, um die asoundrc einfach zu ändern
Sound - Übersichtsseite dieses Wikis