
Ein Spotify -Connect -Player, der in CPP -Targeting geschrieben ist, aber nicht auf eingebettete Geräte (ESP32) beschränkt ist.
Derzeit im Zustand der schnellen Entwicklung.
Nur um mit Premium -Spotify -Konten verwendet zu werden
Zusammenfassung:
libasound und libavahi-compat-libdnssd In diesem Projekt werden Submodules verwendet. Bitte stellen Sie sicher, dass Sie mit dem --recursive Flag klonen oder git submodule update --init --recursive verwenden.
MbedTLS ist jetzt die einzige Option, sodass Sie sie von dort aus erhalten und neu aufbauen oder systemweit mit Ihrem bevorzugten Paketmanager installieren lassen. Siehe unten, wie Sie eine lokale Version verwenden.
Diese Bibliothek verwendet NanopB, um C -Dateien aus Protobuf -Definitionen zu generieren. Nanopb selbst ist über Submodules enthalten, benötigt jedoch einige externe Python -Bibliotheken, um die Generatoren auszuführen.
Um sie zu installieren, können Sie PIP verwenden:
$ sudo pip3 install protobuf grpcio-tools(Sie sollten wahrscheinlich Venv verwenden, aber ich bin kein Python -Entwickler)
So installieren Sie Avahi und ASound -Abhängigkeiten unter Linux, die Sie verwenden können:
$ sudo apt-get install libavahi-compat-libdnssd-dev libasound2-devDas CLI -Ziel wird hauptsächlich für Test- und Entwicklungszwecke verwendet. Ab sofort hat es die gleichen Merkmale wie das ESP32 -Ziel.
Da MbedTLS jetzt anstelle von OpenSSL verwendet wird, müssen Sie es oder Ihr System installieren oder einen lokalen Build haben. Wenn Sie eine systemweite Installation von MbedTLs haben, ignorieren Sie, was unten ist
Um einen lokalen Build zu verwenden, müssen Sie die bell_external_mbedtls und möglicherweise mbedtls_release angeben. Der erste zeigt auf das Unterabdir von "./CMake" des Build -Verzeichnisses des MbedTLS -Verzeichnisses, das zweite definiert optional den Namen des MbedTLS -Builds (es ist standardmäßig auf "Release" für Windows und 'Noconfig' für andere eingestellt).
Informationen zum Ausführen von CSPOT auf einem Desktop -Computer finden Sie unter Ausführen der CLI.
# navigate to the targets/cli directory
$ cd targets/cli
# create a build directory and navigate to it
$ mkdir -p build && cd build
# use cmake to generate build files, and select an audio sink
$ cmake .. -DUSE_PORTAUDIO=ON [-DBELL_EXTERNAL_MBEDTLS =< mbedtls_build_dir > /cmake > ] [-DMBEDTLS_RELEASE =< release_name > ]
# compile
$ make # navigate to the targets/cli directory
$ cd targets/cli
# create a build directory and navigate to it
$ mkdir -p build && cd build
# use cmake to generate build files, and select an audio sink
$ cmake .. -A Win32 | x64 -DUSE_PORTAUDIO=ON [-DBELL_EXTERNAL_MBEDTLS =< mbedtls_build_dir > /cmake > ] [-DMBEDTLS_RELEASE =< release_name > ] build Sie mit cspotcli.sln unter Visualstudio und verwenden Sie msbuild aus der Befehlszeile.
Beachten Sie, dass vorerst nur der Win32 -Build getestet wurde, nicht die X64 -Version. Unter einigen VS -Veröffentlichungen wird der Protobuf möglicherweise nicht automatisch umgebaut. Gehen Sie einfach zum Projekt "generate_proto_sources" und machen Sie ein C^f7 auf jedem *.pb.rule
Das CLI -Ziel wird hauptsächlich für Test- und Entwicklungszwecke verwendet. Ab sofort hat es die gleichen Merkmale wie das ESP32 -Ziel.
# navigate to the targets/cli directory
$ cd targets/cli
# create a build directory and navigate to it
$ mkdir -p build && cd build
# use cmake to generate build files, and select an audio sink
$ cmake .. -DUSE_ALSA=ON
# compile
$ make Informationen zum Ausführen von CSPOT auf einem Desktop -Computer finden Sie unter Ausführen der CLI.
Das ESP32-Ziel wird mit der ESP-IDF-Toolchain erstellt
# Follow the instructions for setting up esp-idf for your operating system, up to `. ./export.sh` or equivalent
# esp-idf has a Python virtualenv, install nanopb's dependencies in it
$ pip3 install protobuf grpcio-tools
# update submodules after each code pull to avoid build errors
$ git submodule update --init --recursive
# navigate to the targets/esp32 directory
$ cd targets/esp32
# run once after pulling the repo
$ idf.py set-target esp32Konfigurieren Sie CSPOT entsprechend Ihrer Hardware
# run visual config editor, when done press Q to save and exit
$ idf.py menuconfig Navigieren Sie zur Example Connection Configuration und geben Sie WLAN -Verbindungsdetails an

Navigieren Sie zur CSPOT Configuration . Sie können den Gerätenamen, die Ausgabegerät und die Audioqualität konfigurieren.

