Bluealsa mit simultaner Tonausgabe auf zwei Geräten

Sound, Digitalkameras, TV+Video und Spiele.
fischic
Beiträge: 308
Registriert: 24.12.2019 12:25:08

Re: bluealsa, ~/.asoundrc

Beitrag von fischic » 17.05.2020 15:46:49

Danke sehr! Leider komme ich jetzt wohl erst wieder am Donnerstag dazu. Fahre ein paar Tage mit der Liebsten zum Wandern!

fischic
Beiträge: 308
Registriert: 24.12.2019 12:25:08

Re: bluealsa, ~/.asoundrc

Beitrag von fischic » 21.05.2020 12:12:22

So, da bin ich wieder.
Ich habe deinen Code so kopiert: Teil1 und Teil 2 in eine .asoundrc.

Die Kopie funktioniert. Bis ich sie verdaut habe, werde ich wohl noch einiges erfragen müssen, aber das kommt später. Einstweilen sieht es so aus, dass ich die beiden abschließenden Kommandos nicht gleichzeitig laufen lassen kann. Ton entweder nur über plug:bt_ls oder nur über plug:bt_kh.

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

Re: bluealsa, ~/.asoundrc

Beitrag von smutbert » 21.05.2020 23:22:58

Eigentlich war es schon so gedacht, dass die beiden gleichzeitig laufen können. Bluealsa kann das jedenfalls und so wie ich es beschrieben habe sollte es eigentlich auch klappen.

Allerdings bin ich nach deiner Schilderung auf eine mögliche Ursache gestossen. Viele (billige?) Bluetooth-Controller unterstützen so wie es aussieht (gleichzeitig) nur eine a2dp-Verbindung. Hier [1] hat das jemand offensichtlich mit zwei Bluetooth-Controllern (einer pro Bluetooth-Lautsprecher) gelöst.

[1] https://github.com/Arkq/bluez-alsa/issues/79

fischic
Beiträge: 308
Registriert: 24.12.2019 12:25:08

Re: bluealsa, ~/.asoundrc

Beitrag von fischic » 22.05.2020 00:03:58

Kann es sein, dass ein sogenannter „SBC“ „codec“, was immer das sein mag, bei der simultanen Tonwiedergabe eine wichtige Rolle spielen mag? Dieser „codec“ spielt in deinem Link eine Rolle, und auch bei einem der von mir gefundenen Transmitter https://www.ebay.de/itm/TROND-Bluetooth ... 3356949317 ist die Rede davon, dass bei Simultanbetrieb der Transmitter auf diesen „codec“ zurückfällt. Hast du eine Idee, ob man bei dem aktuell von mir verwendeten Controller versuchen könnte, ihn auf diesen codec festzunageln?

Ich bin etwas ratlos, einen Controller zu finden, der Simultanwiedergabe sicher beherrscht - China und Preis hin oder her. Ich habe das noch in keiner Beschreibung gefunden.

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

Re: bluealsa, ~/.asoundrc

Beitrag von smutbert » 22.05.2020 21:51:39

Ich kenne leider keine Möglichkeit den Codec festzulegen und weiß auch nicht ob/welche Bluetooth-Controller mehrere a2dp-Verbindungen unterstützen. Ich habe (mit unterschiedlichen Begründungen) die Behauptung gefunden, dass generell nur eine a2dp-Verbindung pro Bluetooth-Controller funktioniert (und auch gegenteilige Behauptungen).

Ausprobieren kann ich es mangels zweitem Bluetoothgerät mit meinem Bluetooth-Controller (einer von Intel) leider nicht.

fischic
Beiträge: 308
Registriert: 24.12.2019 12:25:08

Re: bluealsa, ~/.asoundrc

Beitrag von fischic » 22.05.2020 23:11:40

