Cuprins:

Convertor audio în timp real în format MIDI: 7 pași
Convertor audio în timp real în format MIDI: 7 pași

Video: Convertor audio în timp real în format MIDI: 7 pași

Video: Convertor audio în timp real în format MIDI: 7 pași
Video: 7 Pași pentru o voce superbă! Tutorial mixing ! 2024, Iulie
Anonim
Convertor audio în timp real în format MIDI
Convertor audio în timp real în format MIDI

Oameni Namaste! Acesta este un proiect la care am lucrat la unul dintre cursurile mele (Real-Time Digital Signal Processing) în programul meu de licență. Proiectul vizează realizarea unui sistem DSP care „ascultă” date audio și transmite mesaje MIDI ale notelor corespunzătoare prin UART. Arduino Nano a fost folosit în acest scop. Pe scurt, microcontrolerul face un FFT pe datele audio primite și face o analiză a vârfurilor și trimite un mesaj MIDI adecvat. Nu vă deranjați de MOSFET-uri, deși sunt pentru un alt proiect (care va fi lansat mai târziu și pe instructabile) și nu sunt necesare pentru acest proiect. Deci, să începem deja !!

Pasul 1: Componente necesare

Componente necesare
Componente necesare

Vom avea nevoie de următoarele componente pentru a construi acest proiect, deși multe dintre acestea sunt generice și pot fi înlocuite cu echivalenții lor. De asemenea, consultați schema de circuite pentru a lucra și a căuta implementări mai bune.

Cantitatea componentelor

1. Microfon Electret. 1

2. Rezistor 30 Kilo Ohm. 1

3. Rezistor de 150 kg Ohm. 1

4. Rezistor de 100 ohmi. 1

5. Rezistoare de 2,2 Kilo Ohm. 3

6. Oală presetată de 10 Kilo Ohm. 1

7. Oală de tuns 10 Kilo Ohm. 1

8. Oală stereo de 47 Kilo Ohm. 1

9. Rezistențe de 470 Ohmi. 2

10. Condensatori 0.01uF. 2

11. Condensatoare 2.2uF. 3

12. Condensatoare 47uF. 2

13. Condensator 1000uF. 1

14. Condensator 470uF. 1

15. 7805 regulator de tensiune. 1

16. Bandă antet feminin și masculin. 1 fiecare

17. Conector Barrel Jack. 1

18. Adaptor DC 12 V 1 Amp. 1

19. Comutator SPST. (Opțional) 1

20. Perfboard. 1

Pasul 2: Specificații tehnice

Specificatii tehnice
Specificatii tehnice

Frecvența de eșantionare: 3840 de probe / sec

Număr de eșantioane pe FFT: 256

Rezoluție de frecvență: 15Hz

Rata de reîmprospătare: Aproximativ 15 Hz

Scalele inferioare și superioare ale notelor muzicale nu sunt capturate corect. Notele mai mici suferă de rezoluție de frecvență joasă, în timp ce frecvențele mai mari suferă de rate de eșantionare scăzute. Arduino nu mai are memorie, deci nu există nicio modalitate de a obține o rezoluție mai bună. Și o rezoluție mai bună va avea un cost de rată de reîmprospătare redusă, astfel încât compromisul este inevitabil. Versiune laică a principiului incertitudinii lui Heisenberg.

Dificultatea principală este distanța exponențială între note (După cum se vede în figură. Fiecare impuls pe axa frecvenței este o notă muzicală). Algoritmi precum LFT ar putea ajuta, dar acest lucru este puțin avansat și puțin complicat pentru un dispozitiv precum arduino Nano.

Pasul 3: Diagrame de circuit

Diagrame de circuit
Diagrame de circuit
Diagrame de circuit
Diagrame de circuit
Diagrame de circuit
Diagrame de circuit
Diagrame de circuit
Diagrame de circuit

Notă: Nu vă deranjați cele trei MOSFET-uri și bornele cu șurub din imagini. Nu sunt necesare pentru acest proiect. Observați că placa de intrare a microfonului este detașabilă sau așa cum o numesc Modulară. O mică descriere a diferitelor blocuri este dată mai jos.

