هل ترغب في التبديل بين محطات الراديو كما فعلت في سان أندرياس؟

أصبحت الموسيقى التصويرية من GTA مشهورة بمجموعة جيدة من الموسيقى وإدخالات مضحكة. قام Rockstar بعمل ممتاز في إنشاء محطات إذاعية لهذه اللعبة - بالمناسبة ، يمكن شراء الموسيقى من Vice City و San Andreas كمجموعات أقراص مضغوطة.
لجعلها تستمع أكثر متعة - ولتعلم شيء ما ، قررت اختراق الراديو حتى تتلقى أجهزة راديو للألعاب.
الفكرة هي أنه يمكنك لف مقبض جهاز الاستقبال والتبديل بين المحطات الافتراضية ، كما يمكنك القيام به مع جهاز استقبال حقيقي. أصبح البرنامج هو العقبة الرئيسية - أود أن تقوم كل محطة افتراضية بتشغيل الموسيقى الخاصة بها ، حتى عندما لا أستمع إليها. مرة أخرى ، كما في العالم الحقيقي.
دعنا نبدأ!
1. المعدات
أود استخدام شيء مثل Arduino لمثل هذا المشروع ، مع معدات محمولة ومدمجة ، لأن بنية هذه الألواح أبسط بكثير من أجهزة الكمبيوتر ذات اللوحة الواحدة.

لكن تشغيل عشرات الملفات في وقت واحد يتطلب أدمغة قوية ، لذلك استقرت على Raspberry Pi. لقد استخدمتها بالفعل لمشاريع أخرى ، وأشعر بالثقة عند العمل معها. واخترت Python كلغة برمجة ، ببساطة لأنني كان لدي مثل هذا المزاج. هل هناك أسباب أخرى؟ ..
2. خلاط برنامج Python
بعد ذلك ، كنت بحاجة إلى اختيار مكتبة لـ Python يمكنها:
- العمل مع مصادر الصوت المتعددة.
- قدم واجهة عالية المستوى للعمل معهم.
لإنشاء راديو افتراضي ، أحتاج فقط إلى تحميل عدة ملفات دفعة واحدة والتحكم في مستوى الصوت. في الواقع ، يحدث هذا في الواقع: كل محطة هي مصدر صوتي ، ويغير مقبض الضبط حجم هذه المصادر ، من وجهة نظر المستمع.
بعد اختبار صعب وطويل للخيارات المختلفة (خلاط pygame ، python-sounddevice ، puredata مع رقعة للخلاط) ، استقرت على swmixer. حتى أنه يعرف كيفية تشغيل الملفات المتدفقة دون تحميلها في الذاكرة بأكملها ، وهو أمر مريح للغاية بالنسبة لي ، لأنني أردت من كل محطة أن تجمع كل الموسيقى في ملف واحد. اضطررت إلى تفرع هذه المكتبة وإصلاح الخطأ فيها ، لأنها لم تعد مدعومة.
قررت استخدام Raspberry Pi 3 ، حيث قام طراز 2B بتثبيت خرج الصوت بطريقة أو بأخرى. لم أفهم سبب حدوث ذلك ، ولكن فقط لكوني مقتنعًا بأن كل شيء يعمل على اللوحة الجديدة ، انتقلت إلى الخطوة التالية.
3. مستشعر الزاوية عالي المستوى (DUP) (راجع pyKY040)

