Innholdsfortegnelse:

Sanntids lyd til MIDI-omformer .: 7 trinn
Sanntids lyd til MIDI-omformer .: 7 trinn

Video: Sanntids lyd til MIDI-omformer .: 7 trinn

Video: Sanntids lyd til MIDI-omformer .: 7 trinn
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, November
Anonim
Sanntids lyd til MIDI-omformer
Sanntids lyd til MIDI-omformer

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

Komponenter påkrevd
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

Tekniske spesifikasjoner
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

Kretsdiagrammer
Kretsdiagrammer
Kretsdiagrammer
Kretsdiagrammer
Kretsdiagrammer
Kretsdiagrammer
Kretsdiagrammer
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

Nødvendige applikasjoner og IDE -er
Nødvendige applikasjoner og IDE -er
Nødvendige applikasjoner og IDE -er
Nødvendige applikasjoner og IDE -er
Nødvendige applikasjoner og IDE -er
Nødvendige applikasjoner og IDE -er
Nødvendige applikasjoner og IDE -er
Nødvendige applikasjoner og IDE -er
  1. 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.
  2. 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.
  3. 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.
  4. FL studio eller annen MIDI -behandlingsprogramvare. Du kan få FL studio versjon med begrenset tilgang gratis herfra.
  5. 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.
  6. 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

  1. Åpne koden og kompiler koden med #define pcvisual uncommented og #define midi_out kommentert.
  2. Åpne xloader og bla til katalogen med kode, bla til.hex -filen og brenn den til nano ved å velge passende kort og COM -port.
  3. Å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.
  4. 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).
  5. Bruk nå et feiegeneratorverktøy som dette for å gi innspill til kortet fra mikrofonen og observere spekteret.
  6. 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)
  7. Nå skal du kompilere den innebygde C -koden igjen denne gangen med #define pcvisual kommentert og #define midi_out ukommentert.
  8. Last inn den nye kompilerte koden på arduino Nano.
  9. Åpne LoopMidi og opprett en ny port.
  10. Åpne FL studio eller annen MIDI -grensesnittprogramvare, og kontroller at loop -midi -porten er synlig i MIDI -portinnstillingene.
  11. Å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.
  12. 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.
  13. 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: