
لاعب Spotify Connect مكتوب في استهداف CPP ، على سبيل المثال لا الحصر ، الأجهزة المدمجة (ESP32).
حاليا في حالة التنمية السريعة.
فقط لاستخدامها مع حسابات Spotify المتميزة
ملخص:
libasound و libavahi-compat-libdnssd يستخدم هذا المشروع العزف الفرعي ، يرجى التأكد من أنك تستنسخ -العلم --recursive أو استخدام git submodule update --init --recursive .
يعد Mbedtls الآن الخيار الوحيد ، بحيث يمكنك الحصول عليه من هناك وإعادة بنائه أو تركيبه على مستوى النظام باستخدام مدير الحزمة المفضل لديك. انظر أدناه كيفية استخدام نسخة محلية.
تستخدم هذه المكتبة nanopb لإنشاء ملفات C من تعريفات protobuf. يتم تضمين Nanopb نفسه عبر العارض الفرعي ، لكنه يتطلب بعض مكتبات Python الخارجية لتشغيل المولدات.
لتثبيتها ، يمكنك استخدام PIP:
$ sudo pip3 install protobuf grpcio-tools(ربما يجب عليك استخدام VenV ، لكنني لست مطور Python)
لتثبيت Avahi وتبعيات الصعوبة على Linux يمكنك استخدامها:
$ sudo apt-get install libavahi-compat-libdnssd-dev libasound2-devيتم استخدام هدف CLI بشكل أساسي لأغراض الاختبار والتطوير ، حتى الآن لديه نفس ميزات هدف ESP32.
نظرًا لاستخدام Mbedtls الآن بدلاً من OpenSSL ، فأنت بحاجة إلى تثبيته أو نظامك أو الحصول على بناء محلي. إذا كان لديك تثبيت على نطاق النظام لـ MbedTLS ، فتجاهل ما هو أدناه
لاستخدام بناء محلي ، يجب عليك تحديد bell_external_mbedtls و mbedtls_release. يشير أول واحد إلى "./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 من سطر الأوامر.
لاحظ أنه في الوقت الحالي ، تم اختبار Build 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 الحالية. سوف تستخدم أنماط وميض مختلفة (والألوان في حالة LEDs القابلة للعنونة) للإشارة إلى اتصال WiFi و presense لعميل Spotify المتصالح.
بناء وتحميل البرامج الثابتة
# compile
$ idf.py build
# upload
$ idf.py flashسيقوم ESP32 بإعادة تشغيل وبدء تشغيل CSPOT. يمكنك مراقبته باستخدام وحدة تحكم تسلسلية.
تم تشغيله اختياريًا كأمر واحد
# compile, flash and attach monitor
$ idf.py build flash monitorبعد إنشاء التطبيق ، الشيء الوحيد الذي عليك القيام به هو تشغيله من خلال CLI.
$ ./cspotcli
إذا قمت بتشغيله بدون معلمة ، فسيستخدم ZeroconF للإعلان عن نفسه. هذا يعني أنه حتى يتم اكتشاف تطبيق Spotify Connect المحلي على الأقل وتوصيله ، فلن يتم تسجيله في Spotify Servers. نتيجة لذلك ، لن يتمكن WebAPI من Spotify من رؤيته. إذا كنت تريد أن يتم تسجيل اللاعب عند بدء التشغيل ، فأنت بحاجة إلى استخدام اسم المستخدم/كلمة المرور طوال الوقت أو على الأقل مرة واحدة لإنشاء ملف بيانات الاعتماد ثم إعادة استخدام هذا الملف. قم بتشغيله باستخدام -u/-P/-C مرة واحدة ثم قم بتشغيله باستخدام -C فقط. انظر مساعدة خط الأوامر.
افتح الآن تطبيق Spotify حقيقي ويجب أن ترى جهاز CSPOT على شبكتك المحلية. استخدمه لتشغيل الصوت.
من المفترض أن يتم استخدام cspot كمكتبة C ++ خفيفة الوزن لتشغيل موسيقى Spotify مرة أخرى واستلام إشعارات التحكم من Spotify Connect. يعرض واجهة لبدء الاتصال مع خوادم Spotify ويتوقع أن يوفر برنامج التضمين واجهة لتشغيل عينات الصوت الخام ( AudioSink ).
يمكنك عرض برنامج cspot-cli للحصول على مرجع حول كيفية تضمين CSPOT في برنامجك. يوفر عدد قليل من المصارف الصوتية لمختلف المنصات والاستخدامات:
ALSAAudioSink - Linux ، يتطلب libasoundPortAudioSink - MacOS (يدعم Portaudio أيضًا المزيد من المنصات ، لكننا نستخدمها حاليًا فقط على MacOS) ، يتطلب مكتبة PortaudioNamedPipeAudioSink - جميع المنصات ، يكتب إلى ملف/FIFO أنبوب يسمى outputFifo والذي يمكن أن يتم تشغيله لاحقًا بواسطة FFMPEG. تستخدم أساسا للاختبار والتطوير.بالإضافة إلى ذلك ، يتم تنفيذ أحواض الصوت التالية لهدف ESP32:
ES9018AudioSink - يوفر التشغيل عبر ES9018 DAC متصل بـ ESP32AC101AudioSink - يوفر التشغيل عبر AC101 DAC المستخدمة في لوحات Audiokit ESP32 A1S الرخيصة ، والتي توجد عادة على aliexpress.PCM5102AudioSink - يوفر التشغيل عبر PCM5102 DAC متصل بـ ESP32 ، والذي يوجد عادة في شكل وحدات أرجوانية صغيرة في مختلف تجار التجزئة عبر الإنترنت. يمكن تكوين الأسلاك في الحوض والافتراضات إلى: يمكنك أيضًا إضافة دعم DAC المفضل لديك بسهولة من خلال تنفيذ مغسلة الصوت الخاصة بك. يجب أن تنفذ كل حوض صوتي جديد طريقة void feedPCMFrames(std::vector<uint8_t> &data) التي يجب أن تقبل بيانات صوت PCM ستيريو عند 44100 هرتز و 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 مشفرة.