
ผู้เล่น Spotify Connect ที่เขียนในการกำหนดเป้าหมาย CPP แต่ไม่ จำกัด เพียงอุปกรณ์ฝังตัว (ESP32)
ปัจจุบันอยู่ในสถานะของการพัฒนาอย่างรวดเร็ว
เท่านั้นที่จะใช้กับบัญชี Spotify ระดับพรีเมี่ยม
สรุป:
libasound และ libavahi-compat-libdnssd โครงการนี้ใช้ submodules โปรดตรวจสอบให้แน่ใจว่าคุณกำลังโคลนนิ่งด้วย -ธง --recursive หรือใช้ git submodule update --init --recursive
Mbedtls เป็นตัวเลือกเดียวดังนั้นคุณสามารถรับได้จากที่นั่นและสร้างใหม่หรือติดตั้งทั่วทั้งระบบโดยใช้แพ็คเกจตัวจัดการที่คุณชื่นชอบ ดูด้านล่างวิธีใช้เวอร์ชันท้องถิ่น
ไลบรารีนี้ใช้ nanopb เพื่อสร้างไฟล์ C จากคำจำกัดความของ protobuf Nanopb นั้นรวมอยู่ใน submodules แต่ต้องใช้ไลบรารี Python ภายนอกสองสามตัวเพื่อเรียกใช้เครื่องกำเนิดไฟฟ้า
ในการติดตั้งคุณสามารถใช้ PIP:
$ sudo pip3 install protobuf grpcio-tools(คุณควรใช้ VENV แต่ฉันไม่ใช่นักพัฒนา Python)
ในการติดตั้ง avahi และการพึ่งพา asound บน linux คุณสามารถใช้:
$ sudo apt-get install libavahi-compat-libdnssd-dev libasound2-devเป้าหมาย CLI ส่วนใหญ่ใช้เพื่อการทดสอบและการพัฒนา ณ ตอนนี้มีคุณสมบัติเช่นเดียวกับเป้าหมาย ESP32
ขณะที่ Mbedtls ถูกใช้แทน OpenSSL คุณต้องติดตั้งหรือระบบของคุณหรือมีบิลด์ท้องถิ่น หากคุณมีการติดตั้ง mbedtls ทั่วทั้งระบบให้เพิกเฉยต่อสิ่งที่อยู่ด้านล่าง
ในการใช้งานบิลด์ในท้องถิ่นคุณต้องระบุ bell_external_mbedtls และอาจ mbedtls_release จุดแรกชี้ไปที่ subdir "./cmake" ของไดเรกทอรีการสร้างของ mbedtls ตัวเลือกที่สองจะกำหนดชื่อของการสร้าง mbedtls (โดยเริ่มต้นตั้งค่าเป็น 'ปล่อย' สำหรับ windows และ 'noconfig' สำหรับผู้อื่น)
ดูการเรียกใช้ CLI สำหรับข้อมูลเกี่ยวกับวิธีเรียกใช้ CSPOT บนคอมพิวเตอร์เดสก์ท็อป
# 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 และใช้ cspotcli.sln ภายใต้ Visualstudio หรือใช้ msbuild จากบรรทัดคำสั่ง
โปรดทราบว่าสำหรับตอนนี้มีการทดสอบการสร้าง Win32 เท่านั้นไม่ใช่รุ่น x64 ภายใต้การเผยแพร่ VS บางตัว Protobuf อาจไม่ได้รับการสร้างใหม่โดยอัตโนมัติเพียงไปที่โครงการ "generate_proto_sources" และทำ C^f7 ในแต่ละ *.pb.rule
เป้าหมาย 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 ดูการเรียกใช้ CLI สำหรับข้อมูลเกี่ยวกับวิธีเรียกใช้ CSPOT บนคอมพิวเตอร์เดสก์ท็อป
เป้าหมาย 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 ที่อยู่ได้) เพื่อระบุการเชื่อมต่อ WiFi และการแสดงตนของไคลเอนต์ Spotify ที่เชื่อมต่อ
สร้างและอัปโหลดเฟิร์มแวร์
# 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 ด้วยเหตุนี้ Webapi ของ Spotify จะไม่สามารถมองเห็นได้ หากคุณต้องการให้ผู้เล่นลงทะเบียนเมื่อเริ่มต้นคุณจะต้องใช้ชื่อผู้ใช้/รหัสผ่านตลอดเวลาหรืออย่างน้อยหนึ่งครั้งเพื่อสร้างไฟล์ข้อมูลรับรองแล้วใช้ไฟล์นั้นกลับมาอีกครั้ง เรียกใช้ด้วย -u/-p/-c หนึ่งครั้งแล้วเรียกใช้ด้วย -c เท่านั้น ดูความช่วยเหลือของบรรทัดคำสั่ง
ตอนนี้เปิดแอพ Spotify จริงและคุณควรเห็นอุปกรณ์ CSPOT ในเครือข่ายท้องถิ่นของคุณ ใช้เพื่อเล่นเสียง
cspot มีความหมายที่จะใช้เป็นไลบรารี C ++ ที่มีน้ำหนักเบาสำหรับการเล่นเพลง Spotify Back และรับการแจ้งเตือนการควบคุมจาก Spotify Connect มันเปิดเผยอินเทอร์เฟซสำหรับการเริ่มต้นการสื่อสารกับเซิร์ฟเวอร์ Spotify และคาดว่าโปรแกรมการฝังจะให้อินเทอร์เฟซสำหรับการเล่นตัวอย่างเสียงดิบ ( AudioSink )
คุณสามารถดูโปรแกรม cspot-cli สำหรับการอ้างอิงเกี่ยวกับวิธีการรวม CSPOT ในโปรแกรมของคุณ มันมีอ่างเสียงไม่กี่ตัวสำหรับแพลตฟอร์มและการใช้งานต่างๆ:
ALSAAudioSink - Linux ต้องการ libasoundPortAudioSink - MacOS (Portaudio ยังรองรับแพลตฟอร์มเพิ่มเติม แต่ขณะนี้เราใช้มันใน MacOS เท่านั้น) ต้องใช้ Library PortaudioNamedPipeAudioSink - แพลตฟอร์มทั้งหมดเขียนไปยังท่อ/FIFO ที่เรียกว่า outputFifo ซึ่งสามารถเล่นได้ในภายหลังโดย FFMPEG ใช้เป็นหลักสำหรับการทดสอบและการพัฒนาเพิ่มเติมอ่างเสียงต่อไปนี้จะถูกนำไปใช้สำหรับเป้าหมาย ESP32:
ES9018AudioSink - ให้การเล่นผ่าน ES9018 DAC ที่เชื่อมต่อกับ ESP32AC101AudioSink - ให้การเล่นผ่าน AC101 DAC ที่ใช้ในบอร์ด Audiokit ESP32 A1S ราคาถูกซึ่งพบได้ทั่วไปใน AliExpressPCM5102AudioSink - ให้การเล่นผ่าน PCM5102 DAC ที่เชื่อมต่อกับ ESP32 ซึ่งพบได้ทั่วไปในรูปของโมดูลสีม่วงขนาดเล็กที่ร้านค้าปลีกออนไลน์ต่างๆ การเดินสายสามารถกำหนดค่าได้ในอ่างล้างจานและค่าเริ่มต้นเป็น: นอกจากนี้คุณยังสามารถเพิ่มการสนับสนุนสำหรับ DAC ที่คุณเลือกได้อย่างง่ายดายโดยใช้อ่างล้างจานเสียงของคุณเอง อ่างล้างมือใหม่แต่ละครั้งจะต้องใช้ void feedPCMFrames(std::vector<uint8_t> &data) ซึ่งควรยอมรับข้อมูลเสียงสเตอริโอ PCM ที่ 44100 Hz และ 16 บิตต่อตัวอย่าง โปรดทราบว่าอ่างล้างจานควรบัฟเฟอร์ข้อมูลเนื่องจากการเล่นกลับอาจส่งผลให้เสียงขาด ๆ หาย ๆ
อ่างล้างจานสามารถเลือกใช้วิธี void volumeChanged(uint16_t volume) ซึ่งเรียกว่าทุกครั้งที่ผู้ใช้เปลี่ยนระดับเสียง (ตัวอย่างเช่นผ่าน Spotify Connect) หากอ่างล้างจานใช้งานมันควรตั้งค่า softwareVolumeControl เป็น false ใน consructor เพื่อให้ CSpot ทราบเพื่อปิดใช้งานการปรับระดับเสียงของซอฟต์แวร์ การใช้งานการควบคุมระดับเสียงภายนอกอย่างถูกต้อง (ตัวอย่างเช่นผ่านฮาร์ดแวร์เฉพาะ) จะส่งผลให้คุณภาพการเล่นดีขึ้นเนื่องจากช่วงไดนามิกทั้งหมดใช้เพื่อเข้ารหัสตัวอย่าง
โปรแกรมฝังตัวควรจัดการกับการแคชข้อมูลการตรวจสอบสิทธิ์เพื่อให้ผู้ใช้ไม่จำเป็นต้องตรวจสอบสิทธิ์ผ่านเครือข่ายท้องถิ่น (Zeroconf) ในแต่ละครั้งที่ CSPOT เริ่มต้นขึ้น สำหรับการอ้างอิงเกี่ยวกับวิธีการทำโปรดดูที่เป้าหมาย cspot-cli (จัดเก็บข้อมูลใน authBlob.json )
การเชื่อมต่อกับเซิร์ฟเวอร์ Spotify เพื่อเล่นเพลงและรับข้อมูลการควบคุมนั้นค่อนข้างซับซ้อน ก่อนอื่นที่อยู่จุดเชื่อมต่อทั้งหมดจะต้องดึงมาจาก Spotify ( ApResolve ดึงรายการจาก http://apresolve.spotify.com/) จากนั้นจะต้องสร้าง PlainConnection กับจุดเชื่อมต่อ Spotify ที่เลือก จากนั้นจะได้รับการอัพเกรดเป็น ShannonConnection ที่เข้ารหัส