Inhoudsopgave:
- Stap 1: Vereiste componenten
- Stap 2: Technische specificaties
- Stap 3: Schakelschema's
- Stap 4: Noodzakelijke applicaties en IDE's
- Stap 5: Relevante codes voor alles
- Stap 6: het instellen
- Stap 7: Resultaten/video's
Video: Realtime audio naar MIDI-converter: 7 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Namasté mensen! Dit is een project waar ik aan heb gewerkt voor een van mijn vakken (Real-Time Digital Signal Processing) in mijn bacheloropleiding. Het project heeft tot doel een DSP-systeem te maken dat audiogegevens "luistert" en MIDI-berichten van overeenkomstige noten via UART uitvoert. Hiervoor werd Arduino Nano gebruikt. Om een lang verhaal kort te maken, de microcontroller voert een FFT uit op binnenkomende audiogegevens, analyseert de pieken en stuurt een passend MIDI-bericht. Maak je echter geen zorgen over de MOSFET's, want ze zijn voor een ander project (dat later ook op instructables zal worden geplaatst) en zijn niet vereist voor dit project. Dus laten we alvast beginnen!!
Stap 1: Vereiste componenten
We hebben de volgende componenten nodig om dit project te bouwen, hoewel veel hiervan generiek zijn en kunnen worden vervangen door hun equivalenten. Raadpleeg ook het schakelschema om uit te werken en te zoeken naar betere implementaties.
Component Hoeveelheid
1. Electret-microfoon. 1
2. 30 Kilo Ohm weerstand. 1
3. 150 Kilo Ohm weerstand. 1
4. 100 ohm weerstand. 1
5. 2.2 Kilo Ohm weerstanden. 3
6. 10 Kilo Ohm vooraf ingestelde pot. 1
7. 10 Kilo Ohm trimmer pot. 1
8. 47 Kilo Ohm stereopot. 1
9. 470 Ohm weerstanden. 2
10. 0.01uF condensatoren. 2
11. 2.2uF condensatoren. 3
12. 47uF condensatoren. 2
13. 1000uF condensator. 1
14. 470uF condensator. 1
15. 7805 spanningsregelaar. 1
16. Vrouwelijke en mannelijke kopstrip. 1 Elk
17. Barrel Jack-connector. 1
18. 12 V 1 Amp DC-adapter. 1
19. SPST-schakelaar. (Optioneel) 1
20. Perfboard. 1
Stap 2: Technische specificaties
Bemonsteringsfrequentie: 3840 monsters/sec
Aantal monsters per FFT: 256
Frequentie Resolutie: 15Hz
Verversingssnelheid: ongeveer 15 Hz
De lagere en hogere toonladders van de muzieknoten worden niet correct vastgelegd. Lagere noten hebben last van een lage frequentieresolutie, terwijl hogere frequenties last hebben van lage bemonsteringsfrequenties. De Arduino heeft al onvoldoende geheugen, dus er is geen manier om een betere resolutie te krijgen. En een betere resolutie gaat ten koste van een lagere verversingssnelheid, dus een afweging is onvermijdelijk. Lekenversie van het onzekerheidsprincipe van Heisenberg.
De belangrijkste moeilijkheid is de exponentiële afstand tussen noten (zoals te zien is in de afbeelding. Elke impuls op de frequentie-as is een muzieknoot). Algoritmen zoals LFT kunnen helpen, maar dat is een beetje geavanceerd en een beetje ingewikkeld voor een apparaat als Arduino Nano.
Stap 3: Schakelschema's
Let op: heb geen last van de drie MOSFET's en de schroefklemmen op de foto's. Ze zijn niet vereist voor dit project. Merk op dat het microfooningangsbord verwijderbaar is of zoals ze het modulair noemen. Hieronder volgt een korte beschrijving van de verschillende blokken.
1) De twee weerstanden van 470 ohm combineren het stereo-audiosignaal met het mono-audiosignaal. Zorg ervoor dat de aarde van het signaal in naar de virtuele aarde gaat (vg in het schakelschema) en niet naar de aarde van het circuit.
2) Het volgende blok is een 2e orde sallen-key laagdoorlaatfilter dat verantwoordelijk is voor bandbegrenzing van het ingangssignaal om aliasing te voorkomen. Omdat we alleen met +12v-voeding werken, beïnvloeden we de op-amp door een RC-spanningsdeler te maken. dat houdt de op-amp voor de gek door te denken dat de voeding 6 0 -6 volt is (dual rail) waarbij vg de aardingsreferentie is voor de opamp.
3) Vervolgens wordt de uitgang laagdoorlaatgefilterd om een DC-offset van 6 volt te blokkeren en gekoppeld aan een DC van ongeveer 0,55 volt, omdat de ADC wordt geconfigureerd om de interne 1,1 v als Vref te gebruiken.
Let op: De voorversterker voor de electret-microfoon is niet de beste schakeling op internet. Een circuit met op-amp zou een betere keuze zijn geweest. We willen dat de frequentierespons zo vlak mogelijk is. De stereopot van 47 kilo ohm wordt gebruikt om de afsnijfrequentie te definiëren, die typisch de helft van de bemonsteringsfrequentie moet zijn. De 10 kilo ohm preset (De kleine pot met witte kop) wordt gebruikt om de gain en de Q-waarde van het filter af te stemmen. De trimmerpot van 10 kilo ohm (een met een metalen afstemknop die eruitziet als een kleine schroef met platte kop) wordt gebruikt om de spanning zo dicht mogelijk bij de halve Vref in te stellen.
Let op: Wanneer je de Nano aansluit op P. C. houd de SPST-schakelaar open, anders gesloten. Wees extra voorzichtig als u dit niet doet, dit kan schade toebrengen aan het circuit/computer/spanningsregelaar of een combinatie van het bovenstaande
Stap 4: Noodzakelijke applicaties en IDE's
- Voor het coderen van de Arduino Nano ging ik met de primitieve AVR-studio 5.1 omdat het voor mij lijkt te werken. U vindt het installatieprogramma hier.
- Voor het programmeren van de Arduino Nano heb ik Xloader gebruikt. Het is heel gemakkelijk te gebruiken lichtgewicht tool om.hex-bestanden naar Arduinos te branden. Je kunt het hier krijgen.
- Voor een klein bonus mini-project en het afstemmen van het circuit heb ik verwerking gebruikt. Je kunt het hier vandaan halen, hoewel er in elke revisie grote wijzigingen zijn, dus je moet misschien met verouderde functies spelen om de schets te laten werken.
- FL studio of andere MIDI-verwerkingssoftware. Je kunt de FL Studio-versie met beperkte toegang hier gratis krijgen.
- Loop MIDI creëert een virtuele MIDI-poort en wordt door FL Studio gedetecteerd alsof het een MIDI-apparaat is. Haal hier een kopie van hetzelfde.
- Haarloze MIDI wordt gebruikt om MIDI-berichten van de COM-poort te lezen en naar de loop-MIDI-poort te sturen. Het debugt ook realtime MIDI-berichten, wat het debuggen gemakkelijk maakt. Download hier Hairless MIDI.
Stap 5: Relevante codes voor alles
Ik wil Electronic Lifes MFG (Website Here!!) bedanken voor de FFT-bibliotheek met vaste punten die ik in dit project heb gebruikt. De bibliotheek is geoptimaliseerd voor de mega AVR-familie. Dit is de link naar bibliotheekbestanden en codes die hij gebruikte. Ik voeg mijn code hieronder toe. Het bevat ook de verwerkingsschets en de AVR C-code. Houd er rekening mee dat dit de configuratie is die voor mij werkte en ik neem geen enkele verantwoordelijkheid als je iets beschadigt vanwege deze codes. Ook had ik veel problemen om de code te laten werken. DDRD (Data Direction Register) heeft bijvoorbeeld DDDx (x = 0-7) als bitmaskers in plaats van de conventionele DDRDx (x = 0-7). Pas op voor deze fouten tijdens het compileren. Ook het wijzigen van de microcontroller heeft invloed op deze definities, dus houd dit ook in de gaten bij het omgaan met compilatiefouten. En als je je afvraagt waarom de projectmap DDT_Arduino_328p.rar heet, laten we zeggen dat het 's avonds erg donker was toen ik begon en ik lui genoeg was om de lichten niet aan te doen.:P
Bij de verwerkingsschets heb ik verwerking 3.3.6 gebruikt om deze schets te schrijven. U moet het COM-poortnummer in de schets handmatig instellen. U kunt de opmerkingen in de code controleren.
Als iemand me kan helpen de codes over te zetten naar Arduino IDE en de nieuwste verwerkingsversie, zou ik blij zijn en zal ik ook de ontwikkelaars/bijdragers credits geven.
Stap 6: het instellen
- Open de code en compileer de code met #define pcvisual zonder commentaar en #define midi_out als commentaar.
- Open xloader en blader naar de map met code, blader naar het.hex-bestand en brand het naar nano door het juiste bord en de COM-poort te selecteren.
- Open de verwerkingsschets en voer deze uit met de juiste COM-poortindex. Als alles goed gaat, zou je een spectrum van het signaal op pin A0 moeten kunnen zien.
- Pak een schroevendraaier en draai de trimmerpot totdat het spectrum vlak is (DC-component moet bijna nul zijn). Voer dan geen signaal in op het bord. (Bevestig de microfoonmodule niet).
- Gebruik nu een dergelijke sweep-generatortool om input te geven aan het bord vanaf de microfoon en het spectrum te observeren.
- Als u geen frequentiebereik ziet, verlaagt u de grensfrequentie door de weerstand van 47 kilo ohm te wijzigen. Verhoog ook de gain door gebruik te maken van de 10 kilo ohm preset pot. Probeer een vlakke en prominente sweep-uitvoer te verkrijgen door deze parameters te wijzigen. Dit is het leuke gedeelte (de kleine bonus!), speel je favoriete nummers en geniet van hun realtime spectrum. (Bekijk de video)
- Compileer nu opnieuw de ingebedde C-code met #define pcvisual als commentaar en #define midi_out zonder commentaar.
- Laad de nieuwe gecompileerde code opnieuw op Arduino Nano.
- Open LoopMidi en maak een nieuwe poort aan.
- Open FL studio of andere MIDI-interfacesoftware en zorg ervoor dat de lus-midi-poort zichtbaar is in de MIDI-poortinstellingen.
- Open haarloze MIDI met aangesloten arduino. Selecteer de uitvoerpoort als de LoopMidi-poort. Ga naar instellingen en stel de baudrate in op 115200. Selecteer nu de COM-poort die overeenkomt met Arduino Nano en open de poort.
- Speel enkele "pure" tonen in de buurt van de microfoon en je zou de bijbehorende noot ook in de MIDI-software moeten horen. Als er geen reactie is, probeer dan de up_threshold te verlagen die is gedefinieerd in de C-code. Als de noten willekeurig worden geactiveerd, verhoog dan de up_threshold.
- Koop je piano en test hoe snel je systeem is!! Het beste is dat het in de goldy-lock-zone van noten gemakkelijk meerdere gelijktijdige toetsaanslagen kan detecteren.
Opmerking: wanneer de COM-poort door de ene toepassing wordt gebruikt, kan deze niet door een andere worden gelezen. Als bijvoorbeeld Hairless MIDI de COM-poort zou lezen, zou Xloader het bord niet kunnen flashen
Stap 7: Resultaten/video's
Dat was het voor nu jongens! Hoop dat je het leuk vindt. Als je suggesties of verbeteringen in het project hebt, laat het me dan weten in het commentaargedeelte. Vrede!
Aanbevolen:
Raspberry PI 3 - Schakel seriële communicatie in naar TtyAMA0 naar BCM GPIO 14 en GPIO 15 - Ajarnpa
Raspberry PI 3 - Schakel seriële communicatie naar TtyAMA0 naar BCM GPIO 14 en GPIO 15 in: ik had onlangs interesse om UART0 op mijn Raspberry Pi (3b) in te schakelen, zodat ik deze rechtstreeks op een RS-232-signaalniveau-apparaat kon aansluiten met behulp van een standaard 9 -pin d-sub-connector zonder een USB-naar-RS-232-adapter te hoeven gebruiken. Onderdeel van mijn interesse
Games uploaden naar Arduboy en 500 games naar Flash-cart: 8 stappen
Spellen uploaden naar Arduboy en 500 spellen naar Flash-cart: Ik heb een zelfgemaakte Arduboy gemaakt met serieel Flash-geheugen dat maximaal 500 spellen kan opslaan om onderweg te spelen. Ik hoop te delen hoe je games kunt laden, inclusief hoe je games opslaat in het seriële flash-geheugen en je eigen geconsolideerde gamepakket kunt maken
Flash AT Command Firmware naar ESP01-module (vereist een USB-naar-TTL-adapter): 5 stappen
Flash AT Command Firmware naar ESP01-module (vereist een USB-naar-TTL-adapter): door Jay Amiel AjocGensan PHfacebook.com/geeamealyoutube.com/jayamielajoc
Converteer een videocamera uit de jaren 80 naar een realtime polarimetrische imager - Ajarnpa
Zet een videocamera uit de jaren 80 om in een realtime polarimetrische imager: Polarimetrische beeldvorming biedt een manier om baanbrekende toepassingen te ontwikkelen op een breed scala aan gebieden - van omgevingsmonitoring en medische diagnostiek tot toepassingen op het gebied van beveiliging en terrorismebestrijding. Echter, de zeer
12v naar USB-adapter 12v naar 5v transformator (ideaal voor auto's): 6 stappen
12v naar USB-adapter 12v naar 5v-transformator (ideaal voor auto's): hier wordt uitgelegd hoe u een 12v-naar-USB (5v)-adapter maakt. Het meest voor de hand liggende gebruik hiervan is voor 12v-autoadapters, maar overal waar je 12v hebt, kun je het gebruiken! Als je 5v nodig hebt voor iets anders dan USB, sla dan gewoon de stappen over het toevoegen van de USB-poorten over