Inhoudsopgave:

Realtime audio naar MIDI-converter: 7 stappen
Realtime audio naar MIDI-converter: 7 stappen

Video: Realtime audio naar MIDI-converter: 7 stappen

Video: Realtime audio naar MIDI-converter: 7 stappen
Video: Audio to MIDI Hacks You NEED to Know In Live 11 2024, November
Anonim
Realtime audio naar MIDI-converter
Realtime audio naar MIDI-converter

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

Vereiste componenten
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

Technische specificaties
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

Schakelschema's
Schakelschema's
Schakelschema's
Schakelschema's
Schakelschema's
Schakelschema's
Schakelschema's
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

Noodzakelijke applicaties en IDE's
Noodzakelijke applicaties en IDE's
Noodzakelijke applicaties en IDE's
Noodzakelijke applicaties en IDE's
Noodzakelijke applicaties en IDE's
Noodzakelijke applicaties en IDE's
Noodzakelijke applicaties en IDE's
Noodzakelijke applicaties en IDE's
  1. 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.
  2. 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.
  3. 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.
  4. FL studio of andere MIDI-verwerkingssoftware. Je kunt de FL Studio-versie met beperkte toegang hier gratis krijgen.
  5. 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.
  6. 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

  1. Open de code en compileer de code met #define pcvisual zonder commentaar en #define midi_out als commentaar.
  2. 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.
  3. 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.
  4. 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).
  5. Gebruik nu een dergelijke sweep-generatortool om input te geven aan het bord vanaf de microfoon en het spectrum te observeren.
  6. 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)
  7. Compileer nu opnieuw de ingebedde C-code met #define pcvisual als commentaar en #define midi_out zonder commentaar.
  8. Laad de nieuwe gecompileerde code opnieuw op Arduino Nano.
  9. Open LoopMidi en maak een nieuwe poort aan.
  10. Open FL studio of andere MIDI-interfacesoftware en zorg ervoor dat de lus-midi-poort zichtbaar is in de MIDI-poortinstellingen.
  11. 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.
  12. 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.
  13. 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: