[PYTHON] Serveur de lecture de musique avec NanoPi-NEO, MPD et OLED

Aperçu

Construisez un serveur de lecture de musique avec MPD et affichez le nom de la chanson, le nom de l'artiste, le nom de l'album et l'image de la pochette en cours de lecture sur l'OLED. Bien sûr, c'est OK en japonais !! Et vous pouvez également "chanson précédente", "lecture / pause" et "chanson suivante" avec trois boutons.

Ce sera peut-être l'un des formulaires MPD complétés dans SingleBoard Computing (rires) Puisqu'il s'agit d'une bonne affaire, je vous l'enverrai en version complète incluant la construction de l'environnement.

_72D8924.jpg

Le côté gauche est NEO2 Complete Starter Kit. Il est en rupture de stock, et c'est miraculeux quand il devient en stock pour un moment le 5/26? Un bijou que j'ai pu obtenir. Le côté droit est une combinaison de NanoPi-NEO + NanoHat PCM5102a + NanoHat OLED.

Le code d'affichage de diverses informations sur l'OLED by Python, qui est le code principal cette fois, est enregistré ci-dessous. https://github.com/blue777/NanoPi-NEO_OLED_MPD

Introduction à la série associée

Les choses nécessaires

Matériel

Ou

Ou

Logiciel

NanoPi NEO

Official image

Est supposé être l'un des éléments ci-dessus.

NanoPi NEO2

Official rom image

Est supposé être l'un des éléments ci-dessus.

Procédure de construction côté serveur

On suppose que l'image de démarrage a été transférée vers MicroSD et démarrée.

1. Configuration initiale

timedatectl set-timezone Asia/Tokyo apt-get update apt-get upgrade npi-config

Je vais me préparer. Si l'adresse IP fixe est bonne, elle ressemble à celle ci-dessous.

nano /etc/network/interfaces

/etc/network/interfaces


allow-hotplug eth0
#        iface eth0 inet dhcp
        iface eth0 inet static
            address 192.168.1.100
            netmask 255.255.255.0
            gateway 192.168.1.1
            dns-nameservers 192.168.1.1

2. Installez MPD (Music Player Daemon)

Installez avec la commande suivante. Une fois l'installation terminée, modifiez les paramètres.

apt-get install mpd nano /etc/mpd.conf

Changer de répertoire de musique

