Table des matières:
- Étape 1: Composants requis
- Étape 2: Spécifications techniques
- Étape 3: schémas de circuits
- Étape 4: Applications et IDE nécessaires
- Étape 5: Codes pertinents pour tout
- Étape 6: configuration
- Étape 7: Résultats/Vidéos
Vidéo: Convertisseur audio en MIDI en temps réel : 7 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:07
Les gens de Namaste ! Il s'agit d'un projet sur lequel j'ai travaillé pour l'un de mes cours (Traitement du signal numérique en temps réel) dans mon programme de baccalauréat. Le projet vise à créer un système DSP qui « écoute » les données audio et émet des messages MIDI des notes correspondantes via UART. Arduino Nano a été utilisé à cette fin. Pour faire court, le microcontrôleur effectue une FFT sur les données audio entrantes, analyse les pics et envoie le message MIDI approprié. Ne vous inquiétez pas des MOSFET, car ils sont destinés à un autre projet (qui sera également mis en place plus tard sur les instructables) et ne sont pas nécessaires pour ce projet. Alors commençons déjà !!
Étape 1: Composants requis
Nous aurons besoin des composants suivants pour construire ce projet, bien que beaucoup d'entre eux soient génériques et puissent être remplacés par leurs équivalents. Reportez-vous également au schéma de circuit pour déterminer et rechercher de meilleures implémentations.
Quantité de composant
1. Microphone à électret. 1
2. Résistance de 30 kiloohms. 1
3. Résistance de 150 Kilo Ohm. 1
4. Résistance de 100 ohms. 1
5. Résistances de 2,2 kiloohms. 3
6. Pot préréglé de 10 Kilo Ohm. 1
7. Pot de coupe de 10 Kilo Ohm. 1
8. Potentiomètre stéréo 47 Kilo Ohm. 1
9. Résistances de 470 Ohms. 2
10. Condensateurs 0.01uF. 2
11. Condensateurs 2.2uF. 3
12. Condensateurs 47uF. 2
13. Condensateur 1000uF. 1
14. Condensateur 470uF. 1
15. 7805 régulateur de tension. 1
16. Bande d'en-tête femelle et mâle. 1 chacun
17. Connecteur Jack Barrel. 1
18. Adaptateur CC 12 V 1 A. 1
19. Interrupteur SPST. (Facultatif) 1
20. Perfboard. 1
Étape 2: Spécifications techniques
Fréquence d'échantillonnage: 3840 échantillons/sec
Nombre d'échantillons par FFT: 256
Résolution de fréquence: 15 Hz
Taux de rafraîchissement: Environ 15 Hz
Les gammes inférieures et supérieures des notes musicales ne sont pas capturées correctement. Les notes basses souffrent d'une résolution basse fréquence alors que les fréquences hautes souffrent de faibles taux d'échantillonnage. L'arduino est déjà à court de mémoire, il n'y a donc aucun moyen d'obtenir une meilleure résolution. Et une meilleure résolution se traduira par un taux de rafraîchissement réduit, donc un compromis est inévitable. Version profane du principe d'incertitude de Heisenberg.
La principale difficulté est l'espacement exponentiel entre les notes (comme on le voit sur la figure. Chaque impulsion sur l'axe des fréquences est une note de musique). Des algorithmes comme LFT peuvent aider, mais c'est un peu avancé et peu compliqué pour un appareil comme l'arduino Nano.
Étape 3: schémas de circuits
Remarque: Ne soyez pas dérangé par les trois MOSFET et les bornes à vis dans les images. Ils ne sont pas requis pour ce projet. Notez que la carte d'entrée du microphone est amovible ou comme ils l'appellent modulaire. Une petite description des différents blocs est donnée ci-dessous.
1) Les deux résistances de 470 ohms combinent le signal audio stéréo au signal audio mono. Assurez-vous que la masse du signal entrant va à la masse virtuelle (vg dans le schéma de circuit) et non à la masse du circuit.
2) Le bloc suivant est un filtre passe-bas de 2ème ordre sallen-key qui est responsable de la limitation de bande du signal d'entrée pour éviter le repliement. Puisque nous travaillons uniquement avec une alimentation +12v, nous polarisons l'ampli-op en créant un diviseur de tension RC. cela trompe l'ampli-op en lui faisant croire que l'alimentation est de 6 0 -6 volts (double rail) où vg est la référence de masse pour l'ampli-op.
3) Ensuite, la sortie est filtrée passe-bas pour bloquer l'offset CC de 6 volts et couplée à un CC d'environ 0,55 volts car l'ADC sera configuré pour utiliser le 1,1 v interne comme Vref.
Remarque: le préamplificateur pour le microphone à électret n'est pas le meilleur circuit sur Internet. Un circuit impliquant un ampli-op aurait été un meilleur choix. Nous souhaitons que la réponse en fréquence soit aussi plate que possible. Le potentiomètre stéréo de 47 kiloohms est utilisé pour définir la fréquence de coupure qui devrait être typiquement la moitié de la fréquence d'échantillonnage. Le préréglage de 10 kilo ohms (Le petit pot à tête blanche) est utilisé pour régler le gain et la valeur Q du filtre. Le potentiomètre de réglage de 10 kilo ohms (un avec un bouton de réglage métallique qui ressemble à une petite vis à tête plate) est utilisé pour régler la tension pour qu'elle soit aussi proche que la moitié de Vref.
Remarque: lorsque vous connectez le Nano au PC. garder l'interrupteur SPST ouvert sinon fermé. Faites particulièrement attention à cela. Sinon, cela peut endommager le circuit/l'ordinateur/le régulateur de tension ou toute combinaison de ce qui précède
Étape 4: Applications et IDE nécessaires
- Pour coder l'Arduino Nano, j'ai opté pour le studio primitif AVR 5.1 car cela semble fonctionner pour moi. Vous pouvez trouver l'installateur ici.
- Pour programmer l'Arduino Nano, j'ai utilisé Xloader. C'est un outil léger très facile à utiliser pour graver des fichiers.hex sur Arduinos. Vous pouvez l'avoir ici.
- Pour le petit mini-projet bonus et le réglage du circuit, j'ai utilisé le traitement. Vous pouvez l'obtenir à partir d'ici, bien qu'il y ait des changements majeurs dans chaque révision, vous devrez donc peut-être manipuler des fonctions obsolètes pour que l'esquisse fonctionne.
- FL studio ou tout autre logiciel de traitement MIDI. Vous pouvez obtenir gratuitement la version à accès limité de FL studio à partir d'ici.
- Loop MIDI crée un port MIDI virtuel et est détecté par FL studio comme s'il s'agissait d'un appareil MIDI. Obtenez une copie de la même chose à partir d'ici.
- Hairless MIDI est utilisé pour lire les messages MIDI du port COM et les envoyer au port MIDI en boucle. Il débogue également les messages MIDI en temps réel, ce qui facilite le débogage. Obtenez Hairless MIDI à partir d'ici.
Étape 5: Codes pertinents pour tout
Je tiens à remercier Electronic Lifes MFG (site Web ici !!) pour la bibliothèque FFT à virgule fixe que j'ai utilisée dans ce projet. La bibliothèque est optimisée pour la famille méga AVR. C'est le lien vers les fichiers de bibliothèque et les codes qu'il a utilisés. Je joins mon code ci-dessous. Il comprend également le croquis de traitement et le code AVR C. Veuillez noter que c'est la configuration qui a fonctionné pour moi et je n'assume aucune responsabilité si vous endommagez quoi que ce soit à cause de ces codes. De plus, j'ai eu beaucoup de problèmes à essayer de faire fonctionner le code. Par exemple, DDRD (Data Direction Register) a DDDx (x = 0-7) comme masques binaires au lieu du DDRDx conventionnel (x = 0-7). Faites attention à ces erreurs lors de la compilation. La modification du microcontrôleur affecte également ces définitions, alors gardez un œil sur cela également lorsque vous traitez les erreurs de compilation. Et si vous vous demandez pourquoi le dossier du projet s'appelle DDT_Arduino_328p.rar, eh bien disons qu'il faisait très sombre le soir quand j'ai commencé et que j'ai eu la flemme de ne pas allumer les lumières.:P
Pour en venir au croquis de traitement, j'ai utilisé le traitement 3.3.6 pour écrire ce croquis. Vous devrez définir manuellement le numéro de port COM dans l'esquisse. Vous pouvez vérifier les commentaires dans le code.
Si quelqu'un peut m'aider à porter les codes sur Arduino IDE et la dernière version de traitement, je serais heureux et remercierai également les développeurs/contributeurs.
Étape 6: configuration
- Ouvrez le code et compilez le code avec #define pcvisual non commenté et #define midi_out commenté.
- Ouvrez xloader et accédez au répertoire contenant le code, accédez au fichier.hex et gravez-le sur nano en sélectionnant la carte et le port COM appropriés.
- Ouvrez l'esquisse de traitement et exécutez-la avec l'index de port COM approprié. Si tout se passe bien, vous devriez pouvoir voir un spectre du signal sur la broche A0.
- Munissez-vous d'un tournevis et tournez le potentiomètre jusqu'à ce que le spectre soit plat (la composante CC doit être proche de zéro). N'entrez alors aucun signal sur la carte. (Ne fixez pas le module microphone).
- Maintenant, utilisez n'importe quel outil générateur de balayage comme celui-ci pour donner une entrée à la carte à partir du microphone et observer le spectre.
- Si vous ne voyez pas de balayage de fréquences, diminuez la fréquence de coupure en modifiant la résistance de 47 kiloohms. Augmentez également le gain en utilisant le potentiomètre préréglé de 10 kilo ohms. Essayez d'obtenir une sortie de balayage plate et proéminente en modifiant ces paramètres. C'est la partie amusante (le petit bonus !), jouez vos chansons préférées et profitez de leur spectre en temps réel. (Voir la vidéo)
- Maintenant, compilez à nouveau le code C intégré cette fois avec #define pcvisual commenté et #define midi_out non commenté.
- Rechargez le nouveau code compilé sur arduino Nano.
- Ouvrez LoopMidi et créez un nouveau port.
- Ouvrez FL studio ou un autre logiciel d'interface MIDI et assurez-vous que le port midi de boucle est visible dans les paramètres du port MIDI.
- Open hairless MIDI avec arduino connecté. Sélectionnez le port de sortie comme port LoopMidi. Accédez aux paramètres et définissez le débit en bauds sur 115200. Sélectionnez maintenant le port COM correspondant à Arduino Nano et ouvrez le port.
- Jouez des sons "purs" près du microphone et vous devriez également entendre la note correspondante dans le logiciel MIDI. S'il n'y a pas de réponse, essayez d'abaisser up_threshold défini dans le code C. Si les notes sont déclenchées de manière aléatoire, augmentez la valeur up_threshold.
- Obtenez votre piano et testez la vitesse de votre système !! La meilleure chose est que dans la zone de verrouillage doré des notes, il peut facilement détecter facilement plusieurs pressions de touches simultanées.
Remarque: lorsque le port COM est accédé par une application, il ne peut pas être lu par une autre. Par exemple, si Hairless MIDI lit le port COM, Xloader ne pourra pas flasher la carte
Étape 7: Résultats/Vidéos
C'est tout pour le moment les gars ! J'espère que vous aimez. Si vous avez des suggestions ou des améliorations dans le projet, faites-le moi savoir dans la section des commentaires. Paix!
Conseillé:
Comment utiliser un module d'horloge en temps réel (DS3231) : 5 étapes
Comment utiliser un module d'horloge en temps réel (DS3231): Le DS3231 est une horloge en temps réel (RTC) I2C à faible coût et extrêmement précise avec un oscillateur à cristal compensé en température (TCXO) et un cristal intégrés. L'appareil intègre une entrée de batterie et maintient un chronométrage précis lorsque l'alimentation principale à
Solveur Rubik's Cube en temps réel avec les yeux bandés utilisant Raspberry Pi et OpenCV : 4 étapes
Solveur Rubik's Cube en temps réel avec les yeux bandés utilisant Raspberry Pi et OpenCV : il s'agit de la 2ème version de l'outil Rubik's cube conçu pour résoudre les yeux bandés. La 1ère version a été développée par javascript, vous pouvez voir le projet RubiksCubeBlindfolded1Contrairement à la précédente, cette version utilise la bibliothèque OpenCV pour détecter les couleurs et e
Un compteur de niveau d'eau de puits en temps réel : 6 étapes (avec photos)
Un compteur de niveau d'eau de puits en temps réel : ces instructions décrivent comment construire un compteur de niveau d'eau en temps réel à faible coût pour une utilisation dans des puits creusés. Le compteur de niveau d'eau est conçu pour s'accrocher à l'intérieur d'un puits creusé, mesurer le niveau d'eau une fois par jour, et envoyer les données par WiFi ou connexion cellulaire
Un compteur de température, de conductivité et de niveau d'eau de l'eau de puits en temps réel : 6 étapes (avec photos)
Un compteur de température, de conductivité et de niveau d'eau de l'eau de puits en temps réel : ces instructions décrivent comment construire un compteur d'eau en temps réel à faible coût pour surveiller la température, la conductivité électrique (CE) et les niveaux d'eau dans les puits creusés. Le compteur est conçu pour être suspendu à l'intérieur d'un puits creusé, mesurer la température de l'eau, EC et
Wiggly Wobbly - Voir les ondes sonores !! Visualiseur audio en temps réel !! : 4 étapes
Wiggly Wobbly - Voir les ondes sonores !! Visualiseur audio en temps réel !! : Vous êtes-vous déjà demandé à quoi ressemblent les chansons de Beetle ?? Ou voulez-vous simplement voir à quoi ressemble un son ??Alors ne vous inquiétez pas, je suis là pour vous aider à le rendre reeeeaaalll !!!Montez votre haut-parleur haut et visez le fané