1) Cele două rezistențe de 470 ohmi combină semnalul audio stereo cu semnalul audio mono. Asigurați-vă că pământul semnalului intră la pământ virtual (vg în diagrama circuitului) și nu la pământul circuitului.

2) Următorul bloc este un filtru trece jos cu cheie sallen de ordinul 2, care este responsabil pentru limitarea benzii semnalului de intrare pentru a evita aliasarea. Întrucât lucrăm doar cu o sursă de + 12V, vom distinge op-amplificatorul făcând un divizor de tensiune RC. asta păcălește op-amp-ul să creadă că alimentarea este de 6 0-6 volți (dual rail) unde vg este referința la sol pentru amplificatorul op.

3) Apoi, ieșirea este filtrată cu trecere joasă pentru a bloca deplasarea DC de 6 volți și cuplată cu DC de aproximativ 0,55 volți, deoarece ADC va fi configurat pentru a utiliza 1.1 v intern ca Vref.

Notă: Preamplificatorul pentru microfonul electret nu este cel mai bun circuit de pe internet. Un circuit care implică op-amp ar fi fost o alegere mai bună. Dorim ca răspunsul în frecvență să fie cât mai plat posibil. Potul stereo de 47 de kilograme este utilizat pentru a defini frecvența de tăiere care ar trebui să fie de obicei jumătate din frecvența de eșantionare. Presetarea de 10 kg ohm (Potul mic cu cap alb) este folosit pentru a regla câștigul și valoarea Q a filtrului. Potul de tundere de 10 kg ohm (unul cu un buton de reglare metalic care arată ca un șurub mic cu cap plat) este folosit pentru a seta tensiunea să fie la fel de aproape ca jumătate de Vref.

Notă: Când conectați Nano la P. C. mențineți comutatorul SPST deschis altfel închis. Aveți grijă deosebită în cazul în care acest lucru nu poate face acest lucru poate dăuna circuitului / computerului / regulatorului de tensiune sau orice combinație a celor de mai sus

Pasul 4: Aplicații și IDE necesare

Aplicații și IDE necesare
Aplicații și IDE necesare
Aplicații și IDE necesare
Aplicații și IDE necesare
Aplicații și IDE necesare
Aplicații și IDE necesare
Aplicații și IDE necesare
Aplicații și IDE necesare
  1. Pentru codificarea Arduino Nano, am mers cu primitivul studio AVR 5.1, deoarece pare să funcționeze pentru mine. Puteți găsi instalatorul aici.
  2. Pentru programarea Arduino Nano am folosit Xloader. Este foarte ușor de utilizat instrumentul ușor de utilizat pentru a arde fișiere.hex pe Arduinos. O puteți obține aici.
  3. Pentru un mic proiect mini bonus și reglarea circuitului am folosit procesarea. Puteți obține de aici, deși faceți că există modificări majore în fiecare revizuire, astfel încât s-ar putea să trebuiască să jucați cu funcții depreciate pentru a face schița să funcționeze.
  4. FL studio sau orice alt software de procesare MIDI. Puteți obține gratuit versiunea FL studio cu acces limitat de aici.
  5. Loop MIDI creează un port MIDI virtual și este detectat de FL studio ca și cum ar fi un dispozitiv MIDI. Obțineți o copie a aceluiași de aici.
  6. MIDI fără păr este folosit pentru a citi mesajele MIDI din portul COM și a le trimite în bucla portului MIDI. De asemenea, depanează mesajele MIDI în timp real, ceea ce face convenabilă depanarea. Obțineți MIDI fără păr de aici.

Pasul 5: Coduri relevante pentru orice

