Alsa, asound. conf, konfiguration
Alsa, asound. conf, konfiguration
Hallo
ich habe jetzt kein debian, ich habe hier einen raspberry mit picoreplayer, also ein tinycorelinux, das sollte für mein ALSA Problem aber kein Unterschied machen.
Ich möchte gerne den DAC auf dem raspberry mit einem Monosignal versorgen anstelle des gelieferten Stereosignals. Nur fehlt mir eine vollständige Beschreibung der Syntax bzw. der ALSA Plugins, welches Plugin, welches Schlüsselwort was bewirkt, welche Parameter welche Bedeutung haben. Das Ubuntu Wiki hilft hier auch nicht weiter weil nur exemplarisch einige Beispiele genannt sind die das volle Verständnis für das ALSA Konzept nicht vermitteln. für englische Anleitungen dieser Komplexität fehlt mir die sprachliche Kompetenz.
Kann mir jemand weiterhelfen und mir erklären wie der Audiostream in ALSA behandelt und welche parameter, Schlüsselworte in die asound.conf einzutragen sind die beiden Kanäle vor dem Eingang zum DAC zu summieren.
Ich habe eine Lösung über die Betaoptionen des Picoreplayers, aber bevor ich das anwende möchte ich die Zusammenhänge verstehen.
Ideal wäre ein Link zu einer vollständigen deutschsprachigen Erklärung von ALSA. Die Seite www.alsa-project.org/ überfordert mich sprachlich.
ich habe jetzt kein debian, ich habe hier einen raspberry mit picoreplayer, also ein tinycorelinux, das sollte für mein ALSA Problem aber kein Unterschied machen.
Ich möchte gerne den DAC auf dem raspberry mit einem Monosignal versorgen anstelle des gelieferten Stereosignals. Nur fehlt mir eine vollständige Beschreibung der Syntax bzw. der ALSA Plugins, welches Plugin, welches Schlüsselwort was bewirkt, welche Parameter welche Bedeutung haben. Das Ubuntu Wiki hilft hier auch nicht weiter weil nur exemplarisch einige Beispiele genannt sind die das volle Verständnis für das ALSA Konzept nicht vermitteln. für englische Anleitungen dieser Komplexität fehlt mir die sprachliche Kompetenz.
Kann mir jemand weiterhelfen und mir erklären wie der Audiostream in ALSA behandelt und welche parameter, Schlüsselworte in die asound.conf einzutragen sind die beiden Kanäle vor dem Eingang zum DAC zu summieren.
Ich habe eine Lösung über die Betaoptionen des Picoreplayers, aber bevor ich das anwende möchte ich die Zusammenhänge verstehen.
Ideal wäre ein Link zu einer vollständigen deutschsprachigen Erklärung von ALSA. Die Seite www.alsa-project.org/ überfordert mich sprachlich.
Re: Alsa, asound. conf, konfiguration
Bei der Dokumentation kann ich nicht weiterhelfen, aber wie man Kanäle mischen oder vervielfältigen kann weiß ich so ungefähr.
Allerdings musst du nicht einmal so viel Aufwand treiben – es genügt, wenn du das plug-Plugin bei der Aufnahme zwischenschaltest, das notwendige Formatkonvertierungen macht, in deinem Fall also den Downmix von Stereo auf Mono. Ich hab das hier einmal schnell mit einer virtuellen Loopback-Soundkarte von Alsa durchgespielt. Eine normale Stereoaufnahme, ohne plug-Plugin würde man zB so machen
(Sampleformat, Samplerate und Anzahl der Kanäle müssen vom Audiogerät unterstützt werden)
Um das plug-Plugin zu verwenden muss man nur plughw statt hw schreiben und in diesem Fall bei den Parametern die Zahl der Kanäle auf 1 setzen
Das setzt natürlich voraus, dass man Aufnahmegerät und Parameter in der Anwendung, mit der man aufnehmen will, einstellen kann, aber nachdem manche Hardware mit manchen Sampleraten Probleme hat bzw. gleich nur wenige Sampleraten und Formate unterstützt, sollte das ohnehin der Fall sein.
Allerdings musst du nicht einmal so viel Aufwand treiben – es genügt, wenn du das plug-Plugin bei der Aufnahme zwischenschaltest, das notwendige Formatkonvertierungen macht, in deinem Fall also den Downmix von Stereo auf Mono. Ich hab das hier einmal schnell mit einer virtuellen Loopback-Soundkarte von Alsa durchgespielt. Eine normale Stereoaufnahme, ohne plug-Plugin würde man zB so machen
Code: Alles auswählen
$ arecord -D hw:Loopback,1 -c 2 -r 48000 -f S16_LE recordstereo.wav
Um das plug-Plugin zu verwenden muss man nur plughw statt hw schreiben und in diesem Fall bei den Parametern die Zahl der Kanäle auf 1 setzen
Code: Alles auswählen
$ arecord -D plughw:Loopback,1 -c 1 -r 48000 -f S16_LE recordmono.wav
Re: Alsa, asound. conf, konfiguration
Danke. allerdings begreife ich deinen Vorschlag nicht, die Konvertierungsoptionen benötige ich nicht der DAC schafft 24/192. So sieht meine asound.conf ohne Änderung nach der Installation des picoreplayer aus.
wenn ich auf mono umstelle sieht sie so aus:
Es funktioniert, aber ich weis eben nicht warum, geschweige das ich notwendige/wünschenswerte weitere Eigenschaften konfigurieren könnte.
Code: Alles auswählen
# default - Generated by piCorePlayer
pcm.!default {
type plug
slave.pcm "hw:0,0"
}
#---ALSA EQ Below--------
ctl.equal {
type equal;
controls "/home/tc/.alsaequal.bin"
library "/usr/local/lib/ladspa/caps.so"
}
pcm.plugequal {
type equal;
slave.pcm "plughw:1,0";
controls "/home/tc/.alsaequal.bin"
library "/usr/local/lib/ladspa/caps.so"
}
pcm.equal {
type plug;
slave.pcm plugequal;
}
Code: Alles auswählen
# mono - Generated by piCorePlayer
pcm.!default {
type route
slave.pcm "plughw:1,0"
ttable {
0.0 1
1.1 1
}
}
Re: Alsa, asound. conf, konfiguration
Entschuldige, irgendwie habe ich gleichzeitig noch etwas anderes im Kopf gehabt. Deswegen hat nicht alles zum Thema gepasst...
Jedenfalls passt mein Vorschlag nicht ganz zu deinem Problem.
Das hier
ist aber schnell erklärt:
default ist der Name des „Geräts“, das Alsaanwendungen per default verwenden, mit pcm.default definiert man also worüber die Ausgabe laufen wird. Das ! stellt lediglich sicher, dass damit zuvor bestehende Definitionen, zum Beispiel von der (recht komplexen) systemweiten Konfiguration von Alsa, überschrieben werden.
Das Plugin route erlaubt es die Eingangskanäle beliebig auf die Ausgangskanäle zu verteilen und mit slave.pcm wird festgelegt, dass die Ausgabe weitergeleitet wird an das erste Gerät der zweiten Soundkarte (hw:1,0 - bei Alsa beginnt die Nummerierung bei 0) und das plug sorgt für notwendige Formatkonvertierungen.
Letztere braucht man öfter als man vielleicht erwartet, weil selbst wenn die Soundkarte zum Beispiel 24 oder gar 32 Bit Sampletiefe beherrscht, das noch lange nicht heißt, dass sie auch alle Varianten davon (Little Endian/Big Endian und die verschiedenen Kodierungen davon) und kleinere beherrscht.
ttable schließlich sind die Parameter von route, die festlegen welche Kanäle wohin kommen. Dabei lauten die Zeilen
bei dir wird also der linke Kanal (0.0) unverändert (Faktor 1) am linken Ausgangskanal und der rechte (1.1) unverändert am rechten Kanal ausgegeben
(klingt imho nicht ganz nach dem was du wolltest )
(Übrigens ginge es nur um Vertauschungen, könnte man die auch ohne eigenes Plugin mit bindings erreichen, aber das mir nebenbei, weil es nichts mit dem zu tun hat was du willst)
instinktiv hätte ich es eher so versucht:
damit sollten beide Eingangskanäle zu 50% an den Ausgangskanälen anliegen, es sollten also beide Ausgangskanäle das 50/50-gemischte Monosignal erhalten.
Allerdings bekomme ich solche Konfigurationen selten auf Anhieb hin, weil aus meiner Sicht das route-Plugin manchmal doppelt so viele Kanäle erwartet oder ausgibt als logisch wären (weshalb man dann ein zusätzlichges plug-Plugin benötigt).
(Ich kenne nämlich nicht nur keine deutsche, sondern überhaupt keine Dokumentation in der alles so beschrieben ist, wie ich es erwarten würde. Vielleicht hilft aber auch mein Wiki-Artikel gelegentlich ein bisschen weiter: Audiokonfiguration)
Jedenfalls passt mein Vorschlag nicht ganz zu deinem Problem.
Das hier
Code: Alles auswählen
# mono - Generated by piCorePlayer
pcm.!default {
type route
slave.pcm "plughw:1,0"
ttable {
0.0 1
1.1 1
}
}
default ist der Name des „Geräts“, das Alsaanwendungen per default verwenden, mit pcm.default definiert man also worüber die Ausgabe laufen wird. Das ! stellt lediglich sicher, dass damit zuvor bestehende Definitionen, zum Beispiel von der (recht komplexen) systemweiten Konfiguration von Alsa, überschrieben werden.
Das Plugin route erlaubt es die Eingangskanäle beliebig auf die Ausgangskanäle zu verteilen und mit slave.pcm wird festgelegt, dass die Ausgabe weitergeleitet wird an das erste Gerät der zweiten Soundkarte (hw:1,0 - bei Alsa beginnt die Nummerierung bei 0) und das plug sorgt für notwendige Formatkonvertierungen.
Letztere braucht man öfter als man vielleicht erwartet, weil selbst wenn die Soundkarte zum Beispiel 24 oder gar 32 Bit Sampletiefe beherrscht, das noch lange nicht heißt, dass sie auch alle Varianten davon (Little Endian/Big Endian und die verschiedenen Kodierungen davon) und kleinere beherrscht.
ttable schließlich sind die Parameter von route, die festlegen welche Kanäle wohin kommen. Dabei lauten die Zeilen
Code: Alles auswählen
Eingangskanal.Ausgangskanal Faktor
(klingt imho nicht ganz nach dem was du wolltest )
(Übrigens ginge es nur um Vertauschungen, könnte man die auch ohne eigenes Plugin mit bindings erreichen, aber das mir nebenbei, weil es nichts mit dem zu tun hat was du willst)
instinktiv hätte ich es eher so versucht:
Code: Alles auswählen
pcm.!default {
type route
slave.pcm "plughw:1,0"
ttable {
0.0 0.5
0.1 0.5
1.0 0.5
1.1 0.5
}
}
Allerdings bekomme ich solche Konfigurationen selten auf Anhieb hin, weil aus meiner Sicht das route-Plugin manchmal doppelt so viele Kanäle erwartet oder ausgibt als logisch wären (weshalb man dann ein zusätzlichges plug-Plugin benötigt).
(Ich kenne nämlich nicht nur keine deutsche, sondern überhaupt keine Dokumentation in der alles so beschrieben ist, wie ich es erwarten würde. Vielleicht hilft aber auch mein Wiki-Artikel gelegentlich ein bisschen weiter: Audiokonfiguration)
Zuletzt geändert von smutbert am 31.10.2017 21:09:16, insgesamt 1-mal geändert.
Re: Alsa, asound. conf, konfiguration
Danke.
der erste Wert stellt ja den inputkanal dar, der zweite den Outputkanal. Links ist 0 und rechts ist 1, soweit wie ich das verstanden habe.
demnach wäre
ttable 0.0 0.5 der linke Input
---------------------------------------- -> linker Mono Output mit summierten Pegel
ttable 1.0 0.5 der rechte Input
-----------------------------------------------------------------
ttable 0.1 0.5 der linke Input
........................................ -> rechter Mono Output mit summierten Pegel
ttable 1.1 0.5 der rechte input
eigentlich habe ich jetzt 2 mal mono auf 2 Ausgängen
0.0.1 linker input
............................................-> mono Output
1.1.1 rechter input
Einmal mono
Jetzt habe ich mittlerweile mitbekommen das es möglich ist von einer virtuellen Sounkarte in eine andere zu leiten und dann auf die reale Hardware, wobei es jedoch Inkompatibilitäten bei verschiedenen Plugins im Zusammenspiel geben soll, weißt du näheres darüber?
der erste Wert stellt ja den inputkanal dar, der zweite den Outputkanal. Links ist 0 und rechts ist 1, soweit wie ich das verstanden habe.
demnach wäre
ttable 0.0 0.5 der linke Input
---------------------------------------- -> linker Mono Output mit summierten Pegel
ttable 1.0 0.5 der rechte Input
-----------------------------------------------------------------
ttable 0.1 0.5 der linke Input
........................................ -> rechter Mono Output mit summierten Pegel
ttable 1.1 0.5 der rechte input
eigentlich habe ich jetzt 2 mal mono auf 2 Ausgängen
0.0.1 linker input
............................................-> mono Output
1.1.1 rechter input
Einmal mono
Jetzt habe ich mittlerweile mitbekommen das es möglich ist von einer virtuellen Sounkarte in eine andere zu leiten und dann auf die reale Hardware, wobei es jedoch Inkompatibilitäten bei verschiedenen Plugins im Zusammenspiel geben soll, weißt du näheres darüber?
Re: Alsa, asound. conf, konfiguration
Ja, im Grunde tust du das bereits jetzt in verkürzter Form. pcm.default leitet bei dir an plughw:1,0 weiter, das ist dasselbe wie:corepi hat geschrieben:31.10.2017 20:10:54Jetzt habe ich mittlerweile mitbekommen das es möglich ist von einer virtuellen Sounkarte in eine andere zu leiten und dann auf die reale Hardware, wobei es jedoch Inkompatibilitäten bei verschiedenen Plugins im Zusammenspiel geben soll, weißt du näheres darüber?
Code: Alles auswählen
pcm.default {
type route
slave.pcm "plug_plugin"
....
}
pcm.plug_plugin {
type plug
slave.pcm "hw:1,0"
}
- dmix (zum mischen der Audioausgaben mehrerer Anwendungen) will nur direkt an Soundkarten, aber nicht an andere Plugins weiterleiten
- nicht jede Anwendung will an das ladspa-Plugin von Alsa ausgeben, hier hilft meist ein zwischengeschaltetes plug
- brutefir habe ich nur ohne zwischen geschaltete Plugins (sowohl am Ein- wie auch Ausgang) zum Laufen gebracht
Als letzte Notlösung bleibt einem in all diesen Fällen das Kernelmodul snd-aloop, das eine „echte virtuelle“ Soundkarte mit zwei Geräten (und je 8 Subgeräten) erzeugt, wobei die Signale der Ausgabekanäle des ersten Geräts an die Eingabekanäle des zweiten gelegt werden und umgekehrt.
ich hab einen Tippfehler fabriziert, den Beitrag oben korrigiere ich auch noch - ich meinte wie du geschrieben hastcorepi hat geschrieben:31.10.2017 20:10:54der erste Wert stellt ja den inputkanal dar, der zweite den Outputkanal. Links ist 0 und rechts ist 1, soweit wie ich das verstanden habe.
Code: Alles auswählen
ttable {
0.0 0.5
0.1 0.5
1.0 0.5
1.1 0.5
}
Code: Alles auswählen
ttable {
0.0 0.5
1.0 0.5
}
aber
bedeutet dagegen:ttable {
0.0 1
1.1 1
}
Der linke Kanal der Audioausgabe wird mit 1 multipliziert an den linken Kanal des Audiogeräts weitergeleitet und der rechte Kanal wird ebenfalls unverändert an den rechten Kanal des Audiogeräts geleitet.
Abgesehen davon wäre es imho keine gute Idee mit Faktoren von 1 zu mischen. Bei der meisten Musik und vielen anderen Stereosignalen unterscheiden sich linker und rechter Kanal nur wenig. Wenn sich dann zwei Kanäle des Ursprungssignals mit Faktor von 1 multipliziert am selben Ausgabekanal „träfen“, käme das einer Addition gleich, bei der es in lauten Passagen zwangsläufig zum Clipping käme.
(Allerdings muss ich zugeben, dass ich bei diesem Punkt keine großartigen Erfahrungen habe und auch nicht weiß wie Alsa mit Clipping umgeht – allerdings habe ich auch in allen Beispielen, die ich gefunden habe, bei denen Kanäle gemischt wurden, Faktoren von ½ gefunden bzw. waren die Faktoren so gewählt, dass deren Summe auf einem Ausgabekanal 1 ergibt.)