sointu/tracker/presets.go
5684185+vsariola@users.noreply.github.com ce7c8a0d3e feat(tracker): add menu to load instrument presets
The presets are embedded in the executable, so there's no additional files.

Closes #91
2023-10-01 18:54:50 +03:00

52 lines
809 B
Go

package tracker
import (
"embed"
"io/fs"
"sort"
"github.com/vsariola/sointu"
"gopkg.in/yaml.v3"
)
type PresetList []sointu.Instrument
//go:embed presets/*
var presetFS embed.FS
var Presets PresetList
func init() {
fs.WalkDir(presetFS, ".", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() {
return nil
}
data, err := fs.ReadFile(presetFS, path)
if err != nil {
return nil
}
var instr sointu.Instrument
if yaml.Unmarshal(data, &instr) != nil {
return nil
}
Presets = append(Presets, instr)
return nil
})
sort.Sort(Presets)
}
func (p PresetList) Len() int {
return len(p)
}
func (p PresetList) Less(i, j int) bool {
return p[i].Name < p[j].Name
}
func (p PresetList) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}