feat(tracker): add support for a MIDI controller to the standalone tracker

Closes #132.
This commit is contained in:
Alexander Kraus
2024-10-14 13:08:20 +02:00
committed by 5684185+vsariola@users.noreply.github.com
parent 9779beee99
commit 577265b250
7 changed files with 165 additions and 15 deletions

View File

@ -15,19 +15,9 @@ import (
"github.com/vsariola/sointu/oto"
"github.com/vsariola/sointu/tracker"
"github.com/vsariola/sointu/tracker/gioui"
"github.com/vsariola/sointu/tracker/gomidi"
)
type NullContext struct {
}
func (NullContext) NextEvent() (event tracker.MIDINoteEvent, ok bool) {
return tracker.MIDINoteEvent{}, false
}
func (NullContext) BPM() (bpm float64, ok bool) {
return 0, false
}
type PlayerAudioSource struct {
*tracker.Player
playerProcessContext tracker.PlayerProcessContext
@ -64,6 +54,8 @@ func main() {
recoveryFile = filepath.Join(configDir, "Sointu", "sointu-track-recovery")
}
model, player := tracker.NewModelPlayer(cmd.MainSynther, recoveryFile)
model.MIDI = gomidi.CreateContext()
defer model.MIDI.DestroyContext()
if a := flag.Args(); len(a) > 0 {
f, err := os.Open(a[0])
if err == nil {
@ -72,7 +64,7 @@ func main() {
f.Close()
}
tracker := gioui.NewTracker(model)
audioCloser := audioContext.Play(&PlayerAudioSource{player, NullContext{}})
audioCloser := audioContext.Play(&PlayerAudioSource{player, model.MIDI})
go func() {
tracker.Main()
audioCloser.Close()