[PYTHON] Musikwiedergabeserver mit NanoPi-NEO, MPD und OLED

Überblick

Erstellen Sie einen Musikwiedergabeserver mit MPD und zeigen Sie den Songnamen, den Künstlernamen, den Albumnamen und das Jackenbild an, die auf der OLED abgespielt werden. Natürlich ist es auf Japanisch in Ordnung !! Außerdem können Sie mit drei Tasten "Vorheriges Lied", "Wiedergabe / Pause" und "Nächstes Lied" auswählen.

Vielleicht ist es eine der abgeschlossenen Formen von MPD in SingleBoard Computing (lacht) Da es sehr viel ist, werde ich es als vollständige Version einschließlich Umgebungskonstruktion senden.

_72D8924.jpg

Die linke Seite ist das NEO2 Complete Starter Kit. Es ist ausverkauft und es ist wunderbar, wenn es am 26.5. Für einen Moment auf Lager ist. Ein Juwel, das ich bekommen konnte. Die rechte Seite ist eine Kombination aus NanoPi-NEO + NanoHat PCM5102a + NanoHat OLED.

Der Code zum Anzeigen verschiedener Informationen auf der OLED von Python, diesmal der Hauptcode, ist unten registriert. https://github.com/blue777/NanoPi-NEO_OLED_MPD

Verwandte Serieneinführung

Dinge notwendig

Oder

Oder

Software

NanoPi NEO

Official image

Wird als eine der oben genannten angenommen.

NanoPi NEO2

Official rom image

Wird als eine der oben genannten angenommen.

Serverseitiges Konstruktionsverfahren

Es wird davon ausgegangen, dass das Boot-Image auf MicroSD übertragen und gestartet wurde.

1. Ersteinrichtung

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

Ich werde mich vorbereiten. Wenn die feste IP gut ist, sieht sie wie die folgende aus.

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. Installieren Sie MPD (Music Player Daemon).

Installieren Sie mit dem folgenden Befehl. Ändern Sie nach Abschluss der Installation die Einstellungen.

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

Musikverzeichnis ändern

Suchen Sie die Linie und gehen Sie wie folgt vor: (Ich werde unter der Annahme unten erklären)

/etc/mpd.conf


music_directory  "/media/"

Audioausgabeeinstellungen

Zuerst, cat /proc/asound/cards Gibt eine Liste der Soundkarten aus.

Es sieht aus wie das. Zur Zeit ist es in einem verbundenen Zustand (lacht)

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

Wenn Sie in der Reihenfolge von oben erklären,

InstanceNo. DeviceName Kommentar
0 Pcm5102a Es ist NanoHat Pcm5102a. NanoPi-NEO Kernel=3.4.Dies ist der Anzeigename für 39. Wenn sich die Kernel-Version ändert, ändert sich auch der Anzeigename.
1 sndhdmi Ich denke, es ist ein HDMI-Audiosignalausgang, aber er kann nicht verwendet werden, da es keinen HDMI-Anschluss gibt.
2 DAC Es ist ein USB-DAC.
3 J20 Es ist ein USB-DDC. JAVS X.-Es ist ein USB-zu-SPDIF-Konverter namens DDC.
4 N2 Es ist ein USB-DAC. NuForce μ DAC.
5 AI301DA Es ist ein USB-DAC. Teac AI-Es ist 301DA.
0 Codec NanoPi-Line Out auf der NEO2-Platine. Sie sollten es durch Löten verwenden können. Es scheint, dass der Grund, warum es H5 ist, aber H3, ist, dass der Fahrer gemeinsam ist.
1 USBCamera Es ist eine Kamera mit Mikrofoneingang. Es kann nicht verwendet werden, da es kein Audio ausgeben kann.

Dies ist die grundlegende Schreibmethode für jede. Ich werde es so schreiben. Es ist in Ordnung, mehrere audio_output-Tags zu haben. Wenn mehrere vorhanden sind, können Sie auch die gleichzeitige Ausgabe angeben.

Für 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)Im Falle von


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

Für Codec


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

