mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"gioui.org/app"
|
|
"github.com/vsariola/sointu/cmd"
|
|
"github.com/vsariola/sointu/oto"
|
|
"github.com/vsariola/sointu/tracker"
|
|
"github.com/vsariola/sointu/tracker/gioui"
|
|
)
|
|
|
|
type NullContext struct {
|
|
}
|
|
|
|
func (NullContext) NextEvent() (event tracker.PlayerProcessEvent, ok bool) {
|
|
return tracker.PlayerProcessEvent{}, false
|
|
}
|
|
|
|
func (NullContext) BPM() (bpm float64, ok bool) {
|
|
return 0, false
|
|
}
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
audioContext, err := oto.NewContext()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
defer audioContext.Close()
|
|
modelMessages := make(chan interface{}, 1024)
|
|
playerMessages := make(chan tracker.PlayerMessage, 1024)
|
|
model, err := tracker.LoadRecovery(modelMessages, playerMessages)
|
|
if err != nil {
|
|
model = tracker.NewModel(modelMessages, playerMessages)
|
|
}
|
|
player := tracker.NewPlayer(cmd.DefaultService, playerMessages, modelMessages)
|
|
tracker := gioui.NewTracker(model, cmd.DefaultService)
|
|
output := audioContext.Output()
|
|
defer output.Close()
|
|
go func() {
|
|
buf := make([]float32, 2048)
|
|
ctx := NullContext{}
|
|
for {
|
|
player.Process(buf, ctx)
|
|
output.WriteAudio(buf)
|
|
}
|
|
}()
|
|
go func() {
|
|
tracker.Main()
|
|
os.Exit(0)
|
|
}()
|
|
app.Main()
|
|
}
|