SON HI-FI AVEC UN RASPBERRY PI

Le son de base du Raspberry ne vaut pas grand, chose, normal à ce prix là.

Mais si vous voulez avoir un son Hi-Fi sur votre Raspberry pour le transformer en Juke-Box ou autre média center, vous pouvez suivre l’article ci-dessous :

Il vous faudra vous procurer par exemple la carte son D.A.C pour le Raspberry Pi 3 ci-dessous :

Pour l’article j’utilise le Model : Pifi Dac+ V2.0 avec la Puce PCM5122

Vous la trouverez à partir de 14€ sur le net, sa qualité est très bonne, c’est pour cela que je la recommande.

Niveau hardware : Il suffit de la brancher sur les GPIO du Raspberry et de relancer votre machine qui devra déjà avoir Raspbian Stretch installé et mis à jour auparavant.

Configuration de la carte :

En fait c’est un clone de la carte Hifiberry, elle utilise les même drivers.

Commencer par taper les commandes :

sudo apt-get install pulseaudio -y

sudo apt-get install pavucontrol paprefs -y

Editer config.txt

sudo nano /boot/config.txt

Modifier le fichier avec les parametres suivants :

dtparam=i2s=on       (enlever le # pour activer)

Ajouter les deux lignes :

dtoverlay=hifiberry-dacplus
dtoverlay=lirc-rpi:gpio_in_pin=26

mettre # pour desactiver la commande devant :

#dtparam=audio=on
#dtoverlay=lirc-rpi

Ensuite éditer :

sudo nano /etc/asound.conf

Et ajouter à la fin

pcm.!default {
type hw card 0
}
ctl.!default {
type hw card 0
}

Control x et O pour sauvegarder et sortir

sudo reboot

Et voilà, rendez vous sur l’interface graphique du raspberry et lancer pulse audio en mode graphique, vous devrez voir apparaître la nouvelle carte son comme dans l’image ci-dessous :

Brancher le jack ou la sorte RCA sur votre ampli et lancer un son en FLAC, vous verrez de suite la qualité.

Attention si vous avez des grésillements, comme moi au début, c’est un problème de masse, prenez des câbles de qualité pour relier votre ampli au DAC.

Enjoy Music !!!

PILOTER VOTRE MUSIQUE A LA VOIX

Dans cet article, je vous indique ma façon de piloter sa musique avec le logiciel médiacenter KODI installé sur un raspberry PI 3 (Stretch), mis à jour dans mon exemple.

Je pars du principe que KODI est installé et fonctionnel. Il faut simplement paramétrer KODI pour qu’il puisse être commandé de l’extérieur dans les réglages de KODI. Choisissez un port, le nom de user et le mot de passe.

Le principe est le suivant :

Google Assistant active une requête HTTP qui pilote KODI.

Pour cela, j’utilise l’appli IFTTT sur mon téléphone car je n’ai pas de Google Home.

Dans l’appli IFTTT, créer une nouvelle applet
Pour IF : choisissez Google Now : entrer une phrase de commande simple : ex : Mute le son
Pour THEN : choisissez  Webhooks : coller la requête http qui correspond à mute le son que je vous expliquerai ci-dessous.

Ces requêtes sont un travail de recherche qui m’a pris quelques heures pour récupérer toutes les commandes utiles de KODI. J’espère qu’elles vous plairons.

 

Pour comprendre, voici un exemple générique de requête :

http://user_kodi:mot_de_passe_kodi@ip:port_ecouté/jsonrpc?request={« jsonrpc »: »2.0?, »method »: »Xxxxx.XxxxXxx », « params »:{« xx »: »xx », »xx »:x}, »id »:1}

Toutes les requêtes doivent contenir ces informations et être correctement écrite pour fonctionner !!!

Dans toutes les requêtes suivantes, j’ai coupé le début pour éviter la répétition. De plus, une fois bien paramétré, avec le bon user,mdp,ip et port, vous pouvez faire un copier-coller pour les utiliser facilement.

Dans KODI, Il y a deux lecteurs pour le son 0 ou 1 à modifier suivant le lecteur utilisé.

Lecteur 0 : Commande de musique venant directement de m’interface
Lecteur 1 : Commande musique venant de l’externe.

Pour connaitre le lecteur actif, coller la requête, suivante, une fois complété de la 1ere partie dans votre navigateur:

{« jsonrpc »: « 2.0 », « method »: « Player.GetActivePlayers », « id »: 1}

Réponse : playerid:1 ou playerid:0

Voici la liste des commandes raccourcies :

STOP
{« jsonrpc »: »2.0?, »id »:1, »method »: »Player.Stop », »params »:{« playerid »:1}}

PLAY/PAUSE
{« jsonrpc »: « 2.0 », « method »: « Player.PlayPause », « params »: { « playerid »: 0 }, « id »: 1}

VOLUME+
{« jsonrpc »: »2.0?, »id »:1, »method »: »Application.SetVolume », »params »:{« volume »: »increment »}, »id »:1}

VOLUME-
{« jsonrpc »: »2.0?, »id »:1, »method »: »Application.SetVolume », »params »:{« volume »: »decrement »}, »id »:1}

MUTE
{« jsonrpc »: « 2.0 », « method »: « Application.SetMute », « params »: {« mute »: »toggle »}, « id »: 1}

MET LE SON A 10
{« jsonrpc »: « 2.0 », « method »: « Application.SetVolume », « params »: {« volume »:10}, « id »: 1}

RETOUR 30s
{« jsonrpc »: « 2.0 », « method »: « Player.Seek », « params »: [1, »smallbackward »], »id »:1}

AVANCE 30s
{« jsonrpc »: « 2.0 », « method »: « Player.Seek », « params »: [1, »smallforward »], »id »:1}

CLEAN MEDIATHEQUE
{« jsonrpc »: »2.0?, »method »: »AudioLibrary.Clean », »params »:[true], »id »:1}

SCAN LIBRAIRIE
{« jsonrpc »: »2.0?, »method »: »AudioLibrary.Scan », »params »:{« showdialogs »:true}, »id »:1}

ALEATOIRE ON
{« jsonrpc »: »2.0?, »method »: »Player.SetShuffle », »params »:{« playerid »:0, »shuffle »:true}, »id »:1}

ALEATOIRE OFF

{« jsonrpc »: »2.0?, »method »: »Player.SetShuffle », »params »:{« playerid »:0, »shuffle »:false}, »id »:1

REPEAT ALL
{« jsonrpc »: « 2.0 », « method »: « Player.SetRepeat », « params »: { « playerid »: 1, « repeat »: « all » }, « id »: 1} — repeat all

REPEAT OFF
{« jsonrpc »: « 2.0 », « method »: « Player.SetRepeat », « params »: { « playerid »: 1, « repeat »: « off » }, « id »: 1} — repeat off

CHANSON SUIVANTE
{« jsonrpc »: « 2.0 », « method »: « Player.GoTo », »params »:{« playerid »:0, »to »: »next »}, »id »:1}

CHANSON PRECEDENTE
{« jsonrpc »: « 2.0 », « method »: « Player.GoTo », »params »:{« playerid »:0, »to »: »previous »}, »id »:1}

LANCER UNE PLAYLIST NOMINATIVE + OPTION REPEAT ALL
{« jsonrpc »: »2.0?, »id »:1, »method »: »Player.Open », »params »:{« item »:{« file »: »special://profile/playlists/music/reggae.m3u »}, »options »:{« repeat »: »all »}}}

PLAYLIST PARTY MODE
{« jsonrpc »: »2.0?, »id »:1, »method »: »Player.Open », »params »:{« item »:{« partymode »: »music »}}} »

LANCER RADIO (ex url de NOVA)
{« jsonrpc »: »2.0?, »id »:1, »method »: »Player.Open », »params »:{« item »:{« file »: »http://statslive.infomaniak.ch/playlist/radionova/radionova-high.mp3/playlist.m3u »}}}

CLEAR PLAYLIST LECTEUR 0
{« jsonrpc »: »2.0?, »method »: »Playlist.Clear », »params »:{« playlistid »:0}, »id »:1}

NAVIGUEZ DIRECT A MUSIC
{« jsonrpc »: »2.0?, »method »: »GUI.ActivateWindow », »params »:{« window »: »music », »parameters »:[« musicdb »]}, »id »: »1?}

VUE DIRECT MUSIQUE/ALBUMS
{« jsonrpc »: « 2.0 », »id »:1, « method »: « GUI.ActivateWindow », « params »: { « window »: « music », « parameters »: [ « Albums » ] }, « id »: 1 }

VUE DIRECT MUSIQUE/GENRES
{« jsonrpc »: « 2.0 », »id »:1, « method »: « GUI.ActivateWindow », « params »: { « window »: « music », « parameters »: [ « Genres » ] }, « id »: 1 }

NAVIGUER DIRECT A GENRES ELECTRO (3)
{« jsonrpc »: »2.0?, »method »: »GUI.ActivateWindow », »params »:{« window »: »music », »parameters »:[« musicdb://genres/3?]}, »id »: »1?}

NAVIGUEZ DIRECT A GENRE 4 /HIP HOP/RAP chez moi
{« jsonrpc »: »2.0?, »method »: »GUI.ActivateWindow », »params »:{« window »: »music », »parameters »:[« musicdb://genres/4?]}, »id »: »1?}

# LE NUMÉRO APRES « GENRES/x » EST A TESTER AU CAS PAR CAS POUR VOIR A QUOI IL CORRESPOND, JE NE SAIS PAS COMMENT C’EST ATTRIBUE PAR KODI.

VUE DIRECT A ARTISTE n°57
http://kodi:azerty@192.168.0.9:8383/jsonrpc?request={« jsonrpc »: »2.0?, »method »: »GUI.ActivateWindow », »params »:{« window »: »music », »parameters »:[« musicdb://artists/57?]}, »id »: »1?}

INFO thumbnail
http://kodi:azerty@192.168.0.9:8383/jsonrpc?request={« jsonrpc »: »2.0?, »method »: »Player.GetItem », »params »:{« properties »:[« thumbnail », « fanart »], »playerid »:0}, »id »: »AudioGetItem »}

INFO LECTURE EN COURS
http://kodi:azerty@192.168.0.9:8383/jsonrpc?request={« jsonrpc »: « 2.0 », « method »: « Player.GetItem », « params »: { « properties »: [« title », « album », « artist », « duration », « thumbnail », »fanart », « streamdetails »], « playerid »: 0 }, « id »: « VideoGetItem »}

INFO VOLUME SON
http://kodi:azerty@192.168.0.9:8383/jsonrpc?request={« jsonrpc »: « 2.0 », « method »: « Application.GetProperties », « params »: {« properties »: [« volume »]}, « id »: 1}

PLAYSLIST LECTEUR 1 INFO SUR LE CONTENU
« jsonrpc »: « 2.0 », « method »: « Playlist.GetItems », « params »: { « properties »: [« title », « album », « artist », « duration »], « playlistid »: 1 }, « id »: 1}

INFO SUR LE MEDIA EN COURS
« jsonrpc »: « 2.0 », « method »: « Player.GetItem », « params »: { « properties »: [« title », « album », « artist », « season », « episode », « duration », « showtitle », « tvshowid », « thumbnail », « file », « fanart », « streamdetails »], « playerid »: 1 }, « id »: « VideoGetItem »}

INFO PLAYLIST
« jsonrpc »: « 2.0 », « id »: 1, « method »: « Playlist.GetPlaylists »}

FLÈCHE DROITE
« jsonrpc »: « 2.0 », »method »: »Input.Right », »id »:1}

FLÈCHE HAUT
« jsonrpc »: « 2.0 », »method »: »Input.Up », »id »:1}

ACCUEIL PAGE
jsonrpc »: »2.0?, »method »: »Input.Home », »id »:1}

OK/VALIDER
jsonrpc »: »2.0?, »method »: »Input.Select », »id »:1}

RETOUR
jsonrpc »: »2.0?, »method »: »Input.Back », »id »:1}

CONTEXT MENU
jsonrpc »: »2.0?, »method »: »Input.ContextMenu », »id »:1}

Voilà, après bien sur il existe encore d’autres commandes et variantes, mais avec celles-ci on a les plus importantes.

Après cela, j’ai crée des scénario dans Jeedom afin de créer des commandes complexes qui n’existe pas nativement.

De nombreux tuto traitent des scénarios dans Jeedom, je ne l’expliquerais pas ici.

Regardez la vidéo qui suit pour voir le résultat, c’est un peu flou, mais on entend/voit bien les commandes.

Références :

http://kodi.wiki/view/JSON-RPC_API