Standardmäßig ist die LED -Anzeige deaktiviert, aber Sie können entweder Standard -GPIO oder adressierbare LED verwenden, um den CSPOT -aktuellen Status anzuzeigen. Es wird unterschiedliche Blinkmuster (und Farben bei adressierbaren LEDs) verwendet, um die WLAN -Konnektivität und das Präsidium des angeschlossenen Spotify -Clients anzuzeigen.
Erstellen und hochladen die Firmware
# compile
$ idf.py build
# upload
$ idf.py flashDer ESP32 wird neu starten und CSPOT ausführen. Sie können es mit einer seriellen Konsole überwachen.
Optional als einzelner Befehl ausführen
# compile, flash and attach monitor
$ idf.py build flash monitorNach dem Erstellen der App müssen Sie sie nur durch CLI durchführen.
$ ./cspotcli
Wenn Sie es ohne Parameter ausführen, wird Zeroconf verwendet, um sich selbst zu bewerben. Dies bedeutet, dass bis mindestens eine lokale Spotify Connect -Anwendung sie entdeckt und verbunden hat, sie nicht als Spotify -Server registriert wird. Infolgedessen kann das Webapi von Spotify es nicht sehen. Wenn Sie möchten, dass der Player beim Start registriert wird, müssen Sie entweder den userername/das passwalt verwenden oder mindestens einmal eine Anmeldeinformatei erstellen und diese Datei dann wiederverwenden. Führen Sie es einmal mit -U/-p/-c aus und führen Sie es dann nur mit -C aus. Siehe die Zeilenhilfe des Befehls.
Öffnen Sie nun eine echte Spotify -App und Sie sollten ein CSPOT -Gerät in Ihrem lokalen Netzwerk sehen. Verwenden Sie es, um Audio abzuspielen.
cspot soll als leichte C ++ - Bibliothek für das Spielen von Spotify -Musik verwendet werden und Kontrollbenachrichtigungen von Spotify Connect erhalten. Es enthüllt eine Schnittstelle zum Starten der Kommunikation mit Spotify -Servern und erwartet, dass das Einbettungsprogramm eine Schnittstelle zum Wiederholten von RAW -Audio -Samples ( AudioSink ) bereitstellt.
Sie können das cspot-cli -Programm als Referenz zur Einbeziehung von CSPOT in Ihr Programm anzeigen. Es bietet ein paar Audio -Waschbecken für verschiedene Plattformen und Verwendungen:
ALSAAudioSink - Linux erfordert libasoundPortAudioSink - MacOS (Portaudio unterstützt auch mehr Plattformen, aber wir verwenden sie derzeit nur auf macOS), erfordert die Portaudio -BibliothekNamedPipeAudioSink - Alle Plattformen, schreibt in eine Datei/FIFO -Pipe namens outputFifo , die später von FFMPEG zurückgespielt werden kann. Wird hauptsächlich für Tests und Entwicklung verwendet.Zusätzlich werden die folgenden Audiosenssen für das ESP32 -Ziel implementiert:
ES9018AudioSink - Bietet eine Wiedergabe über einen ES9018 DAC, der mit dem ESP32 verbunden istAC101AudioSink - Bietet eine Wiedergabe über den AC101 DAC, das in billigen ESP32 A1S Audiokit Boards verwendet wird, die häufig auf Aliexpress zu finden sind.PCM5102AudioSink - Bietet eine Wiedergabe über einen PCM5102 DAC, der mit dem ESP32 verbunden ist, der häufig in Form kleiner lila Module bei verschiedenen Online -Einzelhändlern zu finden ist. Die Verkabelung kann in der Spüle konfiguriert werden und standardmäßig: Sie können auch problemlos Unterstützung für Ihren eigenen DAC Ihrer Wahl hinzufügen, indem Sie Ihre eigene Audio -Spüle implementieren. Jede neue Audio -Sink muss die void feedPCMFrames(std::vector<uint8_t> &data) implementieren, mit der Stereo -PCM -Audiodaten bei 44100 Hz und 16 Bit pro Beispiel akzeptiert werden sollten. Bitte beachten Sie, dass die Spüle die Daten irgendwie pufferen sollte, da das Zurückspielen zu unruhiger Audio führen kann.
Eine Audiosenke kann optional die Methode des void volumeChanged(uint16_t volume) implementieren, die jedes Mal, wenn der Benutzer das Volumen ändert (z. B. über Spotify Connect), aufgerufen wird. Wenn eine Audio -Sinke sie implementiert, sollte sie in seinem Bestand auf softwareVolumeControl auf false setzen, damit CSPOT die Software -Volumenanpassung deaktivieren kann. Die ordnungsgemäße Implementierung der externen Lautstärkeregelung (z. B. über dedizierte Hardware) führt zu einer besseren Wiedergabequalität, da der gesamte Dynamikbereich zur Codierung der Samples verwendet wird.
Das Einbettungsprogramm sollte auch das Zwischenspeichern der Authentifizierungsdaten verarbeiten, sodass der Benutzer bei jedem Start von CSPOT nicht über das lokale Netzwerk (ZeroConf) authentifiziert werden muss. Verweisen Sie auf die Ausführung des cspot-cli Ziels (es speichert die Daten in authBlob.json ).
Die Verbindung mit Spotify -Servern zum Spielen von Musik und Steuerungsinformationen ist ziemlich komplex. Zunächst muss eine Zugriffspunktadresse von Spotify abgerufen werden ( ApResolve holt die Liste von http://apresolve.spotify.com/). Dann muss eine PlainConnection mit dem ausgewählten Spotify -Zugangspunkt festgelegt werden. Es wird dann auf eine verschlüsselte ShannonConnection aufgerüstet.