Alsa, asound. conf, konfiguration

Sound, Digitalkameras, TV+Video und Spiele.
Antworten
corepi
Beiträge: 3
Registriert: 29.10.2017 10:35:52

Alsa, asound. conf, konfiguration

Beitrag von corepi » 29.10.2017 11:00:27

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.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Alsa, asound. conf, konfiguration

Beitrag von smutbert » 29.10.2017 13:06:37

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

Code: Alles auswählen

$ arecord -D hw:Loopback,1 -c 2 -r 48000 -f S16_LE recordstereo.wav
(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

Code: Alles auswählen

$ arecord -D plughw:Loopback,1 -c 1 -r 48000 -f S16_LE recordmono.wav
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.

corepi
Beiträge: 3
Registriert: 29.10.2017 10:35:52

Re: Alsa, asound. conf, konfiguration

Beitrag von corepi » 29.10.2017 17:52:39

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.

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;
}
wenn ich auf mono umstelle sieht sie so aus:

Code: Alles auswählen

# mono - Generated by piCorePlayer
pcm.!default {
	type route
	slave.pcm "plughw:1,0"
	ttable {
		0.0 1
		1.1 1
	}
}
Es funktioniert, aber ich weis eben nicht warum, geschweige das ich notwendige/wünschenswerte weitere Eigenschaften konfigurieren könnte.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Alsa, asound. conf, konfiguration

Beitrag von smutbert » 29.10.2017 18:49:20

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

Code: Alles auswählen

# mono - Generated by piCorePlayer
pcm.!default {
	type route
	slave.pcm "plughw:1,0"
	ttable {
		0.0 1
		1.1 1
	}
}
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

Code: Alles auswählen

Eingangskanal.Ausgangskanal Faktor
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 :wink:)

(Ü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
	}
}
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: Wiki-Artikel zum Thema Audiokonfiguration)
Zuletzt geändert von smutbert am 31.10.2017 21:09:16, insgesamt 1-mal geändert.

corepi
Beiträge: 3
Registriert: 29.10.2017 10:35:52

Re: Alsa, asound. conf, konfiguration

Beitrag von corepi » 31.10.2017 20:10:54

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

8O :cry:

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?

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Alsa, asound. conf, konfiguration

Beitrag von smutbert » 31.10.2017 21:06:56

corepi hat geschrieben: ↑ zum Beitrag ↑
31.10.2017 20:10:54
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?
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:

Code: Alles auswählen

pcm.default {
	type route
	slave.pcm "plug_plugin"
	....
}

pcm.plug_plugin {
	type plug
	slave.pcm "hw:1,0"
}
Bezüglich Inkompatibilitäten, kann ich mich an ein paar erinnern:
- 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
- Debianbrutefir 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.

corepi hat geschrieben: ↑ zum Beitrag ↑
31.10.2017 20:10:54
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.
ich hab einen Tippfehler fabriziert, den Beitrag oben korrigiere ich auch noch - ich meinte wie du geschrieben hast

Code: Alles auswählen

	ttable {
		0.0 0.5
		0.1 0.5
		1.0 0.5
		1.1 0.5
	}
wenn du das Monosignal nur auf einem Kanal willst, zum Beispiel dem linken, dann eben

Code: Alles auswählen

	ttable {
		0.0 0.5
		1.0 0.5
	}
(auf dem rechten wird dann vermutlich auch einfach der rechte Kanal der Audioausgabe anliegen)

aber
ttable {
0.0 1
1.1 1
}
bedeutet dagegen:
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.)

Antworten