
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 。