web-tuner/config.go

54 lines
1.2 KiB
Go

package main
import (
"encoding/json"
"fmt"
"os"
)
type Config struct {
Instrument string `json:"instrument"`
Tuning []string `json:"tuning"`
Frets int `json:"frets"`
MaxFingers int `json:"max_fingers"`
BaselineShift int `json:"baseline_shift"`
RangeDown int `json:"range_down"`
RangeUp int `json:"range_up"`
}
func LoadConfig(path string) (Config, error) {
var cfg Config
data, err := os.ReadFile(path)
if err != nil {
return cfg, err
}
err = json.Unmarshal(data, &cfg)
return cfg, err
}
func SaveConfig(path string, cfg Config) error {
data, err := json.MarshalIndent(cfg, "", " ")
if err != nil {
return err
}
return os.WriteFile(path, data, 0644)
}
func ValidateConfig(cfg Config) error {
if len(cfg.Tuning) == 0 {
return fmt.Errorf("tuning must have at least one string")
}
for _, note := range cfg.Tuning {
if _, ok := NoteToSemitone[note]; !ok {
return fmt.Errorf("invalid note: %s", note)
}
}
if cfg.Frets < 1 || cfg.Frets > 24 {
return fmt.Errorf("frets must be between 1 and 24")
}
if cfg.MaxFingers < 1 || cfg.MaxFingers > 6 {
return fmt.Errorf("max fingers must be between 1 and 6")
}
return nil
}