Table of Contents

MIDI Controller

Autor: Daniel Berbece

Introducere

Acest proiect isi propune crearea unui dispozitiv prin care pot fi generate semnale audio (in format MIDI) care sa poata fie interpretate de un sintetizator (sau un PC in cazul nostru) pentru a produce piese muzicale intr-un mod unic si usor. Pe langa acest scop, proiectul isi propune sa fie cat mai user-friendly si ca oricine sa poata crea muzica in cel mai scurt timp posibil.

In implementarea proiectului unele aspecte pot fi adaptate pentru a depasi problemele ce s-ar putea sa apara vor aparea pe parcurs.

Descriere generală


In functie de modul de configurare facut, dispozitivul va putea trimite catre sintetizator:

La fiecare apasare de buton, butonul respectiv se va aprinde si, in functie de mod, se va stinge imediat sau se va stinge si aprinde la intervale egale de timp. Deoarece fiecare buton are un led corespunzator, se pot crea jocuri de lumini care sa fie ca o reprezentare a sunetului trimis in format MIDI catre output.

Schema bloc:

Hardware Design


Lista de piese & materiale:

Piesă Scop
Placa de bază PM 2019 Creierul creativ al proiectului
16 butoane Obtinerea inputului de la utilizator
16 leduri WS2812B Indicarea butoanelor/sunetelor folosite
16 diode Pentru a evita efectul de ghosting
2 butoane/potenitiometre Ajustarea modului de interpretarea a butoanelor/sunetelor
Laptop Folosit pe post de sintetizator
Fire Legarea componentelor intre ele
Cutie Incapsularea componentelor intr-un singur pachet

Schema electrica

Software Design

Microcontrollerul are de facut mai multe operatii:

  1. Sa faca switch intre cele doua moduri de operare, folosind butonul PB2 de pe placuta. Cand acesta genereaza o intrerupere, schimbam modul de operare si semnalam modul curent prin aprinderea ledului PD7.
  2. Sa itereze prin fiecare linie si fiecare coloana a matricei de butoane pentru a verifica daca exista input de la utilizator. Fiecare buton este asociat unui canal MIDI. Avem, astfel, 16 canale in total.
  3. Sa updateze banda de leduri in concordanta cu butoanele apasate/secventa de sunete din loop. Pentru acest lucru am folosit Biblioteca Light_WS2812
  4. Daca este in modul looping, trebuie sa tina cont de semnelele MIDI pe care trebuie sa le trimita, la ce interval de timp. Pentru asta, am setat timer 1 sa genereze o intrerupere la o frecventa de 16Hz, iar la fiecare intrerupere verificam daca trebuie sa trimitem un semnal MIDI.
  5. Sa trimita pe USART semnale MIDI catre calculator

Deoarece calculatorul nu stie ca placuta e un device MIDI, trebuie sa instalam un program auxiliar care sa faca transformarea Serial ↔ MIDI. Pentru testare, am folosit programul FL-Studio, un DAW (Digital Audio Workstation) in care putem adauga instrumentele dorite pe fiecare canal MIDI iar cu ajutorul controllerului sa cream muzica.

Codul proiectului poate fi gasit pe GitHub.

Rezultate

Proiectul final arata asa:

Concluzii

Pe masura ce testam proiectul realizam ca exista multe functionalitati care merita implementate pentru a usura si mai tare creatia de muzica. Spre exemplu, ar fi utila adaugarea unui potentiometru prin care sa putem mari sau micsora timpul de looping sau sa asociem si o comunicatie inversa (de la calculator catre Controller) prin care sa cream jocuri de lumini in concordanta cu sunetele generate.

Per total, a fost un proiect interesant, am vazut ce inseamna sa creezi un produs cap-coada, nu doar din punct de vedere Software, ci si Hardware. A fost o adevarata provocare dar si satisfactia este pe masura rezultatului.

Bibliografie/Resurse