Piloter un amplificateur hifi Marantz depuis Volumio

Bon ok, pas très productif ces derniers mois :-( J'ai eu pas mal de boulot, des travaux et délaissé un peu le blog. Pour me rattraper, un petit sujet qui sort des thèmes habituels.

Audiophile depuis toujours, j'ai attendu quelques années avant de m'offrir une chaîne hi-fi digne de ce nom. Voici qui est désormais chose faîte et un ensemble Marantz associé à de magnifiques enceintes Focal trônent désormais dans mon salon. Afin d'alimenter tout ce petit monde avec mes fichiers audio, il me fallait une solution sans perte de qualité, souple et pratique à utiliser. Après plusieurs essais de natures différentes, j'ai opté pour un Raspberry Pi 3 associé à une carte HifiBerry Digi+ Pro et une distribution Linux Volumio. Le pied total !!! ... à quelques petits détails près ;-)


Si volumio est contrôlable via mon téléphone ou la tablette numérique qui lui a été dédiée, il n'en est pas de même pour l'amplificateur sur lequel il est branché et qui nécessite l'utilisation de sa télécommande (y compris pour le son car pour éviter toute perte de qualité, ce dernier est transmis par fibre optique à l'ampli et il n'y a donc pas de réglage du volume coté volumio).
Or, si j'ai toujours un téléphone ou une tablette à portée de main, il n'en ai pas de même pour la télécommande (unique). Je pourrais faire l'inverse me direz-vous, à savoir tout commander avec la télécommande et un simple LIRC sur le raspberry mais le confort offert par un portable pour la séléction des albums, webradios ou autres flux audio est incomparable avec l'utilisation d'une simple télécommande.

La Solution


Quelle solution à cette problématique ? Piloter l'ampli à partir de volumio (allumage, mise en veille, volume, sélection de la source et potentiellement toute fonctionnalité disponible sur l'appareil) !

Comment ?


Les amplificateurs Marantz disposent de prises RCA, sur la façade arrière, destinées à transmettre les signaux de la télécommande entre les modules (prises oranges nommées "REMOTE CONTROL" sur la photo). Difficile de trouver de l'information sur le protocole utilisé par ces prises et tous les sites abordant ce sujet évoquent un protocole propriétaire.
Oui mais lequel ?
Vous me connaissez maintenant, je ne suis pas du genre à me contenter d'une réponse de ce type ;-) Oscilloscope, télécommande et on va tester tout ça pour voir ce qu'on peut en déduire.


Déjà au premier abord, il est clair que ce sont des signaux numériques et la période des bits me fait cruellement pensé à la période des bits transmis sur la porteuse à 36kHz des radiocommandes utilisant le protocole RC5. Petite vérification et ... c'est bien du RC5. La seule différence provient du fait que contrairement à sa version transmise par infrarouge, ici pas besoin de porteuse. Plutôt sympa comme découverte, le protocole RC5 de Philips est déjà très bien documenté et ça va sérieusement simplifier le travail.

Reste à envoyer des signaux RC5 depuis un raspberry. Après quelques écritures de codes de test, une idée me vient à l'esprit : Pourquoi ne pas utiliser LIRC ? Ce logiciel est capable de lire des signaux IR mais également d'en émettre (via irsend). S'il est possible d'indiquer qu'il n'y a pas de porteuse ou que la période de la porteuse est tellement grande qu'elle n'a pas le temps de changer d'état pendant la transmission d'un bit, ce soft sera totalement utilisable.

Bon bah, y'a plus qu'à !


On reprend l'oscilloscope et cette fois-ci on le branche sur les GPIO du raspberry pour voir ce qu'on arrive à obtenir comme signal de sortie en fonction des essais de configuration réalisés sur LIRC.

Coté matériel

Les signaux envoyés au Marantz devant être en 5V et les signaux des GPIO étant en 3.3V, je suis parti sur l'utilisation d'un simple optocoupleur (pour être honnête un transistor aurait très bien pu faire l'affaire mais j'étais à court ;-)).

