diff --git a/cmd/sointu-track/main.go b/cmd/sointu-track/main.go index fc63b02..66a6347 100644 --- a/cmd/sointu-track/main.go +++ b/cmd/sointu-track/main.go @@ -53,9 +53,8 @@ func main() { if configDir, err := os.UserConfigDir(); err == nil { recoveryFile = filepath.Join(configDir, "Sointu", "sointu-track-recovery") } - model, player := tracker.NewModelPlayer(cmd.MainSynther, recoveryFile) midiContext := gomidi.NewContext() - model.MIDI = midiContext + model, player := tracker.NewModelPlayer(cmd.MainSynther, midiContext, recoveryFile) defer model.MIDI.Close() if a := flag.Args(); len(a) > 0 { f, err := os.Open(a[0]) diff --git a/cmd/sointu-vsti/main.go b/cmd/sointu-vsti/main.go index fc64264..74b5b46 100644 --- a/cmd/sointu-vsti/main.go +++ b/cmd/sointu-vsti/main.go @@ -27,11 +27,11 @@ type ( NullMIDIContext struct{} ) -func (m *NullMIDIContext) ListInputDevices() func(yield func(tracker.MIDIDevice) bool) { +func (m NullMIDIContext) ListInputDevices() func(yield func(tracker.MIDIDevice) bool) { return func(yield func(tracker.MIDIDevice) bool) {} } -func (m *NullMIDIContext) Close() {} +func (m NullMIDIContext) Close() {} func (c *VSTIProcessContext) NextEvent() (event tracker.MIDINoteEvent, ok bool) { for c.eventIndex < len(c.events) { @@ -72,8 +72,7 @@ func init() { rand.Read(randBytes) recoveryFile = filepath.Join(configDir, "sointu", "sointu-vsti-recovery-"+hex.EncodeToString(randBytes)) } - model, player := tracker.NewModelPlayer(cmd.MainSynther, recoveryFile) - model.MIDI = &NullMIDIContext{} + model, player := tracker.NewModelPlayer(cmd.MainSynther, NullMIDIContext{}, recoveryFile) t := gioui.NewTracker(model) tracker.Bool{BoolData: (*tracker.InstrEnlarged)(model)}.Set(true) diff --git a/tracker/model.go b/tracker/model.go index 7c833f2..4e4c1e8 100644 --- a/tracker/model.go +++ b/tracker/model.go @@ -175,9 +175,10 @@ func (m *Model) Dialog() Dialog { return m.dialog } func (m *Model) Quitted() bool { return m.quitted } // NewModelPlayer creates a new model and a player that communicates with it -func NewModelPlayer(synther sointu.Synther, recoveryFilePath string) (*Model, *Player) { +func NewModelPlayer(synther sointu.Synther, midiContext MIDIContext, recoveryFilePath string) (*Model, *Player) { m := new(Model) m.synther = synther + m.MIDI = midiContext modelMessages := make(chan interface{}, 1024) playerMessages := make(chan PlayerMsg, 1024) m.modelMessages = modelMessages