
Spotify Connect播放器以CPP定位編寫,但不限於嵌入式設備(ESP32)。
目前處於快速發展狀態。
僅與高級Spotify帳戶一起使用
概括:
libasound和libavahi-compat-libdnssd該項目利用了子模型,請確保您正在使用--recursive Flag或使用git submodule update --init --recursive 。
MBEDTLS現在是唯一的選項,因此您可以從那裡獲得它並重建它或使用您喜歡的軟件包管理器將其安裝在系統範圍內。請參閱下面的使用本地版本。
該庫使用NanoPB從Protobuf定義生成C文件。 NanOPB本身是通過子模型包含的,但是它需要一些外部Python庫來運行發電機。
要安裝它們,您可以使用PIP:
$ sudo pip3 install protobuf grpcio-tools(您可能應該使用VENV,但我不是Python開發人員)
要在Linux上安裝Avahi和ASOUND依賴項,您可以使用:
$ sudo apt-get install libavahi-compat-libdnssd-dev libasound2-devCLI目標主要用於測試和開發目的,到目前為止,它具有與ESP32目標相同的功能。
由於現在使用MBEDTL代替OpenSSL,因此您需要安裝它或系統或具有本地構建。如果您有MBEDTL的全系統安裝,請忽略以下內容
要使用本地構建,您必須指定bell_external_mbedtls和Mbedtls_release。第一個指向MBEDTLS的構建目錄的“ ./cmake”子d,第二個指向MBEDTLS build的名稱(默認設置為Windows'for Windows'和其他其他人的'noconfig')。
有關如何在桌面計算機上運行CSPOT的信息,請參見運行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 > ]轉到VisualStudio下的cspotcli.sln build和使用cspotcli.sln,或使用命令行中的msbuild 。
請注意,目前,僅測試了Win32構建,而不是X64版本。在某些VS版本下,Protobuf可能不會自動重建,只需轉到“ generate_proto_sources”項目,然後在每個*.pb.rule上進行c^f7
CLI目標主要用於測試和開發目的,到目前為止,它具有與ESP32目標相同的功能。
# 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 有關如何在桌面計算機上運行CSPOT的信息,請參見運行CLI。
ESP32目標是使用ESP-IDF工具鏈構建的
# 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 esp32根據您的硬件配置CSPOT
# run visual config editor, when done press Q to save and exit
$ idf.py menuconfig導航到Example Connection Configuration並提供WiFi連接詳細信息

導航到CSPOT Configuration ,您可以配置設備名稱,輸出設備和音頻質量。

默認情況下,LED指示已禁用,但是您可以使用標準GPIO或可尋址的LED來指示CSPOT當前狀態。它將使用不同的閃爍模式(以及在可尋址LED的情況下的顏色)來指示連接的Spotify客戶端的WiFi連接性和預示。
構建和上傳固件
# compile
$ idf.py build
# upload
$ idf.py flashESP32將重新啟動並開始運行CSPOT。您可以使用串行控制台進行監視。
可選地作為單個命令運行
# compile, flash and attach monitor
$ idf.py build flash monitor構建應用程序後,您唯一需要做的就是通過CLI運行它。
$ ./cspotcli
如果您沒有參數運行,它將使用Zeroconf進行廣告。這意味著,直到至少有一個本地Spotify Connect應用程序發現並連接了它之前,它將不會註冊以進行Spotify服務器。結果,Spotify的WebAPI將無法看到它。如果您希望播放器在啟動時註冊,則需要始終使用用戶名/密碼或至少一次創建憑據文件,然後重新使用該文件。使用-U/-P/-C運行一次,然後僅使用-c運行。請參閱命令的幫助。
現在打開一個真實的Spotify應用程序,您應該在本地網絡上看到CSPOT設備。用它播放音頻。
cspot被用作輕巧的C ++庫,用於播放Spotify音樂,並從Spotify Connect接收控制通知。它揭示了一個接口,以啟動與Spotify服務器進行通信的接口,並期望嵌入程序提供播放原始音頻樣本( AudioSink )的接口。
您可以查看cspot-cli程序,以獲取有關如何在程序中包含CSPOT的參考。它為各種平台和用途提供了一些音頻匯:
ALSAAudioSink -Linux,需要libasoundPortAudioSink -MacOS(Portaudio還支持更多平台,但我們目前僅在MacOS上使用),需要Portaudio庫NamedPipeAudioSink所有平台都寫入稱為outputFifo的文件/FIFO管道,後來可以由FFMPEG播放。主要用於測試和開發。額外
ES9018AudioSink通過連接到ESP32的ES9018 DAC提供播放AC101AudioSink通過在Aliexpress上使用的AC101 DAC提供播放。PCM5102AudioSink通過連接到ESP32的PCM5102 DAC提供播放,通常以各種在線零售商的小型紫色模塊形狀找到。接線可以在接收器中配置,並默認為:您還可以通過實現自己的音頻接收器來輕鬆添加對自己選擇的DAC的支持。每個新音頻接收器必須實現void feedPCMFrames(std::vector<uint8_t> &data)方法,該方法應接受44100 Hz的立體聲PCM音頻數據,每個示例16位。請注意,水槽應以某種方式緩衝數據,因為向後播放可能會導致音頻波動。
音頻接收器可以選擇實現void volumeChanged(uint16_t volume)方法,該方法每次都會在用戶更改卷時稱為(例如,通過Spotify Connect)。如果音頻插入它的實現,則應將softwareVolumeControl設置為false在其consructor中,以讓CSPOT知道禁用軟件卷調整。正確實現外部音量控制(例如,通過專用硬件)將帶來更好的播放質量,因為所有動態範圍都用於編碼樣本。
嵌入程序還應處理緩存身份驗證數據,以便用戶不必每次啟動CSPOT時通過本地網絡(Zeroconf)進行身份驗證。有關如何做的引用,請參考cspot-cli目標(它將數據存儲在authBlob.json中)。
與Spotify服務器的連接以播放音樂和收到控制信息非常複雜。首先,必須從Spotify獲取訪問點地址( ApResolve從http://apresolve.spotify.com/獲取列表。然後必須建立具有所選Spotify訪問點的PlainConnection 。然後將其升級到加密的ShannonConnection 。