Bluetooth-Lautsprecher betreiben (ohne udev, systemd)

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
guennid

Re: Bluetooth-Lautsprecher betreiben (ohne udev, systemd)

Beitrag von guennid » 09.10.2019 15:23:49

wie hast du bei der Wiedergabe des Videos festgelegt (oder festzulegen versucht), dass der Ton über die BT-Lautsprecher kommen soll?
Gar nicht. Ich hatte gehofft, dass der Ton mit

Code: Alles auswählen

$ aplay -D bluealsa:HCI=hci0,DEV=XX:XX:XX:XX:XX:XX,PROFILE=a2dp /home/[user]/video.mkv
abgespielt würde, so wie er ja auch bei Verwendung der Front_Left.wav abgespielt wurde.

Hmmm:

Code: Alles auswählen

# aplay -l
bash: aplay -l: Kommando nicht gefunden.
aplay ist Bestandteil von Debianalsa-utils, wenn ich recht sehe. Das ist installiert. :?: :?: :?:

Aha! Der sagt erst was über die Sound-Hardware, wenn eine Ton-Datei offen ist. So sieht's jetzt aus.

Code: Alles auswählen

$ aplay -l
**** Liste der Hardware-Geräte (PLAYBACK) ****
Karte 0: Intel [HDA Intel], Gerät 0: Generic Analog [Generic Analog]
  Sub-Geräte: 0/1
  Sub-Gerät #0: subdevice #0

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

Re: Bluetooth-Lautsprecher betreiben (ohne udev, systemd)

Beitrag von smutbert » 09.10.2019 16:14:47

aplay ist ein sehr simples Programm, das kann nur mit (unkomprimierten) PCM-Daten umgehen. Deshalb ist es auch bei der Fehlersuche und beim Ausprobieren von Konfigurationen sehr nützlich – es bringt kaum zusätzliche mögliche Fehlerquellen ins Spiel.
aplay -l sollte ohne laufende Wiedergabe dieselben Ergebnisse liefern wie mit und ich habe keine Ahnung was beim ersten aplay -l schief gelaufen ist – ich vermute da ist zwishen aplay und -l irgendetwas anderes als ein normales Leerzeichen gerutscht.


Als minimale ~/.asoundrc für die Bluetooth-Wiedergabe hätte ich mir ungefähr das hier vorgestellt:

Code: Alles auswählen

defaults.bluealsa {
	interface "hci0"
	device "XX:XX:XX:XX:XX:XX"
	profile "a2dp"
}

pcm.!default { 
	type plug
	slave.pcm "bluealsa"
}
Probier zuerst einmal aus, ob ein simples

Code: Alles auswählen

aplay /usr/share/sounds/alsa/Front_Left.wav
funktioniert und wenn ja, kannst du auch gleich die Videowiedergabe testen (nicht mit aplay sondern mit einem Videoplayer).

guennid

Re: Bluetooth-Lautsprecher betreiben (ohne udev, systemd)

Beitrag von guennid » 09.10.2019 17:02:42

Ich habe keine Ahnung von dem, was du mich in diese .asoundrc schreiben lässt. Ich habe noch nie eine erstellt. Also wenn ich recht sehe, dann stellt die mir in der von dir beschriebene Form die Tonausgabe dauerhaft auf den BT-Lautsprecher um - richtig? - Nicht das, was ich eigentlich will, aber lassen wir's erst mal dabei. Ich kann ja durch Löschen den vorherigen Zustand wiederherstellen - richtig?.

die left_font.wav wird auch nach der Anlage deiner .asoundrc darüber „abgespielt“. Das Video, abgespielt mit smplayer ist jetzt stumm. Versuche ich den Springsteen (mp3) mit aplay abzuspielen kommt das hier:

Code: Alles auswählen

~$ aplay [musik].mp3
Wiedergabe: Rohdaten '[musik].mp3' : Unsigned 8 bit, Rate: 8000 Hz, mono
aplay: set_params:1363: Fehler beim Setzen der Hardware-Parameter:
ACCESS:  RW_INTERLEAVED
FORMAT:  U8
SUBFORMAT:  STD
SAMPLE_BITS: 8
FRAME_BITS: 8
CHANNELS: 1
RATE: 8000
PERIOD_TIME: (85333 85334)
PERIOD_SIZE: (682 683)
PERIOD_BYTES: (682 683)
PERIODS: (5 7)
BUFFER_TIME: 511875
BUFFER_SIZE: NONE
BUFFER_BYTES: 4095
TICK_TIME: 0
ebenfalls kein Ton.

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

Re: Bluetooth-Lautsprecher betreiben (ohne udev, systemd)

Beitrag von smutbert » 09.10.2019 17:27:34

Das in der .asoundrc ist nichts geheimnisvolles, im Abschnitt defaults.bluealsa werden die Standardeinstellungen für bluealsa festgelegt und zwar genau dieselben, die wir bei dem Kommando

Code: Alles auswählen

aplay -D bluealsa:HCI=hci0,DEV=XX:XX:XX:XX:XX:XX,PROFILE=a2dp /usr/share/sounds/alsa/Front_Left.wav
explizit angegeben haben (der erste Bluetoothadapter hci0, Mac-Adresse des Bluetoothgeräts und das verwendete BT-Profil)

Der zweite Abschnitt pcm.!default legt fest, dass die Wiedergabe per default über bluealsa laufen soll. Das type plug sorgt dafür, dass die Wiedergabe davor noch durch das plug-Plugin von alsa läuft, das sorgt dafür, dass die Audiodaten in ein Format konvertiert werden, mit dem bluealsa etwas anfangen kann.
Nun könnte es sein, dass genau das mit smplayer fehlschlägt, zum Beispiel weil bluealsa behauptet Formate zu verstehen, mit denen es doch nicht läuft oder es ist irgendetwas anderes.

