Member of The Internet Defense League

Information Hacking

Une musicbox Rpi3 sans…musicbox

Sunday, June 12, 2016

C’est en voulant utiliser la distribution Musicbox, qui permet de faire un juke box [connecté à une plateforme de streaming musical] sur Rapsberrypi, que j’ai été amené à monter la bête moi-même. La distribution Musicbox est en réalité une Raspbian qui intègre un serveur Mopidy, et la version en ligne n’est pas compatible avec le jeu d’instruction 64bits de la toute récente Rpi3. Pas grave, il suffit d’installer la dernière Raspbian, le serveur Mopidy, l’extension Spotify, un client http, une carte son HifiBerry (un shield Rpi avec sortie mini-jack) et tout fonctionne à merveille. Au point qu’avec un petit ampli 2X12 Watts et des enceinte haute fidélité (100 W RMS 93db/W/M - 8 Ohms), la qualité du son est… bluffante.

Courte recette pour monter sa Musicbox sans se prendre la tête. Avec un compte Spotify payant (Premium à 9,99€)

Ingrédients :

— Une Rpi3
— Une carte son Hifiberry DAC+ Standard phone jack version, 29,90€
— Une Raspbian (la plus récente est basée sur Debian Jessie)
— Un serveur Mopidy
— L’extension Spotify
— Un [ou plusieurs] client http de streaming : Mopify et Musicbox webclient dans cette recette

Durée de la recette : 1h de préparation - 5 minutes de cuisson

La recette :

Installer Raspbian sur une carte HDSC
Booter la Rpi3
Se connecter en ssh [compte par défaut : pi / password par défaut : raspberry]

— Ajout de la clef PGP de mopidy

wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -

— Mettre à jour la liste de paquets

sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/jessie.list

— Installer Mopidy

sudo apt-get update
sudo apt-get install mopidy

— Mises à jour

sudo apt-get update
sudo apt-get dist-upgrade

— Possibilité de lister toutes les extensions possibles de Mopidy :

apt-cache search mopidy

— Installer l’extension Spotify

sudo apt-get install mopidy-spotify

Configuration de la bestiole :

Le fichier de config créé par défaut après l’installation se trouve dans le home de l’utilisateur pi :

~/.config/mopidy/mopidy.conf (ou bien /home/pi/.config/mopidy/mopidy.conf

La configuration de départ, générée par Modipy est assez simple et ressemble en général à ça :

[core]
cache_dir = $XDG_CACHE_DIR/mopidy
config_dir = $XDG_CONFIG_DIR/mopidy
data_dir = $XDG_DATA_DIR/mopidy
max_tracklist_length = 10000

[logging]
color = true
console_format = %(levelname)-8s %(message)s
debug_format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)sn %(message)s
debug_file = mopidy.log
config_file =

[audio]
mixer = software
mixer_volume =
output = autoaudiosink
buffer_time =

[proxy]
scheme =
hostname =
port =
username =
password =

Mon fichier mopidy.conf, après l’avoir modifié pour qu’on puisse se connecter dessus avec un navigateur en http [sur l’url musicbox.local:8080] ressemble à ça :

[core]
cache_dir = $XDG_CACHE_DIR/mopidy
config_dir = $XDG_CONFIG_DIR/mopidy
data_dir = $XDG_DATA_DIR/mopidy
max_tracklist_length = 10000

[logging]
color = true
console_format = %(levelname)-8s %(message)s
debug_format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)sn %(message)s
debug_file = mopidy.log
config_file =

[loglevels]
cherrypy = warning
pykka = info

[audio]
mixer = software
mixer_volume = 80
output = alsasink
buffer_time =

[proxy]
scheme =
hostname =
port =
username =
password =

[mopify]
enabled = true
debug = false

[musicbox_webclient]
enabled = true
musicbox = false
websocket_host =
websocket_port =
on_track_click = PLAY_ALL

[spotify_tunigo]
enabled = true
region =
sub_genres = true
cache_time = 3600

[spotify]
enabled = true
username = Drapher
password = ********
bitrate = 320
volume_normalization = true
private_session = false
timeout = 10
allow_cache = true
allow_network = true
allow_playlists = true
search_album_count = 20
search_artist_count = 10
search_track_count = 50
toplist_countries =

[mpd]
enabled = true
hostname = 0.0.0.0
port = 6600
password =
max_connections = 20
connection_timeout = 60
zeroconf = Mopidy MPD server on $hostname
command_blacklist =
listall
listallinfo
default_playlist_scheme = m3u

[http]
enabled = true
hostname = 0.0.0.0
port = 8080
static_dir =
zeroconf = $hostname

[stream]
enabled = true
protocols =
http
https
mms
rtmp
rtmps
rtsp
metadata_blacklist =
timeout = 5000

[m3u]
enabled = true
base_dir = $XDG_MUSIC_DIR
default_encoding = latin-1
default_extension = .m3u8
playlists_dir =

[softwaremixer]
enabled = true

[file]
enabled = true
media_dirs =
$XDG_MUSIC_DIR|Music
~/|Home
show_dotfiles = false
follow_symlinks = false
metadata_timeout = 1000

[local]
enabled = false

Le serveur quand on le lance, doit afficher ça :

