Apakah Anda ingin beralih di antara stasiun radio seperti yang Anda lakukan di San Andreas?

Soundtrack dari GTA telah menjadi terkenal karena pilihan musik yang bagus dan sisipan yang lucu. Rockstar melakukan pekerjaan yang sangat baik untuk menciptakan stasiun radio untuk permainan ini - omong-omong, musik dari Vice City dan San Andreas bahkan dapat dibeli sebagai set CD.
Untuk membuatnya mendengarkan lebih menyenangkan - dan untuk belajar sesuatu, saya memutuskan untuk meretas radio sehingga akan menerima radio game.
Idenya adalah Anda dapat memutar kenop penerima dan beralih di antara stasiun virtual, seperti yang dapat Anda lakukan dengan penerima nyata. Perangkat lunak menjadi kendala utama - saya ingin setiap stasiun virtual memainkan musiknya sendiri, bahkan ketika saya tidak mendengarkannya. Sekali lagi, seperti di dunia nyata.
Ayo mulai!
1. Peralatan
Saya ingin menggunakan sesuatu seperti Arduino untuk proyek semacam itu, dengan peralatan portabel dan built-in, karena arsitektur papan seperti itu jauh lebih sederhana daripada komputer papan tunggal.

Tapi memainkan puluhan file secara bersamaan membutuhkan otak yang kuat, jadi saya memilih Raspberry Pi. Saya sudah menggunakannya untuk proyek lain, dan saya merasa percaya diri ketika bekerja dengannya. Dan saya memilih Python sebagai bahasa pemrograman, hanya karena saya punya mood seperti itu. Apakah ada alasan lain? ..
2. Pencampur perangkat lunak Python
Setelah itu, saya perlu memilih perpustakaan untuk Python yang dapat:
- Bekerja dengan banyak sumber audio.
- Memberi antarmuka tingkat tinggi untuk bekerja dengannya.
Untuk membangun radio virtual, saya hanya perlu mengunggah beberapa file sekaligus dan mengontrol volume pemutaran. Faktanya, pada kenyataannya hal ini terjadi: setiap stasiun adalah sumber audio, dan tombol tuning mengubah volume sumber-sumber ini, dari sudut pandang pendengar.
Setelah pengujian keras dan panjang dari berbagai opsi (pygame-mixer, python-sounddevice, puredata dengan patch untuk mixer), saya memilih swmixer. Dia bahkan tahu cara memutar file streaming tanpa memuatnya ke seluruh memori, yang sangat nyaman bagi saya, karena saya ingin setiap stasiun menggabungkan semua musik menjadi satu file. Saya harus garpu perpustakaan ini dan memperbaiki kesalahan di dalamnya, karena tidak lagi didukung.
Saya memutuskan untuk menggunakan Raspberry Pi 3, karena model 2B entah bagaimana menjepit output audio. Tidak mengerti mengapa ini terjadi, tetapi hanya puas bahwa semuanya berjalan di papan baru, saya melanjutkan ke langkah berikutnya.
3. Sensor sudut tingkat tinggi (DUP) (lihat pyKY040)

