Super Duper mikrotonala MIDI Converter (1 / 5 steg)
Steg 1: Lära sig mer om MIDI och Arduino
Detta instructable som täcker skicka och ta emot på MIDI med en Arduino var ett bra ställe att börja lära sig om MIDI, men det bara skrapar på ytan. Ett av de problem jag stött var hur man hanterar MIDI System Real-Time meddelanden att en av min MIDI keyboard skickar. MIDI-OX var användbara för kontroll meddelanden, förutom att jag inte var alltid säker om de meddelanden som det visar. Jag fick senare veta att det döljer "rinnande status"--mer nedan.
Så skrev jag kod som använder Arduino för att övervaka MIDI-ingång och skriver det till seriell bildskärmen. Jag var tvungen att använda en seriell port med programvara för MIDI eftersom MIDI 31250 baudhastighet inte stöds av den seriella monitorn. Detta sätt varje serieport kan ha olika överföringshastigheten. Koden nedan skärmar ut alla MIDI-kommandon än "anteckning på" eller "noterar" genom att bara skriva ut de kommandon och data under 160, men det är också lärorikt att bygga den att inte skärmen ut några kommandon. Se denna Sammanfattning av MIDI-meddelanden för alla möjliga MIDI-värden.
#include < SoftwareSerial.h >
ta emot på stift 7 och överföra på stift 8
SoftwareSerial softSer (7, 8);
int data = 0;
void setup() {
Serial.BEGIN(57600);
softSer.begin(31250);
}
void loop() {
om (softSer.available())
{
data = softSer.read();
sålla bort kommandon än anmärkning på det eller de av
om (data < 160) {
Serial.println (data, DEC);
}
}
}
En annan pusselbit som jag behövde var begreppet "kör status." Detta innebär att en successiva dubbla kommando, som "anteckning," kanna bli hoppat och bara data kan skickas. Så, till exempel när du spelar en 3 Obs ackord, istället för att skicka 3 "noterar på" kommandon med 3 motsvarande anmärkning och velocity par--9 byte totalt, istället bara 1 "OBS på" kommando är skickad och sedan 3 par Obs och velocity--7 byte. Också, "noterar på" kommandon med noll velocity kan användas istället för "anteckning av." Detta innebär att om du spelar bara nycklarna, då en MIDI-klaviatur kunde skicka endast 1 "anteckning på" kommandot och par efter par Obs och velocity byte. Detta gör för en effektivare seriell kommunikation och minska latens.
Min slutliga sätt att förbättra den MIDI-delen av min ursprungliga Arduino enhet är att bygga maskinvaran från komponenter istället för att använda en Linksprite MIDI sköld. Fördelen med att göra detta är att det kan läggas på en proto-board med andra funktioner som kodare och en display och panel monterad MIDI-portar kan användas. Ovan är en schematisk av kretsen jag använde. För referens är här den officiella elektriska specifikationen. Observera att det krävs en resistor ansluten till MIDI ut stift 5. Jag hittade att motståndet minskar spänningsnivån på den överförda informationen nog att mottagarsidan inte kunde läsa it, så jag utelämnat motståndet.