Ich werde das morgen mal mit einem weiteren (Billig-)USB-Controller probieren. Wenn ich recht sehe, muss ich via bluetoothctl den einen Lautsprecher an hci0 löschen und mit dem zusätzlichen hci1 neu verbinden und natürlich so in den Code einfügen. Lieber wär's mir schon gewesen, das mit einem Controller hinzukriegen. so dicke ist die Anzahl der USB-Buchsen ja selbst bei nicht ganz alter Hardware nicht. Immerhin scheint der Nebeneffekt deiner Mühen (einfaches Umschalten zwischen den Lautsprechern) zwar noch mit etwas scripten, aber prinzipiell machbar.

fischic
Beiträge: 308
Registriert: 24.12.2019 12:25:08

Re: bluealsa, ~/.asoundrc

Beitrag von fischic » 23.05.2020 09:45:09

So, erstmal: Wir bleiben am besten bei deinen Bezeichnungen. Es ist ohne individuelle Namensgebung kompliziert genug! :wink:

Hier meine .asoundrc:

Code: Alles auswählen

# pcm für die Wiedergabe mit festgelegtem, bewährtem Format
pcm.loopsink {
	type plug
	slave {
		# Wiedergabe an die virtuelle Soundkarte
		pcm "hw:Loopback,0"

		# Format
		rate 48000
		format "S16_LE"
		channels 2
	}
}

pcm.dsnooper {
	# dsnoop erlaubt gleichzeitige Aufnahmen mit mehreren Programmen
	type dsnoop

	# beliebiger Wert (in der Konfiguration nicht zwei Mal denselben Wert verwenden!)
	ipc_key 1536

	# hier landen die Audiodaten der Wiedergabe an Loopback,0, also vom oben definierten
	# pcm.loopsink und in Folge auch die Audiodaten, die am unten definierten pcm.schleife
	# wiedergegeben werden
	slave.pcm "hw:Loopback,1"
}

pcm.schleife {
	# Plugin zum Zusammensetzen zweier unterschiedlicher Geräte zur Wiedergabe und Aufnahme
	type asym

	# weiterleiten von/zu den oben definierten pcms
	playback.pcm "loopsink"
	capture.pcm "plug:dsnooper"
}

# Lautstärkeregelung für den Bluetooth-Lautsprecher
pcm.bt_ls {
	# Plugin zur Lautstärkeregelung
	type softvol
	
	# Weiterleitung an...
	slave.pcm "bt_ls_hw"
	
	# Name des Reglers und Soundkarte (aplay -l) in der er erscheinen soll
	control.name "PCM Bluetooth-LS"
	control.card PCH
}

# Dasselbe noch einmal für den Bluetooth-Kopfhörer
pcm.bt_kh {
	type softvol
	slave.pcm "bt_kh_hw"
	control.name "PCM Bluetooth-KH"
	control.card PCH
}

# Bluetooth-Lautsprecher
pcm.bt_ls_hw {
	# Plugin bluealsa ist für Bluetooth zuständig
	type bluealsa
	# Name des Bluetooth-Adapters
	# (nicht notwendig, wenn nur ein Adapter vorhanden ist)	
	interface "hci0"
	# MAC-Adresse des Bluetooth-Lautsprechers
	device "88:00:00:00:31:F0"
	# zu verwendendes Protokoll zur Audiodatenübertragung (Bluetooth-Profil)
	profile "a2dp"
}

# Dasselbe noch einmal für den Bluetooth-Kopfhörer
pcm.bt_kh_hw {
	type bluealsa
	interface "hci1"
	device "12:51:02:20:0F:E8"
	profile "a2dp"
}
Die Zuordnung der jeweiligen Controller-MACs zu hci* habe ich via

Code: Alles auswählen

hcitool dev
rausbekommen.

Beim Testen funktioniert die Irish-Pub-Ausgabe via bt_ls. bt_kh funktioniert nicht, auch nicht, wenn ich die Ausgabe via bt_ls abbreche. Ich vermute, irgendwie kommt er an hci1 nicht heran.
Meldung ist:

