feat: MIDI velocity, keyboard splits, and fixing instrument channel

Closes #124
Closes #215
Closes #221
This commit is contained in:
5684185+vsariola@users.noreply.github.com
2026-02-07 10:03:44 +02:00
parent 0179b24fd4
commit b349474c4d
11 changed files with 369 additions and 24 deletions

View File

@ -24,7 +24,8 @@ type (
// ThreadMaskM1 is a bit mask of which threads are used, minus 1. Minus
// 1 is done so that the default value 0 means bit mask 0b0001 i.e. only
// thread 1 is rendering the instrument.
ThreadMaskM1 int `yaml:",omitempty"`
ThreadMaskM1 int `yaml:",omitempty"`
MIDI MIDI `yaml:",flow,omitempty"`
Units []Unit
}
@ -64,6 +65,16 @@ type (
Comment string `yaml:",omitempty"`
}
MIDI struct { // contains info on how MIDI events should trigger this instrument; if empty, then the instrument is not triggered by MIDI events
Channel int `yaml:",omitempty"` // 0 means automatically assigned channel, 1-16 means MIDI channel 1-16
Start int `yaml:",omitempty"` // MIDI note number to start on, 0-127
End int `yaml:",omitempty"` // MIDI note number to end on, counted backwards from 127, done so that the default number of 0 corresponds to "full keyboard", without any splittings
Transpose int `yaml:",omitempty"` // value to be added to the MIDI note/velocity number, can be negative
Velocity bool `yaml:",omitempty"` // is this instrument triggered by midi event velocity or note
NoRetrigger bool `yaml:",omitempty"` // if true, then this instrument does not retrigger if two consecutive events have the same value
IgnoreNoteOff bool `yaml:",omitempty"` // if true, then this instrument should ignore note off events, i.e. notes never release
}
ParamMap map[string]int
// UnitParameter documents one parameter that an unit takes