Gibt es von smplayer möglicherweise irgendwelche (Fehler)meldungen?

Das Abspielen einer mp3-Datei könntest du auch mit ffplay (Debianffmpeg) oder play (Debiansox) testen.

Und ja du kannst du .asoundrc einfach löschen, dann ist alles beim Alten. Neustart ist auch keiner notwendig. Damit Änderungen an der .asoundrc wirksam werden, musst du nur das tonausgebende Programm, zum Beispiel smplayer beenden und neu starten.

guennid

Re: Bluetooth-Lautsprecher betreiben (ohne udev, systemd)

Beitrag von guennid » 09.10.2019 18:43:29

So, es wird Zeit, mich zu bedanken! :THX:

In smplayer habe ich den Ton-Ausgabetreiber auf pcm gestellt. Video-Ton kommt jetzt über den BT-Sprecher.

Den Springsteen habe ich in wav umgewandelt. Wird mit aplay abgespielt. mp3 funktioniert mit aplay nicht.

Ich fass' nochmal den Stand zusammen:
# bluealsa --disable-hfp &
$ bluetoothctl
# export LIBASOUND_THREAD_SAFE=0
$ Ton-Anwendung

richtig?

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

Re: Bluetooth-Lautsprecher betreiben (ohne udev, systemd)

Beitrag von smutbert » 09.10.2019 19:28:27

Wahrscheinlich. Bei einem Punkt bin ich mir nicht sicher, ob er so stimmt und bei dem ist mir auch nicht klar, wie aktuell und wie dringend das ist:

Code: Alles auswählen

export LIBASOUND_THREAD_SAFE=0
Das soll ein noch (oder früher) problematisches Feature der Alsa-Bibliothek lahmlegen und ich nehme an es geht darum das Feature für bluealsa lahmzulegen. Dann wäre es richtig bluealsa so zu starten

Code: Alles auswählen

$ export LIBASOUND_THREAD_SAFE=0
$ bluealsa --disable-hfp &
Möglicherweise habe ich das aber auch falsch verstanden und es wäre angesagt dieses Feature für die Alsa-Anwendung zu deaktivieren

Code: Alles auswählen

$ export LIBASOUND_THREAD_SAFE=0
$ aplay /home/guennid/mein-Musikstück.wav
oder wahlweise

Code: Alles auswählen

$ LIBASOUND_THREAD_SAFE=0 aplay /home/guennid/mein-Musikstück.wav
Vielleicht kannst du das LIBASOUND_THREAD_SAFE=0 auch komplett weglassen und es funktioniert trotzdem alles einwandfrei.



Offen bleiben aus meiner Sicht noch zwei Dinge
  1. Momentan ist bei der Wiedergabe über den BT-Lautsprecher kein Software-Mixing aktiv. Es kann also nur eine Anwendung gleichzeitig am Bluetooth-LS spielen. Stört dich das?
  2. Zum Umschalten zwischen Onboardsound und BT-LS hast du momentan nur die Möglichkeit die .asoundrc zu löschen bzw. umzubenennen und dann zum Zurückschalten wieder zurückumzubenennen.
    Das könntest du natürlich mit einem Skript machen, aber wenn ich scharf nachdenke (= im Internet nachschaue wie das geht :mrgreen:) finden wir eine Möglichkeit das mittels einer Umgebungsvariablen zu machen. Also in etwa so, dass

    Code: Alles auswählen

    $ aplay /home/guennid/mein-Musikstück.wav
    
    auf dem internen Sound wiedergibt während

    Code: Alles auswählen

    $ ALSAXY=BT aplay /home/guennid/mein-Musikstück.wav
    
    über den BT-LS wiedergibt (oder umgekehrt, je nachdem was du öfter verwendest).
    Oder hast du dir das mit dem Umschalten anders vorgestellt?

guennid

Re: Bluetooth-Lautsprecher betreiben (ohne udev, systemd)

Beitrag von guennid » 09.10.2019 21:11:35

smutbert hat geschrieben: Es kann also nur eine Anwendung gleichzeitig am Bluetooth-LS spielen. Stört dich das?
Nicht im geringsten! Zumindest sehe ich momentan nichts. :wink:

Code: Alles auswählen

export LIBASOUND_THREAD_SAFE=0
ist wohl überflüssig.
bluealsa --disable-hfp &
MUSS meines Erachtens mit Root-Rechten ausgeführt werden. Dazu muss ich mir entweder ein init-script überlegen oder ein script von rc.local ausführen lassen.
Im Übrigen, denke ich, können wir's dabei belassen. Dazu, wie ich mit der ~/.asoundrc umgehe, überlege ich mir selbst noch was.
:THX: :THX: :THX:

Grüße, Günther

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

Re: Bluetooth-Lautsprecher betreiben (ohne udev, systemd)

Beitrag von smutbert » 10.10.2019 17:53:09

guennid hat geschrieben: ↑ zum Beitrag ↑
09.10.2019 21:11:35
[...] oder ein script von rc.local ausführen lassen.
[...]
Du kannst den Befehl direkt in die rc.local eintragen

Code: Alles auswählen

bluealsa --disable-hfp &
nur das & am Ende ist wichtig, damit das System nicht vergeblich darauf wartet, dass sich bluealsa wieder beendet.

guennid

Re: Bluetooth-Lautsprecher betreiben (ohne udev, systemd)

Beitrag von guennid » 10.10.2019 18:04:59

Du kannst den Befehl direkt in die rc.local eintragen
Na ja, man könnt's ja auch sysvinit-konform machen. - Denk ich mal! in der Hoffnung mal was Richtiges zu denken. :wink:

Antworten