
Pemain Connect Spotify yang ditulis dalam penargetan CPP, tetapi tidak terbatas pada perangkat tertanam (ESP32).
Saat ini dalam keadaan pengembangan cepat.
Hanya untuk digunakan dengan akun Spotify Premium
Ringkasan:
libasound dan libavahi-compat-libdnssd Proyek ini menggunakan submodule, pastikan Anda mengkloning dengan -bendera --recursive atau menggunakan git submodule update --init --recursive .
MBEDTLS sekarang menjadi satu-satunya opsi, sehingga Anda bisa mendapatkannya dari sana dan membangunnya kembali atau menginstalnya di seluruh sistem menggunakan manajer paket favorit Anda. Lihat di bawah cara menggunakan versi lokal.
Perpustakaan ini menggunakan nanopb untuk menghasilkan file C dari definisi protobuf. Nanopb sendiri dimasukkan melalui submodules, tetapi membutuhkan beberapa pustaka Python eksternal untuk menjalankan generator.
Untuk menginstalnya, Anda dapat menggunakan PIP:
$ sudo pip3 install protobuf grpcio-tools(Anda mungkin harus menggunakan VENV, tetapi saya bukan pengembang Python)
Untuk menginstal Avahi dan Dependensi Asound di Linux Anda dapat menggunakan:
$ sudo apt-get install libavahi-compat-libdnssd-dev libasound2-devTarget CLI digunakan terutama untuk tujuan pengujian dan pengembangan, karena sekarang memiliki fitur yang sama dengan target ESP32.
Karena MBEDTLS sekarang digunakan alih -alih OpenSSL, Anda perlu menginstalnya atau sistem Anda atau memiliki build lokal. Jika Anda memiliki pemasangan MBEDTLS di seluruh sistem, abaikan apa yang ada di bawah ini
Untuk menggunakan build lokal, Anda harus menentukan Bell_External_MbedTls dan berpotensi mbedtls_release. Yang pertama menunjuk ke subdir "./cmake" dari direktori build MBEDTLS, yang kedua secara opsional mendefinisikan nama build MBEDTLS (secara default diatur untuk 'melepaskan' untuk windows dan 'noconfig' untuk orang lain).
Lihat Menjalankan CLI untuk informasi tentang cara menjalankan CSPOT di komputer desktop.
# 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 > ] Pergi untuk build dan menggunakan cspotcli.sln di bawah VisualStudio atau menggunakan msbuild dari baris perintah.
Perhatikan bahwa untuk saat ini, hanya build Win32 yang telah diuji, bukan versi X64. Di bawah beberapa rilis vs, protobuf mungkin tidak dibangun kembali secara otomatis, cukup pergi ke proyek "Generate_Proto_Sources" dan lakukan c^f7 pada masing -masing *.pb.rule
Target CLI digunakan terutama untuk tujuan pengujian dan pengembangan, karena sekarang memiliki fitur yang sama dengan target 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 Lihat Menjalankan CLI untuk informasi tentang cara menjalankan CSPOT di komputer desktop.
Target ESP32 dibangun menggunakan ESP-IDF Toolchain
# 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 esp32Konfigurasikan cspot sesuai dengan perangkat keras Anda
# run visual config editor, when done press Q to save and exit
$ idf.py menuconfig Arahkan ke Example Connection Configuration dan berikan detail koneksi wifi

Arahkan ke CSPOT Configuration , Anda dapat mengonfigurasi nama perangkat, perangkat output, dan kualitas audio.

