Files
muse/schema/song_schema.go

43 lines
1.3 KiB
Go

package schema
// A simple song with tracks that loop
type Song struct {
Name string `yaml:"name"`
BPM int `yaml:"bpm"`
Length int `yaml:"length"` // Total length in bars
Volume float64 `yaml:"volume"`
Tracks []Track `yaml:"tracks"`
}
// A simple instrument track that can loop or play once
type Track struct {
Name string `yaml:"name"`
Instrument string `yaml:"instrument"` // sine, square, saw, triangle
Volume float64 `yaml:"volume"`
Pan float64 `yaml:"pan"` // -1.0 to 1.0
Pattern []string `yaml:"pattern"` // Pattern like ["C4", ".", "E4", "."]
Loop bool `yaml:"loop,omitempty"` // If true, pattern loops. If false, plays once then silence
Effects []Effect `yaml:"effects,omitempty"` // Effects applied to this track
}
// Defines an audio effect
type Effect struct {
Type string `yaml:"type"` // reverb, delay, filter, etc.
Params map[string]interface{} `yaml:"params"` // Effect-specific parameters
}
// Returns the song length in beats (bars * 4)
func (s *Song) CalculateTotalLength() float64 {
return float64(s.Length * 4) // 4 beats per bar
}
// Returns a song with default values
func DefaultSong() Song {
return Song{
Name: "New Song",
BPM: 120,
Length: 8, // 8 bars default
Volume: 0.7,
}
}