Aucun PLAYBACK Hardware Devices listé

Bonjour,

Je viens de passer deux jours à essayer de configurer une sortie son sur ma raspberry pi 4 Modèle B - 1GB
(fiche technique: https://www.kubii.com/fr/cartes-raspberry-pi/2770-raspberry-pi-4-modele-b-1gb-3272496312371.html)

L’os est du DietPi:

cat  /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"

J’ai une sortie son composée de deux haut-parleurs alimenté via usb et une prise jack pour le son.
L’alimentation de cette sortie son est branchée sur secteur, la prise jack est évidemment dans la raspi.
La sortie son est testée sur mon pc et elle fonctionne, donc pas de soucis de ce côté là.

Voici la sortie de quelques commandes:

aplay -l
**** List of PLAYBACK Hardware Devices ****

Aucun périphérique n’est listé…

aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
lavrate
    Rate Converter Plugin Using Libav/FFmpeg Library
samplerate
    Rate Converter Plugin Using Samplerate Library
speexrate
    Rate Converter Plugin Using Speex Resampler
jack
    JACK Audio Connection Kit
oss
    Open Sound System
pulse
    PulseAudio Sound Server
upmix
    Plugin for channel upmix (4,6,8)
vdownmix
    Plugin for channel downmix (stereo) with a simple spacialization
usbstream:CARD=Device
    USB PnP Sound Device
    USB Stream Output

Je ne suis absolument pas familier de tout ce qui est en rapport avec le son et c’est la première raspi que je manipule, d’où ma difficulté.

En dehors de ce problème, la raspi fonctionne bien, j’ai pu faire fonctionner une caméra et une entrée son dessus (qui apparaît correctement dans alsamixer).

Il vous manque sûrement énormément d’infos pour m’aider, n’hésitez pas à me demander le résultat de commandes dont vous pourriez avoir besoin, et merci beaucoup à vous

Cordialement,
Beefr

Quand on utilise un device autre que le built-in, comme le Bluetooh ou une carte de son en USB, il vau mieux virer Alsa pour utiliser Pulse.

Il est un peut difficile de t’aider plus précisément, car DietPi n’est pas une distribution officiel, et perso, malgré la taille réduit, j’ai eu plus de soucis a travailler avec DietPi que Raspbian. Il y a des package en moins qui sont importants pour le média, DietPi, de mon avis, est plus pour des activité « service » ou en ligne de commande. Tenter de faire du multimédia est problématique, mais pas impossible.

Regarde sinon la doc pour définir les paramètre Alsa dans le fichier de configuration pour définir la sortie par défaut, et désactive le module intégré du RPi dans son config, qui gère l’audio, ça va aider.

Oui je veux m’en servir pour diverses choses incluant un « majordome » mais s’il peut pas parler c’est embêtant, pour l’instant je suis obligé de le faire écrire dans la console =p
Et je suis un peu triste pour mon module de lecture de musique également x)
donc pas voué à avoir besoin d’un écran, plutôt dans la poche à écouter mes commandes vocales
Et sachant que j’utilise des librairies parfois lourdes (vision par ordinateur, multithreading, etc) je préférais que la raspi utilise ses ressources pour cela plutôt que pour une sortie graphique

J’ai effectivement principalement utilisé alsa! je pensais que pulse était une surcouche de alsa, je vais aller approfondir sur pulse, merci pour le tips

d’ailleurs ce matin j’ai trouvé ceci:

le son est transmis par défaut sur la sortie HDMI ; 
sinon, il est émis via la prise analogique. 
Vous pouvez également 
==> forcer manuellement la sortie dans l’utilitaire raspi-config, 
dans le fichier config.txt

ou en faisant un clic droit sur l’icône en forme de haut-parleur, 
en haut à droite de la barre des tâches.

2. Audio analogique
La sortie audio analogique se fait sur un jack stéréo 
de 3,5 mm à quatre pôles. Cette sortie fournit un signal 
d’environ 1 volt crête à crête. Ce signal est trop faible pour être 
utilisé avec un casque audio ou un haut-parleur. 
===> Il faudra impérativement utiliser un amplificateur.

Sur le Raspberry Pi 4, l’audio numérique est sélectionné par défaut. 
Il faudra modifier la configuration pour utiliser la sortie analogique.

ça donne quelques pistes

Merci pour les tips, je teste dès que j’ai un peu de temps :+1:

J’utilise les RPi qu’en CLI, alors l’affichage graphique, dans la majorité des cas, est superflus pour moi.

Mon guide pour utiliser l’audio via Bluetooh, c’est pas exactement ce que tu veux faire, mais t’aideras peut-être à y voir plus clair, car je dois passer avec Pulse.

https://levelkro.xyz/wiki/RPi-Bluetooth_Audio

Éditer la sortie audio sur un RPi n’a jamais marché correctement avec moi. Pour cette raison j’ope plus sur la désactivation du module audio pour que le système ne prenne en charge que celui tu ajouteras. Cette choses est valide aussi si tu déroute l’audio vers le BT.

Assure toi aussi de lancer les paramètres APRÈS que le device soit chargé.


Pour la vidéo, tu peux facilement désactiver les sorties, consulte la documentation pour savoir comment faire, ou demande à ChatGPT, qui pourras t’aider aussi. Mais assure toi d’avoir le SSH actif (rappel), sinon tu auras l’air un peu fou si tu oublie :stuck_out_tongue:


Pour faire parler ton RPi;

https://levelkro.xyz/wiki/RPi-eSpeak

Bonjour
quoi te dire que de prendre un OS qui tourne.
Rasbian Buster depuis fort longtemps, et je le quitte plus.
BYE

Merci pour ton guide bluetooth! C’était ma deuxième option comme j’ai aussi une enceinte bluetooth. Malheureusement j’ai la super erreur « No default controller available » dans bluetoothctl et je n’ai pas encore réussi à résoudre ce problème :confused:

Je vais checker ta partie qui parle de pulse pour voir si ça m’aide :slight_smile:

Et t’inquiète pas, en image je gère =p
Et oui le ssh est bien activé, sinon impossible de me connecter à ma raspi ^^

merci tempsx92 pour l’idée ^^
peut-être que si l’audio ne veut pas marcher il faudra que je me fasse une raison :confused:

tuto time « no default controller available »:

  1. normalement vous ne pouvez pas start le service hciuart (sudo systemctl statrt hciuart) parce que pas de controller
  2. sudo vim /etc/systemd/system/dbus-org.bluez.service
  3. ExecStart=/usr/libexec/bluetooth/bluetoothd --noplugin=sap
  4. systemctl daemon-reload
  5. sudo systemctl restart bluetooth
  6. sudo dietpi-config > advanced options > bluetooth > on

Il se peut que je sois un vilain trolleur et que l’option 6 ait été la seule et unique raison de mon malheur ces derniers jours :))) donc à tester en priorité
7. bluetoothctl scan on
===> Discovery started

autres choses que j’ai pu tester:
sudo rmmod btusb
sudo rmmod btintel

cd /tmp
sudo curl -L ‹ https://archive.raspberrypi.org/debian/pool/main/f/firmware-nonfree/firmware-brcm80211_20210315-3+rpt7_all.deb › -o package.deb
sudo dpkg -i --force-downgrade package.deb
rm package.deb

sudo vim /etc/pulse/default.pa
#load-module module-suspend-on-idle

sudo usermod -aG pulse,pulse-access coren

mkdir ~/.pulse
cp /etc/pulse/default.pa ~/.pulse/
vim ~/.pulse/default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
pulseaudio --start
start-pulseaudio-x11
pulseaudio -D
echo « default-server = 127.0.0.1 » > ~/.pulse/client.conf
cp -pR .pulse .config
sudo usermod -aG pulse,pulse-access

Déso je sais pas ce qui m’a aidé ou non =p

Vu que ces DietPi, je ne serais te dire. mais clairement il désactive un max de truc pour le rendre léger, car le BT est actif par défaut sur un RPi. Je ne sais pas si il ce base sur Raspbian ou Debian pour travailler leur version, alors c’est du tatonnement.

Par exemple ça, pas besoin de le faire sous Raspbian, mais que DietPi semble avoir besoin.

Comme j’ai dis plus tot, j’ai essayé DietPi et je me suis retrouvé avec plus de problème que de solution, alors je me contente de Raspbian, que je « lite » par moi-même, selon les besoins.

J’ai pu avancer un peu :slight_smile:

donc j’en etais à me connecter en bluetooth, le scan marche, le pairing fonctionne… malheureusement, même en trustant le device, la connection se clôt quasi immediatement :frowning: je pense que c’est mon installation de pulseaudio qui est mauvaise donc pas de bluetooth vers une enceinte