Trouvez la ligne et procédez comme suit: (Je vais expliquer sur l'hypothèse ci-dessous)

/etc/mpd.conf


music_directory  "/media/"

Paramètres de sortie audio

Premier, cat /proc/asound/cards Sortira une liste de cartes son.

Ça ressemble à ça. Pour le moment, c'est dans un état connecté (rires)

NanoPi-NEO


root@NanoPi-NEO:~# cat /proc/asound/cards
 0 [Pcm5102a       ]: Pcm5102a - Pcm5102a
                      Pcm5102a
 1 [sndhdmi        ]: sndhdmi - sndhdmi
                      sndhdmi
 2 [DAC            ]: USB-Audio - USB Audio DAC
                      Burr-Brown from TI USB Audio DAC at usb-sunxi-ehci-1.2, full speed
 3 [J20            ]: USB-Audio - JAVS USB Audio 2.0
                      JAVS JAVS USB Audio 2.0 at usb-sunxi-ehci-1.3, high speed
 4 [N2             ]: USB-Audio - NuForce µDAC 2
                      NuForce, Inc. NuForce µDAC 2 at usb-sunxi-ehci-1.4, full speed
 5 [AI301DA        ]: USB-Audio - TEAC AI-301DA
                      TEAC Corporation TEAC AI-301DA at usb-sunxi-ehci-1.1, high speed

root@NanoPi-NEO:~# uname -a
Linux NanoPi-NEO 3.4.39-h3 #3 SMP PREEMPT Tue May 23 17:37:51 CST 2017 armv7l armv7l armv7l GNU/Linux

NanoPi-NEO2


root@NanoPi-NEO2:~# cat /proc/asound/cards
 0 [Codec          ]: H3_Audio_Codec - H3 Audio Codec
                      H3 Audio Codec
 1 [USBCamera      ]: USB-Audio - USB_Camera
                      KYE Systems Corp. USB_Camera at usb-1c1d000.usb-1, high speed

root@NanoPi-NEO2:~# uname -a
Linux NanoPi-NEO2 4.11.2 #1 SMP Wed Jun 7 03:24:53 PDT 2017 aarch64 aarch64 aarch64 GNU/Linux

Si vous expliquez dans l'ordre du haut,

InstanceNo. DeviceName Commentaire
0 Pcm5102a Il s'agit de NanoHat Pcm5102a. NanoPi-NEO Kernel=3.4.Il s'agit du nom d'affichage du 39. Si le Kernel Ver change, le nom d'affichage changera également.
1 sndhdmi Je pense que c'est une sortie de signal audio HDMI, mais elle ne peut pas être utilisée car il n'y a pas de connecteur HDMI.
2 DAC C'est un DAC USB.
3 J20 C'est un DDC USB. JAVS X-Il s'agit d'un convertisseur USB vers SPDIF appelé DDC.
4 N2 C'est un DAC USB. NuForce μ DAC.
5 AI301DA C'est un DAC USB. Teac AI-C'est 301DA.
0 Codec NanoPi-Line Out sur la carte NEO2. Vous devriez pouvoir l'utiliser en soudant. Il semble que la raison pour laquelle c'est H5 mais H3 est parce que le pilote est commun.
1 USBCamera C'est une caméra avec une entrée microphone. Il ne peut pas être utilisé car il ne peut pas émettre d'audio.

C'est la méthode d'écriture de base pour chacun. Je vais l'écrire comme ça. Il est normal d'avoir plusieurs balises audio_output. S'il y en a plusieurs, vous pouvez également spécifier une sortie simultanée.

Pour NanoHat PCM5102a


audio_output {
        type            "alsa"
        name            "HanoHat PCM5102a"
        device          "hw:Pcm5102a,0"
        mixer_type      "software"
        format          "*:32:2"
        replay_gain_handler "software"
}

J20(JAVS_X-DDC)dans le cas de


audio_output {
        type            "alsa"
        name            "JAVS X-DDC"
        device          "hw:J20,0"
        mixer_type      "none"
}

Pour Codec


audio_output {
        type            "alsa"
        name            "NanoPi-NEO2 LineOut"
        device          "hw:Codec,0"
        mixer_type      "software"
}

Le nom spécifié pour chacun est le nom d'affichage du client MPD. Entrez InstanceNo. Ou DeviceName dans la partie XXXX de "hw: XXXX, 0" de l'appareil. Si vous souhaitez qu'il soit automatiquement reconnu par connexion USB, entrez le n ° d'instance à la fin. Cependant, il est recommandé de spécifier par DeviceName car il change en fonction de l'allocation par InstanceNo et de l'ordre de connexion. (Bien qu'il soit possible de modifier l'ordre d'attribution des numéros dans ALSA, il sera omis.)

3. Préparation des données musicales

Lors de la création de microSD dans un dossier partagé

Transformez la microSD avec le système d'exploitation installé dans un dossier partagé Les données musicales seront téléchargées sur Nanopi NEO à partir d'un PC externe.

Installation de Samba et Créez un répertoire dans / media / local et définissez le partage. Les paramètres de partage sont des paramètres d'accès complet. (Lol

apt-get install samba mkdir /media/local chmod 777 /media/local nano /etc/samba/smb.conf

/etc/samba/smb.conf


・
・
・
[Music]
   comment = share folder
   path = /media/local
   public = yes
   writable = yes
   guest ok = yes
   guest only = yes
   create mode = 0777
   directory mode = 0777

systemctl enable smbd systemctl start smbd

Lors de l'utilisation d'un dossier partagé externe tel qu'un NAS

Lors de l'utilisation du partage de fichiers Windows ou du montage d'un NAS.

apt-get install cifs-utils mkdir /media/nas nano /etc/fstab

・
・
・
//192.168.1.9/Public /media/nas cifs username=guest,password=,uid=root,iocharset=utf8 0 0

Après le réglage

mount -a df

Assurez-vous qu'il se monte correctement avec.

4. Configuration de l'affichage OLED

J'ai écrit l'affichage du titre de la chanson et l'acquisition / l'affichage de l'image de la veste en Python. J'ai utilisé Python pour la première fois cette fois, et cela a été terminé en environ deux jours. .. .. Sur le chemin, je souffrais d'un mélange d'onglets et d'espaces, et il y avait des rebondissements, C'était mieux que ce à quoi je m'attendais, donc cela m'a également inspiré pour écrire cet article.

2017/08/31 Addendum: Sequel "Serveur de lecture de musique NanoPi-NEO, MPD, LCD, I2S-DAC et TDA7297 (complet)" En plus de l'écran OLED, l'écran LCD est également pris en charge. Veuillez utiliser votre logiciel d'affichage préféré.

Spécifications principales

--Affichage du titre de la chanson. S'il est long, il défilera automatiquement. --Affichage du nom de l'artiste et du nom de l'album --Affichage de la position de lecture actuelle (soulignement sous le titre) --Affichage de Freq, BitDepth, Ch --Affichage de l'image de la pochette de l'album (utilisant du mutagène)

Mécanisme etc.

Passons maintenant à la procédure d'installation principale

Insérez NanoHat OLED lié

Référence: http://wiki.friendlyarm.com/wiki/index.php/NanoHat_OLED

Suivez les étapes ci-dessous pour installer. (La destination d'installation est / root) NanoHat OLED fonctionne dans deux configurations, programme C et programme Python, et l'affichage OLED lui-même est fermé en Python, mais l'opération de clé est notifiée côté Python après l'avoir reçue du côté programme C. C'était.

Et, du côté du programme C, le programme Python est également lancé, de sorte que le produit standard ne démarre pas. Pour le moment, j'ai commenté dans l'exemple ci-dessous. (Le code Python alternatif est lancé à partir de rc.local)

cd /root git clone https://github.com/friendlyarm/NanoHatOLED.git nano /root/NanoHatOLED/Source/main.c

/root/NanoHatOLED/Source/main.c


・
・
・
int load_python_view() {
/*
    int ret;
    char* cmd = (char*)malloc(255);
    sprintf(cmd, "cd %s/BakeBit/Software/Python && python %s 2>&1 | tee /tmp/nanoled-python.log", workpath, python_file);

    ret = pthread_create(&view_thread_id, NULL, (void*)threadfunc,cmd);
    if(ret) {
        log2file("create pthread error \n");
        return 1;
    }
//*/
    return 0;
}
・
・
・

cd NanoHatOLED ./install.sh

Entrez le sujet principal (écran OLED)

Installez y compris les packages dépendants externes afin qu'ils démarrent automatiquement dans rc.local Puisque le démarrage automatique (oled-start) de NanoHat OLED a déjà été écrit, J'ajouterai une commande de démarrage sur la ligne suivante.

apt-get install fonts-takao-pgothic apt-get install python-mutagen python3-mutagen

cd /root git clone https://github.com/blue777/NanoPi-NEO_OLED_MPD

nano /etc/rc.local

/etc/rc.local


・
・
・
/usr/local/bin/oled-start &
cd /root/NanoPi-NEO_OLED_MPD
python oled_mpd.py &
・
・
・

5. Installez ympd (interface graphique Web MPD)

Essayez de mettre ympd pour pouvoir accéder à http à partir de chaque client du réseau et le contrôler.

python


apt install cmake
apt install libmpdclient-dev
apt install libssl-dev

cd /usr/lib
git clone https://github.com/notandy/ympd
cd ympd
mkdir -p build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX_PATH=/usr
make
make install 

Il commence par ./ympd, mais il est difficile de démarrer à chaque fois, alors éditez rc.local pour qu'il démarre automatiquement.

nano /etc/rc.local

/etc/rc.local


・
・
・
/usr/lib/ympd/build/ympd &

Le port d'accès sera 8080, donc http://YourMpdServer:8080/ Accès sous la forme de.

Si le port80 est bon, spécifiez comme suit.

./ympd -w 80

C'est la fin du côté serveur. Veuillez redémarrer et profiter.

reboot

Préparation côté client

La lecture peut être contrôlée par un accès Web, mais l'application dédiée est toujours bonne! Dans ce cas, veuillez insérer votre client MPD préféré.

Divers clients MPD tels que iOS, Windows et Android sont disponibles. Si vous recherchez avec le client MPD, vous trouverez diverses choses, alors installez celui que vous aimez.

Nous utilisons gmpc car c'est une machine Windows. https://gmpclient.org/

image.png

Les éléments définis dans audio_output peuvent être sélectionnés dans le menu Serveur.

prime

À propos de NanoHat PCM5102a

Dans l'état standard, il est dans l'état De-Emphasis, Low-Latency en termes de matériel. En particulier, De-Emphasis a une coupe haute fréquence à 44,1 KHz, et cela sonne un peu étouffé. Il est recommandé de souder les zones de désaccentuation et de faible latence.

Quant à la qualité sonore, elle est généralement bonne. Un lecteur CD de 100 000 classes ne pourra pas concourir.

Cependant, si les sons sont intimement liés (comme le pic de pleine échelle), la dégradation de la résolution sera perceptible et deviendra une boulette. Cependant, comme l'alimentation est une alimentation à découpage et qu'elle est partagée par NanoPi-NEO, elle se réveillera sûrement si vous modifiez une autre alimentation.

Signaux NanoPi-NEO, NEO2 I2S

Référence http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2

Le signal I2S émis par NanoPi-NEO est

3 sont en sortie, mais NanoPi-NEO2 est en plus de ce qui précède

Peut également être sorti et sera envoyé vers GPIOA6. Il s'agit d'une spécification uniquement pour H5, et il semble que H3 ne la prend pas en charge. (D'après la fiche technique)

Et si vous regardez plus loin, GPIO A6 dit PWM, mais ni H3 / H5 ne peut être une destination de sortie PWM. Je me demande d'où vient la mauvaise implantation (H2 + ou quelque chose?)

J'espère fournir un pilote qui peut générer secrètement I2S_MCLK.

■ 2018/01/13 ajouté J'ai enfin pu sortir! Sortie MCLK et 384 kHz compatible avec NanoPi-NEO2 I2S

Qualité sonore des séries NanoPi NEO et Beagle Bone

La raison de l'utilisation de MPD dans SBC (Single Board Computing) est sans aucun doute la recherche de la qualité sonore. Ainsi, l'évaluation subjective personnelle de la qualité sonore de la série NanoPi et de la série BeagleBone est comme ça.

NanoPi-NEO < NanoPi-NEO2 << BeagleBoneBlack <= BeagleBoneGreen

Les deux sont évalués en se connectant avec SBC --- (USB) -> JAVS X-DDC (révisé) --- (Coaxial spdif) -> DAC, et SBC et X-DDC sont évalués avec SiC SBD d'Infineon. Une alimentation en série assemblée par redressement en pont (LM350 côté SBC, discrète avec SiC FET Cree sur le X-DDC) est utilisée. Dans ce cas, le type BeagleBone ou un rideau en dentelle ressortira clairement. Le son est également très bien.

Je suis également très heureux que lightMPD, une distribution dédiée au MPD, ait pris en charge NanoPi-NEO et NanoPi-NEO2.

finalement

C'est autour de l'écran de l'OLED que j'ai écrit diversement, comme ça c'était mieux que ce à quoi je m'attendais, mais il n'est pas utilisé dans mon environnement de production. (Lol

Recommended Posts

Serveur de lecture de musique avec NanoPi-NEO, MPD et OLED
Lancer un serveur Web avec Python et Flask
GRPC commençant par le serveur Go et le client Dart
Contrôlez la lecture de musique sur un smartphone connecté à Raspberry Pi 3 et Bluetooth avec AVRCP
Créez un serveur de musique domestique avec Centos8 + Universal Media Server