Aș dori să mulțumesc Electronic Lifes MFG (Website Here !!) pentru biblioteca FFT cu punct fix pe care am folosit-o în acest proiect. Biblioteca este optimizată pentru familia mega AVR. Acesta este linkul către fișierele și codurile bibliotecii pe care le-a folosit. Atașez codul meu mai jos. Include schița de procesare și codul AVR C. Vă rugăm să rețineți că aceasta este configurația care a funcționat pentru mine și nu îmi asum nicio responsabilitate dacă daunați ceva din cauza acestor coduri. De asemenea, am avut multe probleme încercând să fac codul să funcționeze. De exemplu, DDRD (Data Direction Register) are DDDx (x = 0-7) ca măști de biți în loc de DDRDx convențional (x = 0-7). Aveți grijă la aceste erori în timp ce compilați. De asemenea, schimbarea microcontrolerului afectează aceste definiții, așa că țineți cont și de acest lucru în timp ce vă ocupați de erorile de compilare. Și dacă vă întrebați de ce folderul proiectului se numește DDT_Arduino_328p.rar, să spunem că era foarte întuneric seara când am început și am fost destul de leneș să nu aprind luminile.: P

Venind la schița de procesare, am folosit procesarea 3.3.6 pentru a scrie această schiță. Va trebui să setați manual numărul portului COM în schiță. Puteți verifica comentariile din cod.

Dacă cineva mă poate ajuta să port codurile către Arduino IDE și cea mai recentă versiune de procesare, aș fi bucuros și voi acorda credite și dezvoltatorilor / colaboratorilor.

Pasul 6: Configurarea acestuia

  1. Deschideți codul și compilați codul cu #define pcvisual necomentat și #define midi_out comentat.
  2. Deschideți xloader și navigați la directorul cu cod, navigați la fișierul.hex și ardeți-l la nano selectând placa corespunzătoare și portul COM.
  3. Deschideți schița de procesare și rulați-l cu indexul de port COM corespunzător. Dacă totul merge bine, ar trebui să puteți vedea un spectru al semnalului pe pinul A0.
  4. Obțineți un șurubelniță și rotiți vasul de tuns până când spectrul este plat (componenta DC ar trebui să fie aproape de zero). Nu introduceți niciun semnal pe placa atunci. (Nu atașați modulul de microfon).
  5. Acum, utilizați orice instrument de generare a măturării ca acesta pentru a da intrare plăcii de pe microtelefon și pentru a observa spectrul.
  6. Dacă nu vedeți o mișcare a frecvențelor, reduceți frecvența de tăiere modificând rezistența de 47 kg ohm. De asemenea, creșteți câștigul utilizând potul presetat de 10 kg ohm. Încercați să obțineți o ieșire netă și proeminentă prin schimbarea acestor parametri. Aceasta este partea distractivă (micul bonus!), Redați melodiile preferate și bucurați-vă de spectrul lor în timp real. (Priveste filmarea)
  7. Acum compilați din nou codul C încorporat de data aceasta cu #define pcvisual comentat și #define midi_out necomentat.
  8. Reîncărcați noul cod compilat pe arduino Nano.
  9. Deschideți LoopMidi și creați un port nou.
  10. Deschideți FL studio sau alt software de interfață MIDI și asigurați-vă că portul midi buclă este vizibil în setările portului MIDI.
  11. Deschideți MIDI fără păr cu arduino conectat. Selectați portul de ieșire pentru a fi portul LoopMidi. Mergeți la setări și setați rata Baud la 115200. Acum selectați portul COM corespunzător Arduino Nano și deschideți portul.
  12. Redați câteva tonuri „pure” lângă microfon și ar trebui să auziți nota corespunzătoare lovită și în software-ul MIDI. Dacă nu există niciun răspuns, încercați să reduceți up_threshold definit în codul C. Dacă notele se declanșează la întâmplare, creșteți up_threshold.
  13. Ia-ți pianul și testează cât de rapid este sistemul tău !! Cel mai bun lucru este că în zona de blocare aurie a notelor poate detecta cu ușurință mai multe apăsări simultane de taste.

Notă: Când portul COM este accesat de o aplicație, acesta nu poate fi citit de o altă aplicație. De exemplu, dacă MIDI fără păr citeste portul COM, Xloader nu ar putea să blocheze placa

Pasul 7: Rezultate / Videoclipuri

Asta e deocamdată băieți! Sper că îți place. Dacă aveți sugestii sau îmbunătățiri în proiect, anunțați-mă în secțiunea de comentarii. Pace!

Recomandat: