
CPP 타겟팅으로 작성된 Spotify Connect 플레이어는 포함되어 있지만 임베디드 장치 (ESP32).
현재 빠른 발전 상태입니다.
프리미엄 Spotify 계정과 함께 사용됩니다
요약:
libasound 및 libavahi-compat-libdnssd 이 프로젝트는 하위 모듈을 사용합니다. --recursive 플래그로 복제하거나 git submodule update --init --recursive 사용하고 있는지 확인하십시오.
MBEDTLS는 이제 유일한 옵션이므로 여기에서 가져 와서 재건하거나 좋아하는 패키지 관리자를 사용하여 시스템 전체에 설치할 수 있습니다. 로컬 버전을 사용하는 방법을 아래를 참조하십시오.
이 라이브러리는 NANOPB를 사용하여 Protobuf 정의에서 C 파일을 생성합니다. NANOPB 자체는 서브 모듈을 통해 포함되지만 발전기를 실행하려면 몇 개의 외부 파이썬 라이브러리가 필요합니다.
설치하려면 PIP를 사용할 수 있습니다.
$ sudo pip3 install protobuf grpcio-tools(아마도 Venv를 사용해야하지만 나는 Python 개발자가 아닙니다)
Linux에 Avahi 및 Asound 종속성을 설치하려면 다음을 사용할 수 있습니다.
$ sudo apt-get install libavahi-compat-libdnssd-dev libasound2-devCLI 대상은 주로 테스트 및 개발 목적으로 사용되며, 현재 ESP32 대상과 동일한 기능이 있습니다.
MBEDTLS가 OpenSSL 대신 사용되므로 IT 또는 시스템을 설치하거나 로컬 빌드가 있어야합니다. MBEDTLS 시스템 전체의 설치가있는 경우 아래의 내용을 무시하십시오.
로컬 빌드를 사용하려면 bell_external_mbedtls와 잠재적으로 mbedtls_release를 지정해야합니다. 첫 번째는 mbedtls 빌드 디렉토리의 "./cmake"subdir를 가리키며, 두 번째는 선택적으로 mbedtls 빌드의 이름을 정의합니다 (기본적으로 기본적으로 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 하고 사용하거나 명령 줄에서 msbuild 사용하십시오.
현재 X64 버전이 아닌 Win32 빌드 만 테스트되었습니다. 일부 대 릴리스에서 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 표시가 비활성화되어 있지만 CSPOT 전류 상태를 나타내는 표준 GPIO 또는 주소 LED를 사용할 수 있습니다. 서로 다른 깜박임 패턴 (및 주소가 가능한 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 Spotify 음악을 재생하기위한 가벼운 C ++ 라이브러리로 사용되며 Spotify Connect에서 제어 알림을받습니다. Spotify 서버와의 통신을 시작하기위한 인터페이스를 노출시키고 임베딩 프로그램이 원시 오디오 샘플 ( AudioSink )을 재생하기위한 인터페이스를 제공 할 것으로 기대합니다.
프로그램에 CSPOT를 포함시키는 방법에 대한 참조를 위해 cspot-cli 프로그램을 볼 수 있습니다. 다양한 플랫폼과 용도를위한 몇 가지 오디오 싱크를 제공합니다.
ALSAAudioSink -Linux에는 libasound 가 필요합니다PortAudioSink -MACOS (Portaudio는 또한 더 많은 플랫폼을 지원하지만 현재 MacOS에서만 사용하고 있음)는 Portaudio Library가 필요합니다.NamedPipeAudioSink pipeaudiosink- 모든 플랫폼은 FFMPEG가 다시 재생할 수있는 outputFifo 라는 파일/FIFO 파이프에 씁니다. 주로 테스트 및 개발에 사용됩니다.추가 오디오 싱크대는 ESP32 대상을 위해 구현됩니다.
ES9018AudioSink ESP32에 연결된 ES9018 DAC를 통해 재생을 제공합니다.AC101AudioSink Aliexpress에서 일반적으로 발견되는 저렴한 ESP32 A1S Audiokit 보드에 사용되는 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 로 설정하여 CSPOT에 소프트웨어 볼륨 조정을 비활성화하도록 알립니다. 외부 볼륨 제어 (예 : 전용 하드웨어를 통해)를 올바르게 구현하면 모든 동적 범위가 샘플을 인코딩하는 데 사용되므로 재생 품질이 향상됩니다.
임베딩 프로그램은 또한 인증 데이터 캐싱 처리를 처리하여 CSPOT가 시작될 때마다 사용자가 로컬 네트워크 (Zeroconf)를 통해 인증 할 필요가 없습니다. 수행 방법에 대한 참조는 cspot-cli 대상을 참조하십시오 (데이터를 authBlob.json 에 저장).
Spotify 서버와 연결하여 음악을 재생하고 제어 정보를받는 것은 매우 복잡합니다. 우선 액세스 포인트 주소는 Spotify에서 가져와야합니다 ( ApResolve http://apresolve.spotify.com/에서 목록을 가져옵니다). 그런 다음 선택한 Spotify 액세스 포인트에 대한 PlainConnection 설정되어야합니다. 그런 다음 암호화 된 ShannonConnection 으로 업그레이드됩니다.