mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
feat(tracker): add rudimentary GUI for adjusting delay times
This commit is contained in:
parent
3e7064e166
commit
e46ece3648
2
go.mod
2
go.mod
@ -3,7 +3,7 @@ module github.com/vsariola/sointu
|
||||
go 1.15
|
||||
|
||||
require (
|
||||
gioui.org v0.0.0-20210201160312-bb56b8183c84
|
||||
gioui.org v0.0.0-20210301085932-857143370701
|
||||
github.com/Masterminds/goutils v1.1.0 // indirect
|
||||
github.com/Masterminds/semver v1.5.0 // indirect
|
||||
github.com/Masterminds/sprig v2.22.0+incompatible
|
||||
|
4
go.sum
4
go.sum
@ -1,6 +1,6 @@
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
gioui.org v0.0.0-20210201160312-bb56b8183c84 h1:legrGmmVL4FObz/D6sekGrFcrSZISML76QE29cyIArk=
|
||||
gioui.org v0.0.0-20210201160312-bb56b8183c84/go.mod h1:Y+uS7hHMvku1Q+ooaoq6fYD5B2LGoT8JtFgvmYmRzTw=
|
||||
gioui.org v0.0.0-20210301085932-857143370701 h1:0Pkwt4IMdpX0Y2EnekPx9VeA5EfSw9LsYiFlKyBtBIw=
|
||||
gioui.org v0.0.0-20210301085932-857143370701/go.mod h1:Y+uS7hHMvku1Q+ooaoq6fYD5B2LGoT8JtFgvmYmRzTw=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg=
|
||||
github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
|
||||
|
@ -3,6 +3,7 @@ package tracker
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@ -765,6 +766,12 @@ func (m *Model) NumParams() int {
|
||||
if numSettableParams == 0 {
|
||||
numSettableParams = 1
|
||||
}
|
||||
if unit.Type == "delay" {
|
||||
numSettableParams += 1 + len(unit.VarArgs)
|
||||
if len(unit.VarArgs)%2 == 1 && unit.Parameters["stereo"] == 1 {
|
||||
numSettableParams++
|
||||
}
|
||||
}
|
||||
return numSettableParams
|
||||
}
|
||||
|
||||
@ -814,6 +821,28 @@ func (m *Model) Param(index int) (Parameter, error) {
|
||||
}
|
||||
return Parameter{Type: IntegerParameter, Min: 0, Max: len(GmDlsEntries), Name: "sample", Hint: hint, Value: val}, nil
|
||||
}
|
||||
if unit.Type == "delay" {
|
||||
if index == 0 {
|
||||
l := len(unit.VarArgs)
|
||||
if unit.Parameters["stereo"] == 1 {
|
||||
l = (l + 1) / 2
|
||||
}
|
||||
return Parameter{Type: IntegerParameter, Min: 1, Max: 32, Name: "delaylines", Hint: strconv.Itoa(l), Value: l}, nil
|
||||
}
|
||||
index--
|
||||
if index < len(unit.VarArgs) {
|
||||
val := unit.VarArgs[index]
|
||||
var text string
|
||||
if unit.Parameters["notetracking"] == 1 {
|
||||
relPitch := float64(val) / 10787
|
||||
semitones := -math.Log2(relPitch) * 12
|
||||
text = fmt.Sprintf("%v / %.3f st", val, semitones)
|
||||
} else {
|
||||
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{}, errors.New("invalid parameter")
|
||||
}
|
||||
|
||||
@ -832,11 +861,30 @@ func (m *Model) SetParam(value int) {
|
||||
return
|
||||
}
|
||||
unit := m.Unit()
|
||||
if p.Name == "delaylines" {
|
||||
m.saveUndo("SetParam", 20)
|
||||
targetLines := value
|
||||
if unit.Parameters["stereo"] == 1 {
|
||||
targetLines *= 2
|
||||
}
|
||||
for len(m.Instrument().Units[m.unitIndex].VarArgs) < targetLines {
|
||||
m.Instrument().Units[m.unitIndex].VarArgs = append(m.Instrument().Units[m.unitIndex].VarArgs, 1)
|
||||
}
|
||||
m.Instrument().Units[m.unitIndex].VarArgs = m.Instrument().Units[m.unitIndex].VarArgs[:targetLines]
|
||||
} else if p.Name == "delaytime" {
|
||||
m.saveUndo("SetParam", 20)
|
||||
index := m.paramIndex - 7
|
||||
for len(m.Instrument().Units[m.unitIndex].VarArgs) <= index {
|
||||
m.Instrument().Units[m.unitIndex].VarArgs = append(m.Instrument().Units[m.unitIndex].VarArgs, 1)
|
||||
}
|
||||
m.Instrument().Units[m.unitIndex].VarArgs[index] = value
|
||||
} else {
|
||||
if unit.Parameters[p.Name] == value {
|
||||
return
|
||||
}
|
||||
m.saveUndo("SetParam", 20)
|
||||
unit.Parameters[p.Name] = value
|
||||
}
|
||||
m.clampPositions()
|
||||
m.notifyPatchChange()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user