Autor: Al Erksousi Mohamad
Grupa: 336CA
Proiectul consta in realizare unui MIDI(Musical Instrument Digital Interface) Controller, un aparat ce trimite semnale unui sintetizator/alt instrument muzical asemanator, oferiind posibilitatea atat de a declansa diferite tonuri, cat si de a schimba parametrii sunetului(Intensitate, frecventa, etc..) prin intermediul unor potentiometre.
Pe post de instrument muzical voi folosi o aplicatie de tip sintetizator, cel mai probabil loopBe sau FL studio. Declansarea unui sunet se va face prin intermediul butonaelor, facandu-se o mapare intre inputul primit si sunetul care va fi declansat in aplicatie. Pe langa butoane, aparatul va avea si un numar de potentiometre care vor putea fi folosite pentru a regla diferite efecte sonore si proprietati precum volumul si frecventa.
Schema bloc
Componentele hardware necesare sunt următoarele:
Schema electrica
Codul este scris in Arduino IDE, iar pe langa bibilotecile standard Arduino acesta foloseste biblioteca MIDI.h, biblioteca folosita pentru a trimite datele intr-un format MIDI-convertibil. Codul este relativ simplu, acesta procedeaza astfel:
1- citeste datele de la butoane cu digitalRead si datele de la potentiometre cu analogRead
2- pentru butoane va verifica inputurile la fiecare trecere a unei perioade de delay si le va trimite ca note folosind functia sendNoteOn(). daca se apasa butonul de pauza si ledurile sunt active se vor dezactiva, atlfel daca se apasa alt buton si ledurile sunt inactive se vor activa
3- pentru potentiometre se va folosi acelasi principiu de verificare dupa delay, diferenta este ca datele nu se vor trimite folosiind sendNoteOn(), ci folosiind sendControlChange() pentru a putea modifica controale precum efectele si filterele. Datele trimise de la potentiometru vor trebui scalate pentru a se incadra in intervalul 0-127 deoarece acesta este intervalul notelor MIDI
Pe langa scrierea codului am avut nevoie de diverse aplicatii pentru functionarea proiectului. In primul rand, un controller MIDI nu isi are rostul daca nu trimite datele unui instrument muzical. Neavand instrumente pe care sa le pot folosi, am optat la folosirea unei aplicatii de tip sintetizator apeland la programul Ableton Live pentru generarea muzicii. Am ales Ableton Live in principal deoarece este cel mai MIDI-friendly dintre toate aplicatile de acest tip.
Deoarece datele trimise de program sunt date seriale, nu date MIDI, acestea nu puteau fi trimise in mod direct aplicatiei, fara sa treaca printr-un convertor care sa le transforme in date MIDI. Pentru a face aceasta conversie am folosit Hairless MIDI, o aplicatie care primeste date pe un port serial si le converteste pentru a le transmite mai departe pe un port MIDI. Windows nu are implementate optiuni pentru crearea unui port MIDI, deci am folosit aplicatia LoopMIDI pentru a crea un astfel de port.
Pe langa experienta dobandita in lucrul cu Arduino, am invatat multe despre datele MIDI si modul in care acestea sunt transmise unui mediu muzical. Deasemenea am invatat putin despre lucrul cu potentiometre si ce tipuri de potentiometre sunt potrivite pentru anumite tensiuni.