Outils pour utilisateurs

Outils du site


archlinux:mpd_goflex_home

Serveurs/Players de musique sur GoFlex Home/Net

  • Update : GoFlexNet n'est plus utilisé. Le GoFlexHome ne joue plus le rôle de player de musique, il fournit actuellement trois serveurs :
    • MinimServer : pour les fichiers locaux.
    • LMS : pour streaming internet (spotify, radios)
    • MiniDLNA : pour des photos et vidéos
  • Résumé :
    • Upmpdcli : UPnP Media Renderer front-end for MPD. Cette solution combine MPD et UPnP.
      • Une image sur les ressources utilisées pendant la lecture d'un fichier flac 24 bits / 96 kHz.
        upmpdcli_minidlna_24-96.jpg (avec MiniDLNA)
        upmpdcli_minimserver_24-96.jpg (avec MinimServer)
    • LMS (Logitech Media Server) : Il est plus complet que MPD (fichiers audio, une base préconfigurée de webradios, podcasts, Spotify, Qobuz). Ses interfaces utilisateurs sont plus ergonomiques que celles des clients mpd. Par contre, il consomme plus de RAM.
    • MPD : installation facile et très bien pour lire les fichiers audio.
    • Mopidy : testé, non utilisé.
    • MiniDLNA : Audio et vidéos/TV.
    • Note : Le serveur LMS cohabite très bien avec MPD, ils peuvent utiliser les mêmes fichiers musicaux. Ils peuvent aussi partager les mêmes pochettes locales nommées “cover.jpg” et placées dans le dossier d'un album.

MinimServer et Upmpdcli+MPD

  • Il s'agit d'utiliser la combinaison de
    • UPnP media server : MinimServer
      • Utiliser tag update. Voici le fichier tagupdate.txt
      • Installer MinimWatch sur le portable HP pour contrôler MinimServer. Il faut configurer son firewall pour accepter la machine du MinimServer :
        # Upplay et MinimWatch. Cette adresse MAC est celle du GoFlex Home
        ACCEPT          net:~00:10:75:29:87:57             $FW    udp,tcp
        # Upplay et MinimWatch. Cette adresse MAC est celle du GoFlex Net
        ACCEPT          net:~00:10:75:26:6f:76             $FW    udp,tcp

        dans /etc/shorewall/rules.

      • Ma config :
    • UPnP media renderer : mpd + upmpdcli
      • Pour compiler, installer et configurer upmpdcli, j'ai adapté les PKGBUILD pour libupnp patché, PKGBUILD pour libupnpp et PKGBUILD pour upmpdcli pour créer les packages.
        • Le script pour systemd est ici. J'utilise /etc/systemd/system/upmpdcli.service
          [Unit]
          Description=UPnP Renderer front-end to MPD
          After=syslog.target mpd.service
          
          [Service]
          Type=simple
          # Note: if start fails check with "systemctl status upmpdcli"
          ExecStart=/usr/bin/upmpdcli -c /etc/upmpdcli.conf
          
          [Install]
          WantedBy=multi-user.target
      • :!: upmpdcli tourne en tant que user upmpdcli, il faut le créer. La commande
        useradd -r -d /usr/share/upmpdcli upmpdcli

        crée un utilisateur système avec /usr/share/upmpdcli comme home.

    • UPnP control point (supportant OpenHome) : LUMÏN ou mconnect player (free) sur iphone/ipad, BubbleUPnP ou LUMÏN sur smartphone/tablette android, Upplay sur un ordinateur de bureau.

Logitech Media Server

