Innholdsfortegnelse:
- Trinn 1: Komponenter påkrevd
- Trinn 2: Tekniske spesifikasjoner
- Trinn 3: Kretsdiagrammer
- Trinn 4: Nødvendige applikasjoner og IDE -er
- Trinn 5: Relevante koder for alt
- Trinn 6: Sette den opp
- Trinn 7: Resultater/videoer
Video: Sanntids lyd til MIDI-omformer .: 7 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
Namaste folk! Dette er et prosjekt som jeg jobbet med på et av kursene mine (Real-Time Digital Signal Processing) i bachelorprogrammet mitt. Prosjektet tar sikte på å lage et DSP -system som "lytter" til lyddata og sender ut MIDI -meldinger med tilsvarende notater over UART. Arduino Nano ble brukt til dette formålet. Lang historie kort mikrokontrolleren gjør en FFT på innkommende lyddata og analyserer toppene og sender passende MIDI-melding. Ikke bry deg om MOSFET -ene fordi de er for et annet prosjekt (som også vil bli lagt ut senere på instruktører) og ikke er nødvendig for dette prosjektet. Så la oss begynne allerede !!
Trinn 1: Komponenter påkrevd
Vi trenger følgende komponenter for å bygge dette prosjektet, selv om mange av disse er generiske og kan erstattes med sine ekvivalenter. Se også kretsdiagrammet for å trene og jakte på bedre implementeringer.
Komponent Antall
1. Electret -mikrofon. 1
2. 30 Kilo Ohm motstand. 1
3. 150 Kilo Ohm motstand. 1
4. 100 ohm motstand. 1
5. 2,2 Kilo Ohm motstander. 3
6. 10 Kilo Ohm forhåndsinnstilt gryte. 1
7. 10 Kilo Ohm trimmerpotte. 1
8. 47 Kilo Ohm stereokanne. 1
9. 470 Ohm motstander. 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 spenningsregulator. 1
16. Hunnebånd for hunn og mann. 1 hver
17. Tønnekontakt. 1
18. 12 V 1 Amp DC adapter. 1
19. SPST -bryter. (Valgfritt) 1
20. Perfboard. 1
Trinn 2: Tekniske spesifikasjoner
Prøvetakingsfrekvens: 3840 prøver/sek
Antall prøver per FFT: 256
Frekvensoppløsning: 15Hz
Oppdateringshastighet: Rundt 15 Hz
De nedre og høyere skalaene til musikknotene blir ikke fanget riktig. Lavere toner lider av lavfrekvent oppløsning, der høyere frekvenser lider av lave samplingshastigheter. Arduino er allerede tom for minne, så det er ingen måte å få bedre oppløsning. Og bedre oppløsning vil koste en redusert oppdateringsfrekvens, så bytte er uunngåelig. Lekmannsversjon av Heisenbergs usikkerhetsprinsipp.
Den primære vanskeligheten er den eksponensielle avstanden mellom notene (Som vist på figuren. Hver impuls på frekvensaksen er en musikknote). Algoritmer som LFT kan hjelpe, men det er litt avansert og litt komplisert for en enhet som arduino Nano.
Trinn 3: Kretsdiagrammer
Merk: Ikke bli plaget av de tre MOSFET -ene og skrueterminalene på bildene. De kreves ikke for dette prosjektet. Legg merke til at mikrofoninngangskortet er flyttbart eller som de kaller det modulært. En liten beskrivelse av de forskjellige blokkene er gitt nedenfor.
1) De to 470 ohm motstandene kombinerer stereolydsignalet til mono lydsignal. Sørg for at signalet i går til virtuell jord (vg i kretsdiagrammet) og ikke til bakken til kretsen.
2) Den neste blokken er et 2.-ordens sallen-key lavpassfilter som er ansvarlig for båndbegrensning av inngangssignalet for å unngå aliasing. Siden vi jobber med bare +12V forsyning, forspenner vi forsterkeren ved å lage en RC spenningsdeler. som lurer op -forsterkeren til å tro at forsyningen er 6 0-6 volt forsyning (dual rail) der vg er bakkereferansen for op -forsterkeren.
3) Deretter blir utgangen lavpassfiltrert for å blokkere DC -forskyvning på 6 volt og kombinert med DC på rundt 0,55 volt fordi ADC vil bli konfigurert til å bruke den interne 1,1 v som Vref.
Merk: Forforsterkeren til elektretmikrofonen er ikke den beste kretsen på internett. En krets med op-amp ville vært et bedre valg. Vi ønsker at frekvensresponsen skal være så flat som mulig. Stereopotten på 47 kilo ohm brukes til å definere cut-off-frekvensen som vanligvis bør være halvparten av samplingsfrekvensen. 10 kilo ohm forhåndsinnstilling (Den lille gryten med hvitt hode) brukes til å justere forsterkningen og Q -verdien til filteret. 10 kilo ohm trimmerpotten (en med en metallisk justeringsknapp som ser ut som en liten flatskrue) brukes til å stille spenningen til å være så nær som halv Vref.
Merk: Når du kobler Nano til P. C. hold SPST -bryteren åpen ellers lukket. Vær spesielt oppmerksom på at dette ikke gjør det, kan skade kretsen/datamaskinen/spenningsregulatoren eller en kombinasjon av det ovennevnte
Trinn 4: Nødvendige applikasjoner og IDE -er
- For koding av Arduino Nano gikk jeg med det primitive AVR studio 5.1 fordi det ser ut til å fungere for meg. Du finner installasjonsprogrammet her.
- For programmering av Arduino Nano brukte jeg Xloader. Det er veldig enkelt å bruke lett verktøy for å brenne.hex -filer til Arduinos. Du kan få det her.
- For lite bonus miniprosjekt og tuning av kretsen jeg brukte behandling. Du kan få det herfra, selv om det er store endringer i hver revisjon, så du må kanskje fikle med utdaterte funksjoner for å få skissen til å fungere.
- FL studio eller annen MIDI -behandlingsprogramvare. Du kan få FL studio versjon med begrenset tilgang gratis herfra.
- Loop MIDI oppretter en virtuell MIDI -port og blir oppdaget av FL studio som om det var en MIDI -enhet. Få en kopi av det samme herfra.
- Hairless MIDI brukes til å lese MIDI -meldinger fra COM -port og sende den til loop MIDI -port. Det feilsøker også MIDI-meldinger i sanntid, noe som gjør feilsøking praktisk. Få Hairless MIDI herfra.
Trinn 5: Relevante koder for alt
Jeg vil takke Electronic Lifes MFG (nettsted her!) For FFT -biblioteket med fast punkt som jeg brukte i dette prosjektet. Biblioteket er optimalisert for mega AVR -familie. Dette er lenken til biblioteksfiler og koder som han brukte. Jeg legger ved koden min nedenfor. Den inkluderer også behandlingsskissen og AVR C -koden. Vær oppmerksom på at dette er konfigurasjonen som fungerte for meg, og jeg tar ikke noe ansvar i det hele tatt hvis du skader noe på grunn av disse kodene. Jeg hadde også mange problemer med å få koden til å fungere. For eksempel har DDRD (Data Direction Register) DDDx (x = 0-7) som bitmasker i stedet for den konvensjonelle DDRDx (x = 0-7). Se opp for disse feilene mens du kompilerer. Også å endre mikrokontrolleren påvirker disse definisjonene, så hold øye med dette også mens du håndterer kompileringsfeil. Og hvis du lurer på hvorfor prosjektmappen heter DDT_Arduino_328p.rar, la oss bare si at det var veldig mørkt om kvelden da jeg begynte, og jeg var lat nok til å ikke slå på lysene.: P
Når jeg kom til behandlingsskissen, brukte jeg behandling 3.3.6 for å skrive denne skissen. Du må angi COM -portnummeret i skissen manuelt. Du kan sjekke kommentarene i koden.
Hvis noen kan hjelpe meg med å overføre kodene til Arduino IDE og den siste behandlingsversjonen, ville jeg være glad og gi kreditter til utviklerne / bidragsytere også.
Trinn 6: Sette den opp
- Åpne koden og kompiler koden med #define pcvisual uncommented og #define midi_out kommentert.
- Åpne xloader og bla til katalogen med kode, bla til.hex -filen og brenn den til nano ved å velge passende kort og COM -port.
- Åpne behandlingsskissen og kjør den med passende COM -portindeks. Hvis alt går bra, bør du kunne se et spektrum av signalet på pin A0.
- Skaff deg en skrutrekker og vri på trimmerpotten til spekteret er flatt (DC -komponenten skal være nær null). Ikke send inn noe signal til tavlen da. (Ikke fest mikrofonmodulen).
- Bruk nå et feiegeneratorverktøy som dette for å gi innspill til kortet fra mikrofonen og observere spekteret.
- Hvis du ikke ser et sveip av frekvenser, reduserer du cut-off-frekvensen ved å endre motstanden på 47 kilo ohm. Øk også gevinsten ved å bruke den forhåndsinnstilte 10 kilo ohm potten. Prøv å få en flat og fremtredende feieutgang ved å endre disse parameterne. Dette er den morsomme delen (den lille bonusen!), Spill favorittsangene dine og nyt deres sanntidsspekter. (Se videoen)
- Nå skal du kompilere den innebygde C -koden igjen denne gangen med #define pcvisual kommentert og #define midi_out ukommentert.
- Last inn den nye kompilerte koden på arduino Nano.
- Åpne LoopMidi og opprett en ny port.
- Åpne FL studio eller annen MIDI -grensesnittprogramvare, og kontroller at loop -midi -porten er synlig i MIDI -portinnstillingene.
- Åpen hårløs MIDI med arduino tilkoblet. Velg utgangsport for å være LoopMidi -porten. Gå til innstillinger og sett Baud rate til 115200. Velg nå COM -porten som tilsvarer Arduino Nano og åpne porten.
- Spill noen "rene" toner i nærheten av mikrofonen, og du bør også høre den tilhørende noten i MIDI -programvaren. Hvis det ikke er noe svar, prøv å senke up_threshold definert i C -koden. Hvis notatene blir utløst tilfeldig, øk deretter opp_grensen.
- Skaff deg pianoet ditt og test hvor raskt systemet ditt er !! Det beste er at i goldy-lock-sonen med notater kan den enkelt oppdage flere samtidige tastetrykk.
Merk: Når COM -porten åpnes av ett program, kan den ikke leses av en annen. For eksempel hvis Hairless MIDI leser COM -port, ville Xloader ikke kunne blinke på tavlen
Trinn 7: Resultater/videoer
Det er det for nå gutta! Håper du liker det. Gi meg beskjed i kommentarfeltet hvis du har forslag eller forbedringer i prosjektet. Fred!
Anbefalt:
Sanntids Rubiks kube med bind for øynene ved hjelp av Raspberry Pi og OpenCV: 4 trinn
Sanntids Rubiks kube-bind for øynene med Raspberry Pi og OpenCV: Dette er den andre versjonen av Rubiks kubeverktøy laget for å løse i bind for øynene. Den første versjonen ble utviklet av javascript, du kan se prosjektet RubiksCubeBlindfolded1 I motsetning til den forrige bruker denne versjonen OpenCV -biblioteket til å oppdage fargene og
En sanntids brønnvannmåler: 6 trinn (med bilder)
En sanntids brønnvannnivåmåler: Disse instruksjonene beskriver hvordan du bygger en rimelig vannstandsmåler i sanntid for bruk i gravde brønner. Vannstandsmåleren er designet for å henge inne i en gravd brønn, måle vannstanden en gang om dagen og sende dataene via WiFi eller mobilforbindelse
En sanntids brønnvannstemperatur, konduktivitet og vannnivåmåler: 6 trinn (med bilder)
En sanntids brønnvannstemperatur, konduktivitet og vannnivåmåler: Disse instruksjonene beskriver hvordan du bygger en rimelig, sanntids vannmåler for å overvåke temperatur, elektrisk ledningsevne (EC) og vannivå i gravde brønner. Måleren er designet for å henge inne i en gravd brønn, måle vanntemperaturen, EC og
Hvordan lage fuktighet og temperatur sanntids datarekorder med Arduino UNO og SD-kort - DHT11 Datalogger Simulering i Proteus: 5 trinn
Hvordan lage fuktighet og temperatur sanntids datarekorder med Arduino UNO og SD-kort | DHT11 Datalogger Simulering i Proteus: Introduksjon: hei, dette er Liono Maker, her er YouTube-lenken. Vi lager kreative prosjekter med Arduino og jobber med innebygde systemer. Data-Logger: En datalogger (også datalogger eller dataregistrator) er en elektronisk enhet som registrerer data over tid
Konverter et videokamera fra 1980-tallet til et sanntids polarimetrisk kamera: 14 trinn (med bilder)
Konverter et videokamera fra 1980-tallet til et sanntids polarimetrisk bildebehandler: Polarimetrisk bildebehandling gir en vei for å utvikle spillendrende applikasjoner på tvers av et bredt spekter av felt - som strekker seg helt fra miljøovervåking og medisinsk diagnostikk til applikasjoner innen sikkerhet og antiterror. Imidlertid er selve