Code: Alles auswählen

ALSA lib pcm_dsnoop.c:673:(snd_pcm_dsnoop_open) unable to open slave
arecord: main:788: ALSA lib bluealsa-pcm.c:667:(_snd_pcm_bluealsa_open) BlueALSA connection failed: Datei oder Verzeichnis nicht gefunden
aplay: main:788: Fehler beim Öffnen des Gerätes: Das Argument ist ungültig
Fehler beim Öffnen des Gerätes: Datei oder Verzeichnis nicht gefunden

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

Re: bluealsa, ~/.asoundrc

Beitrag von smutbert » 23.05.2020 20:57:49

Mit welchem Befehl startest du bluealsa (den Daemon) doch gleich? Legst du bluealsa auf hci0 fest?

Möglicherweise oder sogar vermutlich brauchst du zwei bluealsa-Instanzen, eine pro Bluetooth-Controller. Ich glaube du startest das in der rc.local? Dort könntest du zwei Befehle eintragen

Code: Alles auswählen

bluealsa -i hci0 ... &
bluealsa -i hci1 ... &
... steht für die anderen Optionen, die du wohl am besten beibehältst (--disable-hsp oä) und das & am Ende ist vor allem beim ersten Daemon wichtig, damit er im Hintergrund gestartet wird und nicht die weitere Ausführung von rc.local, also insbesondere das Starten des zweiten bluealsa-Daemons blockiert.
Zuletzt geändert von smutbert am 24.05.2020 11:52:28, insgesamt 1-mal geändert.

fischic
Beiträge: 308
Registriert: 24.12.2019 12:25:08

Re: bluealsa, ~/.asoundrc

Beitrag von fischic » 24.05.2020 09:54:28

Funktioniert nicht mit zwei Instanzen. Näheres habe ich noch nicht rausgefunden.
Geht das überhaupt:
It is not possible to run more than one instance of the BlueALSA server per D-Bus interface.
?(1)
(1) https://github.com/Arkq/bluez-alsa Keine Ahnung, ob ich eine „D-Bus-Schnittselle“ benutze.

Was bedeutet/welche Konsequenzen hat, wenn bluetoothctl einen der beiden Controller zum default erklärt?

Nebenbei: Ich benutzte bisher (schon ziemlich am Anfang erwähnt [vor S. 4]) keinerlei Optionen mehr im bluealsa-Kommando in rc.local. Die Option --disable-hsp erschien mir bestenfalls überflüssig.
Gibt's irgendwo Zusammenstellungen der Optionen von bluealsa? Eine Manpage habe ich nicht.

fischic
Beiträge: 308
Registriert: 24.12.2019 12:25:08

Re: bluealsa, ~/.asoundrc

Beitrag von fischic » 26.05.2020 12:01:02

smutbert hat geschrieben:Viele (billige?) Bluetooth-Controller unterstützen so wie es aussieht (gleichzeitig) nur eine a2dp-Verbindung.
Ich habe begründete Hoffnung, dass das nicht zutrifft. MIt dieser simplen asoundrc

Code: Alles auswählen

pcm.btL1 {			# Lautsprecher-pcm (für BT-Speaker in bluetoothctl)
  type bluealsa			# Alsa-Plugin für Bluetooth
  interface "hci0"		# vom Kernel eingerichtete BT-Schnittstelle
  device "88:00:00:00:31:F0"	# MAC-Adresse des Lautsprechers (= „BT-Speaker“ in bluetoothctl,
				# Lautsprecher mit Werbeaufdruck für Becks Bier)
  profile "a2dp"		# Bluetooth-Profil
}

pcm.btL2 {			# Lautsprecher-pcm (für „L1“ in bluetoothctl)				
  type bluealsa			# Alsa-Plugin
  interface "hci0"		# vom Kernel eingerichtete BT-Schnittstelle
  device "12:51:02:20:0F:E8"	# MAC-Adresse des Kopfhörers (= „L1“ in bluetoothctl,
				# Kopfhörer)
  profile "a2dp"		# Bluetooth-Profil
}
kriege ich via aplay (gestartet in zwei Terminals) den Ton derselben Datei gleichzeitig auf beide BT-Lautsprecher. Synchron ist der natürlich nicht. (Bei den Namen und auch den Begriffen Lautsprecher/Kopfhörer mach ich keine Klimmzüge mehr und nummeriere die einfach durch. Die Reglerplugins lass' ich auch weg, die stören nur und es sollte reichen, wenn man dieses andauernde und umständliche Bereinigen der asound.state einmal macht, wenn man glaubt fertig zu sein.)
Die Synchronität der Ausgbe lässt sich wohl nur über deine „schleife“ erreichen.

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

Re: Bluealsa mit simultaner Tonausgabe auf zwei Geräten

Beitrag von smutbert » 26.05.2020 23:23:39

Also erstens danke fürs herausfinden. Gut zu wissen, dass es grundsätzlich funktionieren soll.

Allerdings verstehe ich dann nicht, warum es nicht auch wie auf der ersten Seite in diesem Thread beschrieben mit der Loopbacksoundkarte geklappt hat (viewtopic.php?f=25&t=177552#p1238724), denn da passiert im Grunde dasselbe: der Ton wird mit zwei aplay-Befehlen an beiden Bluetooth-Geräten wiedergegeben.

(Mit so hartnäckigen Schwierigkeiten habe ich zwar nicht gerechnet, aber das ist jetzt so ungefähr das, was ich gemeint habe, als ich gesagt habe, mit mpd ginge es vermutlich leichter/eleganter. Dort trägt man einfach beide Ausgabegeräte in die mpd-Konfiguration ein und schaltet sie nach belieben zu oder weg.)

fischic
Beiträge: 308
Registriert: 24.12.2019 12:25:08

Re: Bluealsa mit simultaner Tonausgabe auf zwei Geräten

Beitrag von fischic » 27.05.2020 00:22:18

Ich werd's noch mal nachstellen, die asoundrc-Variante habe ich aufgehoben (wäre dann 3. oder 4. Versuch).

Ich habe kein Problem damit, es mit mpd zu versuchen. Da muss ich mich allerdings erst mal einlesen oder du sagst mir, wie du dir die Konfiguration vorstellst. Ich weise aber schon mal darauf hin, dass ich die simultane Tonausgabe in 1. Linie bei der Video-Wiedergabe nutzen möchte.

fischic
Beiträge: 308
Registriert: 24.12.2019 12:25:08

Re: Bluealsa mit simultaner Tonausgabe auf zwei Geräten

Beitrag von fischic » 29.05.2020 10:31:08

Ich hab's noch mal nachgestellt. Es bleibt dabei, der laufende Radiostream wird nur an einen Lautsprecher übertragen. Fehlermeldung für den Lautsprecher, wenn der Kopfhörer-Ton läuft:

Code: Alles auswählen

arecord -r 48000 -f S16_LE -c 2 -D schleife | aplay -r 48000 -f S16_LE -c 2 -D plug:bt_ls
ALSA lib pcm_dsnoop.c:673:(snd_pcm_dsnoop_open) unable to open slave
arecord: main:788: Fehler beim Öffnen des Gerätes: Das Argument ist ungültig
aplay: playback:2787: Lesefehler
Ob's an mplayer liegt? ich versuch mich dann mal mit mpd.
Aber irgendwie scheint mir die Diskrepanz zwischen der Benutzung deiner asoundrc und meinem letzten Test damit zusammenzuhängen, dass wir einmal versuchen, ein- und denselben Stream (ich nehme an, das man diese Radioübertragung als Stream bezeichnet) auf zwei Lautsprechern auszugeben (smutbert) und einmal eine Datei zweimal öffnen (fischic).

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

Re: Bluealsa mit simultaner Tonausgabe auf zwei Geräten

Beitrag von smutbert » 29.05.2020 11:24:05

An mplayer kann es eigentlich nicht mehr liegen und der Fehler jetzt liegt auch nicht an bluetooth. Was aber auch heißt, dass ich den Fehler eigentlich nachstellen können sollte. Die „Diskrepanz“ sollte nichts machen. dnsoop sorgt dafür, dass gleichzeitig mehrere Anwendungen den Stream aufnehmen können, aber genau daran scheint es zu scheitern, obwohl es bei mir funktioniert hat.


Wiederhole den Test doch bitte noch einmal und zeige auch die Ausgabe von der Kopfhörerwiedergabe.
Funktioniert die Wiedergabe über den Lautsprecher, wenn die Kopfhörerausgabe nicht läuft?
Du machst alles unter einem Benutzeraccount und nicht etwa unter unterschiedlichen, oder?

fischic
Beiträge: 308
Registriert: 24.12.2019 12:25:08

Re: Bluealsa mit simultaner Tonausgabe auf zwei Geräten

Beitrag von fischic » 29.05.2020 12:14:46

Radio (mplayer) eingeschaltet.
Lautsprecher läuft mit folgender Meldung:

Code: Alles auswählen

$ arecord -r 48000 -f S16_LE -c 2 -D schleife | aplay -r 48000 -f S16_LE -c 2 -D bt_ls
Aufnahme: WAVE 'stdin' : Signed 16 bit Little Endian, Rate: 48000 Hz, stereo
Wiedergabe: WAVE 'stdin' : Signed 16 bit Little Endian, Rate: 48000 Hz, stereo
Warnung: Rate ist nicht exakt (angefordert: 48000 Hz, unterstützt: 44100 Hz)
         probieren Sie bitte das plug-Plugin: (-Dplug:bt_ls)
Überlauf!!! (mindestens 0,008 ms)
...
Jetzt Versuch, den Kopfhörer dazuzuschalten:

Code: Alles auswählen

$ arecord -r 48000 -f S16_LE -c 2 -D schleife | aplay -r 48000 -f S16_LE -c 2 -D plug:bt_kh
ALSA lib pcm_dsnoop.c:673:(snd_pcm_dsnoop_open) unable to open slave
arecord: main:788: Fehler beim Öffnen des Gerätes: Das Argument ist ungültig
aplay: playback:2787: Lesefehler
und jetzt umgekehrt. Radio läuft weiter, Lautsprecher ausgeschaltet.
Kopfhörer läuft mit folgender Meldung:

Code: Alles auswählen

$ arecord -r 48000 -f S16_LE -c 2 -D schleife | aplay -r 48000 -f S16_LE -c 2 -D plug:bt_kh
Aufnahme: WAVE 'stdin' : Signed 16 bit Little Endian, Rate: 48000 Hz, stereo
Wiedergabe: WAVE 'stdin' : Signed 16 bit Little Endian, Rate: 48000 Hz, stereo
jetzt Versuch, den Lautsprecher zuzuschalten:

Code: Alles auswählen

$ arecord -r 48000 -f S16_LE -c 2 -D schleife | aplay -r 48000 -f S16_LE -c 2 -D bt_ls
ALSA lib pcm_dsnoop.c:673:(snd_pcm_dsnoop_open) unable to open slave
arecord: main:788: Fehler beim Öffnen des Gerätes: Das Argument ist ungültig
aplay: playback:2787: Lesefehler
Ich mache alles als ein- und derselbe Benutzer. Drei Terminals (mplayer, bt_kh, bt_ls) aber das dürfte klar sein.

Aber du bringst mich da auf eine neue Idee: Soll ich das Ganze mal versuchen, als root zu reproduzieren?
Dazu müsste ich meine ~/.asoundrc inhaltlich unverändert nach /etc/asound.conf transferieren - richtig? (Wäre vielleicht eh sinnvoll.)

Antworten