Linux : Script bash pour lecture aléatoire de musique

Il s'agit d'un petit script de mon cru, offrant un menu de sélection de plusieurs listes de lecture.
Ce script est installé sur un Raspberry Pi faisant office de serveur multimédia
Il est équipé d'un petit écran LCD (3.5"), taille insuffisante pour une utilisation convenable de l'interface graphique Lxde.
Je me retrouve donc en mode console, et ce script est parfaitement adapté à ce type d'affichage.
Il est bien sûr tout à fait possible de l'utiliser sur un poste en réseau par une connexion SSH...

Distribution utilisée : Raspbian Jessie sur un RPI B+

 Prérequis :

    Voici les outils dont vous aurez besoin :

  • Le programme moc (un player audio capable de tourner en tâche de fond et de gérer des listes)
    sudo apt-get install moc sur une Debian-like distro

  • Le programme mplayer (utilisé ici pour sa capacité à lire un flux audio en streaming)
    sudo apt-get install mplayer

  • Un espace de stockage pour votre musique


Pour ce qui est du stockage, j'utilise un clef USB de 256GO où se trouve condensés l'ensemble de mes CD rippés au format natif WAV 44100 Khz 16 Bits.

Carte son utilisée : Terratec Aureon Dual USB qui fonctionne très bien sur le Raspberry.
Cf annexe pour sa configuration avec alsa.

La photo du truc...
Terratec Aureon
Terratec Aureon Dual USB
Raspberry Pi

 Le script :


Pour une utilisation plus simple, j'ai opté pour l'autologin, ce qui évite de rentrer un login/password avant le lancement du script.
Pour cela il suffit de modifier le fichier /etc/inittab comme ceci :

#1:2345:respawn:/sbin/getty --noclear 38400 tty1
1:2345:respawn:/bin/login -f music tty1 /dev/tty1 2>&1

"music" étant le nom de l'utilisateur, le script se trouve dans son répertoire $HOME.

Un alias a été créé dans le fichier .bashrc de l'utilisateur :
alias m='bash /home/music/scriptmusic.sh'
(c'est plus facile à taper quand on utilise un clavier bluetooth miniature...)

Tous les fichiers musicaux sont sur une clef USB formatée ext4 :
sudo fdisk /dev/sda
sudo mkfs.ext4 /dev/sda1


le montage de la clef se fait au travers du fichier /etc/fstab :
/dev/sda1 /mnt/usb1 ext4 user,defaults,noauto,noatime 0 1

 Annexe



Ma config pour Alsa :

/etc/modules :
Commentez snd-bcm2835 (#snd-bcm2835)

/etc/asound.conf :
pcm.!default {
type hw card 0
}
ctl.!default {
type hw card 0
}

/etc/modprobe/alsa-base.conf
Trouver la ligne :
options snd-usb-audio index=-2
Mettre 0 en index. (options snd-usb-audio index=0)

Si tout va bien, la commande aplay -l devrait vous retourner quelque chose comme :

**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: Device [USB PnP Sound Device], périphérique 0: USB Audio [USB Audio]
  Sous-périphériques: 0/1   Sous-périphérique #0: subdevice #0


Vous pouvez régler le volume général par alsamixer

ENJOY !

 Egalisation / equalizer / EQ     MAJ du 21/03/2016



Petit bonus :

Si comme moi vous n'êtes pas pleinement satisfait du filtrage de votre installation (j'ai des enceintes DIY), vous avez la possibilité d'ajoindre à tout ça un peu d'equal.
Il y a sans doute plusieurs possibilités, mais j'ai choisi simplement d'ajouter un plugin pour alsa, ce qui est plutôt ergonomique et rapide à mettre en oeuvre.
Tout d'abord, vous devez installer le paquet libasound2-plugin-equal (qui se trouve déjà dans les dépôts de la distribution Raspbian) :
sudo apt-get install libasound2-plugin-equal

Ensuite, modifiez le fichier /etc/asound.conf en y ajoutant :

ctl.equal {
type equal;
}

pcm.plugequal {
type equal;
slave.pcm "plughw:0,0"
}

pcm.!default {
type plug;
slave.pcm plugequal;
}

Pour prendre en compte les modifications, lancez sudo alsa reload
Pour paramétrer votre EQ : alsamixer -D equal
alsamixer va automatiquement créer un fichier .alsaequal.bin dans votre répertoire utilisateur.
Ensuite vous avez la possibilité d'enregistrer plusieurs presets, simplement avec cette astuce :

- copier le fichier .alsaequal.bin après chaque paramétrage du mixer en lui attribuant un nom explicite, par exemple .alsaequal-classique.bin ou .alsaequal-radio.bin
(j'aime enlever des graves quand j'écoute la radio)

Vous pouvez modifier le script (scriptmusic.sh) en ajoutant une ligne, par exemple juste après la lettre initiant le bloc d'instruction de CASE :

a)
cp ~/.alsaequal-music.bin ~/.alsaequal.bin
if [ -n "$var_mplayer" ]
then
killall mplayer
...

Ce qui aura pour effet de "charger" l'égalisation adaptée à votre sélection.
Je vous conseille aussi de copier le fichier .alsaequal.bin en alsaequal-flat.bin après avoir paramétré une réponse en fréquence plate de l'EQ (tous les valeurs à 60, par exemple)
Ca va vous permettre de rebasculer facilement sur un paramétrage de base, par exemple lorsque vous quitter le script, en ajoutant après l'indice q) :

q)
cp ~/.alsaequal-flat.bin ~/.alsaequal.bin
if [ -n "$var_mplayer" ]
then
...

Puissssssant, non ?

 Mise à jour du 09/04/2017    



Suite à la migration de mon système d'écoute sur un Pi3, et l'installation de la dernière Raspbian, il ya quelques