feat(tracker): make shift + left/right take 1 octace / 12 semitone steps in oscillator transpose

Closes #37
This commit is contained in:
vsariola 2021-04-12 19:25:11 +03:00
parent b4705c941f
commit 68a50247bd
2 changed files with 21 additions and 10 deletions

View File

@ -296,7 +296,10 @@ func (t *Tracker) KeyEvent(w *app.Window, e key.Event) bool {
case tracker.EditParameters: case tracker.EditParameters:
param, _ := t.Param(t.ParamIndex()) param, _ := t.Param(t.ParamIndex())
if e.Modifiers.Contain(key.ModShift) { if e.Modifiers.Contain(key.ModShift) {
t.SetParam(param.Value - 16) p, err := t.Param(t.ParamIndex())
if err == nil {
t.SetParam(param.Value - p.LargeStep)
}
} else { } else {
t.SetParam(param.Value - 1) t.SetParam(param.Value - 1)
} }
@ -330,7 +333,10 @@ func (t *Tracker) KeyEvent(w *app.Window, e key.Event) bool {
case tracker.EditParameters: case tracker.EditParameters:
param, _ := t.Param(t.ParamIndex()) param, _ := t.Param(t.ParamIndex())
if e.Modifiers.Contain(key.ModShift) { if e.Modifiers.Contain(key.ModShift) {
t.SetParam(param.Value + 16) p, err := t.Param(t.ParamIndex())
if err == nil {
t.SetParam(param.Value + p.LargeStep)
}
} else { } else {
t.SetParam(param.Value + 1) t.SetParam(param.Value + 1)
} }

View File

@ -42,12 +42,13 @@ type Model struct {
} }
type Parameter struct { type Parameter struct {
Type ParameterType Type ParameterType
Name string Name string
Hint string Hint string
Value int Value int
Min int Min int
Max int Max int
LargeStep int
} }
type EditMode int type EditMode int
@ -842,7 +843,11 @@ func (m *Model) Param(index int) (Parameter, error) {
typ = IDParameter typ = IDParameter
} }
} }
return Parameter{Type: typ, Min: min, Max: max, Name: name, Hint: text, Value: val}, nil largeStep := 16
if unit.Type == "oscillator" && t.Name == "transpose" {
largeStep = 12
}
return Parameter{Type: typ, Min: min, Max: max, Name: name, Hint: text, Value: val, LargeStep: largeStep}, nil
} }
if unit.Type == "oscillator" && index == 0 { if unit.Type == "oscillator" && index == 0 {
key := vm.SampleOffset{Start: uint32(unit.Parameters["samplestart"]), LoopStart: uint16(unit.Parameters["loopstart"]), LoopLength: uint16(unit.Parameters["looplength"])} key := vm.SampleOffset{Start: uint32(unit.Parameters["samplestart"]), LoopStart: uint16(unit.Parameters["loopstart"]), LoopLength: uint16(unit.Parameters["looplength"])}
@ -873,7 +878,7 @@ func (m *Model) Param(index int) (Parameter, error) {
} else { } else {
text = fmt.Sprintf("%v / %.3f rows", val, float32(val)/float32(m.song.SamplesPerRow())) text = fmt.Sprintf("%v / %.3f rows", val, float32(val)/float32(m.song.SamplesPerRow()))
} }
return Parameter{Type: IntegerParameter, Min: 1, Max: 65535, Name: "delaytime", Hint: text, Value: val}, nil return Parameter{Type: IntegerParameter, Min: 1, Max: 65535, Name: "delaytime", Hint: text, Value: val, LargeStep: 256}, nil
} }
} }
return Parameter{}, errors.New("invalid parameter") return Parameter{}, errors.New("invalid parameter")