MIDI to system komunikacji wykorzystywany w instrumentach muzycznych. Nie każdy jednak wie, że jest to system wykorzystywany do sterowania w ogóle. Na przykład sterowania światłami w czasie koncertów itp. Jest to o tyle istotne, że powstało naprawdę bardzo dużo różnych sterowników MIDI – od klawiatur i innych instrumentów muzycznych, przez sterowniki nożne (np. Behringer FCB1010) wyposażone w całą serię przełączników nożnych, oraz dwa pedały do płynnego ustawiania… czegokolwiek, aż do całych stołów mikserskich z dziesiątkami różnych gałek i suwaków.
MIDI idealnie nadaje się do sterowania naszą malinką – ponieważ sterowniki są łatwo wykrywalne przez USB (ew. kartę MIDI->USB)
Dodatkowo oprogramowanie takiego sterownika jest banalnie proste w języku C z biblioteką ALSA, kompilujemy:
1 2 | sudo apt-get install libasound2 gcc cymbalki.c -o cymbalki -lasound |
UWAGA! Wejście MIDI ustawiłem w programie jako „hw:1,0,0”, aby odczytać na jakim porcie zainstalował się nasz sterownik użyjcie polecenia
1 | amidi -l |
cymbalki.c:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <stdio.h> #include <alsa/asoundlib.h> #include <signal.h> int stop=0; void sighandler(int dum) { stop=1; } int main(int argc,char** argv) { int err; char *device_in = "hw:1,0,0"; snd_rawmidi_t *handle_in = 0; struct sigaction act; //przejęcie przerwania Ctrl+C (trzy linijki kodu) act.sa_handler = sighandler; sigaction(SIGINT, &act, NULL); err = snd_rawmidi_open(&handle_in,NULL,device_in,0); if (err) fprintf(stderr,"snd_rawmidi_open %s błąd: %d\n",device_in,err); if (handle_in) { fprintf(stderr,"Czytanie z wejścia MIDI hw:1,0,0\n"); fprintf(stderr,"Aby przerwać: Ctrl+C\n"); unsigned char ch; //wczytanie bajtu while (!stop) { snd_rawmidi_read(handle_in,&ch,1); fprintf(stderr,"wczytane %02x\n",ch); } fprintf(stderr,"\nZamykanie portu MIDI\n"); snd_rawmidi_drain(handle_in); snd_rawmidi_close(handle_in); } return 0; } |