Souhaitez-vous basculer entre les stations de radio comme vous l'avez fait à San Andreas?

La bande originale de GTA est devenue célèbre pour une bonne sélection de musique et d'inserts amusants. Rockstar a fait un excellent travail en créant des stations de radio pour ce jeu - à propos, la musique de Vice City et de San Andreas peut même être achetée sous forme de sets de CD.
Pour la rendre plus agréable à écouter - et pour apprendre quelque chose, j'ai décidé de pirater la radio pour qu'elle reçoive des radios de jeu.
L'idée est que vous pouvez tourner le bouton du récepteur et basculer entre les stations virtuelles, comme vous pouvez le faire avec un vrai récepteur. Le logiciel est devenu le principal obstacle - j'aimerais que chaque station virtuelle joue sa propre musique, même si je ne l'écoute pas. Encore une fois, comme dans le monde réel.
Commençons!
1. Équipement
J'adorerais utiliser quelque chose comme Arduino pour un tel projet, avec des équipements portables et intégrés, car l'architecture de ces cartes est beaucoup plus simple que celle des ordinateurs à carte unique.

Mais jouer des dizaines de fichiers simultanément nécessite des cerveaux puissants, j'ai donc opté pour le Raspberry Pi. Je l'ai déjà utilisé pour d'autres projets et je me sens en confiance lorsque je travaille avec. Et j'ai choisi Python comme langage de programmation, simplement parce que j'avais une telle humeur. Y a-t-il d'autres raisons? ..
2. Mixeur logiciel Python
Après cela, j'ai dû choisir une bibliothèque pour Python qui pourrait:
- Travaillez avec plusieurs sources audio.
- A donné une interface de haut niveau pour travailler avec eux.
Pour créer une radio virtuelle, il me suffit de télécharger plusieurs fichiers à la fois et de contrôler le volume de lecture. En fait, cela se produit en réalité: chaque station est une source audio et le bouton de réglage modifie le volume de ces sources, du point de vue de l'auditeur.
Après avoir testé dur et longuement diverses options (pygame-mixer, python-sounddevice, puredata avec un patch pour le mixer), je me suis installé sur swmixer. Il sait même lire des fichiers en streaming sans les charger dans toute la mémoire, ce qui était très pratique pour moi, car je voulais que chaque station combine toute la musique en un seul fichier. J'ai dû bifurquer cette bibliothèque et corriger l'erreur, car elle n'était plus prise en charge.
J'ai décidé d'utiliser le Raspberry Pi 3, car le modèle 2B bloquait en quelque sorte la sortie audio. Ne comprenant pas pourquoi cela se produit, mais simplement satisfait que tout fonctionne sur le nouveau tableau, je suis passé à l'étape suivante.
3. Capteur d'angle de haut niveau (DUP) (consultez pyKY040)

La meilleure bibliothèque pour Python à l'époque pour KY040 DUP était une bibliothèque appelée
KY040 , mais elle ne répondait pas tout à fait à mes besoins, en plus, je voulais essayer de créer mon propre premier module pour Python, c'est pourquoi j'ai écrit
pyKY040 .
Il fournit:
- Kolbek pour augmenter la valeur.
- Rappel pour diminuer.
- Kolbek sur le changement.
- Clics sur le bouton de rappel.
Paramètres:
- Mode d'échelle (le compteur interne change dans les limites de X à Y, passé en argument aux fonctions de rappel).
- Mode échelle de sonnerie (X à Y, puis à nouveau X).
- Réglage de la taille du pas sur l'échelle.
Il m'a permis de déléguer la logique du DUP et de me concentrer sur ce qui se passe lorsque j'interagis avec lui.
Dans le code principal, les lignes suivantes appartiennent au 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 virtuelle (code)
Maintenant, je pouvais lire des fichiers et j'ai une interface pour travailler avec DUP. Il est temps d'écrire du code pour la radio virtuelle.
Cela fonctionne comme un groupe de radio virtuel. À certaines fréquences virtuelles (ou aigus), vous pouvez entendre le son - ce sont des canaux de mixage. Un mélange de deux sources audio est entendu entre les deux aigus.
Chn 1 Chn 2 Chn 3 Chn 4 Chn n | | | | | |--------------|--------------|--------------|-------------| <---------------------------------------------------------->
La fréquence virtuelle n'est en fait qu'un entier qui augmente ou diminue en fonction de votre interaction avec le DUP.
Pour laisser plus de liberté lors du calcul du volume lors de la commutation entre deux aigus, ce processus est traité par une seule fonction qui renvoie le volume d'une station donnée pour un aigu donné. Jusqu'à présent, cette valeur varie linéairement, mais elle peut être modifiée en créant une courbe de volume plus bruyante et instable.
VOLUME /-\ /-\ /- | --\ /-- | --\ -- | --\ /-- | -- | --\ /-- | | -\ /- | | --\ /-- | | --\ /-- | | --\ /-- | | /-- | | /-- --\ | | /-- --\ | | /-- --\ | | /- -\ | | /-- --\ | -\ | /-- --\ | /- --\ | /-- --\ | /-- ------------------------------------------------------- | vfreq |
Si nous appliquons cet exemple au canal n-1, il intersecte le canal n, résultant en un mélange audio de ces deux sources.
En pseudo code, cela ressemble à ceci:
( ) -> [ -> [ ( ) , 0 ] ] ->
Tous les détails sont dans le code. Commencez à la fin du fichier où les rappels pour le DUP sont décrits, puis suivez la piste.
5. Pirater le boîtier radio
Le donateur était la radio de mon grand-père, Optalix TO100. Hors de France, je pense qu'il ne sera pas facile de le retrouver. Pour environ
20 €, vous pouvez obtenir un récepteur cool, vintage et compact que vous pouvez emporter avec vous dans votre sac.
DUP
En soi, le DUP a grimpé juste pour qu'il soit possible de fermer le boîtier - mais après avoir connecté les câbles de démarrage, la conception s'est avérée trop grande. J'ai dû retirer les connecteurs en plastique d'origine et les remplacer par un thermorétractable afin de pouvoir les plier.


Les DUP que j'ai achetés moi-même n'avaient pas de fil - j'ai dû improviser en les fixant à l'étui à l'aide de carton et de colle thermoplastique. Clay décide, comme toujours.


Raspberry pi
J'ai déplacé le connecteur d'alimentation vers le boîtier, au lieu de brancher le câble directement dans le Pi - en conséquence, je pouvais choisir comment placer l'ordinateur dans le boîtier, sans penser à l'endroit où le connecteur d'alimentation devrait être fixé au boîtier.


J'ai utilisé un câble avec des connecteurs micro-USB "mère" et "père", mais afin de libérer plus d'espace, j'ai dénudé le câble et soudé directement à Pi - plus à PP2 et moins au connecteur qui est mis à la terre (une autre option est PP5). Et assurez-vous de coller plus pour ne pas rompre.

Conférencier
Haut-parleur - 5W d'origine du récepteur TO100. Il est connecté à un amplificateur, qui est connecté à une prise audio 3,5 mm, qui est branchée sur un
DAC USB bon marché .

Tout est connecté via une carte de prototypage et est prêt à fermer pour toujours.