Der jeweils angegebene Name ist der Anzeigename vom MPD-Client. Geben Sie InstanceNo. Oder DeviceName in den XXXX-Teil von "hw: XXXX, 0" des Geräts ein. Wenn Sie möchten, dass es automatisch über eine USB-Verbindung erkannt wird, geben Sie am Ende die Instanznummer ein. Es wird jedoch empfohlen, den Gerätenamen anzugeben, da er sich abhängig von der Zuordnung nach InstanceNo und der Verbindungsreihenfolge ändert. (Obwohl es möglich ist, die Reihenfolge der Nummernvergabe in ALSA zu ändern, wird sie weggelassen.)

3. Vorbereitung der Musikdaten

Wenn Sie microSD in einen freigegebenen Ordner verwandeln

Erstellen Sie die microSD mit dem installierten Betriebssystem in einem freigegebenen Ordner Musikdaten werden von einem externen PC auf Nanopi NEO hochgeladen.

Samba Installation und Erstellen Sie ein Verzeichnis in / media / local und legen Sie die Freigabe fest. Die Freigabeeinstellungen sind Vollzugriffseinstellungen. (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

Bei Verwendung eines externen freigegebenen Ordners wie NAS

Bei Verwendung der Windows-Dateifreigabe oder beim Mounten eines 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

Nach dem Einstellen

mount -a df

Stellen Sie sicher, dass es richtig montiert ist.

4. Einrichtung des OLED-Displays

Ich habe die Songtitelanzeige und die Erfassung / Anzeige des Jackenbildes in Python geschrieben. Dieses Mal habe ich Python zum ersten Mal verwendet und es war in ungefähr zwei Tagen fertig. .. .. Unterwegs litt ich unter einer Mischung aus Tabulatoren und Leerzeichen, und es gab Drehungen und Wendungen. Es war besser als ich erwartet hatte und hat mich auch dazu inspiriert, diesen Artikel zu schreiben.

31.08.2017 Nachtrag: Fortsetzung "NanoPi-NEO-, MPD-, LCD-, I2S-DAC- und TDA7297-Musikwiedergabeserver (abgeschlossen)" Neben dem OLED-Display wird auch das LCD-Display unterstützt. Bitte verwenden Sie Ihre bevorzugte Anzeigesoftware.

Hauptspezifikationen

Mechanismus usw.

Gehen wir nun zum Hauptinstallationsverfahren

Fügen Sie NanoHat OLED ein

Referenz: http://wiki.friendlyarm.com/wiki/index.php/NanoHat_OLED

Führen Sie zur Installation die folgenden Schritte aus. (Installationsziel ist / root) NanoHat OLED arbeitet in zwei Konfigurationen, C-Programm und Python-Programm, und die OLED-Anzeige selbst ist in Python geschlossen, aber die Tastenoperation wird der Python-Seite nach dem Empfang auf der C-Programm-Seite mitgeteilt. Es war.

Auf der C-Programmseite wird auch das Python-Programm gestartet, sodass das Standardprodukt nicht gestartet wird. Im folgenden Beispiel habe ich dies vorerst kommentiert. (Alternativer Python-Code wird von rc.local aus gestartet.)

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

Geben Sie das Hauptthema ein (OLED-Anzeige)

Installieren Sie einschließlich extern abhängiger Pakete, damit diese automatisch in rc.local gestartet werden. Da der automatische Start (oled-start) von NanoHat OLED bereits geschrieben wurde, Ich werde in der nächsten Zeile einen Startbefehl hinzufügen.

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. Installieren Sie ympd (MPD Web GUI)

Versuchen Sie, von jedem Client im Netzwerk auf http zuzugreifen, und geben Sie ympd ein, damit Sie es steuern können.

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 

Es beginnt mit ./ympd, aber es ist schwierig, jedes Mal zu starten. Bearbeiten Sie daher rc.local so, dass es automatisch startet.

nano /etc/rc.local

/etc/rc.local


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

Der Zugangsport wird also 8080 sein http://YourMpdServer:8080/ Zugang in Form von.

Wenn port80 gut ist, geben Sie Folgendes an.

./ympd -w 80

Dies ist das Ende der Serverseite. Bitte neu starten und genießen.

reboot

Client-seitige Vorbereitung

Die Wiedergabe kann über den Webzugriff gesteuert werden, aber die dedizierte App ist immer noch gut! In diesem Fall fügen Sie bitte Ihren bevorzugten MPD-Client ein.

Verschiedene MPD-Clients wie iOS, Windows und Android sind verfügbar. Wenn Sie mit dem MPD-Client suchen, werden Sie verschiedene Dinge finden. Installieren Sie also die gewünschte.

Wir verwenden gmpc, weil es sich um einen Windows-Computer handelt. https://gmpclient.org/

image.png

In audio_output festgelegte Elemente können im Menü Server ausgewählt werden.

Bonus

Über NanoHat PCM5102a

Im Standardzustand befindet es sich in Bezug auf die Hardware im Zustand De-Emphasis, Low-Latency. Insbesondere De-Emphasis hat einen Hochfrequenzschnitt bei 44,1 kHz und klingt etwas gedämpft. Es wird empfohlen, die Bereiche Deemphasis und Low-Latency zu löten.

Die Klangqualität ist normalerweise gut. Ein CD-Player der Klasse 100.000 kann nicht mithalten.

Wenn die Klänge jedoch eng miteinander verflochten sind (z. B. die Spitze des Skalenendwerts), ist die Verschlechterung der Auflösung spürbar und wird zu einem Knödel. Da es sich bei dem Netzteil jedoch um ein Schaltnetzteil handelt, das von NanoPi-NEO gemeinsam genutzt wird, wird es mit Sicherheit aktiviert, wenn Sie ein anderes Netzteil ändern.

NanoPi-NEO, NEO2 I2S-Signale

Referenz http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2

Das von NanoPi-NEO ausgegebene I2S-Signal ist

3 werden ausgegeben, aber NanoPi-NEO2 ist zusätzlich zu den oben genannten

Kann auch ausgegeben werden und wird an GPIOA6 ausgegeben. Dies ist eine Spezifikation nur für H5, und es scheint, dass H3 sie nicht unterstützt. (Soweit das Datenblatt zu sehen ist)

Und wenn Sie weiter schauen, sagt GPIO A6 PWM, aber weder H3 / H5 kann ein PWM-Ausgabeziel sein. Ich frage mich, woher die Fehlpflanzung kam (H2 + oder so?)

Ich hoffe, einen Treiber bereitzustellen, der I2S_MCLK heimlich ausgeben kann.

■ 2018/01/13 hinzugefügt Ich konnte endlich ausgeben! MCLK-Ausgang & 384 kHz kompatibel mit NanoPi-NEO2 I2S

Klangqualität der NanoPi NEO-Serie und der Beagle Bone-Serie

Der Grund für die Verwendung von MPD in SBC (Single Board Computing) ist zweifellos das Streben nach Klangqualität. Die persönliche subjektive Bewertung der Klangqualität der Serien NanoPi und BeagleBone ist also so.

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

Beide werden durch Verbinden mit SBC --- (USB) -> JAVS X-DDC (überarbeitet) --- (Coaxial spdif) -> DAC ausgewertet, und SBC und X-DDC werden mit Infineons SiC SBD ausgewertet. Es wird ein durch Brückengleichrichtung zusammengesetztes Seriennetzteil (LM350 auf der SBC-Seite, diskret mit dem SiC-FET von Cree auf dem X-DDC) verwendet. In diesem Fall wird der BeagleBone-Typ oder ein Spitzenvorhang deutlich hervorgehoben. Der Sound ist auch gut.

Ich freue mich auch sehr, dass lightMPD, eine Distribution für MPD, NanoPi-NEO und NanoPi-NEO2 unterstützt.

Schließlich

Es geht um das Display von OLED, das ich unterschiedlich geschrieben habe, zum Beispiel, dass es besser war als ich erwartet hatte, aber es wird in meiner Produktionsumgebung nicht verwendet. (Lol

Recommended Posts

Musikwiedergabeserver mit NanoPi-NEO, MPD und OLED
Starten Sie einen Webserver mit Python und Flask
GRPC beginnend mit Go-Server und Dart-Client
Steuern Sie die Musikwiedergabe auf einem Smartphone, das mit Raspberry Pi 3 und Bluetooth mit AVRCP verbunden ist
Erstellen Sie einen Home Music Server mit Centos8 + Universal Media Server