machine/usb/midi: add NoteOn, NoteOff, and SendCC methods for more complete API

Signed-off-by: deadprogram <ron@hybridgroup.com>
Этот коммит содержится в:
deadprogram 2022-07-20 17:13:44 +02:00 коммит произвёл Ron Evans
родитель 5271bd8cfa
коммит 13ed58950f
3 изменённых файлов: 22 добавлений и 2 удалений

Просмотреть файл

@ -39,12 +39,12 @@ func main() {
led.Set(current) led.Set(current)
if current { if current {
for _, c := range chords[index].keys { for _, c := range chords[index].keys {
m.Write([]byte{0x08, 0x80, c, 0x40}) m.NoteOff(0, 0, c, 0x40)
} }
index = (index + 1) % len(chords) index = (index + 1) % len(chords)
} else { } else {
for _, c := range chords[index].keys { for _, c := range chords[index].keys {
m.Write([]byte{0x09, 0x90, c, 0x40}) m.NoteOn(0, 0, c, 0x40)
} }
} }
prev = current prev = current

19
src/machine/usb/midi/messages.go Обычный файл
Просмотреть файл

@ -0,0 +1,19 @@
package midi
// NoteOn sends a note on message.
func (m *midi) NoteOn(cable, channel, note, velocity uint8) {
m.msg[0], m.msg[1], m.msg[2], m.msg[3] = (cable&0xf<<4)|0x9, 0x90|(channel&0xf), note&0x7f, velocity&0x7f
m.Write(m.msg[:])
}
// NoteOff sends a note off message.
func (m *midi) NoteOff(cable, channel, note, velocity uint8) {
m.msg[0], m.msg[1], m.msg[2], m.msg[3] = (cable&0xf<<4)|0x8, 0x80|(channel&0xf), note&0x7f, velocity&0x7f
m.Write(m.msg[:])
}
// SendCC sends a continuous controller message.
func (m *midi) SendCC(cable, channel, control, value uint8) {
m.msg[0], m.msg[1], m.msg[2], m.msg[3] = (cable&0xf<<4)|0xB, 0xB0|(channel&0xf), control&0x7f, value&0x7f
m.Write(m.msg[:])
}

Просмотреть файл

@ -12,6 +12,7 @@ const (
var Midi *midi var Midi *midi
type midi struct { type midi struct {
msg [4]byte
buf *RingBuffer buf *RingBuffer
rxHandler func([]byte) rxHandler func([]byte)
waitTxc bool waitTxc bool