Je ne m'éternise pas sur la réalisation du circuit, j'ai déjà fait pas mal d'articles à ce sujet et cette fois-ci, pour un si petit circuit je me suis contenté de le graver avec la CNC sur une chute qui me restait.


Une fois la prise RCA ajoutée au boitier, on obtient quelque chose de très propre (on a donc de gauche à droite : RCA remote control, SPDIF, COAX).

Configuration de LIRC


Plutôt simple, il suffit d'installer le paquet lirc

apt-get install lirc

d'éditer le fichier /etc/modules et d'y ajouter les lignes

lirc_dev
lirc_rpi softcarrier=0 gpio_in_pin=23 gpio_out_pin=22

Le gpio_in_pin ne sert ici qu'à s'assurer que lirc ne s'active pas sur un port utilisé par le hifiberry digi+ en cas de fausse manip.

Il faut ensuite ajouter la ligne suivante au fichier /boot/config.txt :

dtoverlay=lirc-rpi,softcarrier=0,gpio_in_pin=23,gpio_out_pin=22

Ici la seule complexité était de décrouvrir le paramètre softcarrier qui permet de supprimer la porteuse normalement systématiquement rajoutée par lirc.

Après quelques tâtonnements, voici le fichier de configuration permettant le contrôle de l'ampli - /etc/lirc/hardware.conf :
########################################################
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"

# Don't start lircmd even if there seems to be a good config file
# START_LIRCMD=false

# Don't start irexec, even if a good config file seems to exist.
# START_IREXEC=false

# Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""
########################################################
Enfin, remplacez le fichiet /etc/lirc/lircd.conf par celui-ci :

begin remote

  name  MARANTZ

  bits           11
  flags RC5|CONST_LENGTH
  eps            20
  aeps            0
  header          0     0
  one           889  889
  zero          889  889
  plead         889
  ptrail          0
  foot            0     0
  repeat          0     0
  pre_data_bits   2
  pre_data       0x02
  post_data_bits  0
  post_data      0x0
  pre             0     0
  post            0     0
  gap          113792
  toggle_bit      2
  frequency    36000
  duty_cycle   50

      begin codes
        POWER            0x0000000000000c0c
        VOL-UP           0x0000000000000c10
        VOL-DOWN         0x0000000000000c11
        MUTE             0x0000000000000c0d
        SPEAKERS-AB      0x0000000000000c1d
        LOUDNESS         0x0000000000000c32
        DIRECT           0x0000000000000c22
        CD               0x0000000000000d3f
        PHONO            0x000000000000057f
      end codes

end remote

et voilà, vous avez tout ce qu'il faut coté logiciel pour commander l'amplificateur Marantz. Les seuls signaux qui me manquent sont ceux permettant de sélectionner les sources numériques (optical 1 et 2 par exemple). La raison est simple, Marantz ne respecte pas le RC5 pour ces codes associées à des appareils n'existant pas à l'époque de la définition de la norme RC5. Une visualisation du signal montre un maintien en position basse du signal en cours de transmission du code totalement contraire au codage d'un 1 ou d'un 0 du protocole RC5. Du coup, impossible de simuler ces signaux avec LIRC configuré pour du RC5. Faudra que je me penche là-dessus à l'occasion mais pour le moment ça ne me pose aucun soucis car je n'ai pas besoin d'utiliser cette fonction à distance.

Le plugin Volumio

Maintenant que tout est opérationnel, voici un petit plugin fait à la va vite et sans aucune prétention pour pouvoir exécuter ces commandes depuis volumio 2. Il faut passer par le  menu plugin et le bouton de réglage du plugin marantz pour agir sur l'ampli. C'est tout sauf pratique mais j'ai fait ça de la manière la plus simple coté dev en attendant de trouver un peu de temps pour me pencher dessus afin d'intégrer tout ça un peu mieux. D'ailleurs, si un dev ayant une bonne expérience sur volumio 2 veut contribuer, il est le bienvenu ;-)

Le plugin et les schémas sont dispo ici

Aucun commentaire:

Publier un commentaire