Innehållsförteckning:
- Steg 1: Komponenter krävs
- Steg 2: Tekniska specifikationer
- Steg 3: Kretsdiagram
- Steg 4: Nödvändiga applikationer och IDE: er
- Steg 5: Relevanta koder för allt
- Steg 6: Konfigurera det
- Steg 7: Resultat/videor
Video: Real-time Audio to MIDI Converter .: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Namaste människor! Detta är ett projekt som jag arbetade med för en av mina kurser (Real-Time Digital Signal Processing) i mitt kandidatprogram. Projektet syftar till att skapa ett DSP -system som "lyssnar" ljuddata och matar ut MIDI -meddelanden från motsvarande anteckningar över UART. Arduino Nano användes för detta ändamål. Lång historia kort mikrokontrollern gör en FFT på inkommande ljuddata och analyserar topparna och skickar lämpligt MIDI-meddelande. Oroa dig inte för MOSFET: erna eftersom de är för något annat projekt (som kommer att läggas upp senare på instruktioner också) och inte krävs för detta projekt. Så låt oss börja redan !!
Steg 1: Komponenter krävs
Vi behöver följande komponenter för att bygga detta projekt, även om många av dessa är generiska och kan ersättas med sina motsvarigheter. Se även kretsschemat för att träna och leta efter bättre implementeringar.
Komponent Antal
1. Electret -mikrofon. 1
2. 30 Kilo Ohm motstånd. 1
3. 150 Kilo Ohm motstånd. 1
4. 100 ohm motstånd. 1
5. 2.2 Kilo Ohm motstånd. 3
6. 10 Kilo Ohm förinställd kruka. 1
7. 10 Kilo Ohm trimmerpott. 1
8. 47 Kilo Ohm stereokanna. 1
9. 470 Ohms motstånd. 2
10. 0.01uF kondensatorer. 2
11. 2.2uF kondensatorer. 3
12. 47uF kondensatorer. 2
13. 1000uF kondensator. 1
14. 470uF kondensator. 1
15. 7805 spänningsregulator. 1
16. Huvud- och hanremsa. 1 vardera
17. Barrel Jack -kontakt. 1
18. 12 V 1 Amp DC -adapter. 1
19. SPST -omkopplare. (Valfritt) 1
20. Perfboard. 1
Steg 2: Tekniska specifikationer
Provtagningsfrekvens: 3840 prover/sek
Antal prover per FFT: 256
Frekvensupplösning: 15Hz
Uppdateringshastighet: Cirka 15 Hz
De lägre och högre skalorna på noterna fångas inte korrekt. Lägre toner lider av lågfrekvent upplösning där högre frekvenser lider av låga samplingshastigheter. Arduino har redan slut på minne så det finns inget sätt att få bättre upplösning. Och bättre upplösning kommer att kosta en reducerad uppdateringsfrekvens så att avvägningar är oundvikliga. Lekmanversion av Heisenbergs osäkerhetsprincip.
Den primära svårigheten är det exponentiella avståndet mellan noterna (Som framgår av figuren. Varje impuls på frekvensaxeln är en musiknot). Algoritmer som LFT kan hjälpa, men det är lite avancerat och lite komplicerat för en enhet som arduino Nano.
Steg 3: Kretsdiagram
Obs! Oroa dig inte för de tre MOSFET -enheterna och skruvterminalerna på bilderna. De krävs inte för detta projekt. Lägg märke till att mikrofoningångskortet är avtagbart eller som de kallar det modulärt. En liten beskrivning av de olika blocken ges nedan.
1) De två motstånden på 470 ohm kombinerar stereoljudssignalen med mono -ljudsignalen. Se till att signaljorden går in på virtuell mark (vg i kretsschemat) och inte till kretsens mark.
2) Nästa block är ett andra ordning sallen-key lågpassfilter som ansvarar för bandbegränsning av insignalen för att undvika aliasing. Eftersom vi arbetar med endast +12V strömförsörjning förspänner vi förstärkaren genom att göra en RC-spänningsdelare. som lurar op -amp till att tro att strömförsörjningen är 6 0-6 volt matning (dual rail) där vg är markreferensen för op amp.
3) Sedan är utgången lågpassfiltrerad för att blockera DC -förskjutning på 6 volt och kopplad till DC på cirka 0,55 volt eftersom ADC kommer att konfigureras för att använda den interna 1,1 v som Vref.
Obs: Förförstärkaren för elektretmikrofonen är inte den bästa kretsen på internet. En krets med op-amp skulle ha varit ett bättre val. Vi önskar att frekvenssvaret ska vara så platt som möjligt. Stereopotten på 47 kilo ohm används för att definiera avstängningsfrekvensen som vanligtvis bör vara hälften av samplingsfrekvensen. Förinställningen 10 kilo ohm (den lilla grytan med vitt huvud) används för att ställa in förstärkningen och Q -värdet på filtret. 10 kilo ohm trimmerbehållare (en med en metallisk justeringsknapp som ser ut som en liten plattskruv) används för att ställa in spänningen så nära halva Vref.
Obs: När du ansluter Nano till P. C. håll SPST -omkopplaren öppen annars stängd. Var särskilt försiktig med detta om du inte gör det kan skada kretsen/datorn/spänningsregulatorn eller någon kombination av ovanstående
Steg 4: Nödvändiga applikationer och IDE: er
- För kodning av Arduino Nano gick jag med den primitiva AVR studio 5.1 eftersom det verkar fungera för mig. Du hittar installationsprogrammet här.
- För programmering av Arduino Nano använde jag Xloader. Det är verkligen lätt att använda lätt verktyg för att bränna.hex -filer till Arduinos. Du kan få det här.
- För ett litet bonusminiprojekt och justering av kretsen använde jag bearbetning. Du kan få det härifrån, även om det gör stora förändringar i varje översyn, så du kan behöva tjata med utfasade funktioner för att få skissen att fungera.
- FL studio eller någon annan MIDI -bearbetningsprogramvara. Du kan få FL studio version med begränsad åtkomst gratis härifrån.
- Loop MIDI skapar en virtuell MIDI -port och detekteras av FL studio som om det var en MIDI -enhet. Få en kopia av samma härifrån.
- Hairless MIDI används för att läsa MIDI -meddelanden från COM -port och skicka det till loop MIDI -port. Det felsöker också MIDI-meddelanden i realtid vilket gör felsökning bekvämt. Få Hairless MIDI härifrån.
Steg 5: Relevanta koder för allt
Jag vill tacka Electronic Lifes MFG (Webbplats här !!) för FFT -biblioteket med fast punkt som jag använde i detta projekt. Biblioteket är optimerat för mega AVR -familj. Detta är länken till biblioteksfiler och koder som han använde. Jag bifogar min kod nedan. Den innehåller också bearbetningsskissen och AVR C -koden. Observera att det här är konfigurationen som fungerade för mig och jag tar inget ansvar om du skadar något på grund av dessa koder. Jag hade också många problem med att försöka få koden att fungera. Till exempel har DDRD (Data Direction Register) DDDx (x = 0-7) som bitmasker istället för den konventionella DDRDx (x = 0-7). Se upp för dessa fel när du kompilerar. Att byta mikrokontroller påverkar också dessa definitioner, så håll ett öga på detta samtidigt som du hanterar kompileringsfel. Och om du undrar varför projektmappen heter DDT_Arduino_328p.rar, låt oss bara säga att det var väldigt mörkt på kvällen när jag började och jag var lat nog att inte tända lamporna.: P
När jag kom till bearbetningsskissen använde jag bearbetning 3.3.6 för att skriva denna skiss. Du måste ställa in COM -portnumret i skissen manuellt. Du kan kontrollera kommentarerna i koden.
Om någon kan hjälpa mig att överföra koderna till Arduino IDE och den senaste bearbetningsversionen, skulle jag vara glad och ge krediter till utvecklarna / bidragsgivare också.
Steg 6: Konfigurera det
- Öppna koden och kompilera koden med #define pcvisual uncommented och #define midi_out kommenterade.
- Öppna xloader och bläddra till katalogen med kod, bläddra till.hex -filen och bränn den till nano genom att välja lämpligt kort och COM -port.
- Öppna bearbetningsskissen och kör den med lämpligt COM -portindex. Om allt går bra borde du kunna se ett spektrum av signalen på stift A0.
- Skaffa en skruvmejsel och vrid trimmerpannan tills spektrat är plant (DC -komponenten ska vara nära noll). Mata inte in någon signal till kortet då. (Fäst inte mikrofonmodulen).
- Använd nu vilket svepgeneratorverktyg som helst för att ge input till kortet från mikrofonen och observera spektrumet.
- Om du inte ser en svepning av frekvenser, minska avstängningsfrekvensen genom att ändra motståndet på 47 kilo ohm. Öka också förstärkningen genom att använda 10 kilo ohm förinställd kruka. Försök att få en platt och framträdande sveputmatning genom att ändra dessa parametrar. Detta är den roliga delen (den lilla bonusen!), Spela dina favoritlåtar och njut av deras spektrum i realtid. (Titta på videon)
- Kompilera nu den inbäddade C -koden igen denna gång med #define pcvisual kommenterad och #define midi_out okommenterad.
- Ladda om den nya kompilerade koden till arduino Nano.
- Öppna LoopMidi och skapa en ny port.
- Öppna FL studio eller annan MIDI -gränssnittsprogramvara och se till att loop -midi -porten är synlig i MIDI -portinställningarna.
- Öppen hårlös MIDI med arduino ansluten. Välj utgångsport för att vara LoopMidi -porten. Gå till inställningarna och ställ in Baud -hastigheten till 115200. Välj nu COM -porten som motsvarar Arduino Nano och öppna porten.
- Spela några "rena" toner nära mikrofonen och du bör också höra motsvarande ton träff i MIDI -programvaran. Om det inte finns något svar, försök att sänka upp_gränsen definierad i C -koden. Om anteckningarna aktiveras slumpmässigt ökar du upp_gränsen.
- Skaffa ditt piano och testa hur snabbt ditt system är !! Det bästa är att det i goldy-lock-zonen med anteckningar enkelt kan upptäcka flera samtidiga knapptryckningar.
Obs: När COM -porten nås av ett program kan den inte läsas av en annan. Till exempel om Hairless MIDI läser COM -port, skulle Xloader inte kunna blinka kortet
Steg 7: Resultat/videor
Det är det för nu grabbar! Hoppas du gillar det. Om du har några förslag eller förbättringar i projektet, meddela mig i kommentarsfältet. Fred!
Rekommenderad:
"Real World" Light: 7 steg
"Real World" Light: Det hela är gjord av magnetiskt LED -järnpulver och kemiflaskan. Betyder att världen är vetenskapen utan magi. Inuti flaskan. Den har mark och himmel. Förändringarna lyser menar den ljusa mänskliga civilisationen och betyder också den kemiska
Combat Drones Quadcopters Aka a Real Dogfight Experience: 8 steg (med bilder)
Combat Drones Quadcopters Aka a Real Dogfight Experience: Välkommen till min " ible " #37Vi måste erkänna att nuvarande stridsdronor på marknaden är lite röriga. Det är väldigt svårt att förstå vem som vinner och vem som förlorar. När en drönare kommer ner följer den andra upp (kraschar i varandra
Real Laser Arm Cannon From Metroid !: 9 steg (med bilder)
Real Laser Arm Cannon From Metroid !: Det finns inte många videospelkaraktärer som är lika fantastiska som Samus. Universumräddande premiejägare med ett av de coolaste vapnen i all sciFi. När jag såg att Instructables var värd för en tv -spelbaserad tävling visste jag direkt att det var hennes vapen
MIDI 5V LED Strip Light Controller för Spielatron eller annan MIDI Synth: 7 steg (med bilder)
MIDI 5V LED Strip Light Controller för Spielatron eller annan MIDI Synth: Denna kontroller blinkar trefärgade LED-remsor för 50 ms per ton. Blå för G5 till D#6, röd för E6 till B6 och grön för C7 till G7. Styrenheten är en ALSA MIDI -enhet så att MIDI -programvara kan mata ut till lysdioderna samtidigt som en MIDI -syntenhet
The Ultimate Audio Converter: 7 Steg (med bilder)
The Ultimate Audio Converter: Jag tycker alltid att jag vill konvertera mellan mono och stereo och 1/8 "och 1/4" jack och verkar aldrig ha rätt adapter till hands. Häromdagen gjorde jag två separata adaptrar för två separata konverteringsuppgifter när jag fick plötsliga hjärnor