piAudioCast - Lecteur Audio Headless

Encore un projet!

J’ai nommé ce projet le « piCast », mais je vais surment trouver un autre nom, car un projet similaire existe pour Google Cast.

Mais bon, mon projet cette fois si consiste a une lecture de musique sans écran. Je sais que plusieurs petit projet existe, mais aucun n’offrait une solution simple de le faire. Soit que leur code ne marche pas avec le Raspberry Pi Zero que je comptait utilisé, ou est abandonné, ou offre trop de « gugusse » inutile, ou demande un écran.

C’est que je me suis acheté un chapeau audio de base, avec sortie Headphone (et Speaker), Le RPi0 est parfait pour un unité de musique sans fils, sans écran. ET le chapeau que j’utilise m’empêche d’utiliser le GPIO.

Alors j’ai décider de me construire un serveur en Python pour un serveur Web de base, qui va communiquer avec le service audio que j’ai créé avec les libs VLC pour Python.

L’application Python fait deux choses; serveur Web et lecture de musique
Une interface Web est mis a disposition avec des commandes de style Web Api permet de contrôler la lecture.

L’interface Web commande la lecture, cette même interface va interroger le serveur pour obtenir les détails de lecture.

Comme dans cette capture, vous avez l’interface complet (actuel).

  • Affichage du temps actuel de la piste / temps total (ici j’écoute une radio internet)
  • Icone de volume (sinon une icone mute si le lecteur est muté) et le niveau du volume
  • Icones pour baisser le volume, le monter ou le muter
  • Le « Enter URL » permet de donner un lien radio http directement (avec le bouton pour le lancer)
  • Les boutons BACK ett NEXT sont disponible quand la lecture auto d’un dossier est activé. Le pause… pause la lecture et le stop… l’arrête. Le « WIFI » est pour lire ma radio internet en un seul click.
  • L’icone de « Playlist » est pour activer la lecture automatique du dossiers actuel, le « reload » est pour actualiser le dossier courant.
  • Et pour finir, il est possible de naviguer dans les dossiers et démarrer une lecture d’un média depuis la liste généré en bas et navigable sans rechargement de la page.
  • Les icones en haut à droite sont pour fermer/redémarrer ou avoir les stats, sécurisé par mot de passe.

Le tout est en Ajax/JSon

L’interface Web gère aucune automatisation, car l’idée est de consulter l’interface, lui donner une « job » de lecture et fermer l’interface. Alors le RPi reste indépendant.

La lecture du dossier courant est géré par le script Python, ont lui fournis le dossier à lire et il va ce créer une liste de lecture pour jouer. Il sera possible d’avancer ou de reculer dans la lecture. Une fois le dossier lu, il s’arrête.

Les fichiers de musique sont dans « /home/pi/music », et prend en charge les clés USB (FAT/EXT*, pas NTFS). Un dossier avec des lien symbolique a été ajouté. Les USB sont géré par USBMOUNT. Ils sont donc accessible via « /home/pi/music/USB/usb* » ou le « * » est soit 1 à 4 (pour les usb0 à usb3 dans /media).

Sans écran le Raspberry roule très rapidement. La lecture de mp3 ce fait sans problème. Mais pour les midi, étrangement, il charge le CPU comme un fou. Mais qui écoute des midi de nos jours ?


Je suis encore a travailler sur des ajouts, j’ai encore des idée a y ajouter.

  • [Done] Configuration Wifi par clé USB
  • Lecture aléatoire
  • Lecture du dossier ET sous dossier sur demande
  • Lecture en répétition
  • Envoie de fichier depuis l’interface Web
  • Voir si je peux faire de quoi par Bluetooth (control, audio stream, etc…)

Le design Web est a améliorer, je sais.

Voici le genre de résultat API que le serveur retourne;

L’api Web inclus ces commandes pour la lecture de média;

  • /api/play?file=(depuis /home/pi/music, si commence par http, passe en lecture internet)
  • /api/stop
  • /api/playall?path=(depuis /home/pi/music, si « path » est égale à « stop », il arrête le mode)
  • /api/volume?v=(plus,minus)
  • /api/info
  • /api/next
  • /api/back
  • /api/files?path=(depuis /home/pi/music)
  • /api/pause

Avec cette api, il est donc possible de changer l’interface sans altérer le code de base, et donc possible de faire comme des « thèmes ». Les commandes peuvent être intégrer dans d’autres types d’applications, comme Android.

Bonjour,

Beau travail, bravo. C’est bien de proposer des projets.
As tu envisagé de faire un tuto pour l’installation ?

Bonne continuation.

A+

Je vais le mettre sur GitHub bientot. Tout comme mes autres projets.

Les fichiers sont là, je vais travailler une guide d’installation, mais si vous êtes débrouillard, vous devriez savoir quoi faire :slight_smile:

le GitHub a été mis a jour avec le guide d’installation. Je tiens a spécifier qu’il auto-configure le Wifi. Il suffit de créer le document wpa_supplicant.conf comme le Raspberry Pi le requière et le mettre à la racine d’une clé USB. Il va alors la prendre en charge en la copiant dans le dossier /boot, et redémarrer. Le fichier sera renommé (sur la clé) pour éviter un « loop » si la clé reste inséré.

Si vous avez plusieurs réseau (par exemple la maison et le bureau), vous pouvez inclure tout les réseaux Wifi à gérer dans le fichier pour ne pas devoir faire cette manipulation à chaque déplacement de l’appareil.

Aure chose, oublié le NTFS qui n’est pas correctement pris en charge sous Raspbian OS lite, il faut une clé USB en format Linux ou en FAT.