donc j’ai réparé ça:

  1. sudo apt install ofono -y
    sudo apt install dbus-x11 -y
    sudo apt install xvfb -y
  2. sudo vim ~/pulseclient.sh
#!/bin/sh
dbus-launch
pulseaudio --start
pulseaudio -D --disallow-exit
bluetoothctl scan on
sleep 60
bluetoothctl scan off
sleep 9999999 # important
  1. crontab -e
@reboot xinit ~/pulseclient.script -- Xvfb :1 -screen 0 1x1x8
  1. sudo vim ~/.bashrc
export $(dbus-launch)

sudo mkdir /run/user/1001
sudo mkdir /run/user/1001/bus
sudo chown -R coren:coren /run/user/1001 # UID=1001? => cat /etc/passwd
sudo chmod -R 0700 /run/user/1001
export XDG_RUNTIME_DIR="/run/user/$UID"
  1. sudo vim /etc/security/limits.conf
@pulse-rt       hard nice -20
@pulse-rt       soft nice -20
  1. sudo chmod u+s /usr/bin/pulseaudio
    sudo groupadd pulse-rt
    sudo usermod -aG pulse-rt
  2. sudo vim /etc/pulse/default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.1.150/24 #remplacez 192.168.1.150 par votre ip locale
load-module module-alsa-sink device=hw:0,0
  1. sudo vim /etc/pulse/daemon.conf
log-level = info
exit-idle-time = -1
  1. sudo vim /etc/pulse/client.conf
default-server = tcp:192.168.1.150:4713
  1. sudo vim /usr/bin/start-pulseaudio-x11
/usr/bin/pactl load-module module-native-protocol-unix auth-anonymous=1 socket=192.168.1.150:4713 # 4713 c'est le port de pulseaudio

J’ai trouvé une partie des infos ici:

I use Pulseaudio to share audio between a desktop and a Raspberry Pi.
However, Pulseaudio needs dbus, and dbus needs an X session. Without graphical session, Pulseaudio is only able to run in system mode, which is officially not recommanded.
Besides on a Raspberry Pi, the cost of an X session is dramatically high, so I would like to get rid of it in the most efficient (less costly) way.
How can I start the smallest X session for Pulseaudio to kick in ?

Voilà normalement avec ça votre enceinte bluetooth se connecte

dernier problème de mon côté: aplay -l est vide ='(

Faux, Pulse Audio n’est que le service audio, le BT lui est un autre service. « bluetoothctl » marche sans pulse, et vice versa.

WoW, tu fait un scan sans rien n’y faire… c’est la ton problème… je vais te réviser celui que je présente dans mon Wiki…

Vers la fin pour le démarrage je propose ce script pour lancer le BT au démarrage.

#!/bin/bash
echo "BTSPK Connection process"
echo "Restart Bluetooth"
sudo systemctl stop bluetooth
sudo systemctl start bluetooth

^^ Ici je redémarre le service Bluetooth, si il état « stop » il va démarrer, sinon ont s’assure de son démarrage.

echo "Restart PulseAudio server"
pulseaudio -k
pulseaudio -D

^^ Il c’est pulse que tu contrôle. Ont Kill le service pour le redémarrer en daemon, toi tu ajoute des paramètres, je ne sais pas si il sont valide.

echo "Reload Bluetooth PulseAudio policy"
pactl unload-module module-bluetooth-policy
pactl load-module module-bluetooth-policy

^^ Ici ont s’assure que les « policy » du bluetooth sont chargé pour s’activer avec PulseAudio

echo "Trying to connect the Bluetooth speaker"
while read x ; do sleep 2s ; echo $x ; done <<eof | bluetoothctl
power on
agent on
default-agent
connect XX:XX:XX:XX:XX:XX
quit
eof
echo "Done BTSPK Connection process"

^^Et cette dernière section est celle qui va créer la connexion vers les speaker BT. Tu as un While qui va passer chaque ligne de « EOF »; il va ouvrir « bluetoothctl », après il lui passe des commandes …

  1. L’allumer
  2. Activer 'agent
  3. Définir comme agent par défaut
  4. Initier la connection au MAC ADDR déjà « pair » avant…
  5. Quitter « bluetoothctl »

Dans ta partie, tu as …