Perpustakaan terbaik untuk Python pada waktu itu untuk KY040 DUP adalah perpustakaan yang disebut
KY040 , tetapi itu tidak cukup sesuai dengan kebutuhan saya, selain itu, saya ingin mencoba membuat sendiri, pertama, modul nyata untuk Python, itu sebabnya saya menulis
pyKY040 .
Ini menyediakan:
- Kolbek untuk meningkatkan nilai.
- Panggilan balik untuk mengurangi.
- Kolbek tentang perubahan.
- Klik tombol panggil kembali.
Pengaturan:
- Mode skala (penghitung internal berubah dalam batas dari X ke Y, diteruskan sebagai argumen ke fungsi panggilan balik).
- Mode Dering Skala (X ke Y, lalu X lagi).
- Mengatur ukuran langkah pada skala.
Dia mengizinkan saya untuk mendelegasikan logika DUP dan berkonsentrasi pada apa yang terjadi ketika saya berinteraksi dengannya.
Dalam kode utama, baris berikut milik 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. Radio virtual (kode)
Sekarang saya bisa memutar file dan saya mendapat antarmuka untuk bekerja dengan DUP. Saatnya menulis kode untuk radio virtual.
Ini bekerja seperti band radio virtual. Pada frekuensi virtual tertentu (atau treble) Anda dapat mendengar suara - ini adalah saluran swmixer. Campuran dua sumber audio terdengar antara dua treble.
Chn 1 Chn 2 Chn 3 Chn 4 Chn n | | | | | |--------------|--------------|--------------|-------------| <---------------------------------------------------------->
Frekuensi virtual sebenarnya hanya bilangan bulat yang naik atau turun tergantung pada interaksi Anda dengan DUP.
Untuk memberikan lebih banyak kebebasan saat menghitung volume selama beralih di antara dua treble, proses ini diproses oleh fungsi tunggal yang mengembalikan volume stasiun tertentu untuk treble yang diberikan. Sejauh ini, nilai ini bervariasi secara linier, tetapi dapat diubah dengan membuat kurva volume yang lebih ribut dan tidak stabil.
VOLUME /-\ /-\ /- | --\ /-- | --\ -- | --\ /-- | -- | --\ /-- | | -\ /- | | --\ /-- | | --\ /-- | | --\ /-- | | /-- | | /-- --\ | | /-- --\ | | /-- --\ | | /- -\ | | /-- --\ | -\ | /-- --\ | /- --\ | /-- --\ | /-- ------------------------------------------------------- | vfreq |
Jika kita menerapkan contoh ini ke saluran n-1, itu memotong saluran n, menghasilkan campuran audio dari dua sumber ini.
Dalam kode pseudo, tampilannya seperti ini:
( ) -> [ -> [ ( ) , 0 ] ] ->
Semua detail ada dalam kode. Mulai di akhir file di mana panggilan balik untuk DUP dijelaskan, dan kemudian ikuti jejak.
5. Retas rumah radio
Donor adalah radio kakek saya, Optalix TO100. Di luar Prancis, saya percaya tidak mudah menemukannya. Untuk sekitar
β¬ 20 Anda bisa mendapatkan receiver yang keren, vintage, dan ringkas yang bisa Anda bawa di tas.
DUP
Sendiri, DUP cocok sehingga memungkinkan untuk menutup kasing - tetapi setelah menghubungkan kabel jumper, desain ternyata terlalu besar. Saya harus melepas konektor plastik asli dan menggantinya dengan panas menyusut sehingga bisa bengkok.


DUP yang saya beli sendiri tidak memiliki utas - saya harus berimprovisasi dengan menempelkannya ke kasing menggunakan lem kardus dan termoplastik. Clay memutuskan, seperti biasa.


Raspberry pi
Saya memindahkan konektor daya ke kasing, alih-alih menancapkan kabel langsung ke Pi - sebagai hasilnya, saya bisa memilih cara menempatkan komputer di kasing, tanpa memikirkan di mana tepatnya konektor daya harus terpasang ke kasing.


Saya menggunakan kabel dengan konektor mikro-USB "ibu" dan "ayah", tetapi untuk membebaskan lebih banyak ruang, saya melepas kabel dan langsung disolder ke Pi - plus ke PP2 dan minus ke konektor yang di-ground (opsi lain adalah PP5). Dan pastikan untuk merekat lebih agar tidak putus.

Pembicara
Speaker - asli 5W dari penerima TO100. Terhubung ke amplifier, yang terhubung ke colokan audio 3,5 mm, yang dicolokkan ke
USB DAC yang murah .

Semuanya terhubung melalui papan prototyping dan siap untuk menutup selamanya.

