mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
fix(tracker): autofix malformed songs with useless params
This commit is contained in:
parent
773655ef9c
commit
5c51932f60
@ -14,6 +14,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
the command line tools.
|
||||
|
||||
### Fixed
|
||||
- If units have useless parameters in their parameter maps, from bugs or from a
|
||||
malformed yaml file, they are removed and user is warned about it
|
||||
- Pressing a or 1 when editing note values in hex mode created a note off line
|
||||
([#162][i162])
|
||||
- Warn about plugin sample rate being different from 44100 only after
|
||||
|
@ -225,6 +225,7 @@ func (m *Model) change(kind string, t ChangeType, severity ChangeSeverity) func(
|
||||
}
|
||||
if m.changeType&PatchChange != 0 {
|
||||
m.fixIDCollisions()
|
||||
m.fixUnitParams()
|
||||
m.d.InstrIndex = clamp(m.d.InstrIndex, 0, len(m.d.Song.Patch)-1)
|
||||
m.d.InstrIndex2 = clamp(m.d.InstrIndex2, 0, len(m.d.Song.Patch)-1)
|
||||
unitCount := 0
|
||||
@ -481,6 +482,36 @@ func (m *Model) fixIDCollisions() {
|
||||
}
|
||||
}
|
||||
|
||||
var validParameters = map[string](map[string]bool){}
|
||||
|
||||
func init() {
|
||||
for name, unitType := range sointu.UnitTypes {
|
||||
validParameters[name] = map[string]bool{}
|
||||
for _, param := range unitType {
|
||||
validParameters[name][param.Name] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Model) fixUnitParams() {
|
||||
// loop over all instruments and units and check that unit parameter table
|
||||
// only has the parameters that are defined in the unit type
|
||||
fixed := false
|
||||
for i, instr := range m.d.Song.Patch {
|
||||
for j, unit := range instr.Units {
|
||||
for paramName := range unit.Parameters {
|
||||
if !validParameters[unit.Type][paramName] {
|
||||
delete(m.d.Song.Patch[i].Units[j].Parameters, paramName)
|
||||
fixed = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if fixed {
|
||||
m.Alerts().AddNamed("InvalidUnitParameters", "Some units had invalid parameters, they were removed", Error)
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Model) updatePatternUseCount() {
|
||||
for i, track := range m.d.Song.Score.Tracks {
|
||||
for len(m.cachePatternUseCount) <= i {
|
||||
|
@ -289,6 +289,9 @@ func FuzzModel(f *testing.F) {
|
||||
if a.Name == "IDCollision" {
|
||||
t.Errorf("Path: %s Model has ID collisions", totalPath)
|
||||
}
|
||||
if a.Name == "InvalidUnitParameters" {
|
||||
t.Errorf("Path: %s Model units with invalid parameters", totalPath)
|
||||
}
|
||||
})
|
||||
}
|
||||
closeChan <- struct{}{}
|
||||
|
Loading…
Reference in New Issue
Block a user