Installer LMS (Logitech Media Server)

  • Update (LMS 7.9) : Utiliser AUR logitechmediaserver.
    1. Compiler
      $ wget https://aur.archlinux.org/cgit/aur.git/snapshot/logitechmediaserver.tar.gz
      $ tar zxvf logitechmediaserver.tar.gz
      $ cd logitechmediaserver
      $ sudo echo 60 > /proc/sys/vm/swappiness
      $ makepkg -s
    2. Installer et vérifier le serveur
      $ sudo pacman -U logitechmediaserver-7.9.0.arch5-1-arm.pkg.tar.xz
      $ sudo systemctl enable logitechmediaserver
      $ sudo systemctl start logitechmediaserver
      $ sudo systemctl status logitechmediaserver
  • Historique (LMS 7.8) :
    • Depuis le mars 2012, nouveaux dépôts git https://github.com/Logitech et LMS Changelogs. Voici ce que j'ai cru comprendre l'organisation de ces dépôts :
      • Le dépôt slimserver correspond au LMS compilé “prêt à être utilisé” sur certaines configurations systèmes (https://github.com/Logitech/slimserver/tree/public/7.8/CPAN/arch). On constate qu'il manque les modules Perl binaires requis par LMS pour ARMv5 avec perl >= 5.16.
      • Le dépôt slimserver-vendor contient
        1. les sources des modules Perl binaires requis par LMS. Ces modules binaires sont architecture dépendantes. Il me faut les compiler et récupérer la partie arch dépendante pour la mettre dans slimserver/CPAN/arch.
        2. les sources des décodeurs slimserver/Bin/*. Ces binaires dans slimserver/Bin me semble inutiles (au moins dans mon cas) si on a les packages flac, libmad, libvorbis et faad2 installés. Ils ont subi des patches spécifiques LMS que l'on peut examiner dans slimserver-vendor. On peut toujours revenir sur ces patches si on rencontre des problèmes avec les décodeurs.
    • Version de perl : la version utilisée actuellement est 5.20. L'installation de LMS dépend de la version de perl utilisée.
    • LMS 7.8 : Pour la stabilité, je reste avec la version 7.8. Je crée deux packages pour permettre des mises à jour séparées (pour économiser le temps de compilation parce que les modules Perl binaires requis par LMS ne changent pas souvent).
      • Récupérer d'abord les deux dépôts git :
        git clone git://github.com/Logitech/slimserver-vendor.git
        git clone git://github.com/Logitech/slimserver.git
        (**vérifier la branche 7.8 avec git branch, sinon changer avec la commande git checkout**)
      • En adaptant https://aur.archlinux.org/packages/logitechmediaserver/, voici deux PKGBUILDs pour créer les deux packages :
        1. Compiler slimserver-vendor/CPAN/* pour perl 5.20 (les modules Perl binaires requis par LMS) : Créer un dossier logitechmediaserver-vendor et y mettre ce PKGBUILD (modifier les lignes pkgrel et gitsrc si nécessaire). Compiler et installer le package (La compilation dure ~2h30 (mais mise à jour rarement), et elle a besoin de swap.). Ce package contient uniquement la partie arch dépendante des modules :
          sudo echo 60 > /proc/sys/vm/swappiness    [swap normalement]
          
          cd logitechmediaserver-vendor
          makepkg -s
          sudo pacman -U logitechmediaserver-vendor-7.8.1-20140625-arm.pkg.tar.xz
          
          sudo echo 0 > /proc/sys/vm/swappiness    [swap réduit au minimum]
        2. Pas de compilation, juste rassembler des fichiers du slimserver dans un package : Créer un dossier logitechmediaserver et y placer les fichiers PKGBUILD (modifier les lignes pkgrel et gitsrc si nécessaire), service et install. Créer et installer le package (en quelques minutes) :
          sudo echo 60 > /proc/sys/vm/swappiness    [swap normalement]
          
          cd logitechmediaserver
          makepkg -s
          sudo pacman -U logitechmediaserver-7.8.1-20140625-arm.pkg.tar.xz
          sudo systemctl start logitechmediaserver.service
          
          sudo echo 0 > /proc/sys/vm/swappiness    [swap réduit au minimum]
          • Pour le lancement automatique au boot :
            systemctl enable logitechmediaserver.service
          • Connecter au serveur par http://lms_ip:9000, désactiver toutes les options inutiles et choisir des options pour haute performance.
            • Voir cette discussion pour comprendre File Format Conversion Setup.
            • Activer le swap normalement avant de (re-)créer la base de données.
  • :!: Le RAM 128Mo est un peu faible pour LMS, relancer LMS une fois par jour
    # EDITOR=vim crontab -e
    ========
    ajouter cette ligne (relancer logitechmediaserver tous les jours à 3h) :
    0  3   *   *   *  systemctl restart logitechmediaserver
    ======== 
  • Les log de LMS sont dans /opt/logitechmediaserver/Logs/. Créer un fichier /etc/logrotate.d/logitechmediaserver de contenu
    /opt/logitechmediaserver/Logs/*.log {
       missingok
    }

Installer un lecteur de musique

Squeezelite

  • La config d'alsa : /etc/asound.conf
    pcm.!default {
            type hw
            card 0
    }
    
    ctl.!default {
            type hw
            card 0
    }
  • Il est très facile de compiler squeezelite à partir de source
    pacman -S git flac libmad mpg123 libvorbis faad2
    git clone https://code.google.com/p/squeezelite/
    cd squeezelite
    make clean
    make
  • Info sur la carte son (hiFace2) donné par squeezelite
    # squeezelite -l
    Output devices:
      null                           - Discard all samples (playback) or generate zero samples (capture)
      sysdefault:CARD=M20            - M2Tech USB Audio 2.0, USB Audio - Default Audio Device
      front:CARD=M20,DEV=0           - M2Tech USB Audio 2.0, USB Audio - Front speakers
      surround40:CARD=M20,DEV=0      - M2Tech USB Audio 2.0, USB Audio - 4.0 Surround output to Front and Rear speakers
      surround41:CARD=M20,DEV=0      - M2Tech USB Audio 2.0, USB Audio - 4.1 Surround output to Front, Rear and Subwoofer speakers
      surround50:CARD=M20,DEV=0      - M2Tech USB Audio 2.0, USB Audio - 5.0 Surround output to Front, Center and Rear speakers
      surround51:CARD=M20,DEV=0      - M2Tech USB Audio 2.0, USB Audio - 5.1 Surround output to Front, Center, Rear and Subwoofer speakers
      surround71:CARD=M20,DEV=0      - M2Tech USB Audio 2.0, USB Audio - 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
      iec958:CARD=M20,DEV=0          - M2Tech USB Audio 2.0, USB Audio - IEC958 (S/PDIF) Digital Audio Output
    • :!: Suite à une mise à jour du firmware, le nom de la carte son a été changé, c'est UAC2 au lieu de M20.
      # squeezelite -l
      Output devices:
        null                           - Discard all samples (playback) or generate zero samples (capture)
        sysdefault:CARD=UAC2           - hiFaceTWO UAC2, USB Audio - Default Audio Device
        front:CARD=UAC2,DEV=0          - hiFaceTWO UAC2, USB Audio - Front speakers
        surround21:CARD=UAC2,DEV=0     - hiFaceTWO UAC2, USB Audio - 2.1 Surround output to Front and Subwoofer speakers
        surround40:CARD=UAC2,DEV=0     - hiFaceTWO UAC2, USB Audio - 4.0 Surround output to Front and Rear speakers
        surround41:CARD=UAC2,DEV=0     - hiFaceTWO UAC2, USB Audio - 4.1 Surround output to Front, Rear and Subwoofer speakers
        surround50:CARD=UAC2,DEV=0     - hiFaceTWO UAC2, USB Audio - 5.0 Surround output to Front, Center and Rear speakers
        surround51:CARD=UAC2,DEV=0     - hiFaceTWO UAC2, USB Audio - 5.1 Surround output to Front, Center, Rear and Subwoofer speakers
        surround71:CARD=UAC2,DEV=0     - hiFaceTWO UAC2, USB Audio - 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
        iec958:CARD=UAC2,DEV=0         - hiFaceTWO UAC2, USB Audio - IEC958 (S/PDIF) Digital Audio Output
  • Deux façons pour utiliser Squeezelite :
    • Option 1 : Lancer squeezelite par la commande
      squeezelite -z -n SqueezeliteGoFlexHome -o hw:0,0 -a 200::: -s ip_LMS

      ou

      squeezelite -z -n SqueezeliteGoFlexHome -o hw:CARD=UAC2 -a 200::: -s ip_LMS

      ou

      squeezelite -z -n SqueezeliteGoFlexHome -o hw:CARD=UAC2,DEV=0 -a 200::: -s ip_LMS
      • :!: Les valeurs par défaut de l'option -a est 20:4::. Le paramètre pour buffer_time (en milliseconde) “200” (0.2 secondes) est important pour supprimer des parasites dans le son. En fait sa valeur par défaut “20” (0.02 secondes) est trop courte dans mon cas. Sachant que mpd utilise par défaut 0.5 secondes de buffer_time (option définie utilisant microseconde) d'après la man page de mpd.conf :
        OPTIONAL ALSA OUTPUT PARAMETERS
               buffer_time <time in microseconds>
                      This sets the length of the hardware sample buffer in microsec‐
                      onds.   Increasing  it may help to reduce or eliminate skipping
                      on certain setups.  Most users do not need to change this.  The
                      default is 500000 microseconds (0.5 seconds).
    • Option 2 : Préférer cette méthode quand le lecteur et le serveur sont sur la même machine, c'est mon cas. Il suffit d'installer le plugin Local Player. On le configure dans les settings de LMS.
      • :!: LMS tourne sous user logitechms (voir le fichier /usr/lib/systemd/system/logitechmediaserver.service), il faut ajouter logitechms dans le groupe audio
        # gpasswd -a logitechms audio

        (ou bien le faire manuellement dans les deux fichiers /etc/group et /etc/gshadow)

      • Voici une image de sa config
        lms_plugin_localplayer.jpg
      • Pour utiliser l'option -p (Set real time priority of output thread (1-99), valeur par défaut est 45 pour un des quatre threads) de squeezelite (voir CPU Scheduling), il faut le lancer par root (la méthode décrite dans http://jackaudio.org/linux_rt_config ne marche pas). Or le plugin est lancé par user logitechms, on peut le contourner par suid
        # chown root /opt/logitechmediaserver/cache/InstalledPlugins/Plugins/LocalPlayer/Bin/squeezelite-armv5te
        # chmod u+s /opt/logitechmediaserver/cache/InstalledPlugins/Plugins/LocalPlayer/Bin/squeezelite-armv5te

        (mais il faut le refaire après chaque mise à jour du plugin) (intégrer aussi ces deux commandes dans le script post-install de LMS)

      • Voici le contenu du /opt/logitechmediaserver/Logs/localplayer.log au démarrage de LMS (il faut activer temporairement les log dans la page de config du plugin, mais le désactiver pour un usage normal) :
        Starting Squeezelite: /opt/logitechmediaserver/cache/InstalledPlugins/Plugins/LocalPlayer/Bin/squeezelite-armv5te -d all=debug -f /opt/logitechmediaserver/Logs/localplayer.log -n SqueezeliteGoFlexHome -o hw:CARD=UAC2,DEV=0 -a 200::: -s 192.168.0.18
        [18:08:55.188931] stream_init:264 init stream
        [18:08:55.189638] stream_init:265 streambuf size: 2097152
        [18:08:55.214847] output_init_alsa:636 init output
        [18:08:55.215058] output_init_alsa:658 requested alsa_buffer: 200 alsa_period: 4 format: any mmap: 1
        [18:08:55.215150] output_init_common:334 outputbuf size: 3528000
        [18:08:55.249346] output_init_common:394 supported rates: 192000 176400 96000 88200 48000 44100
        [18:08:55.349182] output_init_alsa:670 memory locked
        [18:08:55.349857] output_thread:465 open output device: hw:CARD=M20,DEV=0
        [18:08:55.350903] alsa_open:234 opened device hw:CARD=M20,DEV=0 using format: S32_LE sample rate: 44100 mmap: 1
        [18:08:55.351209] alsa_open:313 buffer: 200 period: 4 -> buffer size: 8820 period size: 2205
        [18:08:55.351478] output_init_alsa:693 set output sched fifo rt: 45
        [18:08:55.351559] decode_init:129 init decode
        [18:08:55.378604] load_faad:610 loaded libfaad.so.2
        [18:08:55.399786] load_vorbis:295 loaded libvorbisfile.so.3
        [18:08:55.448299] load_flac:258 loaded libFLAC.so.8
        [18:08:55.448440] register_pcm:382 using pcm
        [18:08:55.470567] load_mad:351 loaded libmad.so.0
        [18:08:55.804396] slimproto:787 connecting to 192.168.0.18:3483
        [18:08:55.804943] slimproto:817 connected
        [18:08:55.805058] slimproto:833 local player
        [18:08:55.805127] sendHELO:117 mac: 00:10:75:29:87:57
        [18:08:55.805226] sendHELO:119 cap: Model=squeezelite,ModelName=SqueezeLite,AccuratePlayPoints=1,HasDigitalOut=1,MaxSampleRate=192000,aac,ogg,flc,aif,pcm,mp3,loc
        [18:08:57.438489] process:469 strm
        [18:08:57.438641] process_strm:232 strm command q
        [18:08:57.438750] decode_flush:188 decode flush
        [18:08:57.438816] output_flush:407 flush output buffer
        [18:08:57.438881] sendSTAT:164 STAT: STMf
        [18:08:57.441233] process:469 strm
        [18:08:57.441349] process_strm:232 strm command q
        [18:08:57.441414] decode_flush:188 decode flush
        [18:08:57.441474] output_flush:407 flush output buffer
        [18:08:57.441537] sendSTAT:164 STAT: STMf
        [18:08:57.443019] process:469 setd
        [18:08:57.443124] sendSETDName:223 set playername: SqueezeliteGoFlexHome
        [18:08:57.443742] process:469 setd
        [18:08:57.444566] process:469 aude
        [18:08:57.444659] process_aude:368 enable spdif: 1 dac: 1
        [18:08:57.446374] process:469 audg
        [18:08:57.446480] process_audg:385 audg gainL: 65536 gainR: 65536 adjust: 0
        [18:08:57.508952] process:469 strm
        [18:08:57.509086] process_strm:232 strm command t
        [18:08:57.509156] sendSTAT:164 STAT: STMt

SqueezeSlave (obsolète pour mon usage)

  • Compiler et installer SqueezeSlave (without interactive (aka DISPLAY) support).
    svn checkout http://squeezeslave.googlecode.com/svn/squeezeslave/trunk/squeezeslave
    cd squeezeslave/
    vim makefile.linux26-armel-alsa-display    (désactiver "interactive (aka DISPLAY) support")
    make -f makefile.linux26-armel-alsa-display realclean
    make -f makefile.linux26-armel-alsa-display
    cp bin/squeezeslave /usr/local/bin/
    • Avec le DAC usb V-DAC I, il y a un bruit parasite (c'est comme une mauvaise réception de radio). La config /etc/asound.conf proposée par archlinux wiki (changer rate en 44100) ou l'exemple dans les codes sources squeezeslave/config/squeezeplug-asound.conf résout ce problème. Voici la config /etc/asound.conf (Même s'il n'y a pas de input, le “pcm.dsnooper” semble nécessaire. Aucune idée pourquoi ça marche !)
      pcm.!default {
          type plug
          slave.pcm "softvol"
      }
      
      pcm.softvol {
             type softvol
             slave { pcm "dmixer" }
             control {
                 name "Master"
                 card 0
             }
      }
      
      pcm.dmixer {
             type dmix
             ipc_key 1024
             slave {
                 pcm "hw:0"
                 period_time 0
                 period_size 4096
                 buffer_size 131072
                 rate 44100
             }
             bindings {
                 0 0
                 1 1
             }
      }
      
      pcm.dsnooper {
             type dsnoop
             ipc_key 1024
             slave {
                 pcm "hw:0"
                 channels 2
                 period_time 0
                 period_size 4096
                 buffer_size 131072
                 rate 44100
             }
             bindings {
                 0 0
                 1 1
             }
      }
      
      ctl.!default {
          type hw
          card 0
      }
      
      ctl.softvol {
          type hw
          card 0
      }
      
      ctl.dmixer {
          type hw
          card 0
      }
  • Lancer squeezeslave au boot en ajoutant dans /etc/rc.local <file># attendre le serveur logitechmediaserver : sleep 60s squeezeslave -m xx:xx:xx:xx:xx:xx </file>
    • :!: L'adresse mac sert à identifier de manière unique le player squeezeslave pour éviter le message erreur “cette platine est déjà enregistrée pour un autre utilisateur” lorsqu'on veut utiliser “Mes applications” dans l'interface de contrôle.

SqueezePlay (obsolète pour mon usage)

  • Installer les deux packages xorg-server-xvfb et xorg-xauth.
  • Ouvrir le fichier /usr/bin/squeezeplay.sh et remplacer la dernière ligne
    ./jive

    par

    xvfb-run ./jive
  • Supprimer d'abord tous les fichiers de config (s'il y en a) dans ~/.squeezeplay/userpath/settings. Il nous faut créer le bon fichier ~/.squeezeplay/userpath/settings/Playback.lua avant de lancer /usr/bin/squeezeplay.sh. Voici comment je l'ai obtenu : (le serveur Logitech Media Server étant déjà lancé sur mon Goflex Home) Sur mon vieux portable sous windows xp, installer et lancer SqueezePlay pour connecter au Logitech Media Server sur GoFlexHome. En suite je récupère le fichier généré C:\Documents and Settings\user_login_name\Application Data\SqueezePlay\userpath\settings\Playback.lua. Voici la forme du contenu de ce fichier
    settings = {enableAudio=1,squeezeNetwork=false,serverUuid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",powerState="on",volume=100,serverInit={ip="xxx.xxx.xxx.xxx",},serverName="alarm",playerInit={name="SqueezePlay",model="squeezeplay",},captureVolume=40,}
  • Je dois aussi utiliser la config /etc/asound.conf ci-dessus pour éviter le même problème de son.
  • Note : Voir ici pour installer SqueezePlay sur le portable hp8460p.

GUI

Spotify

  • Il faut avoir un abonnement Spotify Premium.
  • Le plugin officiel Spotify ne marche pas.
  • Activer le “3rd Party Spotify Plugin” de Triode.
    • [Bug corrigé (https://aur.archlinux.org/packages.php?ID=53691)] J'ai rencontré un problème <code>Plugins::Spotify::Spotifyd::ANON (91) unable to write log file: /opt/logitechmediaserver/Logs/spotifyd.log</code> * Solution 1 : Il est possible qu'il faut relancer LMS dans un terminal. Et pour qu'il marche correctement, il faut utiliser ldconfig ou créer tout simplement un lien symbolique dans /usr/lib/ vers /opt/logitechmediaserver/cache/InstalledPlugins/Plugins/Spotify/Bin/arm-linux/libspotify.so.10. * Note : Pas besoin de faire ça sur RaspberryPi/Raspbian. * Solution 2 : En fait, c'est un “bug” dans /usr/lib/systemd/system/logitechmediaserver.service. Il faut ajouter User=logitechms et Group=logitechms. On peut enlever l'option –user logitechms dans la ligne ExecStart=… <code>— service 2012-07-27 01:40:22.000000000 +0200 +++ /usr/lib/systemd/system/logitechmediaserver.service 2013-04-04 10:53:51.000000000 +0200 @@ -3,13 +3,14 @@ After=network.target [Service] +User=logitechms +Group=logitechms PIDFile=/var/run/lms.pid WorkingDirectory=/opt/logitechmediaserver ExecStart=/opt/logitechmediaserver/slimserver.pl \ –prefsdir /opt/logitechmediaserver/prefs \ –cachedir /opt/logitechmediaserver/cache \ - –logfile /opt/logitechmediaserver/Logs/slimserver.log \ - –user logitechms + –logfile /opt/logitechmediaserver/Logs/slimserver.log [Install] WantedBy=multi-user.target </code>

Qobuz

MPD

  • C'est un “serveur + lecteur”. Voici un aperçu en image.
  • Compiler et installer MPD minimaliste : Prendre les sources (ils sont dans ABS) de mpd et utiliser le PKGBUILD modifié. Ajouter mpd sur la ligne IgnorePkg de /etc/pacman.conf pour qu'une mise à jour du système ne touche pas mpd, mais seulement afficher une notification. Voici le diff avec PKGBUILD original :
    $ diff -Nu /var/abs/extra/mpd/PKGBUILD mpd/PKGBUILD 
    --- /var/abs/extra/mpd/PKGBUILD	2015-02-26 00:06:34.645590086 +0100
    +++ mpd/PKGBUILD	2015-02-26 09:54:47.854711000 +0100
    @@ -1,26 +1,24 @@
    -# $Id: PKGBUILD 231234 2015-02-10 19:30:11Z bisson $
     # Maintainer: Gaetan Bisson <bisson@archlinux.org>
     # Contributor: Angel Velasquez <angvp@archlinux.org>
     # Contributor: Andrea Scarpino <andrea@archlinux.org>
     # Contributor: Damir Perisa <damir.perisa@bluewin.ch>
     # Contributor: Ben <ben@benmazer.net>
     
    +# Note : désactiver des options et des dépendances pour une version minimaliste
    +
     pkgname=mpd
     pkgver=0.19.9
     pkgrel=2
     pkgdesc='Flexible, powerful, server-side application for playing music'
     url='http://www.musicpd.org/'
     license=('GPL')
    -arch=('i686' 'x86_64')
    -depends=('libao' 'ffmpeg' 'libmodplug' 'audiofile' 'libshout' 'libmad' 'curl' 'faad2'
    -         'sqlite' 'jack' 'libmms' 'wavpack' 'avahi' 'libid3tag' 'yajl' 'libmpdclient'
    -         'icu' 'libupnp' 'libnfs')
    +arch=('arm')
    +depends=('audiofile' 'libmad' 'curl' 'faad2' 'sqlite' 'libmms' 'libid3tag' 'libmpdclient' 'icu')
     makedepends=('boost' 'doxygen')
    -validpgpkeys=('0392335A78083894A4301C43236E8A58C6DB4512')
    -source=("http://www.musicpd.org/download/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz"{,.sig}
    +source=("http://www.musicpd.org/download/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz"
             'tmpfiles.d'
             'conf')
    -sha1sums=('6683bee5f132eda318c5a61ec14b2df8d9164d60' 'SKIP'
    +sha1sums=('6683bee5f132eda318c5a61ec14b2df8d9164d60'
               'f4d5922abb69abb739542d8e93f4dfd748acdad7'
               '291fd5cda9f0845834a553017327c4586bd853f6')
     
    @@ -33,12 +31,28 @@
     		--prefix=/usr \
     		--sysconfdir=/etc \
     		--enable-libmpdclient \
    -		--enable-jack \
    -		--enable-soundcloud \
    -		--enable-pipe-output \
    -		--enable-pulse \
    -		--disable-sidplay \
    -		--with-systemdsystemunitdir=/usr/lib/systemd/system
    +                --disable-ao \
    +                --disable-ffmpeg \
    +                --disable-jack \
    +                --disable-modplug \
    +                --disable-pulse \
    +                --disable-shout \
    +                --disable-sidplay \
    +                --disable-soundcloud \
    +                --disable-wavpack \
    +                --disable-wildmidi \
    +                --disable-upnp \
    +                --disable-smbclient \
    +                --disable-nfs \
    +                --disable-gme \
    +                --disable-dsd \
    +                --disable-oss \
    +                --disable-recorder-output \
    +                --disable-ipv6 \
    +                --disable-fluidsynth \
    +                --disable-bzip2 \
    +                --with-zeroconf=no \
    +                --with-systemdsystemunitdir=/usr/lib/systemd/system
    +
     	make
     }
     

MPD Config

  • Le fichier /etc/mpd.conf (la sortie de la commande “egrep -v '^(#|$)' /etc/mpd.conf”) :
    music_directory		"/archives/music"
    playlist_directory 	"/archives/mpd/playlists"
    db_file 		"/archives/mpd/database"
    log_file		"/archives/mpd/mpd.log"
    pid_file 		"/archives/mpd/pid"
    state_file 		"/archives/mpd/state"
    sticker_file		"/archives/mpd/sticker.sql"
    input {
            plugin "curl"
    }
    audio_output {
    	type "alsa"
    	name "M2TECH hiFace Two"
    	auto_resample "no"
    	device "hw:0,0"
    	mixer_type "hardware"
    	mixer_device "hw:0"
    	mixer_control "M2Tech Clock Selector"
    	mixer_index "1"
    }
    id3v1_encoding			"UTF-8"
    • :!: MPD est lancé au démarrage par systemd. Le script /usr/lib/systemd/system/mpd.service utilise User=mpd. Avec ma config, il faut que tout le dossier /archives/mpd/ appartienne à user et group mpd.
    • Pour ajouter le “streaming” (MPDroid supporte le streaming), activer en plus par exemple
      audio_output {
      	type		"httpd"
      	name		"GoFlexHome HTTP Stream"
              encoder         "vorbis"
      	port		"8000"
              bind_to_address "127.0.0.1"
      	quality         "5.0"
      	format		"44100:16:1"
      }
    • Les log de mpd sont dans /archives/mpd/mpd.log. Créer un fichier /etc/logrotate.d/mpd de contenu
      /archives/mpd/mpd.log {
         missingok
      }
    • Si MPD est uniquement utilisé pour Upmpdcli, il suffit un /etc/mpd.conf très simple
      audio_output {
              type            "alsa"
              name            "M2TECH hiFace Two"
              auto_resample   "no"
              device          "hw:0,0"
              mixer_type      "none"
              #mixer_type     "hardware"
              #mixer_device   "hw:0"
              #mixer_control  "M2Tech Clock Selector"
              #mixer_index    "1"
      }

Clients pour MPD

  • Ce sont des contrôleurs de MPD, comme les télécommandes, ils ne sont pas des lecteurs audio.
  • Sur un PC, utiliser gmpc.
  • Sur un smartphone ou une tablette sous android, utiliser MPDroid.
  • Pochettes CD locales pour le client MPDroid : Le client MPDroid peut utiliser les pochettes locales via un serveur http.
    • Installer lighttpd : Installer un serveur http léger, par exemple lighttpd.
    • Configurer lighttpd : Noter d'abord l'option music_directory de /etc/mpd.conf. Dans mon cas, c'est /archives/music. Configurer alors lighttpd avec l'option server.document-root=“/archives/music”. Un exemple de /etc/lighttpd/lighttpd.conf :
      # This is a minimal example config
      # See /usr/share/doc/lighttpd
      # and http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptions
      
      server.port             = 80
      server.username         = "http"
      server.groupname        = "http"
      server.document-root    = "/archives/music"
      server.errorlog         = "/var/log/lighttpd/error.log"
      dir-listing.activate    = "enable"
      index-file.names        = ( "index.html" )
      mimetype.assign         = ( ".html" => "text/html", ".txt" => "text/plain", ".jpg" => "image/jpeg", ".png" => "image/png", "" => "application/octet-stream" )
      # activer temporairement accesslog pour debug :
      #server.modules = ("mod_access", "mod_accesslog")
      #accesslog.filename = "/var/log/lighttpd/access.log"
    • Configurer MPDroid : Sur le téléphone android, aller dans le menu “Paramètres” de MPDroid :
      • Cocher “Télécharger les pochettes locales”. (“Télécharger les pochettes” est alors automatiquement décoché.)
      • Laisser “Chemin vers la musique” vide. (En fait, il suffit [music_directory de /etc/mpd.conf] = [server.document-root de /etc/lighttpd/lighttpd.conf] + [ce “Chemin vers la musique”].)
      • Définir “Nom du fichier pochette” (j'utilise cover.jpg)
      • Relancer MPDroid.

Apple AirPlay

Mopidy (testé)

Installer Mopidy

  1. Installer libspotify : http://aur.archlinux.org/packages.php?ID=33594 et libspotify-12.1.51-Linux-armv5-release.tar.gz.
    # diff -Nu libspotify/PKGBUILD libspotify.new/PKGBUILD 
    --- libspotify/PKGBUILD	2012-07-18 15:55:00.000000000 +0200
    +++ libspotify.new/PKGBUILD	2012-08-02 14:41:16.438661001 +0200
    @@ -7,17 +7,17 @@
     url="https://developer.spotify.com/technologies/libspotify/"
     license=('custom')
     depends=('glibc')
    -source=(http://developer.spotify.com/download/libspotify/libspotify-${pkgver}-Linux-${CARCH}-release.tar.gz)
    +source=(libspotify-12.1.51-Linux-armv5-release.tar.gz)
     
    -md5sums=('04735b890da0b1fc7f1f14e68a5293de')
    -sha256sums=('941ab4ba10bcd6ec4e96127afd095a39e11bc955de0882734c97e4f588b155ae')
    +#md5sums=('04735b890da0b1fc7f1f14e68a5293de')
    +sha256sums=('4d96efcb1423864683917f40fb4df481491250a76cb29be3a235b3732a64fefc')
     if [ "$CARCH" == "x86_64" ]; then
       md5sums=('83efddcc195d6ff12b24c97c767a5e45')
       sha256sums=('43a14e0732ba6ae30078fac105d0e2998d04d5f5c396a4968386bc4e22491058')
     fi
     
     build() {
    -  cd "$srcdir/$pkgname-$pkgver-Linux-$CARCH-release"
    +  cd "$srcdir/$pkgname-$pkgver-Linux-armv5-release"
     
       # Don't do stupid things from a Makefile
       msg2 "Patching Makefile..."
    @@ -25,7 +25,7 @@
     }
     
     package() {
    -  cd "$srcdir/$pkgname-$pkgver-Linux-$CARCH-release"
    +  cd "$srcdir/$pkgname-$pkgver-Linux-armv5-release"
     
       make prefix="$pkgdir/usr" install
  2. Installer pyspotify-git : http://aur.archlinux.org/packages.php?ID=44025.
    # diff -Nu pyspotify-git/PKGBUILD pyspotify-git.new/PKGBUILD 
    --- pyspotify-git/PKGBUILD	2012-06-13 10:52:41.000000000 +0200
    +++ pyspotify-git.new/PKGBUILD	2012-08-02 14:22:39.348661000 +0200
    @@ -1,7 +1,7 @@
     # Maintainer: Rickard Nilsson <rickard.nilsson@telia.com>
     
     pkgname=pyspotify-git
    -pkgver=20120613
    +pkgver=20120802
     pkgrel=1
     pkgdesc="A Python Spotify library"
     arch=(any)
  3. Installer mopidy-git : http://aur.archlinux.org/packages.php?ID=44026.
    # diff -Nu mopidy-git/PKGBUILD mopidy-git.new/PKGBUILD 
    --- mopidy-git/PKGBUILD	2012-02-19 19:16:57.000000000 +0100
    +++ mopidy-git.new/PKGBUILD	2012-08-02 14:18:18.308661002 +0200
    @@ -1,7 +1,7 @@
     # Maintainer: Rickard Nilsson <rickard.nilsson@telia.com>
     
     pkgname=mopidy-git
    -pkgver=20120219
    +pkgver=20120802
     pkgrel=1
     pkgdesc="A music server which can play music from Spotify"
     arch=(any)
  4. La config (320 kbps)
    MPD_SERVER_HOSTNAME = u'::'
    SPOTIFY_USERNAME = u'login'
    SPOTIFY_PASSWORD = u'mot_de_passe'
    SPOTIFY_BITRATE = 320
  5. On peut lancer mopidy au démarrage : éditer le fichier /etc/conf.d/mopidy
    # The user that mopidy should run as.
    MOPIDY_USER="root"

    et ajouter modpidy dans la ligne DAEMONS=(…) du fichier /etc/rc.conf.

    • :!: Si le swapfile n'est pas activé (pour que le disque spindown fonctionne bien), il n'y a pas assez de RAM (total 128Mb) pour lancer LMS et Mopidy en même temps.

Clients pour Mopidy

  • gmpc : il gère “Playlists” et “Recherche”. Ce sont les essentiels et ça marche bien.
  • Sur un téléphone/tablette android. MPDroid version v0.7 est parfait : il gère “Artistes” et “Albums” des mes playlists. Il gère aussi “Playlists”. Il a la fonction “Recherche” par Artistes ou Albums

MiniDLNA

  • En plus de servir les fichiers de musique, il peut fournir des photos et vidéos. Voir le wiki. Installer le package minidlna. Définir media_dir et éventuellement donner un nom friendly_name dans /etc/minidlna.conf. Laisser les autres lignes par défaut.
    ...
    media_dir=A,/archives/music
    media_dir=P,/archives/Photos
    media_dir=V,/archives/Videos
    ...
    • Le package minidlna de ArchLinux utilise par défaut user nobody pour tourner minidlna. On peut le changer dans /etc/minidlna.conf. Mais cette modification éventuelle n'a pas d'effet si on lance minidlna par systemd. En fait, /usr/lib/systemd/system/minidlna.service contient une ligne qui définit ce user. Pour faire simple, garder ce user nobody et
      # mkdir /var/{cache,log}/minidlna
      # chown nobody:nobody /var/{cache,log}/minidlna
      # systemctl enable minidlna.service
      # systemctl start minidlna
      
      Pour recréer manuellement la base de données :
      # systemctl stop minidlna
      # minidlnad -u nobody -R
      Attendre (utiliser top ou htop pour voir)... et ensuite :
      # killall minidlnad
      # systemctl start minidlna
archlinux/mpd_goflex_home.txt · Dernière modification: 2017/08/21 12:43 (modification externe)