INFO Starting Mopidy 2.0.0
INFO Loading config from builtin defaults
INFO Loading config from /home/pi/.config/mopidy/mopidy.conf
INFO Loading config from command line options
INFO Enabled extensions: mopify, spotify, mpd, http, stream, spotify_tunigo, m3u, softwaremixer, file, musicbox_webclient
INFO Disabled extensions: local
INFO Starting Mopidy mixer: SoftwareMixer
INFO Mixer volume set to 80
INFO Starting Mopidy audio
INFO Starting Mopidy backends: SpotifyTunigoBackend, SpotifyBackend, StreamBackend, M3UBackend, FileBackend
INFO Audio output set to “alsasink”
INFO Starting Mopidy core
INFO Logged in to Spotify in offline mode
INFO Starting Mopidy frontends: QueueManagerFrontend, MpdFrontend, HttpFrontend
INFO MPD server running at [::ffff:0.0.0.0]:6600
INFO HTTP server running at [::ffff:0.0.0.0]:8080
INFO Starting GLib mainloop

Stopper le service :

sudo service mopidy stop

Bref, jusque là, tout va bien, mais on ne peut toujours pas se connecter sur spotify pour faire jouer de la musique.

Installer le ou les clients http :

J’ai choisi d’installer deux clients http, le premier (musicbox client) parce que c’est celui de la distrib musicbox, et le second (mopify) parce qu’il est “beau”.

Installation de Mopify :

sudo pip install Mopidy-Mopify

Installation de Musicbox client :

pip install Mopidy-MusicBox-Webclient

La liste de tous les clients Mopidy est bien entendu sur le site de Mopidy

Là, ça fonctionne (en suivant mon fichier de conf, une fois le serveur mopidy lancé), il suffit de se connecter sur musicbox.local:8080 (en ayant bien entendu inscrit musicbox au préalable dans le fichier /etc/hostname et quitte à faire dans /etc/hosts)

clients-http-mopidy.png

Pour tester le son en sortie, il est possible de brancher un mini jack sur la sortie idoine de Rpi3 vers un ampli/enceintes, mais le son sera très mauvais, avec un volume faible. La carte son de la Rpi3 est franchement trop faiblarde.

Installation du shield Hifiberry DAC+ Standard phone jack version

Suffit de le pluger sur les GPIO de la Rpi3. Point.

hifiberry-dacplus-phone.png

Ensuite, la gestion des drivers est plutôt simple, très bien indiquée sur le site du vendeur

En gros :
— Retirer du fichier /etc/modules la ligne : snd_bcm2835
(pour que le driver de la Rpi3 soit désactivé)

— Editer /boot/config.txt et ajouter :
dtoverlay=hifiberry-dacplus

Créer le fichier /etc/asound.conf

Y insérer le code suivant :
pcm.!default {
type hw card 0
}
ctl.!default {
type hw card 0
}

— Rebooter la bête

— Tester avec la commande : aplay -l

Vous devriez avoir ça :

**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: sndrpihifiberry [snd_rpi_hifiberry_dacplus], périphérique 0: HiFiBerry DAC+ HiFi pcm512x-hifi-0 []
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0

C’est cuit ou presque.
Manque quand même que le serveur se lance tout seul au démarrage en tâche de fond, parce que sinon il y a obligation à le lancer à la mimine en ssh.

Le fichier de conf utilisé est celui de l’utilisateur pi, il faut donc le copier et remplacer le fichier mopidy.conf du démon mopidy :

Un copié-collé de votre mopidy.conf en sudo dans le /etc/mopidy/mopidy.conf ou bien un sudo cp ~/.config/mopidy/mopidy.conf /etc/mopidy/mopidy.conf

Pour installer mopidy en service système :

sudo systemctl enable mopidy

puis :

sudo dpkg-reconfigure mopidy

Le script du démon mopidy au démarrage se trouve dans /etc/init.d/mopidy

#!/bin/bash
# mopidy daemon
# chkconfig: 345 20 80
# description: mopidy daemon
# processname: mopidy
### BEGIN INIT INFO
# Provides: mopidy deamon
# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start mopidy daemon at boot time
# Description: Enable mopidy music server
### END INIT INFO

DAEMON_PATH=”/usr/bin/”

DAEMON=mopidy
DAEMONOPTS=”"

NAME=mopidy
DESC=”My mopidy init script”
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

case “$1” in
start)
echo “Starting Mopidy Daemon”
start-stop-daemon –start –chuid pi –background –exec /usr/bin/mopidy
–pidfile $PIDFILE –make-pidfile
— 2>/var/log/mopidy.log
;;
stop)
echo “Stopping Mopidy Daemon”
start-stop-daemon –stop –exec /usr/bin/mopidy –pidfile $PIDFILE
;;

restart)
$0 stop
$0 start
;;

*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac

Les droits :

sudo chmod +x /etc/init.d/mopidy

Redémarrage pour tester la bestiole : vous vous connectez avec un navigateur sur http://musicbox.local:8080

Sélectionnez le client de votre choix. Lancez un morceau…

Et là, si votre Hifiberry est branchée à un mini jack vers RCA, sur un ampli équipé d’enceintes de qualité, vous risquez d’être bluffé. Le Ogg vorbis de spotify à 320Kbps est bien meilleur qu’un MP3 de base, et tous vos potes pourront choisir les morceaux qu’ils veulent faire jouer. Soirées sympathiques en vue…

Petite note complémentaire : sur IOS, la résolution de nom fonctionne très bien, mais pas sur androïd. Il faut donc que les équipements sous android se connectent au client http… via l’IP. Un scanner réseau pour repérer l’IP de la Rpi reste la solution la plus simple. Ou bien installer un écran sur la Rpi3 qui renvoie son IP…

Et si Twitter était un non-sens journalistique ?

Tuesday, May 31, 2011

Twitter est devenu incontournable pour traiter les directs. Le résultat n’est pas toujours à la hauteur et son utilisation peut même devenir ridicule, comme la première audience de DSK nous l’a révélé.

Tout le monde attendait les tweets de ceux qui “y étaient” : devant la demeure de DSK, devant le tribunal, puis dans le tribunal. On allait tous avoir les scoops en temps réel, sans attendre[Read More…]