عن المشروع
TastyTunes هو تطبيق لسطح المكتب يعمل كجهاز تحكم عن بعد لمشغلات الشبكة من Cambridge Audio المبنية على منصة StreamMagic. يحدد ملف README الموديلات المدعومة وهي Evo 75/150 و CXN100 و CXN (V2) و MXN10 و AXN10 و EXN100 و Edge NQ و 851N، مع إجراء التطوير والاختبار اليومي على جهاز Evo 150. يعمل التطبيق محلياً، ويتواصل مع المشغل عبر شبكة المستخدم الخاصة، ولا يتطلب أي حساب أو خدمة سحابية.
تتوفر أدوات التثبيت لنظام macOS 11+ (عالمي، موقع وموثق)، وWindows 10+ (مثبت موقع واحد يغطي x64 و arm64)، وLinux (AppImage لنظام x64 أو arm64، بما في ذلك Raspberry Pi OS 64-bit). عند التشغيل، يكتشف التطبيق أجهزة StreamMagic على الشبكة عبر SSDP، ويمكن إدخال عنوان IP يدوياً إذا لم يتم العثور على شيء. كما يتوفر وضع تجريبي (demo mode) يشغل التطبيق بالكامل مقابل مشغل افتراضي مدمج ومكتبتين عينة، دون الحاجة لوجود أجهزة.
تعرض شاشة "Now Playing" غلاف الألبوم بحجم كبير فوق خلفية فنية مموهة، وتفاصيل المسار، وشارات التنسيق للترميز (codec)، ومعدل العينة، وعمق البت، وlossless و MQA، ومؤشر لجودة الإشارة تختلف حالاته في الشكل واللون. كما يوفر التطبيق وضع العرض بملء الشاشة، ومشغل صغير بدون إطار يبقى دائماً في المقدمة، ولوحة اختيارية في شريط القائمة أو صينية النظام إلى جانب النافذة الرئيسية.
تقوم ميزة المكتبة بتجميع كل خادم وسائط UPnP محلي ووحدة تخزين USB الخاصة بالمشغل في طرق عرض للفنانين والألبومات والمسارات، مدعومة بفهرس محلي قابل لإعادة البناء يدعم البحث أثناء الكتابة عبر جميع المصادر. تغطي خيارات التصفية والفرز النوع الموسيقي، والعقد، والتنسيق، والنطاق الديناميكي، والتمييز بين الألبومات والتجميعات. يحافظ التعامل مع الألبومات على الضيوف المميزين في أماكنهم، ويجمع التجميعات تحت "Various Artists"، ويعرض فواصل الأقراص للمجموعات متعددة الأقراص، ويطوي المجموعات الضخمة متعددة المجلدات خلف محدد للمجلدات. ويمكن تعويض أغلفة الألبومات المفقودة من Cover Art Archive.
بالإضافة إلى تشغيل المكتبة، هناك المفضلات، وقوائم التشغيل المخزنة محلياً، وطابور تشغيل مع إمكانية التحديد المتعدد وإعادة الترتيب بالسحب، و99 فتحة إعدادات مسبقة للمشغل (يمكن استدعاؤها عبر مفاتيح الأرقام، ويمكن لكل منها حمل مستوى صوت خاص بها)، ومعادل صوت (EQ) بسبع نطاقات مع ميزات tilt و balance، وتبديل المصادر، وتصفح دليل radio-browser.info مع فئات للنوع والعقد. تأتي كلمات الأغاني المتزامنة من LRCLIB ويتم تظليلها سطراً بسطر؛ وبالنقر على السطر يتم الانتقال إليه. كما يتم جلب سير الفنانين وحقائق الألبومات من MusicBrainz و Wikipedia مع روابط الإسناد.
يقوم تحليل الصوت بقراءة الملفات من خوادم الوسائط المحلية لرسم شكل موجي في شريط البحث وتحت غلاف الألبوم، ولحساب قيمة النطاق الديناميكي وفقاً لإجراء TT-DR الخاص بقاعدة بيانات DR، والتي تصبح بعد ذلك خياراً للتصفية والفرز في المكتبة. يتتبع سجل التشغيل الأخير (المحدود) وسجل الاستماع المكتوب كملفات JSON Lines سنوية ما تم تشغيله ولمدة كم؛ وكلاهما قابل للمسح أو التعطيل. أما ميزة scrobbling لـ ListenBrainz فترسل سجل الاستماع فقط بعد وقت التشغيل الفعلي وتعيد محاولة الإرسال الفاشلة.
تتضمن الأتمتة مؤقتات النوم من 15 دقيقة إلى ساعتين أو عند نهاية المسار، مع خيار خفض الصوت تدريجياً (fade-out)، وجداول زمنية لكل يوم من أيام الأسبوع يمكنها إيقاظ الجهاز على إعداد مسبق مع زيادة تدريجية في الصوت أو إرساله إلى وضع الاستعداد.
يتوفر خادم MCP اختياري، يكون مغلقاً بشكل افتراضي، يكشف قدرات التطبيق لوكلاء الذكاء الاصطناعي المحليين مثل Claude Code أو Claude Desktop، ويغطي التشغيل ومستوى الصوت، والإعدادات المسبقة والمصادر، والمكتبة والراديو، والمفضلات، والنغمة و EQ، ومؤقتات النوم، وسجل الاستماع وتحليل الصوت. يتم فصل أدوات التحرير وتعطيلها حتى يتم تشغيلها، ويرث الوكلاء سقف مستوى الصوت في واجهة المستخدم، وضمانات الطاقة، ومفاتيح الاتصال. كما يعرض ملف README مثالاً لـ Home Assistant rest_command يستدعي نقطة نهاية MCP دون الحاجة لتكاملات إضافية.
يوثق المشروع بدقة حركة مرور الشبكة التي تغادر الجهاز: لا يتم إرسال أي شيء للتحكم في المشغل أو تصفح المكتبة خارج الشبكة المحلية، بينما تكون كلمات الأغاني، وسياق الفنان والألبوم، وأغلفة الألبومات المفقودة، وفحص التحديثات، والبحث في الراديو قابلة للتبديل، ويكون scrobbling مغلقاً حتى يتم إضافة رمز (token). لا يوجد نظام تحليلات أو قياس عن بعد أو نظام حسابات، وهناك وحدة تحكم في الطلبات (requests console) ووحدة تحكم في حركة مرور المشغل الخام مدمجة.
تعتمد البنية التقنية على Electron مع electron-vite، و React 19، و TypeScript، و Tailwind CSS v4 و Zustand، حيث تتعامل العملية الرئيسية مع إدخال/إخراج الجهاز عبر SSDP و SMOIP WebSocket الخاص بالمشغل. يتم التعامل مع المشغل كمصدر وحيد للحقيقة: يتم إرسال الأوامر، ويتم دفع الحالة مرة أخرى، وتتم إعادة رندرة الواجهة بناءً على ذلك. تم إصدار المشروع بموجب رخصة GNU General Public License v3.0، مع التطوير على فرع develop وتشغيل CI لفحوصات typecheck و ESLint و Prettier.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.