كانت أفضل مكتبة لـ Python في ذلك الوقت لـ KY040 DUP مكتبة تسمى
KY040 ، لكنها لم تتناسب تمامًا مع احتياجاتي ، بالإضافة إلى ذلك ، أردت أن أحاول إنشاء الوحدة الخاصة بي ، الأولى الحقيقية ل Python ، ولهذا السبب كتبت
pyKY040 .
يوفر:
- Kolbek لزيادة القيمة.
- رد الاتصال لتقليل.
- Kolbek على التغيير.
- نقرات زر رد الاتصال.
الإعدادات:
- وضع المقياس (يتغير العداد الداخلي داخل الحدود من X إلى Y ، ويمرر كوسيطة لوظائف رد الاتصال).
- وضع مقياس الرنين (X إلى Y ، ثم X مرة أخرى).
- تحديد حجم الخطوة على المقياس.
سمح لي بتفويض منطق DUP والتركيز على ما يحدث عندما أتفاعل معه.
في الكود الرئيسي ، تنتمي الأسطر التالية إلى DUP:
tuning_encoder = pyky040.Encoder(CLK=17, DT=27, SW=22) tuning_encoder.setup(scale_min=MIN_VFREQ, scale_max=MAX_VFREQ, step=1, chg_callback=vfreq_changed) tuning_thread = threading.Thread(target=tuning_encoder.watch) volume_encoder = pyky040.Encoder(CLK=5, DT=6, SW=13) volume_encoder.setup(scale_min=0, scale_max=10, step=1, inc_callback=inc_global_volume, dec_callback=dec_global_volume, sw_callback=toggle_mute) global_volume_thread = threading.Thread(target=volume_encoder.watch) tuning_thread.start() global_volume_thread.start()
4. راديو افتراضي (رمز)
الآن يمكنني تشغيل الملفات وحصلت على واجهة للعمل مع DUP. حان الوقت لكتابة التعليمات البرمجية للإذاعة الافتراضية.
يعمل مثل فرقة راديو افتراضية. في ترددات افتراضية معينة (أو ثلاثية) ، يمكنك سماع الصوت - هذه قنوات swmixer. يسمع مزيج من مصدرين للصوت بين الثلاثية.
Chn 1 Chn 2 Chn 3 Chn 4 Chn n | | | | | |--------------|--------------|--------------|-------------| <---------------------------------------------------------->
التردد الافتراضي هو في الواقع عدد صحيح يزيد أو ينقص اعتمادًا على تفاعلك مع DUP.
لترك المزيد من الحرية عند حساب الحجم أثناء التبديل بين ثلاث طبقات ، تتم معالجة هذه العملية بواسطة وظيفة واحدة تقوم بإرجاع حجم محطة معينة لثلاثة أضعاف. حتى الآن ، تختلف هذه القيمة بشكل خطي ، ولكن يمكن تغييرها من خلال إنشاء منحنى حجم أكثر ضجيجًا وغير مستقر.
VOLUME /-\ /-\ /- | --\ /-- | --\ -- | --\ /-- | -- | --\ /-- | | -\ /- | | --\ /-- | | --\ /-- | | --\ /-- | | /-- | | /-- --\ | | /-- --\ | | /-- --\ | | /- -\ | | /-- --\ | -\ | /-- --\ | /- --\ | /-- --\ | /-- ------------------------------------------------------- | vfreq |
إذا طبقنا هذا المثال على القناة n-1 ، فإنه يتقاطع مع القناة n ، مما يؤدي إلى مزيج من الصوت من هذين المصدرين.
في الكود الزائف ، يبدو كما يلي:
( ) -> [ -> [ ( ) , 0 ] ] ->
كل التفاصيل موجودة في الكود. ابدأ في نهاية الملف حيث يتم وصف الاسترجاعات لـ DUP ، ثم اتبع المسار.
5. اختراق السكن الراديو
كان المانح هو راديو جدي Optalix TO100. خارج فرنسا ، أعتقد أنه لن يكون من السهل العثور عليه. مقابل حوالي
20 يورو ، يمكنك الحصول على جهاز استقبال رائع وعتيق ومضغوط يمكنك حمله معك في حقيبتك.
DUP
في حد ذاتها ، تسلق DUP فقط بحيث كان من الممكن إغلاق العلبة - ولكن بعد توصيل أسلاك التوصيل ، تبين أن التصميم كبير جدًا. اضطررت إلى إزالة الموصلات البلاستيكية الأصلية واستبدالها بالانكماش الحراري بحيث يمكن ثنيها.


لم يكن لدى DUP التي اشتريتها بنفسي خيطًا - كان علي أن أرتجل من خلال إرفاقهم بالقضية باستخدام الكرتون والغراء بالحرارة. يقرر كلاي ، كما هو الحال دائمًا.


التوت بي
لقد قمت بنقل موصل الطاقة إلى العلبة ، بدلاً من توصيل الكبل مباشرة في Pi - ونتيجة لذلك ، يمكنني اختيار كيفية وضع الكمبيوتر في العلبة ، دون التفكير في مكان توصيل موصل الطاقة بالعلبة بالضبط.


استخدمت كبلًا مزودًا بموصلات micro-USB "الأم" و "الأب" ، ولكن من أجل تحرير مساحة أكبر ، قمت بتجريد الكابل وتوصيله مباشرة بـ Pi - بالإضافة إلى PP2 وناقصًا إلى الموصل المؤرض (خيار آخر هو PP5). وتأكد من الغراء أكثر حتى لا تنقطع.

المتحدث
مكبر الصوت - الأصلي 5 وات من مستقبل TO100. وهو متصل بمضخم متصل بقابس صوت 3.5 ملم ، يتم توصيله بمنفذ
USB DAC رخيص .

كل شيء متصل من خلال لوحة نماذج جاهزة للإغلاق إلى الأبد.