Qui techniquement sert a rien…

  1. Tu demande au bluetoothctl de d’allumer le scan (ce qui est utilise au pairrage seulement)
  2. Tu le fait attendre 60 secondes, ici tu as rien et c’est donc inutile
  3. Tu ferme le scan, tu as rien fait avec le scan en fin de compte.
  4. Tu fait dormir ton script pour rien…

Après tu ajoute le script en cron, ce que je déconseille, le boot du cron n’est pas fiable. Songe à l’inclure dans le script de connexion de l’utilisateur dans ~/.profile . (consulte cette section de mon guide pour bien l’intégrer; RPi-Bluetooth Audio — Wiki levelKro. )

Regarde bien mon guide au complet, il marche toujours dans la dernière version de Raspbian.
Rappel de l’url; RPi-Bluetooth Audio — Wiki levelKro

Tu as une section a faire manuellement une fois, avant d’arriver au script de démarrage, assure toi de le faire correctement. Si le lien est perdu avec le device (pour inactivité) il faut ajuster PulseAudio dans la config, consulte cette petite section qui corrige ce problème; RPi-Bluetooth Audio — Wiki levelKro .

Toute cette section te cause tes problème, en lecture rapide, j’en comprend que tu tente de créer plutot un service TCP, un serveur Audio ? Ce qui rend inutile ta partie BT et rend le PulseAudio pour une sortie audio via le réseau, la je ne comprend plus ton objectif, c’est complètement inutile. Deplus, il est indiqué que cette partie est pour… sortir l’audio depuis le RPi sur un PC distant…

En dessous du lien il y a cette information…

Traduction: J’utilise PulseAudio pour partager l’audio entre le bureau et le RPi
Deplus ce code ne marche pas car…

Traduction: Autrement, Pulseaudio à besoin du DBUS, et DBUS à besoins de X, Sans interface graphique (GUI), PulseAudio ne peut marche qu’en mode système
Ce qui rend ton code inactif, vu que tu ne démarrage pas de GUI. Contente toi de ma méthode, qui marche sans le GUI (mais qu’en CLI)

en fait l’idée du scan on / sleep 60 c’était de laisser à la machine le temps de se connecter à l’enceinte, mais oui ça ne marche ptet pas ^^ je pensais m’en occuper plus correctement quand je pourrai jouer du son =')

le start bluetooth est déjà dans mon startup.sh :smiley: je crois que j’ai oublié de le montrer =p
~/startup.sh

#!/bin/bash
sudo modprobe btusb
sudo systemctl start bluetooth
sudo systemctl start hciuart

avec sa crontab associée: @reboot ~/startup.sh

je complète mon startup avec ton truc sur pulseaudio + les policy + la connexion :+1:

le sleep 9999 sert à garder le dbus(ou la x session ou jsplus quoi) actif, et ça je suis obligé sinon pulseaudio crash sur ma dietpi

nan je veux pas initier de connexion à ma raspberrypi, je veux l’allumer et que tout se connecte tout seul, si je dois me connecter en ssh à chaque fois ça va me saouler =')

à la fin cela dit que sans GUI pulse ne marche pas, c’est mon cas. Ce que je comprends c’est qu’ils simulent un GUI avec X pour que pulse marche ( et depuis que je le fais cela marche…)
et le sleep permet de garder le process X actif, autrement il se ferme, le « GUI simulé » se ferme et pulse décède misérablement

je vais voir pour le reste, j’ai ptet fait des bêtises =p
j’essayerai de faire un tuto propre pour dietpi, en attendant je teste tout

ok c’est bon j’ai reussi

j’ai abandonné le bluetooth, j’ai connecté mon enceinte avec la prise jack
carte son: sudo dietpi-config > audio options > soundcard > rpi-bcm2835-auto
reboot

aplay -l affiche le device
aplay test.wav

et hop, SOLVED

pour le bluetooth, bonne chance :exploding_head:

En fouillant un peu pour libérer du CPU, j’ai vu que:

  • alsa suffit, pas besoin de pulse audio => donc j’ai retiré tous mes scripts autour de pulseaudio

  • pas de bluetooth dans mon cas => retiré tous les scripts et disable bluetooth

  • htop => supprimé les services que j’avais installé et qui me prennent du cpu pour rien

Donc la solution c’est celle du message juste avant:

 j’ai connecté mon enceinte avec la prise jack
carte son: sudo dietpi-config > audio options > soundcard > rpi-bcm2835-auto
reboot

Donc assez triste d’avoir passé autant de temps sur ce soucis juste pour ça, tout le reste n’était pas utile