Secara default indikasi LED dinonaktifkan, tetapi Anda dapat menggunakan GPIO standar atau LED yang dapat diatasi untuk menunjukkan status CSPOT saat ini. Ini akan menggunakan pola berkedip yang berbeda (dan warna jika LED yang dapat diatasi) untuk menunjukkan konektivitas WiFi dan presensi klien Spotify yang terhubung.
Membangun dan mengunggah firmware
# compile
$ idf.py build
# upload
$ idf.py flashESP32 akan memulai kembali dan mulai menjalankan CSPOT. Anda dapat memantau menggunakan konsol serial.
Secara opsional jalankan sebagai perintah tunggal
# compile, flash and attach monitor
$ idf.py build flash monitorSetelah membangun aplikasi, satu -satunya hal yang perlu Anda lakukan adalah menjalankannya melalui CLI.
$ ./cspotcli
Jika Anda menjalankannya tanpa parameter, itu akan menggunakan noloconf untuk mengiklankan dirinya sendiri. Ini berarti bahwa sampai setidaknya satu aplikasi Spotify Connect lokal telah menemukan dan menghubungkannya, itu tidak akan terdaftar ke Server Spotify. Sebagai akibatnya, WebAPI Spotify tidak akan dapat melihatnya. Jika Anda ingin pemain terdaftar saat start-up, Anda harus menggunakan nama pengguna/kata sandi sepanjang waktu atau setidaknya sekali untuk membuat file kredensial dan kemudian menggunakan kembali file itu. Jalankan dengan -u/-p/-c sekali dan kemudian jalankan dengan -c saja. Lihat Bantuan Baris Perintah.
Sekarang buka aplikasi Spotify yang nyata dan Anda akan melihat perangkat CSPOT di jaringan lokal Anda. Gunakan untuk bermain audio.
cspot dimaksudkan untuk digunakan sebagai perpustakaan C ++ ringan untuk memutar musik Spotify dan menerima pemberitahuan kontrol dari Spotify Connect. Ini memperlihatkan antarmuka untuk memulai komunikasi dengan server Spotify dan mengharapkan program embedding untuk menyediakan antarmuka untuk memutar kembali sampel audio mentah ( AudioSink ).
Anda dapat melihat program cspot-cli untuk referensi tentang cara memasukkan CSPOT dalam program Anda. Ini menyediakan beberapa wastafel audio untuk berbagai platform dan penggunaan:
ALSAAudioSink - linux, membutuhkan libasoundPortAudioSink - MacOS (PortAudio juga mendukung lebih banyak platform, tetapi kami saat ini menggunakannya hanya pada macOS), membutuhkan PortAudio LibraryNamedPipeAudioSink - Semua platform, menulis ke file/pipa FIFO yang disebut outputFifo yang nantinya dapat diputar kembali oleh FFMPEG. Digunakan terutama untuk pengujian dan pengembangan.Selain itu wastafel audio berikut diimplementasikan untuk target ESP32:
ES9018AudioSink - Menyediakan pemutaran melalui ES9018 DAC yang terhubung ke ESP32AC101AudioSink - Menyediakan pemutaran melalui AC101 DAC yang digunakan dalam papan audiokit ESP32 A1S murah, yang biasa ditemukan di AliExpress.PCM5102AudioSink - Menyediakan pemutaran melalui PCM5102 DAC yang terhubung ke ESP32, yang biasa ditemukan dalam bentuk modul ungu kecil di berbagai pengecer online. Pengkabelan dapat dikonfigurasi di wastafel dan default ke: Anda juga dapat dengan mudah menambahkan dukungan untuk DAC pilihan Anda sendiri dengan menerapkan wastafel audio Anda sendiri. Setiap wastafel audio baru harus mengimplementasikan metode void feedPCMFrames(std::vector<uint8_t> &data) yang seharusnya menerima data audio PCM stereo pada 44100 Hz dan 16 bit per sampel. Harap dicatat bahwa wastafel entah bagaimana harus buffer data, karena memutarnya kembali dapat menghasilkan audio berombak.
Sink audio secara opsional dapat mengimplementasikan metode void volumeChanged(uint16_t volume) yang dipanggil setiap kali pengguna mengubah volume (misalnya melalui Spotify Connect). Jika wastafel audio mengimplementasikannya, ia harus mengatur softwareVolumeControl menjadi false dalam konsruktornya untuk memberi tahu CSPOT untuk menonaktifkan penyesuaian volume perangkat lunak. Menerapkan kontrol volume eksternal dengan benar (misalnya melalui perangkat keras khusus) akan menghasilkan kualitas pemutaran yang lebih baik karena semua rentang dinamis digunakan untuk menyandikan sampel.
Program embedding juga harus menangani caching data otentikasi, sehingga pengguna tidak harus mengotentikasi melalui jaringan lokal (noloconf) setiap kali CSPOT dimulai. Untuk referensi tentang cara melakukannya, silakan merujuk ke target cspot-cli (ia menyimpan data di authBlob.json ).
Koneksi dengan server Spotify untuk memutar musik dan menerima informasi kontrol cukup kompleks. Pertama -tama alamat titik akses harus diambil dari Spotify ( ApResolve mengambil daftar dari http://apresolve.spotify.com/). Kemudian PlainConnection dengan titik akses Spotify yang dipilih harus ditetapkan. Ini kemudian ditingkatkan ke ShannonConnection yang dienkripsi.