Super Duper mikrotonala MIDI Converter (5 / 5 steg)
Steg 5: Koden
Här är Arduino koden. Anteckningar om det finns nedan.
Sju Segment bibliotek:
Som beskrivits tidigare skrev jag ett sju segment bibliotek med snabb handstil till digital stift. Det måste vara snabb, eller annars den saktar MIDI bearbetning ner märkbart.
Mikrotonala MIDI-bibliotek:
Jag skrev också ett mikrotonala MIDI-bibliotek som hanterar input av MIDI-not händelser och produktionen av n-TET mikrotonala Observera händelser. För att hålla koden snabbt, filtrerar detta bibliotek bort, dvs gör ingenting med, MIDI-kommandon eller data som inte är relaterade till Observera händelser.
Koden använder alla 16 MIDI-kanaler successivt och cykliskt att skicka pitchbend och anteckningar. Detta är eftersom pitchbend påverkar en hel kanal, och varje mikrotonala Obs kräver ofta ett olika pitchbend värde. Det kan justeras för att använda mindre kanaler, men antalet kanaler skulle vara antalet tillgängliga anteckningar av polyfoni.
Jag genomfört en monofoniska läge som retriggers den föregående anteckningen vid behov. När man arbetar med mikrotonala skalor med mer än 12 toner, i vissa fall används samma MIDI ton för angränsande mikrotonala toner med olika pitchbend värden. Om båda notes hålls och sedan en släppt, när en anteckning av kommandot skickas för en av mikrotonala toner på en monofonisk synthesizer då båda anteckningar är avstängda. När monofoniska läge är aktiv retriggers koden återstående mikrotonala Obs och pitchbend värde, vilket är vad du förväntar dig när du spelar en monosynth. Den upplysta knappen växlar du mellan retrigger att vara på för en monosynth och för en polyfonisk synt.
Jag också genomfört Pythagoras trimma in koden--mappas till "00" stegen per oktav inställning, men det är bortkommenterad eftersom det krävs om uttalanden orsakat märkbar fördröjning. Kanske finns det fler optimering att göra, eller kanske en snabbare mikrokontroller som på en Teensy skulle låta min kod ska fungera tillräckligt bra. Eller kanske hålla med 53-TET för en bra nog tillnärmning av 5-limit bara intonation. :)
Huvudkoden:
Huvudkoden inkluderar avbrott hantering för rotationsencoder och knappen. Jag hittade den här sidan och sidan hjälp för att skriva en avbrottskod.
ISR hanterar alla rotationsencoder och belyst knapp funktioner. När en kodare är aktiverad, förslaget är mappad till en förändring i steg per oktav eller MIDI basnot, och dessa värden uppdateras för de sju segment displayen. När knappen trycks, monofoniska läge ska växlas på eller av och inre LED ska växlas på eller av för att matcha.
Den viktigaste loopen består av i huvudsak ett samtal att hantera en byte av inkommande MIDI-data och sedan en enda blixt av lämpliga lysdioderna i sju segment display.