feat!: display the parameters as knobs in a grid

Also removed the negbandpass & neghighpass parameters
and replaced them with bandpass & highpass set to -1, to
fit the switches better to the GUI.

Closes #51, closes #173
This commit is contained in:
2025-07-08 19:47:32 +03:00
parent c3caa8de11
commit 666af9433e
116 changed files with 3663 additions and 2049 deletions
+8 -10
View File
@@ -320,7 +320,7 @@ func read4klangVCO(vals [15]byte, version int) []Unit {
func read4klangVCF(vals [15]byte, _ int) []Unit { func read4klangVCF(vals [15]byte, _ int) []Unit {
flags := vals[2] flags := vals[2]
var stereo, lowpass, bandpass, highpass, neghighpass int var stereo, lowpass, bandpass, highpass int
if flags&0x01 == 0x01 { if flags&0x01 == 0x01 {
lowpass = 1 lowpass = 1
} }
@@ -332,7 +332,7 @@ func read4klangVCF(vals [15]byte, _ int) []Unit {
} }
if flags&0x08 == 0x08 { if flags&0x08 == 0x08 {
lowpass = 1 lowpass = 1
neghighpass = 1 highpass = -1
} }
if flags&0x10 == 0x10 { if flags&0x10 == 0x10 {
stereo = 1 stereo = 1
@@ -340,14 +340,12 @@ func read4klangVCF(vals [15]byte, _ int) []Unit {
return []Unit{{ return []Unit{{
Type: "filter", Type: "filter",
Parameters: map[string]int{ Parameters: map[string]int{
"stereo": stereo, "stereo": stereo,
"frequency": int(vals[0]), "frequency": int(vals[0]),
"resonance": int(vals[1]), "resonance": int(vals[1]),
"lowpass": lowpass, "lowpass": lowpass,
"bandpass": bandpass, "bandpass": bandpass,
"highpass": highpass, "highpass": highpass,
"negbandpass": 0,
"neghighpass": neghighpass,
}}, }},
} }
} }
+14
View File
@@ -5,6 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased] ## [Unreleased]
### Added ### Added
- Signal rail that visualizes what happens in the stack, shown on the left side
of each unit in the rack.
- The parameters are now displayed in a grid as knobs, with units of the
instrument going from the top to the bottom. Bezier lines are used to indicate
which sends modulate which ports. ([#173][i173])
- Tabbing works more consistently, with widgets placed in a "tree", and plain - Tabbing works more consistently, with widgets placed in a "tree", and plain
Tab moves to the next widget on the same level or more shallow in the tree, Tab moves to the next widget on the same level or more shallow in the tree,
while ctrl-Tab moves to next widget, regardless of its depth. This allows the while ctrl-Tab moves to next widget, regardless of its depth. This allows the
@@ -104,6 +109,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
([#156][i156]) ([#156][i156])
### Changed ### Changed
- Send amount defaults to 64 = 0.0 ([#178][i178])
- BREAKING CHANGE: the negbandpass and neghighpass parameters of the filter unit
were removed. Setting bandpass or highpass to -1 achieves now the same end
result. Setting both negbandpass and bandpass to 1 was previously a no-op. Old
patch and instrument files are converted to the new format when loaded, but
newer Sointu files should not be compiled with an old version of
sointu-compile.
- The maximum number of delaylines in the native synth was increased to 128, - The maximum number of delaylines in the native synth was increased to 128,
with slight increase in memory usage ([#155][i155]) with slight increase in memory usage ([#155][i155])
- The numeric updown widget has a new appearance. - The numeric updown widget has a new appearance.
@@ -342,7 +354,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
[i166]: https://github.com/vsariola/sointu/issues/166 [i166]: https://github.com/vsariola/sointu/issues/166
[i168]: https://github.com/vsariola/sointu/issues/168 [i168]: https://github.com/vsariola/sointu/issues/168
[i170]: https://github.com/vsariola/sointu/issues/170 [i170]: https://github.com/vsariola/sointu/issues/170
[i173]: https://github.com/vsariola/sointu/issues/173
[i176]: https://github.com/vsariola/sointu/issues/176 [i176]: https://github.com/vsariola/sointu/issues/176
[i178]: https://github.com/vsariola/sointu/issues/178
[i186]: https://github.com/vsariola/sointu/issues/186 [i186]: https://github.com/vsariola/sointu/issues/186
[i192]: https://github.com/vsariola/sointu/issues/192 [i192]: https://github.com/vsariola/sointu/issues/192
[i196]: https://github.com/vsariola/sointu/issues/196 [i196]: https://github.com/vsariola/sointu/issues/196
+3 -3
View File
@@ -49,7 +49,7 @@ patch:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 10 id: 10
parameters: {bandpass: 0, frequency: 0, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 58, stereo: 0} parameters: {bandpass: 0, frequency: 0, highpass: 0, lowpass: 1, resonance: 58, stereo: 0}
- type: delay - type: delay
id: 4 id: 4
parameters: {damp: 0, dry: 128, feedback: 96, notetracking: 2, pregain: 40, stereo: 0} parameters: {damp: 0, dry: 128, feedback: 96, notetracking: 2, pregain: 40, stereo: 0}
@@ -87,7 +87,7 @@ patch:
parameters: {color: 59, detune: 73, gain: 35, phase: 26, shape: 70, stereo: 0, transpose: 57, type: 2, unison: 3} parameters: {color: 59, detune: 73, gain: 35, phase: 26, shape: 70, stereo: 0, transpose: 57, type: 2, unison: 3}
- type: filter - type: filter
id: 31 id: 31
parameters: {bandpass: 0, frequency: 37, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 60, stereo: 0} parameters: {bandpass: 0, frequency: 37, highpass: 0, lowpass: 1, resonance: 60, stereo: 0}
- type: mulp - type: mulp
id: 24 id: 24
parameters: {stereo: 0} parameters: {stereo: 0}
@@ -198,7 +198,7 @@ patch:
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: filter - type: filter
id: 76 id: 76
parameters: {bandpass: 0, frequency: 32, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 1} parameters: {bandpass: 0, frequency: 32, highpass: 0, lowpass: 1, resonance: 64, stereo: 1}
- type: outaux - type: outaux
id: 73 id: 73
parameters: {auxgain: 64, outgain: 64, stereo: 1} parameters: {auxgain: 64, outgain: 64, stereo: 1}
+2 -1
View File
@@ -6,7 +6,7 @@ toolchain go1.24.0
require ( require (
gioui.org v0.8.1-0.20250624114559-c3ce484b5e80 gioui.org v0.8.1-0.20250624114559-c3ce484b5e80
gioui.org/x v0.7.1 gioui.org/x v0.8.1
github.com/Masterminds/sprig v2.22.0+incompatible github.com/Masterminds/sprig v2.22.0+incompatible
github.com/ebitengine/oto/v3 v3.3.0 github.com/ebitengine/oto/v3 v3.3.0
github.com/viterin/vek v0.4.2 github.com/viterin/vek v0.4.2
@@ -23,6 +23,7 @@ require (
git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0 // indirect git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0 // indirect
github.com/Masterminds/goutils v1.1.0 // indirect github.com/Masterminds/goutils v1.1.0 // indirect
github.com/Masterminds/semver v1.5.0 // indirect github.com/Masterminds/semver v1.5.0 // indirect
github.com/andybalholm/stroke v0.0.0-20221221101821-bd29b49d73f0 // indirect
github.com/chewxy/math32 v1.11.1 // indirect github.com/chewxy/math32 v1.11.1 // indirect
github.com/ebitengine/purego v0.8.0 // indirect github.com/ebitengine/purego v0.8.0 // indirect
github.com/go-text/typesetting v0.3.0 // indirect github.com/go-text/typesetting v0.3.0 // indirect
+4
View File
@@ -9,6 +9,8 @@ gioui.org/shader v1.0.8 h1:6ks0o/A+b0ne7RzEqRZK5f4Gboz2CfG+mVliciy6+qA=
gioui.org/shader v1.0.8/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM= gioui.org/shader v1.0.8/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM=
gioui.org/x v0.7.1 h1:7bnQHsV7qB36tIUit2WDcUx4Cnmo+6T9I38B9brLQ7o= gioui.org/x v0.7.1 h1:7bnQHsV7qB36tIUit2WDcUx4Cnmo+6T9I38B9brLQ7o=
gioui.org/x v0.7.1/go.mod h1:5CzZ64oFpOaqb2kaMvj+QEr5T3nVuLKD0LizLH32ii0= gioui.org/x v0.7.1/go.mod h1:5CzZ64oFpOaqb2kaMvj+QEr5T3nVuLKD0LizLH32ii0=
gioui.org/x v0.8.1 h1:Q2wumEOfjz3XfRa3TEi6w7dq8+cxV8zsYK8xXQkrCRk=
gioui.org/x v0.8.1/go.mod h1:v2g60aiZtIVR7lNFXZ123+U0kijJeOChODSuqr7MFSI=
git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0 h1:bGG/g4ypjrCJoSvFrP5hafr9PPB5aw8SjcOWWila7ZI= git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0 h1:bGG/g4ypjrCJoSvFrP5hafr9PPB5aw8SjcOWWila7ZI=
git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0/go.mod h1:+axXBRUTIDlCeE73IKeD/os7LoEnTKdkp8/gQOFjqyo= git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0/go.mod h1:+axXBRUTIDlCeE73IKeD/os7LoEnTKdkp8/gQOFjqyo=
github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg=
@@ -17,6 +19,8 @@ github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3Q
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60=
github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
github.com/andybalholm/stroke v0.0.0-20221221101821-bd29b49d73f0 h1:uF5Q/hWnDU1XZeT6CsrRSxHLroUSEYYO3kgES+yd+So=
github.com/andybalholm/stroke v0.0.0-20221221101821-bd29b49d73f0/go.mod h1:ccdDYaY5+gO+cbnQdFxEXqfy0RkoV25H3jLXUDNM3wg=
github.com/chewxy/math32 v1.11.1 h1:b7PGHlp8KjylDoU8RrcEsRuGZhJuz8haxnKfuMMRqy8= github.com/chewxy/math32 v1.11.1 h1:b7PGHlp8KjylDoU8RrcEsRuGZhJuz8haxnKfuMMRqy8=
github.com/chewxy/math32 v1.11.1/go.mod h1:dOB2rcuFrCn6UHrze36WSLVPKtzPMRAQvBvUwkSsLqs= github.com/chewxy/math32 v1.11.1/go.mod h1:dOB2rcuFrCn6UHrze36WSLVPKtzPMRAQvBvUwkSsLqs=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+163 -52
View File
@@ -6,6 +6,8 @@ import (
"math" "math"
"sort" "sort"
"strconv" "strconv"
"gopkg.in/yaml.v3"
) )
type ( type (
@@ -39,7 +41,7 @@ type (
// an oscillator, unit.Type == "oscillator" and unit.Parameters["attack"] // an oscillator, unit.Type == "oscillator" and unit.Parameters["attack"]
// could be 64. Most parameters are either limites to 0 and 1 (e.g. stereo // could be 64. Most parameters are either limites to 0 and 1 (e.g. stereo
// parameters) or between 0 and 128, inclusive. // parameters) or between 0 and 128, inclusive.
Parameters map[string]int `yaml:",flow"` Parameters ParamMap `yaml:",flow"`
// VarArgs is a list containing the variable number arguments that some // VarArgs is a list containing the variable number arguments that some
// units require, most notably the DELAY units. For example, for a DELAY // units require, most notably the DELAY units. For example, for a DELAY
@@ -57,16 +59,26 @@ type (
Comment string `yaml:",omitempty"` Comment string `yaml:",omitempty"`
} }
ParamMap map[string]int
// UnitParameter documents one parameter that an unit takes // UnitParameter documents one parameter that an unit takes
UnitParameter struct { UnitParameter struct {
Name string // thould be found with this name in the Unit.Parameters map Name string // thould be found with this name in the Unit.Parameters map
MinValue int // minimum value of the parameter, inclusive MinValue int // minimum value of the parameter, inclusive
MaxValue int // maximum value of the parameter, inclusive MaxValue int // maximum value of the parameter, inclusive
Neutral int // neutral value of the parameter
CanSet bool // if this parameter can be set before hand i.e. through the gui CanSet bool // if this parameter can be set before hand i.e. through the gui
CanModulate bool // if this parameter can be modulated i.e. has a port number in "send" unit CanModulate bool // if this parameter can be modulated i.e. has a port number in "send" unit
DisplayFunc UnitParameterDisplayFunc DisplayFunc UnitParameterDisplayFunc
} }
// StackUse documents how a unit will affect the signal stack.
StackUse struct {
Inputs [][]int // Inputs documents which inputs contribute to which outputs. len(Inputs) is the number of inputs. Each input can contribute to multiple outputs, so its a slice.
Modifies []bool // Modifies documents which of the (mixed) inputs are actually modified by the unit
NumOutputs int // NumOutputs is the number of outputs produced by the unit. This is used to determine how many outputs are needed for the unit.
}
UnitParameterDisplayFunc func(int) (value string, unit string) UnitParameterDisplayFunc func(int) (value string, unit string)
) )
@@ -83,7 +95,7 @@ var UnitTypes = map[string]([]UnitParameter){
"xch": []UnitParameter{{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}}, "xch": []UnitParameter{{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}},
"distort": []UnitParameter{ "distort": []UnitParameter{
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "drive", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}}, {Name: "drive", MinValue: 0, Neutral: 64, MaxValue: 128, CanSet: true, CanModulate: true}},
"hold": []UnitParameter{ "hold": []UnitParameter{
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "holdfreq", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}}, {Name: "holdfreq", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}},
@@ -98,20 +110,18 @@ var UnitTypes = map[string]([]UnitParameter){
{Name: "invgain", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}}, {Name: "invgain", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}},
"dbgain": []UnitParameter{ "dbgain": []UnitParameter{
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "decibels", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: func(v int) (string, string) { return formatFloat(40 * (float64(v)/64 - 1)), "dB" }}}, {Name: "decibels", MinValue: 0, Neutral: 64, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: func(v int) (string, string) { return formatFloat(40 * (float64(v)/64 - 1)), "dB" }}},
"filter": []UnitParameter{ "filter": []UnitParameter{
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "frequency", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: filterFrequencyDispFunc}, {Name: "frequency", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: filterFrequencyDispFunc},
{Name: "resonance", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}, {Name: "resonance", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true},
{Name: "lowpass", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "lowpass", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "bandpass", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "bandpass", MinValue: -1, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "highpass", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "highpass", MinValue: -1, MaxValue: 1, CanSet: true, CanModulate: false}},
{Name: "negbandpass", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "neghighpass", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}},
"clip": []UnitParameter{{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}}, "clip": []UnitParameter{{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}},
"pan": []UnitParameter{ "pan": []UnitParameter{
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "panning", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}}, {Name: "panning", MinValue: 0, Neutral: 64, MaxValue: 128, CanSet: true, CanModulate: true}},
"delay": []UnitParameter{ "delay": []UnitParameter{
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "pregain", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}, {Name: "pregain", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true},
@@ -145,8 +155,8 @@ var UnitTypes = map[string]([]UnitParameter){
{Name: "channel", MinValue: 0, MaxValue: 6, CanSet: true, CanModulate: false, DisplayFunc: arrDispFunc(channelNames[:])}}, {Name: "channel", MinValue: 0, MaxValue: 6, CanSet: true, CanModulate: false, DisplayFunc: arrDispFunc(channelNames[:])}},
"send": []UnitParameter{ "send": []UnitParameter{
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "amount", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: func(v int) (string, string) { return formatFloat(float64(v)/64 - 1), "" }}, {Name: "amount", MinValue: 0, Neutral: 64, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: func(v int) (string, string) { return formatFloat(float64(v)/64 - 1), "" }},
{Name: "voice", MinValue: 0, MaxValue: 32, CanSet: true, CanModulate: false}, {Name: "voice", MinValue: 0, MaxValue: 32, CanSet: true, CanModulate: false, DisplayFunc: sendVoiceDispFunc},
{Name: "target", MinValue: 0, MaxValue: math.MaxInt32, CanSet: true, CanModulate: false}, {Name: "target", MinValue: 0, MaxValue: math.MaxInt32, CanSet: true, CanModulate: false},
{Name: "port", MinValue: 0, MaxValue: 7, CanSet: true, CanModulate: false}, {Name: "port", MinValue: 0, MaxValue: 7, CanSet: true, CanModulate: false},
{Name: "sendpop", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}}, {Name: "sendpop", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}},
@@ -159,15 +169,15 @@ var UnitTypes = map[string]([]UnitParameter){
{Name: "gain", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}}, {Name: "gain", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}},
"noise": []UnitParameter{ "noise": []UnitParameter{
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "shape", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}, {Name: "shape", MinValue: 0, Neutral: 64, MaxValue: 128, CanSet: true, CanModulate: true},
{Name: "gain", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}}, {Name: "gain", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}},
"oscillator": []UnitParameter{ "oscillator": []UnitParameter{
{Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false}, {Name: "stereo", MinValue: 0, MaxValue: 1, CanSet: true, CanModulate: false},
{Name: "transpose", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: oscillatorTransposeDispFunc}, {Name: "transpose", MinValue: 0, Neutral: 64, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: oscillatorTransposeDispFunc},
{Name: "detune", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: func(v int) (string, string) { return formatFloat(float64(v-64) / 64), "st" }}, {Name: "detune", MinValue: 0, Neutral: 64, MaxValue: 128, CanSet: true, CanModulate: true, DisplayFunc: func(v int) (string, string) { return formatFloat(float64(v-64) / 64), "st" }},
{Name: "phase", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}, {Name: "phase", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true},
{Name: "color", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}, {Name: "color", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true},
{Name: "shape", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}, {Name: "shape", MinValue: 0, Neutral: 64, MaxValue: 128, CanSet: true, CanModulate: true},
{Name: "gain", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true}, {Name: "gain", MinValue: 0, MaxValue: 128, CanSet: true, CanModulate: true},
{Name: "frequency", MinValue: 0, MaxValue: -1, CanSet: false, CanModulate: true}, {Name: "frequency", MinValue: 0, MaxValue: -1, CanSet: false, CanModulate: true},
{Name: "type", MinValue: int(Sine), MaxValue: int(Sample), CanSet: true, CanModulate: false, DisplayFunc: arrDispFunc(oscTypes[:])}, {Name: "type", MinValue: int(Sine), MaxValue: int(Sample), CanSet: true, CanModulate: false, DisplayFunc: arrDispFunc(oscTypes[:])},
@@ -189,6 +199,30 @@ var UnitTypes = map[string]([]UnitParameter){
"sync": []UnitParameter{}, "sync": []UnitParameter{},
} }
// compile errors if interface is not implemented.
var _ yaml.Unmarshaler = &ParamMap{}
func (a *ParamMap) UnmarshalYAML(value *yaml.Node) error {
var m map[string]int
if err := value.Decode(&m); err != nil {
return err
}
// Backwards compatibility hack: if the patch was saved with an older
// version of Sointu, it might have used the negbandpass and neghighpass
// parameters, which now correspond to having bandpass as value -1 and
// highpass as value -1.
if n, ok := m["negbandpass"]; ok {
m["bandpass"] = m["bandpass"] - n
delete(m, "negbandpass")
}
if n, ok := m["neghighpass"]; ok {
m["highpass"] = m["highpass"] - n
delete(m, "neghighpass")
}
*a = m
return nil
}
var channelNames = [...]string{"left", "right", "aux1 left", "aux1 right", "aux2 left", "aux2 right", "aux3 left", "aux3 right"} var channelNames = [...]string{"left", "right", "aux1 left", "aux1 right", "aux2 left", "aux2 right", "aux3 left", "aux3 right"}
var noteTrackingNames = [...]string{"fixed", "pitch", "BPM"} var noteTrackingNames = [...]string{"fixed", "pitch", "BPM"}
var oscTypes = [...]string{"sine", "trisaw", "pulse", "gate", "sample"} var oscTypes = [...]string{"sine", "trisaw", "pulse", "gate", "sample"}
@@ -231,12 +265,17 @@ func compressorTimeDispFunc(v int) (string, string) {
func oscillatorTransposeDispFunc(v int) (string, string) { func oscillatorTransposeDispFunc(v int) (string, string) {
relvalue := v - 64 relvalue := v - 64
octaves := relvalue / 12 if relvalue%12 == 0 {
semitones := relvalue % 12 return strconv.Itoa(relvalue / 12), "oct"
if semitones == 0 {
return strconv.Itoa(octaves), "oct"
} }
return strconv.Itoa(semitones), "st" return strconv.Itoa(relvalue), "st"
}
func sendVoiceDispFunc(v int) (string, string) {
if v == 0 {
return "default", ""
}
return strconv.Itoa(v), ""
} }
func engineeringTime(sec float64) (string, string) { func engineeringTime(sec float64) (string, string) {
@@ -304,6 +343,103 @@ func (u *Unit) Copy() Unit {
return Unit{Type: u.Type, Parameters: parameters, VarArgs: varArgs, ID: u.ID, Disabled: u.Disabled, Comment: u.Comment} return Unit{Type: u.Type, Parameters: parameters, VarArgs: varArgs, ID: u.ID, Disabled: u.Disabled, Comment: u.Comment}
} }
var stackUseSource = [2]StackUse{
{Inputs: [][]int{}, Modifies: []bool{true}, NumOutputs: 1}, // mono
{Inputs: [][]int{}, Modifies: []bool{true, true}, NumOutputs: 2}, // stereo
}
var stackUseSink = [2]StackUse{
{Inputs: [][]int{{0}}, Modifies: []bool{true}, NumOutputs: 0}, // mono
{Inputs: [][]int{{0}, {1}}, Modifies: []bool{true, true}, NumOutputs: 0}, // stereo
}
var stackUseEffect = [2]StackUse{
{Inputs: [][]int{{0}}, Modifies: []bool{true}, NumOutputs: 1}, // mono
{Inputs: [][]int{{0}, {1}}, Modifies: []bool{true, true}, NumOutputs: 2}, // stereo
}
var stackUseMonoStereo = map[string][2]StackUse{
"add": {
{Inputs: [][]int{{0, 1}, {1}}, Modifies: []bool{false, true}, NumOutputs: 2},
{Inputs: [][]int{{0, 2}, {1, 3}, {2}, {3}}, Modifies: []bool{false, false, true, true}, NumOutputs: 4},
},
"mul": {
{Inputs: [][]int{{0, 1}, {1}}, Modifies: []bool{false, true}, NumOutputs: 2},
{Inputs: [][]int{{0, 2}, {1, 3}, {2}, {3}}, Modifies: []bool{false, false, true, true}, NumOutputs: 4},
},
"addp": {
{Inputs: [][]int{{0}, {0}}, Modifies: []bool{true}, NumOutputs: 1},
{Inputs: [][]int{{0}, {1}, {0}, {1}}, Modifies: []bool{true, true}, NumOutputs: 2},
},
"mulp": {
{Inputs: [][]int{{0}, {0}}, Modifies: []bool{true}, NumOutputs: 1},
{Inputs: [][]int{{0}, {1}, {0}, {1}}, Modifies: []bool{true, true}, NumOutputs: 2},
},
"xch": {
{Inputs: [][]int{{1}, {0}}, Modifies: []bool{false, false}, NumOutputs: 2},
{Inputs: [][]int{{2}, {3}, {0}, {1}}, Modifies: []bool{false, false, false, false}, NumOutputs: 4},
},
"push": {
{Inputs: [][]int{{0, 1}}, Modifies: []bool{false, false}, NumOutputs: 2},
{Inputs: [][]int{{0, 2}, {1, 3}}, Modifies: []bool{false, false, false, false}, NumOutputs: 4},
},
"pop": stackUseSink,
"envelope": stackUseSource,
"oscillator": stackUseSource,
"noise": stackUseSource,
"loadnote": stackUseSource,
"loadval": stackUseSource,
"receive": stackUseSource,
"in": stackUseSource,
"out": stackUseSink,
"outaux": stackUseSink,
"aux": stackUseSink,
"distort": stackUseEffect,
"hold": stackUseEffect,
"crush": stackUseEffect,
"gain": stackUseEffect,
"invgain": stackUseEffect,
"dbgain": stackUseEffect,
"filter": stackUseEffect,
"clip": stackUseEffect,
"delay": stackUseEffect,
"compressor": {
{Inputs: [][]int{{0, 1}}, Modifies: []bool{false, true}, NumOutputs: 2}, // mono
{Inputs: [][]int{{0, 2, 3}, {1, 2, 3}}, Modifies: []bool{false, false, true, true}, NumOutputs: 4}, // stereo
},
"pan": {
{Inputs: [][]int{{0, 1}}, Modifies: []bool{true, true}, NumOutputs: 2}, // mono
{Inputs: [][]int{{0}, {1}}, Modifies: []bool{true, true}, NumOutputs: 2}, // mono
},
"speed": {
{Inputs: [][]int{{0}}, Modifies: []bool{true}, NumOutputs: 0},
{},
},
"sync": {
{Inputs: [][]int{{0}}, Modifies: []bool{false}, NumOutputs: 0},
{},
},
}
var stackUseSendNoPop = [2]StackUse{
{Inputs: [][]int{{0}}, Modifies: []bool{true}, NumOutputs: 1},
{Inputs: [][]int{{0}, {1}}, Modifies: []bool{true, true}, NumOutputs: 2},
}
var stackUseSendPop = [2]StackUse{
{Inputs: [][]int{{0}}, Modifies: []bool{true}, NumOutputs: 0}, // mono
{Inputs: [][]int{{0}, {1}}, Modifies: []bool{true, true}, NumOutputs: 0}, // stereo
}
func (u *Unit) StackUse() StackUse {
if u.Disabled {
return StackUse{}
}
if u.Type == "send" {
// "send" unit is special, it has a different stack use depending on sendpop
if u.Parameters["sendpop"] == 0 {
return stackUseSendNoPop[u.Parameters["stereo"]]
}
return stackUseSendPop[u.Parameters["stereo"]]
}
return stackUseMonoStereo[u.Type][u.Parameters["stereo"]]
}
// StackChange returns how this unit will affect the signal stack. "pop" and // StackChange returns how this unit will affect the signal stack. "pop" and
// "addp" and such will consume the topmost signal, and thus return -1 (or -2, // "addp" and such will consume the topmost signal, and thus return -1 (or -2,
// if the unit is a stereo unit). On the other hand, "oscillator" and "envelope" // if the unit is a stereo unit). On the other hand, "oscillator" and "envelope"
@@ -311,40 +447,15 @@ func (u *Unit) Copy() Unit {
// unit). Effects that just change the topmost signal and will not change the // unit). Effects that just change the topmost signal and will not change the
// number of signals on the stack and thus return 0. // number of signals on the stack and thus return 0.
func (u *Unit) StackChange() int { func (u *Unit) StackChange() int {
if u.Disabled { s := u.StackUse()
return 0 return s.NumOutputs - len(s.Inputs)
}
switch u.Type {
case "addp", "mulp", "pop", "out", "outaux", "aux":
return -1 - u.Parameters["stereo"]
case "envelope", "oscillator", "push", "noise", "receive", "loadnote", "loadval", "in", "compressor":
return 1 + u.Parameters["stereo"]
case "pan":
return 1 - u.Parameters["stereo"]
case "speed":
return -1
case "send":
return (-1 - u.Parameters["stereo"]) * u.Parameters["sendpop"]
}
return 0
} }
// StackNeed returns the number of signals that should be on the stack before // StackNeed returns the number of signals that should be on the stack before
// this unit is executed. Used to prevent stack underflow. Units producing // this unit is executed. Used to prevent stack underflow. Units producing
// signals do not care what is on the stack before and will return 0. // signals do not care what is on the stack before and will return 0.
func (u *Unit) StackNeed() int { func (u *Unit) StackNeed() int {
if u.Disabled { return len(u.StackUse().Inputs)
return 0
}
switch u.Type {
case "", "envelope", "oscillator", "noise", "receive", "loadnote", "loadval", "in":
return 0
case "mulp", "mul", "add", "addp", "xch":
return 2 * (1 + u.Parameters["stereo"])
case "speed":
return 1
}
return 1 + u.Parameters["stereo"]
} }
// Copy makes a deep copy of an Instrument // Copy makes a deep copy of an Instrument
@@ -465,19 +576,19 @@ func (p Patch) FindUnit(id int) (instrIndex int, unitIndex int, err error) {
return 0, 0, fmt.Errorf("could not find a unit with id %v", id) return 0, 0, fmt.Errorf("could not find a unit with id %v", id)
} }
func FindParamForModulationPort(unitName string, index int) (UnitParameter, bool) { func FindParamForModulationPort(unitName string, index int) (up UnitParameter, upIndex int, ok bool) {
unitType, ok := UnitTypes[unitName] unitType, ok := UnitTypes[unitName]
if !ok { if !ok {
return UnitParameter{}, false return UnitParameter{}, 0, false
} }
for _, param := range unitType { for i, param := range unitType {
if !param.CanModulate { if !param.CanModulate {
continue continue
} }
if index == 0 { if index == 0 {
return param, true return param, i, true
} }
index-- index--
} }
return UnitParameter{}, false return UnitParameter{}, 0, false
} }
+2 -2
View File
@@ -19,12 +19,12 @@ patch:
- type: mulp - type: mulp
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
parameters: {bandpass: 1, frequency: 32, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 32, highpass: 1, lowpass: 1, resonance: 128, stereo: 0}
- type: delay - type: delay
parameters: {damp: 16, dry: 128, feedback: 128, notetracking: 1, pregain: 128, stereo: 0} parameters: {damp: 16, dry: 128, feedback: 128, notetracking: 1, pregain: 128, stereo: 0}
varargs: [10787] varargs: [10787]
- type: filter - type: filter
parameters: {bandpass: 1, frequency: 24, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 24, highpass: 1, lowpass: 1, resonance: 128, stereo: 0}
- type: mulp - type: mulp
parameters: {stereo: 0} parameters: {stereo: 0}
- type: pan - type: pan
+1 -1
View File
@@ -19,7 +19,7 @@ patch:
parameters: {gain: 64, shape: 64, stereo: 0} parameters: {gain: 64, shape: 64, stereo: 0}
- type: filter - type: filter
id: 12 id: 12
parameters: {bandpass: 0, frequency: 39, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 39, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: delay - type: delay
id: 11 id: 11
parameters: {damp: 0, dry: 71, feedback: 114, notetracking: 1, pregain: 128, stereo: 0} parameters: {damp: 0, dry: 71, feedback: 114, notetracking: 1, pregain: 128, stereo: 0}
+1 -1
View File
@@ -17,7 +17,7 @@ patch:
- type: mulp - type: mulp
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
parameters: {bandpass: 1, frequency: 32, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 0} parameters: {bandpass: 1, frequency: 32, highpass: 0, lowpass: 0, resonance: 64, stereo: 0}
- type: pan - type: pan
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: out - type: out
+1 -1
View File
@@ -17,7 +17,7 @@ patch:
- type: mulp - type: mulp
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
parameters: {bandpass: 1, frequency: 32, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 0} parameters: {bandpass: 1, frequency: 32, highpass: 0, lowpass: 0, resonance: 64, stereo: 0}
id: 1 id: 1
- type: pan - type: pan
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+1 -1
View File
@@ -17,7 +17,7 @@ patch:
- type: mulp - type: mulp
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
parameters: {bandpass: 0, frequency: 32, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 0} parameters: {bandpass: 0, frequency: 32, highpass: 1, lowpass: 0, resonance: 64, stereo: 0}
- type: pan - type: pan
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: out - type: out
+1 -1
View File
@@ -17,7 +17,7 @@ patch:
- type: mulp - type: mulp
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
parameters: {bandpass: 0, frequency: 32, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 0} parameters: {bandpass: 0, frequency: 32, highpass: 0, lowpass: 1, resonance: 64, stereo: 0}
- type: pan - type: pan
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: out - type: out
+1 -1
View File
@@ -17,7 +17,7 @@ patch:
- type: mulp - type: mulp
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
parameters: {bandpass: 0, frequency: 32, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 64, stereo: 0} parameters: {bandpass: 0, frequency: 32, highpass: -1, lowpass: 1, resonance: 64, stereo: 0}
- type: pan - type: pan
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: out - type: out
+1 -1
View File
@@ -17,7 +17,7 @@ patch:
- type: mulp - type: mulp
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
parameters: {bandpass: 1, frequency: 32, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 0} parameters: {bandpass: 1, frequency: 32, highpass: 0, lowpass: 0, resonance: 64, stereo: 0}
id: 1 id: 1
- type: pan - type: pan
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+1 -1
View File
@@ -19,6 +19,6 @@ patch:
- type: pan - type: pan
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: filter - type: filter
parameters: {bandpass: 1, frequency: 32, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 1} parameters: {bandpass: 1, frequency: 32, highpass: 0, lowpass: 0, resonance: 64, stereo: 1}
- type: out - type: out
parameters: {gain: 128, stereo: 1} parameters: {gain: 128, stereo: 1}
+54 -8
View File
@@ -93,6 +93,16 @@ type (
*Model *Model
} }
ShowLicense Model ShowLicense Model
ChooseSendSource struct {
ID int
*Model
}
ChooseSendTarget struct {
ID int
Port int
*Model
}
) )
// Action methods // Action methods
@@ -298,8 +308,7 @@ func (m *Undo) Do() {
m.d = m.undoStack[len(m.undoStack)-1] m.d = m.undoStack[len(m.undoStack)-1]
m.undoStack = m.undoStack[:len(m.undoStack)-1] m.undoStack = m.undoStack[:len(m.undoStack)-1]
m.prevUndoKind = "" m.prevUndoKind = ""
(*Model)(m).updateDerivedScoreData() (*Model)(m).updateDeriveData(SongChange)
(*Model)(m).updateDerivedPatchData()
TrySend(m.broker.ToPlayer, any(m.d.Song.Copy())) TrySend(m.broker.ToPlayer, any(m.d.Song.Copy()))
} }
@@ -316,30 +325,29 @@ func (m *Redo) Do() {
m.d = m.redoStack[len(m.redoStack)-1] m.d = m.redoStack[len(m.redoStack)-1]
m.redoStack = m.redoStack[:len(m.redoStack)-1] m.redoStack = m.redoStack[:len(m.redoStack)-1]
m.prevUndoKind = "" m.prevUndoKind = ""
(*Model)(m).updateDerivedScoreData() (*Model)(m).updateDeriveData(SongChange)
(*Model)(m).updateDerivedPatchData()
TrySend(m.broker.ToPlayer, any(m.d.Song.Copy())) TrySend(m.broker.ToPlayer, any(m.d.Song.Copy()))
} }
// AddSemiTone // AddSemiTone
func (m *Model) AddSemitone() Action { return MakeEnabledAction((*AddSemitone)(m)) } func (m *Model) AddSemitone() Action { return MakeEnabledAction((*AddSemitone)(m)) }
func (m *AddSemitone) Do() { Table{(*Notes)(m)}.Add(1) } func (m *AddSemitone) Do() { Table{(*Notes)(m)}.Add(1, false) }
// SubtractSemitone // SubtractSemitone
func (m *Model) SubtractSemitone() Action { return MakeEnabledAction((*SubtractSemitone)(m)) } func (m *Model) SubtractSemitone() Action { return MakeEnabledAction((*SubtractSemitone)(m)) }
func (m *SubtractSemitone) Do() { Table{(*Notes)(m)}.Add(-1) } func (m *SubtractSemitone) Do() { Table{(*Notes)(m)}.Add(-1, false) }
// AddOctave // AddOctave
func (m *Model) AddOctave() Action { return MakeEnabledAction((*AddOctave)(m)) } func (m *Model) AddOctave() Action { return MakeEnabledAction((*AddOctave)(m)) }
func (m *AddOctave) Do() { Table{(*Notes)(m)}.Add(12) } func (m *AddOctave) Do() { Table{(*Notes)(m)}.Add(1, true) }
// SubtractOctave // SubtractOctave
func (m *Model) SubtractOctave() Action { return MakeEnabledAction((*SubtractOctave)(m)) } func (m *Model) SubtractOctave() Action { return MakeEnabledAction((*SubtractOctave)(m)) }
func (m *SubtractOctave) Do() { Table{(*Notes)(m)}.Add(-12) } func (m *SubtractOctave) Do() { Table{(*Notes)(m)}.Add(-1, true) }
// EditNoteOff // EditNoteOff
@@ -517,6 +525,44 @@ func (d DeleteOrderRow) Do() {
m.d.Cursor2.OrderRow = m.d.Cursor.OrderRow m.d.Cursor2.OrderRow = m.d.Cursor.OrderRow
} }
// ChooseSendSource
func (m *Model) IsChoosingSendTarget() bool {
return m.d.SendSource > 0
}
func (m *Model) ChooseSendSource(id int) Action {
return MakeEnabledAction(ChooseSendSource{ID: id, Model: m})
}
func (s ChooseSendSource) Do() {
defer (*Model)(s.Model).change("ChooseSendSource", NoChange, MinorChange)()
if s.Model.d.SendSource == s.ID {
s.Model.d.SendSource = 0 // unselect
return
}
s.Model.d.SendSource = s.ID
}
// ChooseSendTarget
func (m *Model) ChooseSendTarget(id int, port int) Action {
return MakeEnabledAction(ChooseSendTarget{ID: id, Port: port, Model: m})
}
func (s ChooseSendTarget) Do() {
defer (*Model)(s.Model).change("ChooseSendTarget", SongChange, MinorChange)()
sourceID := (*Model)(s.Model).d.SendSource
s.d.SendSource = 0
if sourceID <= 0 || s.ID <= 0 || s.Port < 0 || s.Port > 7 {
return
}
si, su, err := s.d.Song.Patch.FindUnit(sourceID)
if err != nil {
return
}
s.d.Song.Patch[si].Units[su].Parameters["target"] = s.ID
s.d.Song.Patch[si].Units[su].Parameters["port"] = s.Port
}
// NewSong // NewSong
func (m *Model) NewSong() Action { return MakeEnabledAction((*NewSong)(m)) } func (m *Model) NewSong() Action { return MakeEnabledAction((*NewSong)(m)) }
+265 -245
View File
@@ -2,235 +2,175 @@ package tracker
import ( import (
"fmt" "fmt"
"iter"
"slices"
"github.com/vsariola/sointu" "github.com/vsariola/sointu"
) )
type ( type (
Rail struct {
PassThrough int
Send bool
StackUse sointu.StackUse
}
Wire struct {
From int
FromSet bool
To Point
ToSet bool
Hint string
Highlight bool
}
RailError struct {
InstrIndex, UnitIndex int
Err error
}
// derivedModelData contains useful information derived from the modelData, // derivedModelData contains useful information derived from the modelData,
// cached for performance and/or easy access. This needs to be updated when // cached for performance and/or easy access. This needs to be updated when
// corresponding part of the model changes. // corresponding part of the model changes.
derivedModelData struct { derivedModelData struct {
// map Unit by ID, other entities by their respective index // map Unit by ID, other entities by their respective index
forUnit map[int]derivedForUnit patch []derivedInstrument
forTrack []derivedForTrack tracks []derivedTrack
forPattern []derivedForPattern railError RailError
} }
derivedForUnit struct { derivedInstrument struct {
unit sointu.Unit wires []Wire
instrument sointu.Instrument rails []Rail
instrumentIndex int railWidth int
unitIndex int params [][]Parameter
paramsWidth int
// map param by Name
forParameter map[string]derivedForParameter
} }
derivedForParameter struct { derivedTrack struct {
sendTooltip string title string
sendSources []sendSourceData patternUseCounts []int
}
sendSourceData struct {
unitId int
paramName string
amount int
instrumentIndex int
instrumentName string
}
derivedForTrack struct {
instrumentRange []int
tracksWithSameInstrument []int
title string
}
derivedForPattern struct {
useCount []int
} }
) )
// public access functions // public methods to access the derived data
func (m *Model) UnitInfo(id int) (instrName string, units []sointu.Unit, unitIndex int, ok bool) { func (s *Model) RailError() RailError { return s.derived.railError }
fu, ok := m.derived.forUnit[id]
return fu.instrument.Name, fu.instrument.Units, fu.unitIndex, ok func (s *Model) RailWidth() int {
i := s.d.InstrIndex
if i < 0 || i >= len(s.derived.patch) {
return 0
}
return s.derived.patch[i].railWidth
} }
func (m *Model) UnitHintInfo(id int) (instrIndex int, unitType string, ok bool) { func (m *Model) Wires(yield func(wire Wire) bool) {
fu, ok := m.derived.forUnit[id] i := m.d.InstrIndex
return fu.instrumentIndex, fu.unit.Type, ok if i < 0 || i >= len(m.derived.patch) {
} return
func (m *Model) ParameterInfo(unitId int, paramName string) (tooltip string, ok bool) {
du, ok1 := m.derived.forUnit[unitId]
if !ok1 {
return "", false
} }
dp, ok2 := du.forParameter[paramName] for _, wire := range m.derived.patch[i].wires {
if !ok2 { wire.Highlight = (wire.FromSet && m.d.UnitIndex == wire.From) || (wire.ToSet && m.d.UnitIndex == wire.To.Y && m.d.ParamIndex == wire.To.X)
return "", false if !yield(wire) {
return
}
} }
return dp.sendTooltip, len(dp.sendSources) > 0
} }
func (m *Model) TrackTitle(index int) string { func (m *Model) TrackTitle(index int) string {
if index < 0 || index >= len(m.derived.forTrack) { if index < 0 || index >= len(m.derived.tracks) {
return "" return ""
} }
return m.derived.forTrack[index].title return m.derived.tracks[index].title
} }
func (m *Model) PatternUnique(track, pat int) bool { func (m *Model) PatternUnique(track, pat int) bool {
if track < 0 || track >= len(m.derived.forPattern) { if track < 0 || track >= len(m.derived.tracks) {
return false return false
} }
forPattern := m.derived.forPattern[track] if pat < 0 || pat >= len(m.derived.tracks[track].patternUseCounts) {
if pat < 0 || pat >= len(forPattern.useCount) {
return false return false
} }
return forPattern.useCount[pat] == 1 return m.derived.tracks[track].patternUseCounts[pat] <= 1
} }
// public getters with further model information func (e *RailError) Error() string { return e.Err.Error() }
func (m *Model) TracksWithSameInstrumentAsCurrent() []int { func (s *Rail) StackAfter() int { return s.PassThrough + s.StackUse.NumOutputs }
currentTrack := m.d.Cursor.Track
if currentTrack >= len(m.derived.forTrack) {
return nil
}
return m.derived.forTrack[currentTrack].tracksWithSameInstrument
}
func (m *Model) CountNextTracksForCurrentInstrument() int {
currentTrack := m.d.Cursor.Track
count := 0
for t := range m.TracksWithSameInstrumentAsCurrent() {
if t > currentTrack {
count++
}
}
return count
}
// init / update methods // init / update methods
func (m *Model) initDerivedData() { func (m *Model) updateDeriveData(changeType ChangeType) {
m.derived = derivedModelData{ setSliceLength(&m.derived.tracks, len(m.d.Song.Score.Tracks))
forUnit: make(map[int]derivedForUnit), if changeType&ScoreChange != 0 {
forTrack: make([]derivedForTrack, 0), for index, track := range m.d.Song.Score.Tracks {
forPattern: make([]derivedForPattern, 0), m.derived.tracks[index].patternUseCounts = m.buildPatternUseCounts(track)
}
} }
m.updateDerivedScoreData() if changeType&ScoreChange != 0 || changeType&PatchChange != 0 {
m.updateDerivedPatchData() for index := range m.d.Song.Score.Tracks {
} m.derived.tracks[index].title = m.buildTrackTitle(index)
}
func (m *Model) updateDerivedScoreData() { }
m.derived.forTrack = m.derived.forTrack[:0] setSliceLength(&m.derived.patch, len(m.d.Song.Patch))
m.derived.forPattern = m.derived.forPattern[:0] if changeType&PatchChange != 0 {
for index, track := range m.d.Song.Score.Tracks { m.updateParams()
firstInstr, lastInstr, _ := m.instrumentRangeFor(index) m.updateRails()
m.derived.forTrack = append( m.updateWires()
m.derived.forTrack,
derivedForTrack{
instrumentRange: []int{firstInstr, lastInstr},
tracksWithSameInstrument: slices.Collect(m.tracksWithSameInstrument(index)),
title: m.buildTrackTitle(index),
},
)
m.derived.forPattern = append(
m.derived.forPattern,
derivedForPattern{
useCount: m.calcPatternUseCounts(track),
},
)
} }
} }
func (m *Model) updateDerivedPatchData() { func (m *Model) updateParams() {
clear(m.derived.forUnit)
for i, instr := range m.d.Song.Patch { for i, instr := range m.d.Song.Patch {
for u, unit := range instr.Units { setSliceLength(&m.derived.patch[i].params, len(instr.Units))
m.derived.forUnit[unit.ID] = derivedForUnit{ paramsWidth := 0
unit: unit, for u := range instr.Units {
unitIndex: u, p := m.deriveParams(&instr.Units[u], m.derived.patch[i].params[u])
instrument: instr, m.derived.patch[i].params[u] = p
instrumentIndex: i, paramsWidth = max(paramsWidth, len(p))
forParameter: make(map[string]derivedForParameter),
}
m.updateDerivedParameterData(unit)
} }
m.derived.patch[i].paramsWidth = paramsWidth
} }
} }
func (m *Model) updateDerivedParameterData(unit sointu.Unit) { func (m *Model) deriveParams(unit *sointu.Unit, ret []Parameter) []Parameter {
fu := m.derived.forUnit[unit.ID] ret = ret[:0] // reset the slice
for name := range fu.unit.Parameters { unitType, ok := sointu.UnitTypes[unit.Type]
sendSources := slices.Collect(m.collectSendSources(unit, name)) if !ok {
fu.forParameter[name] = derivedForParameter{ return ret
sendSources: sendSources, }
sendTooltip: m.buildSendTargetTooltip(fu.instrumentIndex, sendSources), portIndex := 0
for i, up := range unitType {
if !up.CanSet && !up.CanModulate {
continue // skip parameters that cannot be set or modulated
}
if unit.Type == "oscillator" && unit.Parameters["type"] != sointu.Sample && (up.Name == "samplestart" || up.Name == "loopstart" || up.Name == "looplength") {
continue // don't show the sample related params unless necessary
}
if unit.Type == "send" && up.Name == "port" {
continue
}
q := 0
if up.CanModulate {
portIndex++
q = portIndex
}
ret = append(ret, Parameter{m: m, unit: unit, up: &unitType[i], vtable: &namedParameter{}, port: q})
}
if unit.Type == "oscillator" && unit.Parameters["type"] == sointu.Sample {
ret = append(ret, Parameter{m: m, unit: unit, vtable: &gmDlsEntryParameter{}})
}
if unit.Type == "delay" {
if unit.Parameters["stereo"] == 1 && len(unit.VarArgs)%2 == 1 {
unit.VarArgs = append(unit.VarArgs, 1)
}
ret = append(ret,
Parameter{m: m, unit: unit, vtable: &reverbParameter{}},
Parameter{m: m, unit: unit, vtable: &delayLinesParameter{}})
for i := range unit.VarArgs {
ret = append(ret, Parameter{m: m, unit: unit, index: i, vtable: &delayTimeParameter{}})
} }
} }
} return ret
// internals...
func (m *Model) collectSendSources(unit sointu.Unit, paramName string) iter.Seq[sendSourceData] {
return func(yield func(sendSourceData) bool) {
for i, instr := range m.d.Song.Patch {
for _, u := range instr.Units {
if u.Type != "send" {
continue
}
targetId, ok := u.Parameters["target"]
if !ok || targetId != unit.ID {
continue
}
port := u.Parameters["port"]
unitParam, ok := sointu.FindParamForModulationPort(unit.Type, port)
if !ok || unitParam.Name != paramName {
continue
}
sourceData := sendSourceData{
unitId: u.ID,
paramName: paramName,
instrumentIndex: i,
instrumentName: instr.Name,
amount: u.Parameters["amount"],
}
if !yield(sourceData) {
return
}
}
}
}
}
func (m *Model) buildSendTargetTooltip(ownInstrIndex int, sendSources []sendSourceData) string {
if len(sendSources) == 0 {
return ""
}
amounts := ""
for _, sendSource := range sendSources {
sourceInfo := ""
if sendSource.instrumentIndex != ownInstrIndex {
sourceInfo = fmt.Sprintf(" from \"%s\"", sendSource.instrumentName)
}
if amounts == "" {
amounts = fmt.Sprintf("x %d%s", sendSource.amount, sourceInfo)
} else {
amounts = fmt.Sprintf("%s, x %d%s", amounts, sendSource.amount, sourceInfo)
}
}
count := "1 send"
if len(sendSources) > 1 {
count = fmt.Sprintf("%d sends", len(sendSources))
}
return fmt.Sprintf("%s [%s]", count, amounts)
} }
func (m *Model) instrumentRangeFor(trackIndex int) (int, int, error) { func (m *Model) instrumentRangeFor(trackIndex int) (int, int, error) {
@@ -251,86 +191,166 @@ func (m *Model) instrumentRangeFor(trackIndex int) (int, int, error) {
return firstIndex, lastIndex, nil return firstIndex, lastIndex, nil
} }
func (m *Model) buildTrackTitle(track int) (title string) { func (m *Model) buildTrackTitle(track int) string {
title = "?"
if track < 0 || track >= len(m.d.Song.Score.Tracks) { if track < 0 || track >= len(m.d.Song.Score.Tracks) {
return return "?"
} }
firstIndex, lastIndex, err := m.instrumentRangeFor(track) firstIndex, lastIndex, err := m.instrumentRangeFor(track)
if err != nil { if err != nil {
return return "?"
} }
switch diff := lastIndex - firstIndex; diff { switch diff := lastIndex - firstIndex; diff {
case 0: case 0:
title = m.d.Song.Patch[firstIndex].Name return nilIsQuestionMark(m.d.Song.Patch[firstIndex].Name)
case 1:
return fmt.Sprintf("%s/%s",
nilIsQuestionMark(m.d.Song.Patch[firstIndex].Name),
nilIsQuestionMark(m.d.Song.Patch[firstIndex+1].Name))
default: default:
n1 := m.d.Song.Patch[firstIndex].Name return fmt.Sprintf("%s/%s/...",
n2 := m.d.Song.Patch[firstIndex+1].Name nilIsQuestionMark(m.d.Song.Patch[firstIndex].Name),
if len(n1) > 0 { nilIsQuestionMark(m.d.Song.Patch[firstIndex+1].Name))
n1 = string(n1[0])
} else {
n1 = "?"
}
if len(n2) > 0 {
n2 = string(n2[0])
} else {
n2 = "?"
}
if diff > 1 {
title = n1 + "/" + n2 + "..."
} else {
title = n1 + "/" + n2
}
}
return
}
func (m *Model) instrumentForTrack(trackIndex int) (int, bool) {
voiceIndex := m.d.Song.Score.FirstVoiceForTrack(trackIndex)
instrument, err := m.d.Song.Patch.InstrumentForVoice(voiceIndex)
return instrument, err == nil
}
func (m *Model) tracksWithSameInstrument(trackIndex int) iter.Seq[int] {
return func(yield func(int) bool) {
currentInstrument, currentExists := m.instrumentForTrack(trackIndex)
if !currentExists {
return
}
for i := 0; i < len(m.d.Song.Score.Tracks); i++ {
instrument, exists := m.instrumentForTrack(i)
if !exists {
return
}
if instrument != currentInstrument {
continue
}
if !yield(i) {
return
}
}
} }
} }
func (m *Model) calcPatternUseCounts(track sointu.Track) []int { func nilIsQuestionMark(s string) string {
result := make([]int, len(m.d.Song.Score.Tracks)) if len(s) == 0 {
for j := range result { return "?"
result[j] = 0
} }
for j := 0; j < m.d.Song.Score.Length; j++ { return s
if j >= len(track.Order) { }
break
func (m *Model) buildPatternUseCounts(track sointu.Track) []int {
result := make([]int, 0, len(track.Patterns))
for j := range min(len(track.Order), m.d.Song.Score.Length) {
if p := track.Order[j]; p >= 0 {
for len(result) <= p {
result = append(result, 0)
}
result[p]++
} }
p := track.Order[j]
for len(result) <= p {
result = append(result, 0)
}
if p < 0 {
continue
}
result[p]++
} }
return result return result
} }
func (m *Model) updateRails() {
type stackElem struct{ instr, unit int }
scratchArray := [32]stackElem{}
scratch := scratchArray[:0]
m.derived.railError = RailError{}
for i, instr := range m.d.Song.Patch {
setSliceLength(&m.derived.patch[i].rails, len(instr.Units))
start := len(scratch)
maxWidth := 0
for u, unit := range instr.Units {
stackUse := unit.StackUse()
numInputs := len(stackUse.Inputs)
if len(scratch) < numInputs {
if m.derived.railError == (RailError{}) {
m.derived.railError = RailError{
InstrIndex: i,
UnitIndex: u,
Err: fmt.Errorf("%s unit in instrument %d / %s needs %d inputs, but got only %d", unit.Type, i, instr.Name, numInputs, len(scratch)),
}
}
scratch = scratch[:0]
} else {
scratch = scratch[:len(scratch)-numInputs]
}
m.derived.patch[i].rails[u] = Rail{
PassThrough: len(scratch),
StackUse: stackUse,
Send: !unit.Disabled && unit.Type == "send",
}
maxWidth = max(maxWidth, len(scratch)+max(len(stackUse.Inputs), stackUse.NumOutputs))
for range stackUse.NumOutputs {
scratch = append(scratch, stackElem{instr: i, unit: u})
}
}
m.derived.patch[i].railWidth = maxWidth
diff := len(scratch) - start
if instr.NumVoices > 1 && diff != 0 {
if diff < 0 {
morepop := (instr.NumVoices - 1) * diff
if morepop > len(scratch) {
if m.derived.railError == (RailError{}) {
m.derived.railError = RailError{
InstrIndex: i,
UnitIndex: -1,
Err: fmt.Errorf("each voice of instrument %d / %s consumes %d signals, but there was not enough signals available", i, instr.Name, -diff),
}
}
scratch = scratch[:0]
} else {
scratch = scratch[:len(scratch)-morepop]
}
} else {
for range (instr.NumVoices - 1) * diff {
scratch = append(scratch, scratch[len(scratch)-diff])
}
}
}
}
if len(scratch) > 0 && m.derived.railError == (RailError{}) {
patch := m.d.Song.Patch
m.derived.railError = RailError{
InstrIndex: scratch[0].instr,
UnitIndex: scratch[0].unit,
Err: fmt.Errorf("instrument %d / %s unit %d / %s leaves a signal on stack", scratch[0].instr, patch[scratch[0].instr].Name, scratch[0].unit, patch[scratch[0].instr].Units[scratch[0].unit].Type),
}
}
if m.derived.railError.Err != nil {
m.Alerts().AddNamed("RailError", m.derived.railError.Error(), Error)
}
}
func (m *Model) updateWires() {
for i := range m.d.Song.Patch {
m.derived.patch[i].wires = m.derived.patch[i].wires[:0] // reset the wires
}
for i, instr := range m.d.Song.Patch {
for u, unit := range instr.Units {
if unit.Disabled || unit.Type != "send" {
continue
}
tI, tU, err := m.d.Song.Patch.FindUnit(unit.Parameters["target"])
if err != nil {
continue
}
up, tX, ok := sointu.FindParamForModulationPort(m.d.Song.Patch[tI].Units[tU].Type, unit.Parameters["port"])
if !ok {
continue
}
if tI == i {
// local send
m.derived.patch[i].wires = append(m.derived.patch[i].wires, Wire{
From: u,
FromSet: true,
To: Point{X: tX, Y: tU},
ToSet: true,
})
} else {
// remote send
m.derived.patch[i].wires = append(m.derived.patch[i].wires, Wire{
From: u,
FromSet: true,
Hint: fmt.Sprintf("To instrument #%d (%s), unit #%d (%s), port %s", tI, m.d.Song.Patch[tI].Name, tU, m.d.Song.Patch[tI].Units[tU].Type, up.Name),
})
toPt := Point{X: tX, Y: tU}
hint := fmt.Sprintf("From instrument #%d (%s), send #%d", i, m.d.Song.Patch[i].Name, u)
for i, w := range m.derived.patch[tI].wires {
if !w.FromSet && w.ToSet && w.To == toPt {
m.derived.patch[tI].wires[i].Hint += "; " + hint
goto skipAppend
}
}
m.derived.patch[tI].wires = append(m.derived.patch[tI].wires, Wire{
To: toPt,
ToSet: true,
Hint: hint,
})
skipAppend:
}
}
}
}
+2
View File
@@ -111,6 +111,8 @@ func (s FilledDragListStyle) Layout(gtx C, element, bg func(gtx C, i int) D) D {
case key.FocusEvent: case key.FocusEvent:
if !ke.Focus { if !ke.Focus {
s.dragList.TrackerList.SetSelected2(s.dragList.TrackerList.Selected()) s.dragList.TrackerList.SetSelected2(s.dragList.TrackerList.Selected())
} else {
s.dragList.EnsureVisible(s.dragList.TrackerList.Selected())
} }
case key.Event: case key.Event:
if ke.State != key.Press { if ke.State != key.Press {
+3
View File
@@ -93,3 +93,6 @@
- { key: "P", action: "Note28" } - { key: "P", action: "Note28" }
- { key: "+", action: "Increase" } - { key: "+", action: "Increase" }
- { key: "-", action: "Decrease" } - { key: "-", action: "Decrease" }
- { key: "+", shortcut: true, action: "IncreaseMore" } # increase a large step
- { key: "-", shortcut: true, action: "DecreaseMore" } # decrease a large step
+3 -1
View File
@@ -120,7 +120,9 @@ func (oe *OrderEditor) Layout(gtx C) D {
table := FilledScrollTable(t.Theme, oe.scrollTable) table := FilledScrollTable(t.Theme, oe.scrollTable)
table.ColumnTitleHeight = orderTitleHeight table.ColumnTitleHeight = orderTitleHeight
return table.Layout(gtx, cell, colTitle, rowTitle, nil, rowTitleBg) return Surface{Gray: 24, Focus: oe.scrollTable.TreeFocused(gtx)}.Layout(gtx, func(gtx C) D {
return table.Layout(gtx, cell, colTitle, rowTitle, nil, rowTitleBg)
})
} }
func (oe *OrderEditor) handleEvents(gtx C, t *Tracker) { func (oe *OrderEditor) handleEvents(gtx C, t *Tracker) {
+428
View File
@@ -0,0 +1,428 @@
package gioui
import (
"image"
"image/color"
"math"
"strconv"
"gioui.org/f32"
"gioui.org/gesture"
"gioui.org/io/event"
"gioui.org/io/key"
"gioui.org/io/pointer"
"gioui.org/layout"
"gioui.org/op"
"gioui.org/op/clip"
"gioui.org/op/paint"
"gioui.org/unit"
"gioui.org/x/stroke"
"github.com/vsariola/sointu/tracker"
"golang.org/x/exp/shiny/materialdesign/icons"
)
type (
ParamState struct {
drag gesture.Drag
dragStartPt f32.Point // used to calculate the drag amount
dragStartVal int
tipArea TipArea
click gesture.Click
clickable Clickable
}
ParamWidget struct {
Parameter tracker.Parameter
State *ParamState
Theme *Theme
Focus bool
Disabled bool
}
PortStyle struct {
Diameter unit.Dp
StrokeWidth unit.Dp
Color color.NRGBA
}
PortWidget struct {
Theme *Theme
Style *PortStyle
State *ParamState
}
KnobStyle struct {
Diameter unit.Dp
StrokeWidth unit.Dp
Bg color.NRGBA
Pos struct {
Color color.NRGBA
Bg color.NRGBA
}
Neg struct {
Color color.NRGBA
Bg color.NRGBA
}
Indicator struct {
Color color.NRGBA
Width unit.Dp
InnerDiam unit.Dp
OuterDiam unit.Dp
}
Value LabelStyle
Title LabelStyle
}
KnobWidget struct {
Theme *Theme
Value tracker.Parameter
State *ParamState
Style *KnobStyle
Hint string
Scroll bool
}
SwitchStyle struct {
Neutral struct {
Fg color.NRGBA
Bg color.NRGBA
}
Pos struct {
Fg color.NRGBA
Bg color.NRGBA
}
Neg struct {
Fg color.NRGBA
Bg color.NRGBA
}
Width unit.Dp
Height unit.Dp
Outline unit.Dp
Handle unit.Dp
Icon unit.Dp
}
SwitchWidget struct {
Theme *Theme
Value tracker.Parameter
State *ParamState
Style *SwitchStyle
Hint string
Scroll bool
Disabled bool
}
)
// ParamState
func Param(Parameter tracker.Parameter, th *Theme, paramWidget *ParamState, focus, disabled bool) ParamWidget {
return ParamWidget{
Theme: th,
State: paramWidget,
Parameter: Parameter,
Focus: focus,
Disabled: disabled,
}
}
func (p ParamWidget) Layout(gtx C) D {
title := Label(p.Theme, &p.Theme.UnitEditor.Name, p.Parameter.Name())
t := TrackerFromContext(gtx)
widget := func(gtx C) D {
if port, ok := p.Parameter.Port(); t.IsChoosingSendTarget() && ok {
for p.State.clickable.Clicked(gtx) {
t.ChooseSendTarget(p.Parameter.UnitID(), port).Do()
}
k := Port(p.Theme, p.State)
return k.Layout(gtx)
}
switch p.Parameter.Type() {
case tracker.IntegerParameter:
k := Knob(p.Parameter, p.Theme, p.State, p.Parameter.Hint().Label, p.Focus, p.Disabled)
return k.Layout(gtx)
case tracker.BoolParameter:
s := Switch(p.Parameter, p.Theme, p.State, p.Parameter.Hint().Label, p.Focus, p.Disabled)
return s.Layout(gtx)
case tracker.IDParameter:
for p.State.clickable.Clicked(gtx) {
t.ChooseSendSource(p.Parameter.UnitID()).Do()
}
btn := Btn(t.Theme, &t.Theme.Button.Text, &p.State.clickable, "Set", p.Parameter.Hint().Label)
if p.Disabled {
btn.Style = &t.Theme.Button.Disabled
}
return btn.Layout(gtx)
}
if _, ok := p.Parameter.Port(); ok {
k := Port(p.Theme, p.State)
return k.Layout(gtx)
}
return D{}
}
title.Layout(gtx)
layout.Center.Layout(gtx, widget)
return D{Size: image.Pt(gtx.Constraints.Max.X, gtx.Constraints.Max.Y)}
}
func (s *ParamState) update(gtx C, param tracker.Parameter, scroll bool) {
for {
p, ok := s.drag.Update(gtx.Metric, gtx.Source, gesture.Both)
if !ok {
break
}
switch p.Kind {
case pointer.Press:
s.dragStartPt = p.Position
s.dragStartVal = param.Value()
case pointer.Drag:
// update the value based on the drag amount
m := param.Range()
d := p.Position.Sub(s.dragStartPt)
amount := float32(d.X-d.Y) / float32(gtx.Dp(128))
newValue := int(float32(s.dragStartVal) + amount*float32(m.Max-m.Min))
param.SetValue(newValue)
s.tipArea.Appear(gtx.Now)
}
}
for {
g, ok := s.click.Update(gtx.Source)
if !ok {
break
}
if g.Kind == gesture.KindClick && g.NumClicks > 1 {
param.Reset()
}
}
for scroll {
e, ok := gtx.Event(pointer.Filter{
Target: s,
Kinds: pointer.Scroll,
ScrollY: pointer.ScrollRange{Min: -1e6, Max: 1e6},
})
if !ok {
break
}
if ev, ok := e.(pointer.Event); ok && ev.Kind == pointer.Scroll {
delta := -int(math.Min(math.Max(float64(ev.Scroll.Y), -1), 1))
param.Add(delta, ev.Modifiers.Contain(key.ModShortcut))
s.tipArea.Appear(gtx.Now)
}
}
}
// KnobWidget
func Knob(v tracker.Parameter, th *Theme, state *ParamState, hint string, scroll, disabled bool) KnobWidget {
ret := KnobWidget{
Theme: th,
Value: v,
State: state,
Style: &th.Knob,
Hint: hint,
Scroll: scroll,
}
if disabled {
ret.Style = &th.DisabledKnob
}
return ret
}
func (k *KnobWidget) Layout(gtx C) D {
k.State.update(gtx, k.Value, k.Scroll)
knob := func(gtx C) D {
m := k.Value.Range()
amount := float32(k.Value.Value()-m.Min) / float32(m.Max-m.Min)
sw := gtx.Dp(k.Style.StrokeWidth)
d := gtx.Dp(k.Style.Diameter)
defer clip.Rect(image.Rectangle{Max: image.Pt(d, d)}).Push(gtx.Ops).Pop()
event.Op(gtx.Ops, k.State)
k.State.drag.Add(gtx.Ops)
k.State.click.Add(gtx.Ops)
middle := float32(k.Value.Neutral()-m.Min) / float32(m.Max-m.Min)
pos := max(amount, middle)
neg := min(amount, middle)
if middle > 0 {
k.strokeKnobArc(gtx, k.Style.Neg.Bg, sw, d, 0, neg)
}
if middle < 1 {
k.strokeKnobArc(gtx, k.Style.Pos.Bg, sw, d, pos, 1)
}
if pos > middle {
k.strokeKnobArc(gtx, k.Style.Pos.Color, sw, d, middle, pos)
}
if neg < middle {
k.strokeKnobArc(gtx, k.Style.Neg.Color, sw, d, neg, middle)
}
k.strokeIndicator(gtx, amount)
return D{Size: image.Pt(d, d)}
}
label := Label(k.Theme, &k.Style.Value, strconv.Itoa(k.Value.Value()))
w := func(gtx C) D {
return layout.Stack{Alignment: layout.Center}.Layout(gtx,
layout.Stacked(knob),
layout.Stacked(label.Layout))
}
if k.Hint != "" {
c := gtx.Constraints
gtx.Constraints.Max = image.Pt(1e6, 1e6)
return k.State.tipArea.Layout(gtx, Tooltip(k.Theme, k.Hint), func(gtx C) D {
gtx.Constraints = c
return w(gtx)
})
}
return w(gtx)
}
func (k *KnobWidget) strokeKnobArc(gtx C, color color.NRGBA, strokeWidth, diameter int, start, end float32) {
rad := float32(diameter) / 2
end = min(max(end, 0), 1)
if end <= 0 {
return
}
startAngle := float64((start*8 + 1) / 10 * 2 * math.Pi)
deltaAngle := (end - start) * 8 * math.Pi / 5
center := f32.Point{X: rad, Y: rad}
r2 := rad - float32(strokeWidth)/2
startPt := f32.Point{X: rad - r2*float32(math.Sin(startAngle)), Y: rad + r2*float32(math.Cos(startAngle))}
segments := [...]stroke.Segment{
stroke.MoveTo(startPt),
stroke.ArcTo(center, deltaAngle),
}
s := stroke.Stroke{
Path: stroke.Path{Segments: segments[:]},
Width: float32(strokeWidth),
Cap: stroke.FlatCap,
}
paint.FillShape(gtx.Ops, color, s.Op(gtx.Ops))
}
func (k *KnobWidget) strokeIndicator(gtx C, amount float32) {
innerRad := float32(gtx.Dp(k.Style.Indicator.InnerDiam)) / 2
outerRad := float32(gtx.Dp(k.Style.Indicator.OuterDiam)) / 2
center := float32(gtx.Dp(k.Style.Diameter)) / 2
angle := (float64(amount)*8 + 1) / 10 * 2 * math.Pi
start := f32.Point{
X: center - innerRad*float32(math.Sin(angle)),
Y: center + innerRad*float32(math.Cos(angle)),
}
end := f32.Point{
X: center - outerRad*float32(math.Sin(angle)),
Y: center + outerRad*float32(math.Cos(angle)),
}
segments := [...]stroke.Segment{
stroke.MoveTo(start),
stroke.LineTo(end),
}
s := stroke.Stroke{
Path: stroke.Path{Segments: segments[:]},
Width: float32(k.Style.Indicator.Width),
Cap: stroke.FlatCap,
}
paint.FillShape(gtx.Ops, k.Style.Indicator.Color, s.Op(gtx.Ops))
}
// SwitchWidget
func Switch(v tracker.Parameter, th *Theme, state *ParamState, hint string, scroll, disabled bool) SwitchWidget {
return SwitchWidget{
Theme: th,
Value: v,
State: state,
Style: &th.Switch,
Hint: hint,
Scroll: scroll,
Disabled: disabled,
}
}
func (s *SwitchWidget) Layout(gtx C) D {
s.State.update(gtx, s.Value, s.Scroll)
width := gtx.Dp(s.Style.Width)
height := gtx.Dp(s.Style.Height)
var fg, bg color.NRGBA
o := 0
switch {
case s.Disabled || s.Value.Value() == 0:
fg = s.Style.Neutral.Fg
bg = s.Style.Neutral.Bg
o = gtx.Dp(s.Style.Outline)
case s.Value.Value() < 0:
fg = s.Style.Neg.Fg
bg = s.Style.Neg.Bg
case s.Value.Value() > 0:
fg = s.Style.Pos.Fg
bg = s.Style.Pos.Bg
}
r := min(width, height) / 2
fillRoundRect := func(ops *op.Ops, rect image.Rectangle, r int, c color.NRGBA) {
defer clip.UniformRRect(rect, r).Push(ops).Pop()
paint.ColorOp{Color: c}.Add(ops)
paint.PaintOp{}.Add(ops)
}
if o > 0 {
fillRoundRect(gtx.Ops, image.Rect(0, 0, width, height), r, fg)
}
fillRoundRect(gtx.Ops, image.Rect(o, o, width-o, height-o), r-o, bg)
a := r
b := width - r
p := a + (b-a)*(s.Value.Value()-s.Value.Range().Min)/(s.Value.Range().Max-s.Value.Range().Min)
circle := func(x, y, r int) clip.Op {
b := image.Rectangle{
Min: image.Pt(x-r, y-r),
Max: image.Pt(x+r, y+r),
}
return clip.Ellipse(b).Op(gtx.Ops)
}
paint.FillShape(gtx.Ops, fg, circle(p, height/2, gtx.Dp(s.Style.Handle)/2))
defer clip.Rect(image.Rectangle{Max: image.Pt(width, height)}).Push(gtx.Ops).Pop()
event.Op(gtx.Ops, s.State)
s.State.drag.Add(gtx.Ops)
s.State.click.Add(gtx.Ops)
icon := icons.NavigationClose
if s.Value.Range().Min < 0 {
if s.Value.Value() < 0 {
icon = icons.ImageExposureNeg1
} else if s.Value.Value() > 0 {
icon = icons.ImageExposurePlus1
}
} else if s.Value.Value() > 0 {
icon = icons.NavigationCheck
}
w := s.Theme.Icon(icon)
i := gtx.Dp(s.Style.Icon)
defer op.Offset(image.Pt(p-i/2, (height-i)/2)).Push(gtx.Ops).Pop()
gtx.Constraints = layout.Exact(image.Pt(i, i))
w.Layout(gtx, bg)
return D{Size: image.Pt(width, height)}
}
//
func Port(t *Theme, p *ParamState) PortWidget {
return PortWidget{Theme: t, Style: &t.Port, State: p}
}
func (p *PortWidget) Layout(gtx C) D {
return p.State.clickable.layout(p.State, gtx, func(gtx C) D {
d := gtx.Dp(p.Style.Diameter)
defer clip.Rect(image.Rectangle{Max: image.Pt(d, d)}).Push(gtx.Ops).Pop()
p.strokeCircle(gtx)
return D{Size: image.Pt(d, d)}
})
}
func (p *PortWidget) strokeCircle(gtx C) {
sw := float32(gtx.Dp(p.Style.StrokeWidth))
d := float32(gtx.Dp(p.Style.Diameter))
rad := d / 2
center := f32.Point{X: rad, Y: rad}
var path clip.Path
path.Begin(gtx.Ops)
path.MoveTo(f32.Pt(sw/2, rad))
path.ArcTo(center, center, float32(math.Pi*2))
paint.FillShape(gtx.Ops, p.Style.Color,
clip.Stroke{
Path: path.End(),
Width: sw,
}.Op())
}
+47 -64
View File
@@ -2,7 +2,6 @@ package gioui
import ( import (
"bytes" "bytes"
"fmt"
"image" "image"
"image/color" "image/color"
"io" "io"
@@ -371,79 +370,45 @@ func MakeUnitList(m *tracker.Model) UnitList {
func (ul *UnitList) Layout(gtx C) D { func (ul *UnitList) Layout(gtx C) D {
t := TrackerFromContext(gtx) t := TrackerFromContext(gtx)
ul.update(gtx, t) ul.update(gtx, t)
var units [256]tracker.UnitListItem
for i, item := range (*tracker.Units)(t.Model).Iterate {
if i >= 256 {
break
}
units[i] = item
}
count := min(ul.dragList.TrackerList.Count(), 256)
element := func(gtx C, i int) D { element := func(gtx C, i int) D {
gtx.Constraints.Max.Y = gtx.Dp(20) gtx.Constraints.Max.Y = gtx.Dp(20)
gtx.Constraints.Min.Y = gtx.Constraints.Max.Y gtx.Constraints.Min.Y = gtx.Constraints.Max.Y
if i < 0 || i > 255 { u := t.Units().Item(i)
return layout.Dimensions{Size: gtx.Constraints.Min}
}
u := units[i]
editorStyle := t.Theme.InstrumentEditor.UnitList.Name editorStyle := t.Theme.InstrumentEditor.UnitList.Name
if u.Disabled { signalError := t.RailError()
switch {
case u.Disabled:
editorStyle = t.Theme.InstrumentEditor.UnitList.NameDisabled editorStyle = t.Theme.InstrumentEditor.UnitList.NameDisabled
} case signalError.Err != nil && signalError.UnitIndex == i:
stackText := strconv.FormatInt(int64(u.StackAfter), 10)
if u.StackNeed > u.StackBefore {
editorStyle.Color = t.Theme.InstrumentEditor.UnitList.Error editorStyle.Color = t.Theme.InstrumentEditor.UnitList.Error
(*tracker.Alerts)(t.Model).AddNamed("UnitNeedsInputs", fmt.Sprintf("%v needs at least %v input signals, got %v", u.Type, u.StackNeed, u.StackBefore), tracker.Error)
} else if i == count-1 && u.StackAfter != 0 {
editorStyle.Color = t.Theme.InstrumentEditor.UnitList.Warning
(*tracker.Alerts)(t.Model).AddNamed("InstrumentLeavesSignals", fmt.Sprintf("Instrument leaves %v signal(s) on the stack", u.StackAfter), tracker.Warning)
} }
stackLabel := Label(t.Theme, &t.Theme.InstrumentEditor.UnitList.Stack, stackText) unitName := func(gtx C) D {
rightMargin := layout.Inset{Right: unit.Dp(10)} if i == ul.dragList.TrackerList.Selected() {
return layout.Flex{Axis: layout.Horizontal}.Layout(gtx, defer clip.Rect(image.Rect(0, 0, gtx.Constraints.Max.X, gtx.Constraints.Max.Y)).Push(gtx.Ops).Pop()
layout.Rigid(func(gtx C) D { return ul.searchEditor.Layout(gtx, t.Model.UnitSearch(), t.Theme, &editorStyle, "---")
if i == ul.dragList.TrackerList.Selected() { } else {
defer clip.Rect(image.Rect(0, 0, gtx.Constraints.Max.X, gtx.Constraints.Max.Y)).Push(gtx.Ops).Pop() text := u.Type
str := t.Model.UnitSearch() if text == "" {
for ev := ul.searchEditor.Update(gtx, str); ev != EditorEventNone; ev = ul.searchEditor.Update(gtx, str) { text = "---"
if ev == EditorEventSubmit {
if str.Value() != "" {
for _, n := range sointu.UnitNames {
if strings.HasPrefix(n, str.Value()) {
t.Units().SetSelectedType(n)
break
}
}
} else {
t.Units().SetSelectedType("")
}
}
ul.dragList.Focus()
t.UnitSearching().SetValue(false)
}
return ul.searchEditor.Layout(gtx, str, t.Theme, &editorStyle, "---")
} else {
text := u.Type
if text == "" {
text = "---"
}
l := editorStyle.AsLabelStyle()
return Label(t.Theme, &l, text).Layout(gtx)
} }
}), l := editorStyle.AsLabelStyle()
layout.Flexed(1, func(gtx C) D { return Label(t.Theme, &l, text).Layout(gtx)
unitNameLabel := Label(t.Theme, &t.Theme.InstrumentEditor.UnitList.Comment, u.Comment) }
inset := layout.Inset{Left: unit.Dp(5)} }
return inset.Layout(gtx, unitNameLabel.Layout) stackText := strconv.FormatInt(int64(u.Signals.StackAfter()), 10)
}), commentLabel := Label(t.Theme, &t.Theme.InstrumentEditor.UnitList.Comment, u.Comment)
layout.Rigid(func(gtx C) D { stackLabel := Label(t.Theme, &t.Theme.InstrumentEditor.UnitList.Stack, stackText)
return rightMargin.Layout(gtx, stackLabel.Layout) return layout.Flex{Axis: layout.Horizontal}.Layout(gtx,
}), layout.Rigid(unitName),
layout.Rigid(layout.Spacer{Width: 5}.Layout),
layout.Flexed(1, commentLabel.Layout),
layout.Rigid(stackLabel.Layout),
layout.Rigid(layout.Spacer{Width: 10}.Layout),
) )
} }
defer op.Offset(image.Point{}).Push(gtx.Ops).Pop() defer op.Offset(image.Point{}).Push(gtx.Ops).Pop()
unitList := FilledDragList(t.Theme, ul.dragList) unitList := FilledDragList(t.Theme, ul.dragList)
return Surface{Gray: 30, Focus: t.PatchPanel.TreeFocused(gtx)}.Layout(gtx, func(gtx C) D { surface := func(gtx C) D {
return layout.Stack{Alignment: layout.SE}.Layout(gtx, return layout.Stack{Alignment: layout.SE}.Layout(gtx,
layout.Expanded(func(gtx C) D { layout.Expanded(func(gtx C) D {
defer clip.Rect(image.Rect(0, 0, gtx.Constraints.Max.X, gtx.Constraints.Max.Y)).Push(gtx.Ops).Pop() defer clip.Rect(image.Rect(0, 0, gtx.Constraints.Max.X, gtx.Constraints.Max.Y)).Push(gtx.Ops).Pop()
@@ -458,7 +423,8 @@ func (ul *UnitList) Layout(gtx C) D {
return margin.Layout(gtx, addUnitBtn.Layout) return margin.Layout(gtx, addUnitBtn.Layout)
}), }),
) )
}) }
return Surface{Gray: 30, Focus: t.PatchPanel.TreeFocused(gtx)}.Layout(gtx, surface)
} }
func (ul *UnitList) update(gtx C, t *Tracker) { func (ul *UnitList) update(gtx C, t *Tracker) {
@@ -478,7 +444,7 @@ func (ul *UnitList) update(gtx C, t *Tracker) {
if e, ok := event.(key.Event); ok && e.State == key.Press { if e, ok := event.(key.Event); ok && e.State == key.Press {
switch e.Name { switch e.Name {
case key.NameRightArrow: case key.NameRightArrow:
t.PatchPanel.unitEditor.sliderList.Focus() t.PatchPanel.unitEditor.paramTable.RowTitleList.Focus()
case key.NameDeleteBackward: case key.NameDeleteBackward:
t.Units().SetSelectedType("") t.Units().SetSelectedType("")
t.UnitSearching().SetValue(true) t.UnitSearching().SetValue(true)
@@ -490,6 +456,23 @@ func (ul *UnitList) update(gtx C, t *Tracker) {
} }
} }
} }
str := t.Model.UnitSearch()
for ev := ul.searchEditor.Update(gtx, str); ev != EditorEventNone; ev = ul.searchEditor.Update(gtx, str) {
if ev == EditorEventSubmit {
if str.Value() != "" {
for _, n := range sointu.UnitNames {
if strings.HasPrefix(n, str.Value()) {
t.Units().SetSelectedType(n)
break
}
}
} else {
t.Units().SetSelectedType("")
}
}
ul.dragList.Focus()
t.UnitSearching().SetValue(false)
}
} }
func (ul *UnitList) Tags(curLevel int, yield TagYieldFunc) bool { func (ul *UnitList) Tags(curLevel int, yield TagYieldFunc) bool {
+26 -21
View File
@@ -62,7 +62,7 @@ func NewScrollTable(table tracker.Table, vertList, horizList tracker.List) *Scro
} }
for k, a := range keyBindingMap { for k, a := range keyBindingMap {
switch a { switch a {
case "Copy", "Paste", "Cut", "Increase", "Decrease": case "Copy", "Paste", "Cut", "Increase", "Decrease", "IncreaseMore", "DecreaseMore":
ret.eventFilters = append(ret.eventFilters, key.Filter{Focus: ret, Name: k.Name, Required: k.Modifiers}) ret.eventFilters = append(ret.eventFilters, key.Filter{Focus: ret, Name: k.Name, Required: k.Modifiers})
} }
} }
@@ -117,18 +117,18 @@ func (s ScrollTableStyle) Layout(gtx C, element func(gtx C, x, y int) D, colTitl
p := image.Pt(gtx.Dp(s.RowTitleWidth), gtx.Dp(s.ColumnTitleHeight)) p := image.Pt(gtx.Dp(s.RowTitleWidth), gtx.Dp(s.ColumnTitleHeight))
s.handleEvents(gtx, p) s.handleEvents(gtx, p)
return Surface{Gray: 24, Focus: s.ScrollTable.TreeFocused(gtx)}.Layout(gtx, func(gtx C) D { //return Surface{Gray: 24, Focus: s.ScrollTable.TreeFocused(gtx)}.Layout(gtx, func(gtx C) D {
defer clip.Rect(image.Rect(0, 0, gtx.Constraints.Max.X, gtx.Constraints.Max.Y)).Push(gtx.Ops).Pop() defer clip.Rect(image.Rect(0, 0, gtx.Constraints.Max.X, gtx.Constraints.Max.Y)).Push(gtx.Ops).Pop()
dims := gtx.Constraints.Max dims := gtx.Constraints.Max
s.layoutColTitles(gtx, p, colTitle, colTitleBg) s.layoutColTitles(gtx, p, colTitle, colTitleBg)
s.layoutRowTitles(gtx, p, rowTitle, rowTitleBg) s.layoutRowTitles(gtx, p, rowTitle, rowTitleBg)
defer op.Offset(p).Push(gtx.Ops).Pop() defer op.Offset(p).Push(gtx.Ops).Pop()
gtx.Constraints = layout.Exact(image.Pt(gtx.Constraints.Max.X-p.X, gtx.Constraints.Max.Y-p.Y)) gtx.Constraints = layout.Exact(image.Pt(gtx.Constraints.Max.X-p.X, gtx.Constraints.Max.Y-p.Y))
s.layoutTable(gtx, element) s.layoutTable(gtx, element)
s.RowTitleStyle.LayoutScrollBar(gtx) s.RowTitleStyle.LayoutScrollBar(gtx)
s.ColTitleStyle.LayoutScrollBar(gtx) s.ColTitleStyle.LayoutScrollBar(gtx)
return D{Size: dims} return D{Size: dims}
}) //})
} }
func (s *ScrollTableStyle) handleEvents(gtx layout.Context, p image.Point) { func (s *ScrollTableStyle) handleEvents(gtx layout.Context, p image.Point) {
@@ -176,12 +176,17 @@ func (s *ScrollTableStyle) handleEvents(gtx layout.Context, p image.Point) {
} }
case key.Event: case key.Event:
if e.State == key.Press { if e.State == key.Press {
s.ScrollTable.command(gtx, e) s.ScrollTable.command(gtx, e, p)
} }
case transfer.DataEvent: case transfer.DataEvent:
if b, err := io.ReadAll(e.Open()); err == nil { if b, err := io.ReadAll(e.Open()); err == nil {
s.ScrollTable.Table.Paste(b) s.ScrollTable.Table.Paste(b)
} }
case key.FocusEvent:
if e.Focus {
s.ScrollTable.ColTitleList.EnsureVisible(s.ScrollTable.Table.Cursor().X)
s.ScrollTable.RowTitleList.EnsureVisible(s.ScrollTable.Table.Cursor().Y)
}
} }
} }
@@ -250,7 +255,7 @@ func (s *ScrollTableStyle) layoutColTitles(gtx C, p image.Point, fg, bg func(gtx
s.ColTitleStyle.Layout(gtx, fg, bg) s.ColTitleStyle.Layout(gtx, fg, bg)
} }
func (s *ScrollTable) command(gtx C, e key.Event) { func (s *ScrollTable) command(gtx C, e key.Event, p image.Point) {
stepX := 1 stepX := 1
stepY := 1 stepY := 1
if e.Modifiers.Contain(key.ModAlt) { if e.Modifiers.Contain(key.ModAlt) {
@@ -265,13 +270,13 @@ func (s *ScrollTable) command(gtx C, e key.Event) {
s.Table.Clear() s.Table.Clear()
return return
case key.NameUpArrow: case key.NameUpArrow:
if !s.Table.MoveCursor(0, -stepY) && stepY == 1 { if !s.Table.MoveCursor(0, -stepY) && stepY == 1 && p.Y > 0 {
s.ColTitleList.Focus() s.ColTitleList.Focus()
} }
case key.NameDownArrow: case key.NameDownArrow:
s.Table.MoveCursor(0, stepY) s.Table.MoveCursor(0, stepY)
case key.NameLeftArrow: case key.NameLeftArrow:
if !s.Table.MoveCursor(-stepX, 0) && stepX == 1 { if !s.Table.MoveCursor(-stepX, 0) && stepX == 1 && p.X > 0 {
s.RowTitleList.Focus() s.RowTitleList.Focus()
} }
case key.NameRightArrow: case key.NameRightArrow:
@@ -300,11 +305,11 @@ func (s *ScrollTable) command(gtx C, e key.Event) {
case "Paste": case "Paste":
gtx.Execute(clipboard.ReadCmd{Tag: s}) gtx.Execute(clipboard.ReadCmd{Tag: s})
return return
case "Increase": case "Increase", "IncreaseMore":
s.Table.Add(1) s.Table.Add(1, a == "IncreaseMore")
return return
case "Decrease": case "Decrease", "DecreaseMore":
s.Table.Add(-1) s.Table.Add(-1, a == "DecreaseMore")
return return
} }
} }
+106
View File
@@ -0,0 +1,106 @@
package gioui
import (
"image"
"image/color"
"math"
"gioui.org/f32"
"gioui.org/op/clip"
"gioui.org/op/paint"
"gioui.org/unit"
"github.com/vsariola/sointu/tracker"
)
const maxSignalsDrawn = 16
type (
RailStyle struct {
Color color.NRGBA
LineWidth unit.Dp
SignalWidth unit.Dp
PortDiameter unit.Dp
PortColor color.NRGBA
}
RailWidget struct {
Style *RailStyle
Signal tracker.Rail
Height unit.Dp
}
)
func Rail(th *Theme, signal tracker.Rail) RailWidget {
return RailWidget{
Style: &th.SignalRail,
Signal: signal,
Height: th.UnitEditor.Height,
}
}
func (s RailWidget) Layout(gtx C) D {
sw := gtx.Dp(s.Style.SignalWidth)
h := gtx.Dp(s.Height)
if s.Signal.PassThrough == 0 && len(s.Signal.StackUse.Inputs) == 0 && s.Signal.StackUse.NumOutputs == 0 {
return D{Size: image.Pt(sw, h)}
}
lw := gtx.Dp(s.Style.LineWidth)
pd := gtx.Dp(s.Style.PortDiameter)
center := sw / 2
var path clip.Path
path.Begin(gtx.Ops)
// Draw pass through signals
for i := range min(maxSignalsDrawn, s.Signal.PassThrough) {
x := float32(i*sw + center)
path.MoveTo(f32.Pt(x, 0))
path.LineTo(f32.Pt(x, float32(h)))
}
// Draw the routing of input signals
for i := range min(len(s.Signal.StackUse.Inputs), maxSignalsDrawn-s.Signal.PassThrough) {
input := s.Signal.StackUse.Inputs[i]
x1 := float32((i+s.Signal.PassThrough)*sw + center)
for _, link := range input {
x2 := float32((link+s.Signal.PassThrough)*sw + center)
path.MoveTo(f32.Pt(x1, 0))
path.LineTo(f32.Pt(x2, float32(h/2)))
}
}
if s.Signal.Send {
for i := range min(len(s.Signal.StackUse.Inputs), maxSignalsDrawn-s.Signal.PassThrough) {
d := gtx.Dp(8)
from := f32.Pt(float32((i+s.Signal.PassThrough)*sw+center), float32(h/2))
to := f32.Pt(float32(gtx.Constraints.Max.X), float32(h)-float32(d))
ctrl := f32.Pt(from.X, to.Y)
path.MoveTo(from)
path.QuadTo(ctrl, to)
}
}
// Draw the routing of output signals
for i := range min(s.Signal.StackUse.NumOutputs, maxSignalsDrawn-s.Signal.PassThrough) {
x := float32((i+s.Signal.PassThrough)*sw + center)
path.MoveTo(f32.Pt(x, float32(h/2)))
path.LineTo(f32.Pt(x, float32(h)))
}
// Signal paths finished
paint.FillShape(gtx.Ops, s.Style.Color,
clip.Stroke{
Path: path.End(),
Width: float32(lw),
}.Op())
// Draw the circles on signals that get modified
var circle clip.Path
circle.Begin(gtx.Ops)
for i := range min(len(s.Signal.StackUse.Modifies), maxSignalsDrawn-s.Signal.PassThrough) {
if !s.Signal.StackUse.Modifies[i] {
continue
}
f := f32.Pt(float32((i+s.Signal.PassThrough)*sw+center), float32(h/2))
circle.MoveTo(f32.Pt(f.X-float32(pd/2), float32(h/2)))
circle.ArcTo(f, f, float32(2*math.Pi))
}
p := clip.Outline{Path: circle.End()}.Op().Push(gtx.Ops)
paint.ColorOp{Color: s.Style.PortColor}.Add(gtx.Ops)
paint.PaintOp{}.Add(gtx.Ops)
p.Pop()
return D{Size: image.Pt(sw, h)}
}
+24 -6
View File
@@ -5,6 +5,7 @@ import (
"image/color" "image/color"
"gioui.org/text" "gioui.org/text"
"gioui.org/unit"
"gioui.org/widget" "gioui.org/widget"
"gioui.org/widget/material" "gioui.org/widget/material"
"golang.org/x/exp/shiny/materialdesign/icons" "golang.org/x/exp/shiny/materialdesign/icons"
@@ -84,11 +85,23 @@ type Theme struct {
} }
} }
UnitEditor struct { UnitEditor struct {
Hint LabelStyle Name LabelStyle
Chooser LabelStyle Chooser LabelStyle
ParameterName LabelStyle Hint LabelStyle
InvalidParam color.NRGBA WireColor color.NRGBA
SendTarget color.NRGBA WireHint LabelStyle
WireHighlight color.NRGBA
Width unit.Dp
Height unit.Dp
RackComment LabelStyle
UnitList struct {
LabelWidth unit.Dp
Name LabelStyle
Disabled LabelStyle
Error color.NRGBA
}
Error color.NRGBA
Divider color.NRGBA
} }
Cursor CursorStyle Cursor CursorStyle
Selection CursorStyle Selection CursorStyle
@@ -100,8 +113,13 @@ type Theme struct {
Menu PopupStyle Menu PopupStyle
Dialog PopupStyle Dialog PopupStyle
} }
Split SplitStyle Split SplitStyle
ScrollBar ScrollBarStyle ScrollBar ScrollBarStyle
Knob KnobStyle
DisabledKnob KnobStyle
Switch SwitchStyle
SignalRail RailStyle
Port PortStyle
// iconCache is used to cache the icons created from iconvg data // iconCache is used to cache the icons created from iconvg data
iconCache map[*byte]*widget.Icon iconCache map[*byte]*widget.Icon
+59 -6
View File
@@ -178,12 +178,6 @@ instrumenteditor:
disabled: { textsize: 12, color: *disabled } disabled: { textsize: 12, color: *disabled }
warning: *warningcolor warning: *warningcolor
error: *errorcolor error: *errorcolor
uniteditor:
hint: { textsize: 16, color: *highemphasis, shadowcolor: *black }
chooser: { textsize: 12, color: *white, shadowcolor: *black }
parametername: { textsize: 16, color: *white, shadowcolor: *black }
invalidparam: { r: 120, g: 120, b: 120, a: 190 }
sendtarget: { r: 120, g: 120, b: 210, a: 255 }
cursor: cursor:
active: { r: 100, g: 140, b: 255, a: 48 } active: { r: 100, g: 140, b: 255, a: 48 }
activealt: { r: 255, g: 100, b: 140, a: 48 } activealt: { r: 255, g: 100, b: 140, a: 48 }
@@ -211,3 +205,62 @@ dialog:
textinset: { top: 12, bottom: 12, left: 20, right: 20 } textinset: { top: 12, bottom: 12, left: 20, right: 20 }
buttons: *textbutton buttons: *textbutton
split: { bar: 10, minsize1: 180, minsize2: 180 } split: { bar: 10, minsize1: 180, minsize2: 180 }
uniteditor:
hint: { textsize: 16, color: *highemphasis, shadowcolor: *black }
chooser: { textsize: 12, color: *white, shadowcolor: *black }
name:
{ textsize: 12, alignment: 2, color: *highemphasis, shadowcolor: *black }
wirecolor: *secondarycolor
wirehighlight: *white
wirehint: { textsize: 12, color: *disabled, shadowcolor: *black }
width: 60
height: 70
unitlist:
labelwidth: 16
name: { textsize: 12, color: *white, alignment: 2 }
disabled:
{ textsize: 12, color: *disabled, font: { style: 1 }, alignment: 2 }
error: *errorcolor
divider: { r: 255, g: 255, b: 255, a: 5 }
rackcomment: { textsize: 16, color: *mediumemphasis, shadowcolor: *black }
knob:
diameter: 36
value: { textsize: 12, color: *highemphasis }
strokewidth: 4
bg: { r: 40, g: 40, b: 40, a: 255 }
pos: { color: *primarycolor, bg: { r: 51, g: 36, b: 54, a: 255 } }
neg: { color: *secondarycolor, bg: { r: 32, g: 55, b: 58, a: 255 } }
indicator: { color: *white, width: 2, innerdiam: 24, outerdiam: 36 }
disabledknob:
diameter: 36
value: { textsize: 12, color: { r: 147, g: 143, b: 153, a: 255 }}
strokewidth: 4
bg: { r: 40, g: 40, b: 40, a: 255 }
pos: { color: { r: 147, g: 143, b: 153, a: 255 }, bg: { r: 54, g: 52, b: 59, a: 255 } }
neg: { color: { r: 147, g: 143, b: 153, a: 255 }, bg: { r: 54, g: 52, b: 59, a: 255 } }
indicator: { color: { r: 147, g: 143, b: 153, a: 255 }, width: 2, innerdiam: 24, outerdiam: 36 }
signalrail:
color: *secondarycolor
signalwidth: 10
linewidth: 2
portdiameter: 8
portcolor: *primarycolor
port:
diameter: 36
strokewidth: 4
color: { r: 32, g: 55, b: 58, a: 255 }
switch:
width: 36
height: 20
handle: 16
neutral:
fg: { r: 147, g: 143, b: 153, a: 255 }
bg: { r: 54, g: 52, b: 59, a: 255 }
pos:
fg: *white
bg: { r: 125, g: 87, b: 128, a: 255 }
neg:
fg: *white
bg: { r: 70, g: 128, b: 131, a: 255 }
icon: 10
outline: 1
+283 -244
View File
@@ -2,47 +2,46 @@ package gioui
import ( import (
"bytes" "bytes"
"fmt"
"image" "image"
"image/color"
"io" "io"
"math" "math"
"time"
"gioui.org/f32"
"gioui.org/io/clipboard" "gioui.org/io/clipboard"
"gioui.org/io/event"
"gioui.org/io/key" "gioui.org/io/key"
"gioui.org/io/pointer"
"gioui.org/layout" "gioui.org/layout"
"gioui.org/op"
"gioui.org/op/clip" "gioui.org/op/clip"
"gioui.org/op/paint"
"gioui.org/text" "gioui.org/text"
"gioui.org/unit"
"gioui.org/widget"
"gioui.org/widget/material"
"gioui.org/x/component"
"github.com/vsariola/sointu"
"github.com/vsariola/sointu/tracker" "github.com/vsariola/sointu/tracker"
"golang.org/x/exp/shiny/materialdesign/icons" "golang.org/x/exp/shiny/materialdesign/icons"
"golang.org/x/text/cases" "golang.org/x/text/cases"
"golang.org/x/text/language" "golang.org/x/text/language"
) )
type UnitEditor struct { type (
sliderList *DragList UnitEditor struct {
searchList *DragList paramTable *ScrollTable
Parameters []*ParameterWidget searchList *DragList
DeleteUnitBtn *Clickable Parameters [][]*ParamState
CopyUnitBtn *Clickable DeleteUnitBtn *Clickable
ClearUnitBtn *Clickable CopyUnitBtn *Clickable
DisableUnitBtn *Clickable ClearUnitBtn *Clickable
SelectTypeBtn *Clickable DisableUnitBtn *Clickable
commentEditor *Editor SelectTypeBtn *Clickable
caser cases.Caser commentEditor *Editor
caser cases.Caser
copyHint string copyHint string
disableUnitHint string disableUnitHint string
enableUnitHint string enableUnitHint string
searching tracker.Bool searching tracker.Bool
} }
)
func NewUnitEditor(m *tracker.Model) *UnitEditor { func NewUnitEditor(m *tracker.Model) *UnitEditor {
ret := &UnitEditor{ ret := &UnitEditor{
@@ -52,7 +51,7 @@ func NewUnitEditor(m *tracker.Model) *UnitEditor {
CopyUnitBtn: new(Clickable), CopyUnitBtn: new(Clickable),
SelectTypeBtn: new(Clickable), SelectTypeBtn: new(Clickable),
commentEditor: NewEditor(true, true, text.Start), commentEditor: NewEditor(true, true, text.Start),
sliderList: NewDragList(m.Params().List(), layout.Vertical), paramTable: NewScrollTable(m.Params().Table(), m.ParamVertList().List(), m.Units().List()),
searchList: NewDragList(m.SearchResults().List(), layout.Vertical), searchList: NewDragList(m.SearchResults().List(), layout.Vertical),
searching: m.UnitSearching(), searching: m.UnitSearching(),
} }
@@ -66,8 +65,7 @@ func NewUnitEditor(m *tracker.Model) *UnitEditor {
func (pe *UnitEditor) Layout(gtx C) D { func (pe *UnitEditor) Layout(gtx C) D {
t := TrackerFromContext(gtx) t := TrackerFromContext(gtx)
pe.update(gtx, t) pe.update(gtx, t)
defer clip.Rect(image.Rect(0, 0, gtx.Constraints.Max.X, gtx.Constraints.Max.Y)).Push(gtx.Ops).Pop() editorFunc := pe.layoutRack
editorFunc := pe.layoutSliders
if pe.showingChooser() { if pe.showingChooser() {
editorFunc = pe.layoutUnitTypeChooser editorFunc = pe.layoutUnitTypeChooser
} }
@@ -80,7 +78,7 @@ func (pe *UnitEditor) Layout(gtx C) D {
} }
func (pe *UnitEditor) showingChooser() bool { func (pe *UnitEditor) showingChooser() bool {
return pe.searching.Value() || pe.sliderList.TrackerList.Count() == 0 return pe.searching.Value()
} }
func (pe *UnitEditor) update(gtx C, t *Tracker) { func (pe *UnitEditor) update(gtx C, t *Tracker) {
@@ -96,46 +94,82 @@ func (pe *UnitEditor) update(gtx C, t *Tracker) {
for pe.commentEditor.Update(gtx, t.UnitComment()) != EditorEventNone { for pe.commentEditor.Update(gtx, t.UnitComment()) != EditorEventNone {
t.FocusPrev(gtx, false) t.FocusPrev(gtx, false)
} }
for pe.ClearUnitBtn.Clicked(gtx) {
t.ClearUnit().Do()
t.UnitSearch().SetValue("")
t.UnitSearching().SetValue(true)
pe.searchList.Focus()
}
for { for {
e, ok := gtx.Event( e, ok := gtx.Event(
key.Filter{Focus: pe.searchList, Name: key.NameEnter}, key.Filter{Focus: pe.searchList, Name: key.NameEnter},
key.Filter{Focus: pe.searchList, Name: key.NameReturn}, key.Filter{Focus: pe.searchList, Name: key.NameReturn},
key.Filter{Focus: pe.searchList, Name: key.NameEscape},
) )
if !ok { if !ok {
break break
} }
if e, ok := e.(key.Event); ok && e.State == key.Press { if e, ok := e.(key.Event); ok && e.State == key.Press {
pe.ChooseUnitType(t) switch e.Name {
case key.NameEscape:
t.UnitSearching().SetValue(false)
pe.paramTable.RowTitleList.Focus()
case key.NameEnter, key.NameReturn:
pe.ChooseUnitType(t)
}
} }
} }
for { for {
e, ok := gtx.Event( e, ok := gtx.Event(
key.Filter{Focus: pe.sliderList, Name: key.NameLeftArrow, Optional: key.ModShift}, key.Filter{Focus: pe.paramTable, Name: key.NameLeftArrow, Required: key.ModShift, Optional: key.ModShortcut},
key.Filter{Focus: pe.sliderList, Name: key.NameRightArrow, Optional: key.ModShift}, key.Filter{Focus: pe.paramTable, Name: key.NameRightArrow, Required: key.ModShift, Optional: key.ModShortcut},
key.Filter{Focus: pe.sliderList, Name: key.NameDeleteBackward}, key.Filter{Focus: pe.paramTable, Name: key.NameDeleteBackward},
key.Filter{Focus: pe.sliderList, Name: key.NameDeleteForward}, key.Filter{Focus: pe.paramTable, Name: key.NameDeleteForward},
) )
if !ok { if !ok {
break break
} }
if e, ok := e.(key.Event); ok && e.State == key.Press { if e, ok := e.(key.Event); ok && e.State == key.Press {
params := t.Model.Params()
item := params.SelectedItem()
switch e.Name { switch e.Name {
case key.NameLeftArrow: case key.NameLeftArrow:
if e.Modifiers.Contain(key.ModShift) { t.Model.Params().Table().Add(-1, e.Modifiers.Contain(key.ModShortcut))
item.SetValue(item.Value() - item.LargeStep())
} else {
item.SetValue(item.Value() - 1)
}
case key.NameRightArrow: case key.NameRightArrow:
if e.Modifiers.Contain(key.ModShift) { t.Model.Params().Table().Add(1, e.Modifiers.Contain(key.ModShortcut))
item.SetValue(item.Value() + item.LargeStep())
} else {
item.SetValue(item.Value() + 1)
}
case key.NameDeleteBackward, key.NameDeleteForward: case key.NameDeleteBackward, key.NameDeleteForward:
item.Reset() t.Model.Params().Table().Clear()
}
c := t.Model.Params().Cursor()
if c.X >= 0 && c.Y >= 0 && c.Y < len(pe.Parameters) && c.X < len(pe.Parameters[c.Y]) {
ta := &pe.Parameters[c.Y][c.X].tipArea
ta.Appear(gtx.Now)
ta.Exit.SetTarget(gtx.Now.Add(ta.ExitDuration))
}
}
}
for {
e, ok := gtx.Event(
key.Filter{Focus: pe.paramTable.RowTitleList, Name: key.NameEnter},
key.Filter{Focus: pe.paramTable.RowTitleList, Name: key.NameReturn},
key.Filter{Focus: pe.paramTable.RowTitleList, Name: key.NameLeftArrow},
key.Filter{Focus: pe.paramTable.RowTitleList, Name: key.NameDeleteBackward},
)
if !ok {
break
}
if e, ok := e.(key.Event); ok && e.State == key.Press {
switch e.Name {
case key.NameLeftArrow:
t.PatchPanel.unitList.dragList.Focus()
case key.NameDeleteBackward:
t.ClearUnit().Do()
t.UnitSearch().SetValue("")
t.UnitSearching().SetValue(true)
pe.searchList.Focus()
case key.NameEnter, key.NameReturn:
t.Model.AddUnit(e.Modifiers.Contain(key.ModCtrl)).Do()
t.UnitSearch().SetValue("")
t.UnitSearching().SetValue(true)
pe.searchList.Focus()
} }
} }
} }
@@ -144,67 +178,237 @@ func (pe *UnitEditor) update(gtx C, t *Tracker) {
func (pe *UnitEditor) ChooseUnitType(t *Tracker) { func (pe *UnitEditor) ChooseUnitType(t *Tracker) {
if ut, ok := t.SearchResults().Item(pe.searchList.TrackerList.Selected()); ok { if ut, ok := t.SearchResults().Item(pe.searchList.TrackerList.Selected()); ok {
t.Units().SetSelectedType(ut) t.Units().SetSelectedType(ut)
t.PatchPanel.unitList.dragList.Focus() pe.paramTable.RowTitleList.Focus()
} }
} }
func (pe *UnitEditor) layoutSliders(gtx C) D { func (pe *UnitEditor) layoutRack(gtx C) D {
defer clip.Rect(image.Rect(0, 0, gtx.Constraints.Max.X, gtx.Constraints.Max.Y)).Push(gtx.Ops).Pop()
t := TrackerFromContext(gtx) t := TrackerFromContext(gtx)
numItems := pe.sliderList.TrackerList.Count()
// create enough parameter widget to match the number of parameters // create enough parameter widget to match the number of parameters
for len(pe.Parameters) < numItems { width := pe.paramTable.Table.Width()
pe.Parameters = append(pe.Parameters, new(ParameterWidget)) for len(pe.Parameters) < pe.paramTable.Table.Height() {
pe.Parameters = append(pe.Parameters, make([]*ParamState, 0))
} }
cellWidth := gtx.Dp(t.Theme.UnitEditor.Width)
index := 0 cellHeight := gtx.Dp(t.Theme.UnitEditor.Height)
for param := range t.Model.Params().Iterate { rowTitleLabelWidth := gtx.Dp(t.Theme.UnitEditor.UnitList.LabelWidth)
pe.Parameters[index].Parameter = param rowTitleSignalWidth := gtx.Dp(t.Theme.SignalRail.SignalWidth) * t.RailWidth()
index++ rowTitleWidth := rowTitleLabelWidth + rowTitleSignalWidth
signalError := t.RailError()
columnTitleHeight := gtx.Dp(0)
for i := range pe.Parameters {
for len(pe.Parameters[i]) < width {
pe.Parameters[i] = append(pe.Parameters[i], &ParamState{tipArea: TipArea{ExitDuration: time.Second * 2}})
}
} }
element := func(gtx C, index int) D { coltitle := func(gtx C, x int) D {
if index < 0 || index >= numItems { return D{Size: image.Pt(cellWidth, columnTitleHeight)}
}
rowtitle := func(gtx C, y int) D {
if y < 0 || y >= len(pe.Parameters) {
return D{} return D{}
} }
paramStyle := t.ParamStyle(t.Theme, pe.Parameters[index]) item := t.Units().Item(y)
paramStyle.Focus = pe.sliderList.TrackerList.Selected() == index sr := Rail(t.Theme, item.Signals)
dims := paramStyle.Layout(gtx) label := Label(t.Theme, &t.Theme.UnitEditor.UnitList.Name, item.Type)
return D{Size: image.Pt(gtx.Constraints.Max.X, dims.Size.Y)} switch {
case item.Disabled:
label.LabelStyle = t.Theme.UnitEditor.UnitList.Disabled
case signalError.Err != nil && signalError.UnitIndex == y:
label.Color = t.Theme.UnitEditor.UnitList.Error
}
gtx.Constraints = layout.Exact(image.Pt(rowTitleWidth, cellHeight))
sr.Layout(gtx)
defer op.Affine(f32.Affine2D{}.Rotate(f32.Pt(0, 0), -90*math.Pi/180).Offset(f32.Point{X: float32(rowTitleSignalWidth), Y: float32(cellHeight)})).Push(gtx.Ops).Pop()
gtx.Constraints = layout.Exact(image.Pt(cellHeight, rowTitleLabelWidth))
label.Layout(gtx)
return D{Size: image.Pt(rowTitleWidth, cellHeight)}
} }
cursor := t.Model.Params().Cursor()
cell := func(gtx C, x, y int) D {
gtx.Constraints = layout.Exact(image.Pt(cellWidth, cellHeight))
point := tracker.Point{X: x, Y: y}
if y < 0 || y >= len(pe.Parameters) || x < 0 || x >= len(pe.Parameters[y]) {
return D{}
}
selection := pe.paramTable.Table.Range()
if selection.Contains(point) {
color := t.Theme.Selection.Inactive
if gtx.Focused(pe.paramTable) {
color = t.Theme.Selection.Active
}
if point == cursor {
color = t.Theme.Cursor.Inactive
if gtx.Focused(pe.paramTable) {
color = t.Theme.Cursor.Active
}
}
paint.FillShape(gtx.Ops, color, clip.Rect{Min: image.Pt(0, 0), Max: image.Pt(gtx.Constraints.Min.X, gtx.Constraints.Min.Y)}.Op())
}
fdl := FilledDragList(t.Theme, pe.sliderList) param := t.Model.Params().Item(point)
dims := fdl.Layout(gtx, element, nil) paramStyle := Param(param, t.Theme, pe.Parameters[y][x], pe.paramTable.Table.Cursor() == point, t.Units().Item(y).Disabled)
gtx.Constraints = layout.Exact(dims.Size) paramStyle.Layout(gtx)
fdl.LayoutScrollBar(gtx) comment := t.Units().Item(y).Comment
if comment != "" && x == t.Model.Params().RowWidth(y) {
label := Label(t.Theme, &t.Theme.UnitEditor.RackComment, comment)
return layout.W.Layout(gtx, func(gtx C) D {
gtx.Constraints.Max.X = 1e6
gtx.Constraints.Min.Y = 0
return label.Layout(gtx)
})
}
return D{Size: image.Pt(gtx.Constraints.Max.X, gtx.Constraints.Max.Y)}
}
table := FilledScrollTable(t.Theme, pe.paramTable)
table.RowTitleWidth = gtx.Metric.PxToDp(rowTitleWidth)
table.ColumnTitleHeight = 0
table.CellWidth = t.Theme.UnitEditor.Width
table.CellHeight = t.Theme.UnitEditor.Height
pe.drawBackGround(gtx)
pe.drawSignals(gtx, rowTitleWidth)
dims := table.Layout(gtx, cell, coltitle, rowtitle, nil, nil)
return dims return dims
} }
func (pe *UnitEditor) drawSignals(gtx C, rowTitleWidth int) {
t := TrackerFromContext(gtx)
colP := pe.paramTable.ColTitleList.List.Position
rowP := pe.paramTable.RowTitleList.List.Position
p := image.Pt(rowTitleWidth, 0)
defer op.Offset(p).Push(gtx.Ops).Pop()
gtx.Constraints.Max = gtx.Constraints.Max.Sub(p)
defer clip.Rect(image.Rectangle{Max: gtx.Constraints.Max}).Push(gtx.Ops).Pop()
defer op.Offset(image.Pt(-colP.Offset, -rowP.Offset)).Push(gtx.Ops).Pop()
for wire := range t.Wires {
clr := t.Theme.UnitEditor.WireColor
if wire.Highlight {
clr = t.Theme.UnitEditor.WireHighlight
}
switch {
case wire.FromSet && !wire.ToSet:
pe.drawRemoteSendSignal(gtx, wire, colP.First, rowP.First)
case !wire.FromSet && wire.ToSet:
pe.drawRemoteReceiveSignal(gtx, wire, colP.First, rowP.First, clr)
case wire.FromSet && wire.ToSet:
pe.drawSignal(gtx, wire, colP.First, rowP.First, clr)
}
}
}
func (pe *UnitEditor) drawBackGround(gtx C) {
t := TrackerFromContext(gtx)
rowP := pe.paramTable.RowTitleList.List.Position
defer op.Offset(image.Pt(0, -rowP.Offset)).Push(gtx.Ops).Pop()
for range pe.paramTable.RowTitleList.List.Position.Count + 1 {
paint.FillShape(gtx.Ops, t.Theme.UnitEditor.Divider, clip.Rect{Max: image.Pt(gtx.Constraints.Max.X, 1)}.Op())
op.Offset(image.Pt(0, gtx.Dp(t.Theme.UnitEditor.Height))).Add(gtx.Ops)
}
}
func (pe *UnitEditor) drawRemoteSendSignal(gtx C, wire tracker.Wire, col, row int) {
sy := wire.From - row
t := TrackerFromContext(gtx)
defer op.Offset(image.Pt(gtx.Dp(5), (sy+1)*gtx.Dp(t.Theme.UnitEditor.Height)-gtx.Dp(16))).Push(gtx.Ops).Pop()
Label(t.Theme, &t.Theme.UnitEditor.WireHint, wire.Hint).Layout(gtx)
}
func (pe *UnitEditor) drawRemoteReceiveSignal(gtx C, wire tracker.Wire, col, row int, clr color.NRGBA) {
ex := wire.To.X - col
ey := wire.To.Y - row
t := TrackerFromContext(gtx)
width := float32(gtx.Dp(t.Theme.UnitEditor.Width))
height := float32(gtx.Dp(t.Theme.UnitEditor.Height))
topLeft := f32.Pt(float32(ex)*width, float32(ey)*height)
center := topLeft.Add(f32.Pt(width/2, height/2))
c := float32(gtx.Dp(t.Theme.Knob.Diameter)) / 2 / float32(math.Sqrt2)
from := f32.Pt(c, c).Add(center)
q := c
c1 := f32.Pt(c+q, c+q).Add(center)
o := float32(gtx.Dp(8))
c2 := f32.Pt(width-q, height-o).Add(topLeft)
to := f32.Pt(width, height-o).Add(topLeft)
var path clip.Path
path.Begin(gtx.Ops)
path.MoveTo(from)
path.CubeTo(c1, c2, to)
paint.FillShape(gtx.Ops, clr,
clip.Stroke{
Path: path.End(),
Width: float32(gtx.Dp(t.Theme.SignalRail.LineWidth)),
}.Op())
defer op.Offset(image.Pt((ex+1)*gtx.Dp(t.Theme.UnitEditor.Width)+gtx.Dp(5), (ey+1)*gtx.Dp(t.Theme.UnitEditor.Height)-gtx.Dp(16))).Push(gtx.Ops).Pop()
Label(t.Theme, &t.Theme.UnitEditor.WireHint, wire.Hint).Layout(gtx)
}
func (pe *UnitEditor) drawSignal(gtx C, wire tracker.Wire, col, row int, clr color.NRGBA) {
sy := wire.From - row
ex := wire.To.X - col
ey := wire.To.Y - row
t := TrackerFromContext(gtx)
diam := gtx.Dp(t.Theme.Knob.Diameter)
c := float32(diam) / 2 / float32(math.Sqrt2)
width := float32(gtx.Dp(t.Theme.UnitEditor.Width))
height := float32(gtx.Dp(t.Theme.UnitEditor.Height))
from := f32.Pt(0, float32((sy+1)*gtx.Dp(t.Theme.UnitEditor.Height))-float32(gtx.Dp(8)))
corner := f32.Pt(1, 1)
if ex > 0 {
corner.X = -corner.X
}
if sy < ey {
corner.Y = -corner.Y
}
topLeft := f32.Pt(float32(ex)*width, float32(ey)*height)
center := topLeft.Add(f32.Pt(width/2, height/2))
to := mulVec(corner, f32.Pt(c, c)).Add(center)
p2 := mulVec(corner, f32.Pt(width/2, height/2)).Add(center)
p1 := f32.Pt(p2.X, float32((sy+1)*gtx.Dp(t.Theme.UnitEditor.Height)))
if sy > ey {
p1 = f32.Pt(p2.X, (float32(sy)+0.5)*float32(gtx.Dp(t.Theme.UnitEditor.Height))+float32(diam)/2)
}
k := float32(width) / 4
p2Tan := mulVec(corner, f32.Pt(-k, -k))
p1Tan := f32.Pt(k, p2Tan.Y)
fromTan := f32.Pt(k, 0)
var path clip.Path
path.Begin(gtx.Ops)
path.MoveTo(from)
path.CubeTo(from.Add(fromTan), p1.Sub(p1Tan), p1)
path.CubeTo(p1.Add(p1Tan), p2, to)
paint.FillShape(gtx.Ops, clr,
clip.Stroke{
Path: path.End(),
Width: float32(gtx.Dp(t.Theme.SignalRail.LineWidth)),
}.Op())
}
func mulVec(a, b f32.Point) f32.Point {
return f32.Pt(a.X*b.X, a.Y*b.Y)
}
func (pe *UnitEditor) layoutFooter(gtx C) D { func (pe *UnitEditor) layoutFooter(gtx C) D {
t := TrackerFromContext(gtx) t := TrackerFromContext(gtx)
st := t.Units().SelectedType()
text := "Choose unit type" text := "Choose unit type"
if st != "" { if !t.UnitSearching().Value() {
text = pe.caser.String(st) text = pe.caser.String(t.Units().SelectedType())
} }
hintText := Label(t.Theme, &t.Theme.UnitEditor.Hint, text) hintText := Label(t.Theme, &t.Theme.UnitEditor.Hint, text)
deleteUnitBtn := ActionIconBtn(t.DeleteUnit(), t.Theme, pe.DeleteUnitBtn, icons.ActionDelete, "Delete unit (Ctrl+Backspace)") deleteUnitBtn := ActionIconBtn(t.DeleteUnit(), t.Theme, pe.DeleteUnitBtn, icons.ActionDelete, "Delete unit (Ctrl+Backspace)")
copyUnitBtn := IconBtn(t.Theme, &t.Theme.IconButton.Enabled, pe.CopyUnitBtn, icons.ContentContentCopy, pe.copyHint) copyUnitBtn := IconBtn(t.Theme, &t.Theme.IconButton.Enabled, pe.CopyUnitBtn, icons.ContentContentCopy, pe.copyHint)
disableUnitBtn := ToggleIconBtn(t.UnitDisabled(), t.Theme, pe.DisableUnitBtn, icons.AVVolumeUp, icons.AVVolumeOff, pe.disableUnitHint, pe.enableUnitHint) disableUnitBtn := ToggleIconBtn(t.UnitDisabled(), t.Theme, pe.DisableUnitBtn, icons.AVVolumeUp, icons.AVVolumeOff, pe.disableUnitHint, pe.enableUnitHint)
w := layout.Spacer{Width: t.Theme.IconButton.Enabled.Size}.Layout clearUnitBtn := IconBtn(t.Theme, &t.Theme.IconButton.Enabled, pe.ClearUnitBtn, icons.ContentClear, "Clear unit")
if st != "" {
clearUnitBtn := ActionIconBtn(t.ClearUnit(), t.Theme, pe.ClearUnitBtn, icons.ContentClear, "Clear unit")
w = clearUnitBtn.Layout
}
return layout.Flex{Axis: layout.Horizontal, Alignment: layout.Middle}.Layout(gtx, return layout.Flex{Axis: layout.Horizontal, Alignment: layout.Middle}.Layout(gtx,
layout.Rigid(deleteUnitBtn.Layout), layout.Rigid(deleteUnitBtn.Layout),
layout.Rigid(copyUnitBtn.Layout), layout.Rigid(copyUnitBtn.Layout),
layout.Rigid(disableUnitBtn.Layout), layout.Rigid(disableUnitBtn.Layout),
layout.Rigid(w), layout.Rigid(clearUnitBtn.Layout),
layout.Rigid(func(gtx C) D { layout.Rigid(func(gtx C) D {
gtx.Constraints.Min.X = gtx.Dp(120) gtx.Constraints.Min.X = gtx.Dp(130)
return hintText.Layout(gtx) return hintText.Layout(gtx)
}), }),
layout.Flexed(1, func(gtx C) D { layout.Flexed(1, func(gtx C) D {
return pe.commentEditor.Layout(gtx, t.UnitComment(), t.Theme, &t.Theme.InstrumentEditor.UnitComment, "---") return pe.commentEditor.Layout(gtx, t.UnitComment(), t.Theme, &t.Theme.InstrumentEditor.UnitComment, "Comment")
}), }),
) )
} }
@@ -234,173 +438,8 @@ func (pe *UnitEditor) layoutUnitTypeChooser(gtx C) D {
} }
func (t *UnitEditor) Tags(level int, yield TagYieldFunc) bool { func (t *UnitEditor) Tags(level int, yield TagYieldFunc) bool {
widget := t.sliderList
if t.showingChooser() { if t.showingChooser() {
widget = t.searchList return yield(level, t.searchList) && yield(level+1, &t.commentEditor.widgetEditor)
} }
return yield(level, widget) && yield(level+1, &t.commentEditor.widgetEditor) return yield(level+1, t.paramTable.RowTitleList) && yield(level, t.paramTable) && yield(level+1, &t.commentEditor.widgetEditor)
}
type ParameterWidget struct {
floatWidget widget.Float
boolWidget widget.Bool
instrBtn Clickable
instrMenu MenuState
unitBtn Clickable
unitMenu MenuState
Parameter tracker.Parameter
tipArea TipArea
}
type ParameterStyle struct {
tracker *Tracker
w *ParameterWidget
Theme *Theme
SendTargetTheme *material.Theme
Focus bool
}
func (t *Tracker) ParamStyle(th *Theme, paramWidget *ParameterWidget) ParameterStyle {
sendTargetTheme := th.Material.WithPalette(material.Palette{
Bg: th.Material.Bg,
Fg: th.UnitEditor.SendTarget,
ContrastBg: th.Material.ContrastBg,
ContrastFg: th.Material.ContrastFg,
})
return ParameterStyle{
tracker: t, // TODO: we need this to pull the instrument names for ID style parameters, find out another way
Theme: th,
SendTargetTheme: &sendTargetTheme,
w: paramWidget,
}
}
func (p ParameterStyle) Layout(gtx C) D {
info, infoOk := p.w.Parameter.Info()
return layout.Flex{Axis: layout.Horizontal, Alignment: layout.Middle}.Layout(gtx,
layout.Rigid(func(gtx C) D {
gtx.Constraints.Min.X = gtx.Dp(unit.Dp(110))
return layout.E.Layout(gtx, Label(p.Theme, &p.Theme.UnitEditor.ParameterName, p.w.Parameter.Name()).Layout)
}),
layout.Rigid(func(gtx C) D {
switch p.w.Parameter.Type() {
case tracker.IntegerParameter:
for p.Focus {
e, ok := gtx.Event(pointer.Filter{
Target: &p.w.floatWidget,
Kinds: pointer.Scroll,
ScrollY: pointer.ScrollRange{Min: -1e6, Max: 1e6},
})
if !ok {
break
}
if ev, ok := e.(pointer.Event); ok && ev.Kind == pointer.Scroll {
delta := math.Min(math.Max(float64(ev.Scroll.Y), -1), 1)
p.w.Parameter.SetValue(p.w.Parameter.Value() - int(delta))
}
}
gtx.Constraints.Min.X = gtx.Dp(unit.Dp(200))
gtx.Constraints.Min.Y = gtx.Dp(unit.Dp(40))
ra := p.w.Parameter.Range()
if !p.w.floatWidget.Dragging() {
p.w.floatWidget.Value = (float32(p.w.Parameter.Value()) - float32(ra.Min)) / float32(ra.Max-ra.Min)
}
sliderStyle := material.Slider(&p.Theme.Material, &p.w.floatWidget)
if infoOk {
sliderStyle.Color = p.Theme.UnitEditor.SendTarget
}
r := image.Rectangle{Max: gtx.Constraints.Min}
defer clip.Rect(r).Push(gtx.Ops).Pop()
defer pointer.PassOp{}.Push(gtx.Ops).Pop()
if p.Focus {
event.Op(gtx.Ops, &p.w.floatWidget)
}
dims := sliderStyle.Layout(gtx)
p.w.Parameter.SetValue(int(p.w.floatWidget.Value*float32(ra.Max-ra.Min) + float32(ra.Min) + 0.5))
return dims
case tracker.BoolParameter:
gtx.Constraints.Min.X = gtx.Dp(unit.Dp(60))
gtx.Constraints.Min.Y = gtx.Dp(unit.Dp(40))
ra := p.w.Parameter.Range()
p.w.boolWidget.Value = p.w.Parameter.Value() > ra.Min
boolStyle := material.Switch(&p.Theme.Material, &p.w.boolWidget, "Toggle boolean parameter")
boolStyle.Color.Disabled = p.Theme.Material.Fg
defer pointer.PassOp{}.Push(gtx.Ops).Pop()
dims := layout.Center.Layout(gtx, boolStyle.Layout)
if p.w.boolWidget.Value {
p.w.Parameter.SetValue(ra.Max)
} else {
p.w.Parameter.SetValue(ra.Min)
}
return dims
case tracker.IDParameter:
gtx.Constraints.Min.X = gtx.Dp(unit.Dp(200))
gtx.Constraints.Min.Y = gtx.Dp(unit.Dp(40))
instrItems := make([]ActionMenuItem, p.tracker.Instruments().Count())
for i := range instrItems {
i := i
name, _, _, _ := p.tracker.Instruments().Item(i)
instrItems[i].Text = name
instrItems[i].Icon = icons.NavigationChevronRight
instrItems[i].Action = tracker.MakeEnabledAction((tracker.DoFunc)(func() {
if id, ok := p.tracker.Instruments().FirstID(i); ok {
p.w.Parameter.SetValue(id)
}
}))
}
var unitItems []ActionMenuItem
instrName := "<instr>"
unitName := "<unit>"
targetInstrName, units, targetUnitIndex, ok := p.tracker.UnitInfo(p.w.Parameter.Value())
if ok {
instrName = targetInstrName
unitName = buildUnitLabel(targetUnitIndex, units[targetUnitIndex])
unitItems = make([]ActionMenuItem, len(units))
for j, unit := range units {
id := unit.ID
unitItems[j].Text = buildUnitLabel(j, unit)
unitItems[j].Icon = icons.NavigationChevronRight
unitItems[j].Action = tracker.MakeEnabledAction((tracker.DoFunc)(func() {
p.w.Parameter.SetValue(id)
}))
}
}
defer pointer.PassOp{}.Push(gtx.Ops).Pop()
instrBtn := MenuBtn(p.tracker.Theme, &p.w.instrMenu, &p.w.instrBtn, instrName)
unitBtn := MenuBtn(p.tracker.Theme, &p.w.unitMenu, &p.w.unitBtn, unitName)
return layout.Flex{Axis: layout.Horizontal}.Layout(gtx,
layout.Rigid(func(gtx C) D {
return instrBtn.Layout(gtx, instrItems...)
}),
layout.Rigid(func(gtx C) D {
return unitBtn.Layout(gtx, unitItems...)
}),
)
}
return D{}
}),
layout.Rigid(func(gtx C) D {
if p.w.Parameter.Type() != tracker.IDParameter {
hint := p.w.Parameter.Hint()
label := Label(p.tracker.Theme, &p.tracker.Theme.UnitEditor.Hint, hint.Label)
if !hint.Valid {
label.Color = p.tracker.Theme.UnitEditor.InvalidParam
}
if info == "" {
return label.Layout(gtx)
}
tooltip := component.PlatformTooltip(p.SendTargetTheme, info)
return p.w.tipArea.Layout(gtx, tooltip, label.Layout)
}
return D{}
}),
)
}
func buildUnitLabel(index int, u sointu.Unit) string {
text := u.Type
if u.Comment != "" {
text = fmt.Sprintf("%s \"%s\"", text, u.Comment)
}
return fmt.Sprintf("%d: %s", index, text)
} }
+17 -20
View File
@@ -36,9 +36,9 @@ type (
} }
UnitListItem struct { UnitListItem struct {
Type, Comment string Type, Comment string
Disabled bool Disabled bool
StackNeed, StackBefore, StackAfter int Signals Rail
} }
// Range is used to represent a range [Start,End) of integers // Range is used to represent a range [Start,End) of integers
@@ -299,24 +299,21 @@ func (m *Units) SetSelectedType(t string) {
m.d.Song.Patch[m.d.InstrIndex].Units[m.d.UnitIndex].ID = oldUnit.ID // keep the ID of the replaced unit m.d.Song.Patch[m.d.InstrIndex].Units[m.d.UnitIndex].ID = oldUnit.ID // keep the ID of the replaced unit
} }
func (v *Units) Iterate(yield UnitYieldFunc) { func (v *Units) Item(index int) UnitListItem {
if v.d.InstrIndex < 0 || v.d.InstrIndex >= len(v.d.Song.Patch) { i := v.d.InstrIndex
return if i < 0 || i >= len(v.d.Song.Patch) || index < 0 || index >= v.Count() {
return UnitListItem{}
} }
stackBefore := 0 unit := v.d.Song.Patch[v.d.InstrIndex].Units[index]
for i, unit := range v.d.Song.Patch[v.d.InstrIndex].Units { signals := Rail{}
stackAfter := stackBefore + unit.StackChange() if i >= 0 && i < len(v.derived.patch) && index >= 0 && index < len(v.derived.patch[i].rails) {
if !yield(i, UnitListItem{ signals = v.derived.patch[i].rails[index]
Type: unit.Type, }
Comment: unit.Comment, return UnitListItem{
Disabled: unit.Disabled, Type: unit.Type,
StackNeed: unit.StackNeed(), Comment: unit.Comment,
StackBefore: stackBefore, Disabled: unit.Disabled,
StackAfter: stackAfter, Signals: signals,
}) {
break
}
stackBefore = stackAfter
} }
} }
+5 -4
View File
@@ -35,6 +35,7 @@ type (
ChangedSinceSave bool ChangedSinceSave bool
RecoveryFilePath string RecoveryFilePath string
ChangedSinceRecovery bool ChangedSinceRecovery bool
SendSource int
} }
Model struct { Model struct {
@@ -189,7 +190,7 @@ func NewModel(broker *Broker, synther sointu.Synther, midiContext MIDIContext, r
} }
TrySend(broker.ToPlayer, any(m.d.Song.Copy())) // we should be non-blocking in the constructor TrySend(broker.ToPlayer, any(m.d.Song.Copy())) // we should be non-blocking in the constructor
m.signalAnalyzer = NewScopeModel(broker, m.d.Song.BPM) m.signalAnalyzer = NewScopeModel(broker, m.d.Song.BPM)
m.initDerivedData() m.updateDeriveData(SongChange)
return m return m
} }
@@ -223,7 +224,6 @@ func (m *Model) change(kind string, t ChangeType, severity ChangeSeverity) func(
if m.changeType&ScoreChange != 0 { if m.changeType&ScoreChange != 0 {
m.d.Cursor.SongPos = m.d.Song.Score.Clamp(m.d.Cursor.SongPos) m.d.Cursor.SongPos = m.d.Song.Score.Clamp(m.d.Cursor.SongPos)
m.d.Cursor2.SongPos = m.d.Song.Score.Clamp(m.d.Cursor2.SongPos) m.d.Cursor2.SongPos = m.d.Song.Score.Clamp(m.d.Cursor2.SongPos)
m.updateDerivedScoreData()
TrySend(m.broker.ToPlayer, any(m.d.Song.Score.Copy())) TrySend(m.broker.ToPlayer, any(m.d.Song.Score.Copy()))
} }
if m.changeType&PatchChange != 0 { if m.changeType&PatchChange != 0 {
@@ -239,7 +239,7 @@ func (m *Model) change(kind string, t ChangeType, severity ChangeSeverity) func(
m.d.UnitIndex2 = clamp(m.d.UnitIndex2, 0, unitCount-1) m.d.UnitIndex2 = clamp(m.d.UnitIndex2, 0, unitCount-1)
m.d.UnitSearching = false // if we change anything in the patch, reset the unit searching m.d.UnitSearching = false // if we change anything in the patch, reset the unit searching
m.d.UnitSearchString = "" m.d.UnitSearchString = ""
m.updateDerivedPatchData() m.d.SendSource = 0
TrySend(m.broker.ToPlayer, any(m.d.Song.Patch.Copy())) TrySend(m.broker.ToPlayer, any(m.d.Song.Patch.Copy()))
} }
if m.changeType&BPMChange != 0 { if m.changeType&BPMChange != 0 {
@@ -249,6 +249,7 @@ func (m *Model) change(kind string, t ChangeType, severity ChangeSeverity) func(
if m.changeType&RowsPerBeatChange != 0 { if m.changeType&RowsPerBeatChange != 0 {
TrySend(m.broker.ToPlayer, any(RowsPerBeatMsg{m.d.Song.RowsPerBeat})) TrySend(m.broker.ToPlayer, any(RowsPerBeatMsg{m.d.Song.RowsPerBeat}))
} }
m.updateDeriveData(m.changeType)
m.undoSkipCounter++ m.undoSkipCounter++
var limit int var limit int
switch m.changeSeverity { switch m.changeSeverity {
@@ -329,7 +330,7 @@ func (m *Model) UnmarshalRecovery(bytes []byte) {
} }
m.d.ChangedSinceRecovery = false m.d.ChangedSinceRecovery = false
TrySend(m.broker.ToPlayer, any(m.d.Song.Copy())) TrySend(m.broker.ToPlayer, any(m.d.Song.Copy()))
m.initDerivedData() m.updateDeriveData(SongChange)
} }
func (m *Model) ProcessMsg(msg MsgToModel) { func (m *Model) ProcessMsg(msg MsgToModel) {
+1 -1
View File
@@ -239,7 +239,7 @@ func (s *modelFuzzState) IterateTable(name string, table tracker.Table, yield fu
table.Fill(seed % 16) table.Fill(seed % 16)
}) })
yield(name+".Add", func(p string, t *testing.T) { yield(name+".Add", func(p string, t *testing.T) {
table.Add(seed % 16) table.Add((seed>>1)%16, seed%2 == 0)
}) })
} }
+272 -157
View File
@@ -8,6 +8,7 @@ import (
"github.com/vsariola/sointu" "github.com/vsariola/sointu"
"github.com/vsariola/sointu/vm" "github.com/vsariola/sointu/vm"
"gopkg.in/yaml.v3"
) )
type ( type (
@@ -20,6 +21,7 @@ type (
up *sointu.UnitParameter up *sointu.UnitParameter
index int index int
vtable parameterVtable vtable parameterVtable
port int
} }
parameterVtable interface { parameterVtable interface {
@@ -29,12 +31,13 @@ type (
Type(*Parameter) ParameterType Type(*Parameter) ParameterType
Name(*Parameter) string Name(*Parameter) string
Hint(*Parameter) ParameterHint Hint(*Parameter) ParameterHint
Info(*Parameter) (string, bool) // additional info for the parameter, used to display send targets
LargeStep(*Parameter) int
Reset(*Parameter) Reset(*Parameter)
RoundToGrid(*Parameter, int, bool) int
} }
Params Model Params Model
ParamVertList Model
// different parameter vtables to handle different types of parameters. // different parameter vtables to handle different types of parameters.
// Casting struct{} to interface does not cause allocations. // Casting struct{} to interface does not cause allocations.
namedParameter struct{} namedParameter struct{}
@@ -54,7 +57,8 @@ type (
) )
const ( const (
IntegerParameter ParameterType = iota NoParameter ParameterType = iota
IntegerParameter
BoolParameter BoolParameter
IDParameter IDParameter
) )
@@ -67,6 +71,12 @@ func (p *Parameter) Value() int {
} }
return p.vtable.Value(p) return p.vtable.Value(p)
} }
func (p *Parameter) Port() (int, bool) {
if p.port <= 0 {
return 0, false
}
return p.port - 1, true
}
func (p *Parameter) SetValue(value int) bool { func (p *Parameter) SetValue(value int) bool {
if p.vtable == nil { if p.vtable == nil {
return false return false
@@ -78,15 +88,35 @@ func (p *Parameter) SetValue(value int) bool {
} }
return p.vtable.SetValue(p, value) return p.vtable.SetValue(p, value)
} }
func (p *Parameter) Add(delta int, snapToGrid bool) bool {
if p.vtable == nil {
return false
}
newVal := p.Value() + delta
if snapToGrid && p.vtable != nil {
newVal = p.vtable.RoundToGrid(p, newVal, delta > 0)
}
return p.SetValue(newVal)
}
func (p *Parameter) Range() IntRange { func (p *Parameter) Range() IntRange {
if p.vtable == nil { if p.vtable == nil {
return IntRange{} return IntRange{}
} }
return p.vtable.Range(p) return p.vtable.Range(p)
} }
func (p *Parameter) Neutral() int {
if p.vtable == nil {
return 0
}
if p.up != nil {
return p.up.Neutral
}
return 0
}
func (p *Parameter) Type() ParameterType { func (p *Parameter) Type() ParameterType {
if p.vtable == nil { if p.vtable == nil {
return IntegerParameter return NoParameter
} }
return p.vtable.Type(p) return p.vtable.Type(p)
} }
@@ -102,97 +132,172 @@ func (p *Parameter) Hint() ParameterHint {
} }
return p.vtable.Hint(p) return p.vtable.Hint(p)
} }
func (p *Parameter) Info() (string, bool) {
if p.vtable == nil {
return "", false
}
return p.vtable.Info(p)
}
func (p *Parameter) LargeStep() int {
if p.vtable == nil {
return 1
}
return p.vtable.LargeStep(p)
}
func (p *Parameter) Reset() { func (p *Parameter) Reset() {
if p.vtable == nil { if p.vtable == nil {
return return
} }
p.vtable.Reset(p) p.vtable.Reset(p)
} }
func (p *Parameter) UnitID() int {
if p.unit == nil {
return 0
}
return p.unit.ID
}
//
func (m *Model) ParamVertList() *ParamVertList { return (*ParamVertList)(m) }
func (pt *ParamVertList) List() List { return List{pt} }
func (pt *ParamVertList) Selected() int { return pt.d.ParamIndex }
func (pt *ParamVertList) Selected2() int { return pt.d.ParamIndex }
func (pt *ParamVertList) SetSelected(index int) { pt.d.ParamIndex = index }
func (pt *ParamVertList) SetSelected2(index int) {}
func (pt *ParamVertList) Count() int { return (*Params)(pt).Width() }
// Model and Params methods // Model and Params methods
func (m *Model) Params() *Params { return (*Params)(m) } func (m *Model) Params() *Params { return (*Params)(m) }
func (pl *Params) List() List { return List{pl} } func (pt *Params) Table() Table { return Table{pt} }
func (pl *Params) Selected() int { return pl.d.ParamIndex } func (pt *Params) Cursor() Point { return Point{pt.d.ParamIndex, pt.d.UnitIndex} }
func (pl *Params) Selected2() int { return pl.Selected() } func (pt *Params) Cursor2() Point { return Point{pt.d.ParamIndex, pt.d.UnitIndex2} }
func (pl *Params) SetSelected(value int) { pl.d.ParamIndex = max(min(value, pl.Count()-1), 0) } func (pt *Params) SetCursor(p Point) {
func (pl *Params) SetSelected2(value int) {} pt.d.ParamIndex = max(min(p.X, pt.Width()-1), 0)
pt.d.UnitIndex = max(min(p.Y, pt.Height()-1), 0)
func (pl *Params) Count() int {
count := 0
for range pl.Iterate {
count++
}
return count
} }
func (pt *Params) SetCursor2(p Point) {
func (pl *Params) SelectedItem() (ret Parameter) { pt.d.ParamIndex = max(min(p.X, pt.Width()-1), 0)
index := pl.Selected() pt.d.UnitIndex2 = max(min(p.Y, pt.Height()-1), 0)
for param := range pl.Iterate {
if index == 0 {
ret = param
}
index--
}
return
} }
func (pt *Params) Width() int {
func (pl *Params) Iterate(yield ParamYieldFunc) { if pt.d.InstrIndex < 0 || pt.d.InstrIndex >= len(pt.derived.patch) {
if pl.d.InstrIndex < 0 || pl.d.InstrIndex >= len(pl.d.Song.Patch) { return 0
return
} }
if pl.d.UnitIndex < 0 || pl.d.UnitIndex >= len(pl.d.Song.Patch[pl.d.InstrIndex].Units) { // TODO: we hack the +1 so that we always have one extra cell to draw the
return // comments. Refactor the gioui side so that we can specify the width and
// height regardless of the underlying table size
return pt.derived.patch[pt.d.InstrIndex].paramsWidth + 1
}
func (pt *Params) RowWidth(y int) int {
if pt.d.InstrIndex < 0 || pt.d.InstrIndex >= len(pt.derived.patch) || y < 0 || y >= len(pt.derived.patch[pt.d.InstrIndex].params) {
return 0
} }
unit := &pl.d.Song.Patch[pl.d.InstrIndex].Units[pl.d.UnitIndex] return len(pt.derived.patch[pt.d.InstrIndex].params[y])
unitType, ok := sointu.UnitTypes[unit.Type] }
if !ok { func (pt *Params) Height() int { return (*Model)(pt).Units().Count() }
return func (pt *Params) MoveCursor(dx, dy int) (ok bool) {
p := pt.Cursor()
p.X += dx
p.Y += dy
pt.SetCursor(p)
return p == pt.Cursor()
}
func (pt *Params) Item(p Point) Parameter {
if pt.d.InstrIndex < 0 || pt.d.InstrIndex >= len(pt.derived.patch) || p.Y < 0 || p.Y >= len(pt.derived.patch[pt.d.InstrIndex].params) || p.X < 0 || p.X >= len(pt.derived.patch[pt.d.InstrIndex].params[p.Y]) {
return Parameter{}
} }
for i, up := range unitType { return pt.derived.patch[pt.d.InstrIndex].params[p.Y][p.X]
if !up.CanSet { }
continue func (pt *Params) clear(p Point) {
} q := pt.Item(p)
if unit.Type == "oscillator" && unit.Parameters["type"] != sointu.Sample && (up.Name == "samplestart" || up.Name == "loopstart" || up.Name == "looplength") { q.Reset()
continue // don't show the sample related params unless necessary }
} func (pt *Params) set(p Point, value int) {
if !yield(Parameter{m: (*Model)(pl), unit: unit, up: &unitType[i], vtable: &namedParameter{}}) { q := pt.Item(p)
return q.SetValue(value)
} }
} func (pt *Params) add(rect Rect, delta int, largeStep bool) (ok bool) {
if unit.Type == "oscillator" && unit.Parameters["type"] == sointu.Sample { for y := rect.TopLeft.Y; y <= rect.BottomRight.Y; y++ {
if !yield(Parameter{m: (*Model)(pl), unit: unit, vtable: &gmDlsEntryParameter{}}) { for x := rect.TopLeft.X; x <= rect.BottomRight.X; x++ {
return p := Point{x, y}
} q := pt.Item(p)
} if !q.Add(delta, largeStep) {
if unit.Type == "delay" { return false
if unit.Parameters["stereo"] == 1 && len(unit.VarArgs)%2 == 1 {
unit.VarArgs = append(unit.VarArgs, 1)
}
if !yield(Parameter{m: (*Model)(pl), unit: unit, vtable: &reverbParameter{}}) {
return
}
if !yield(Parameter{m: (*Model)(pl), unit: unit, vtable: &delayLinesParameter{}}) {
return
}
for i := range unit.VarArgs {
if !yield(Parameter{m: (*Model)(pl), unit: unit, index: i, vtable: &delayTimeParameter{}}) {
return
} }
} }
} }
return true
}
type paramsTable struct {
Params [][]int `yaml:",flow"`
}
func (pt *Params) marshal(rect Rect) (data []byte, ok bool) {
width := rect.BottomRight.X - rect.TopLeft.X + 1
height := rect.BottomRight.Y - rect.TopLeft.Y + 1
var table = paramsTable{Params: make([][]int, 0, width)}
for x := 0; x < width; x++ {
table.Params = append(table.Params, make([]int, 0, rect.BottomRight.Y-rect.TopLeft.Y+1))
for y := 0; y < height; y++ {
p := pt.Item(Point{x + rect.TopLeft.X, y + rect.TopLeft.Y})
table.Params[x] = append(table.Params[x], p.Value())
}
}
ret, err := yaml.Marshal(table)
if err != nil {
return nil, false
}
return ret, true
}
func (pt *Params) unmarshal(data []byte) (paramsTable, bool) {
var table paramsTable
yaml.Unmarshal(data, &table)
if len(table.Params) == 0 {
return paramsTable{}, false
}
for i := 0; i < len(table.Params); i++ {
if len(table.Params[i]) > 0 {
return table, true
}
}
return paramsTable{}, false
}
func (pt *Params) unmarshalAtCursor(data []byte) (ret bool) {
table, ok := pt.unmarshal(data)
if !ok {
return false
}
for i := 0; i < len(table.Params); i++ {
for j, q := range table.Params[i] {
x := i + pt.Cursor().X
y := j + pt.Cursor().Y
p := pt.Item(Point{x, y})
ret = p.SetValue(q) || ret
}
}
return ret
}
func (pt *Params) unmarshalRange(rect Rect, data []byte) (ret bool) {
table, ok := pt.unmarshal(data)
if !ok {
return false
}
if len(table.Params) == 0 || len(table.Params[0]) == 0 {
return false
}
width := rect.BottomRight.X - rect.TopLeft.X + 1
height := rect.BottomRight.Y - rect.TopLeft.Y + 1
if len(table.Params) < width {
return false
}
for x := 0; x < width; x++ {
for y := 0; y < height; y++ {
if len(table.Params[0]) < height {
return false
}
p := pt.Item(Point{x + rect.TopLeft.X, y + rect.TopLeft.Y})
ret = p.SetValue(table.Params[x][y]) || ret
}
}
return ret
}
func (pt *Params) change(kind string, severity ChangeSeverity) func() {
return (*Model)(pt).change(kind, PatchChange, severity)
}
func (pt *Params) cancel() {
pt.changeCancel = true
} }
// namedParameter vtable // namedParameter vtable
@@ -207,15 +312,21 @@ func (n *namedParameter) Range(p *Parameter) IntRange {
return IntRange{Min: p.up.MinValue, Max: p.up.MaxValue} return IntRange{Min: p.up.MinValue, Max: p.up.MaxValue}
} }
func (n *namedParameter) Type(p *Parameter) ParameterType { func (n *namedParameter) Type(p *Parameter) ParameterType {
if p.up == nil || !p.up.CanSet {
return NoParameter
}
if p.unit.Type == "send" && p.up.Name == "target" { if p.unit.Type == "send" && p.up.Name == "target" {
return IDParameter return IDParameter
} }
if p.up.MinValue == 0 && p.up.MaxValue == 1 { if p.up.MinValue >= -1 && p.up.MaxValue <= 1 {
return BoolParameter return BoolParameter
} }
return IntegerParameter return IntegerParameter
} }
func (n *namedParameter) Name(p *Parameter) string { func (n *namedParameter) Name(p *Parameter) string {
if p.up.Name == "notetracking" {
return "tracking" // notetracking does not fit in the UI
}
return p.up.Name return p.up.Name
} }
func (n *namedParameter) Hint(p *Parameter) ParameterHint { func (n *namedParameter) Hint(p *Parameter) ParameterHint {
@@ -223,39 +334,15 @@ func (n *namedParameter) Hint(p *Parameter) ParameterHint {
label := strconv.Itoa(val) label := strconv.Itoa(val)
if p.up.DisplayFunc != nil { if p.up.DisplayFunc != nil {
valueInUnits, units := p.up.DisplayFunc(val) valueInUnits, units := p.up.DisplayFunc(val)
label = fmt.Sprintf("%d / %s %s", val, valueInUnits, units) label = fmt.Sprintf("%s %s", valueInUnits, units)
}
if p.unit.Type == "send" {
instrIndex, targetType, ok := p.m.UnitHintInfo(p.unit.Parameters["target"])
if p.up.Name == "voice" && val == 0 {
if ok && instrIndex != p.m.d.InstrIndex {
label = "all"
} else {
label = "self"
}
}
if p.up.Name == "port" {
if !ok {
return ParameterHint{label, false}
}
portList := sointu.Ports[targetType]
if val < 0 || val >= len(portList) {
return ParameterHint{label, false}
}
label = portList[val]
}
} }
return ParameterHint{label, true} return ParameterHint{label, true}
} }
func (n *namedParameter) Info(p *Parameter) (string, bool) { func (n *namedParameter) RoundToGrid(p *Parameter, val int, up bool) int {
sendInfo, ok := p.m.ParameterInfo(p.unit.ID, p.up.Name)
return sendInfo, ok
}
func (n *namedParameter) LargeStep(p *Parameter) int {
if p.up.Name == "transpose" { if p.up.Name == "transpose" {
return 12 return roundToGrid(val-64, 12, up) + 64
} }
return 16 return roundToGrid(val, 16, up)
} }
func (n *namedParameter) Reset(p *Parameter) { func (n *namedParameter) Reset(p *Parameter) {
v, ok := defaultUnits[p.unit.Type].Parameters[p.up.Name] v, ok := defaultUnits[p.unit.Type].Parameters[p.up.Name]
@@ -301,22 +388,36 @@ func (g *gmDlsEntryParameter) Name(p *Parameter) string {
return "sample" return "sample"
} }
func (g *gmDlsEntryParameter) Hint(p *Parameter) ParameterHint { func (g *gmDlsEntryParameter) Hint(p *Parameter) ParameterHint {
label := "0 / custom" label := "custom"
if v := g.Value(p); v > 0 { if v := g.Value(p); v > 0 {
label = fmt.Sprintf("%v / %v", v, GmDlsEntries[v-1].Name) label = GmDlsEntries[v-1].Name
} }
return ParameterHint{label, true} return ParameterHint{label, true}
} }
func (g *gmDlsEntryParameter) Info(p *Parameter) (string, bool) { func (g *gmDlsEntryParameter) RoundToGrid(p *Parameter, val int, up bool) int {
return "", false return roundToGrid(val, 16, up)
}
func (g *gmDlsEntryParameter) LargeStep(p *Parameter) int {
return 16
} }
func (g *gmDlsEntryParameter) Reset(p *Parameter) {} func (g *gmDlsEntryParameter) Reset(p *Parameter) {}
// delayTimeParameter vtable // delayTimeParameter vtable
var delayNoteTrackGrid, delayBpmTrackGrid []int
func init() {
for st := -30; st <= 30; st++ {
gridVal := int(math.Exp2(float64(st)/12)*10787 + 0.5)
delayNoteTrackGrid = append(delayNoteTrackGrid, gridVal)
}
for i := 0; i < 16; i++ {
delayBpmTrackGrid = append(delayBpmTrackGrid, 1<<i)
delayBpmTrackGrid = append(delayBpmTrackGrid, 3<<i)
delayBpmTrackGrid = append(delayBpmTrackGrid, 9<<i)
}
slices.Sort(delayBpmTrackGrid)
}
func (d *delayTimeParameter) Type(p *Parameter) ParameterType { return IntegerParameter }
func (d *delayTimeParameter) Name(p *Parameter) string { return "delaytime" }
func (d *delayTimeParameter) Value(p *Parameter) int { func (d *delayTimeParameter) Value(p *Parameter) int {
if p.index < 0 || p.index >= len(p.unit.VarArgs) { if p.index < 0 || p.index >= len(p.unit.VarArgs) {
return 1 return 1
@@ -334,23 +435,17 @@ func (d *delayTimeParameter) Range(p *Parameter) IntRange {
} }
return IntRange{Min: 1, Max: 65535} return IntRange{Min: 1, Max: 65535}
} }
func (d *delayTimeParameter) Type(p *Parameter) ParameterType {
return IntegerParameter
}
func (d *delayTimeParameter) Name(p *Parameter) string {
return "delaytime"
}
func (d *delayTimeParameter) Hint(p *Parameter) ParameterHint { func (d *delayTimeParameter) Hint(p *Parameter) ParameterHint {
val := d.Value(p) val := d.Value(p)
var text string var text string
switch p.unit.Parameters["notetracking"] { switch p.unit.Parameters["notetracking"] {
default: default:
case 0: case 0:
text = fmt.Sprintf("%v / %.3f rows", val, float32(val)/float32(p.m.d.Song.SamplesPerRow())) text = fmt.Sprintf("%.3f rows", float32(val)/float32(p.m.d.Song.SamplesPerRow()))
case 1: case 1:
relPitch := float64(val) / 10787 relPitch := float64(val) / 10787
semitones := -math.Log2(relPitch) * 12 semitones := -math.Log2(relPitch) * 12
text = fmt.Sprintf("%v / %.3f st", val, semitones) text = fmt.Sprintf("%.3f st", semitones)
case 2: case 2:
k := 0 k := 0
v := val v := val
@@ -372,7 +467,7 @@ func (d *delayTimeParameter) Hint(p *Parameter) ParameterHint {
text = fmt.Sprintf(" (1/%d dotted)", 1<<(5-k)) text = fmt.Sprintf(" (1/%d dotted)", 1<<(5-k))
} }
} }
text = fmt.Sprintf("%v / %.3f beats%s", val, float32(val)/48.0, text) text = fmt.Sprintf("%.3f beats%s", float32(val)/48.0, text)
} }
if p.unit.Parameters["stereo"] == 1 { if p.unit.Parameters["stereo"] == 1 {
if p.index < len(p.unit.VarArgs)/2 { if p.index < len(p.unit.VarArgs)/2 {
@@ -383,11 +478,15 @@ func (d *delayTimeParameter) Hint(p *Parameter) ParameterHint {
} }
return ParameterHint{text, true} return ParameterHint{text, true}
} }
func (d *delayTimeParameter) Info(p *Parameter) (string, bool) { func (d *delayTimeParameter) RoundToGrid(p *Parameter, val int, up bool) int {
return "", false switch p.unit.Parameters["notetracking"] {
} default:
func (d *delayTimeParameter) LargeStep(p *Parameter) int { return roundToGrid(val, 16, up)
return 16 case 1:
return roundToSliceGrid(val, delayNoteTrackGrid, up)
case 2:
return roundToSliceGrid(val, delayBpmTrackGrid, up)
}
} }
func (d *delayTimeParameter) Reset(p *Parameter) {} func (d *delayTimeParameter) Reset(p *Parameter) {}
@@ -412,21 +511,13 @@ func (d *delayLinesParameter) SetValue(p *Parameter, v int) bool {
p.unit.VarArgs = p.unit.VarArgs[:targetLines] p.unit.VarArgs = p.unit.VarArgs[:targetLines]
return true return true
} }
func (d *delayLinesParameter) Range(p *Parameter) IntRange { func (d *delayLinesParameter) Range(p *Parameter) IntRange { return IntRange{Min: 1, Max: 32} }
return IntRange{Min: 1, Max: 32} func (d *delayLinesParameter) Type(p *Parameter) ParameterType { return IntegerParameter }
} func (d *delayLinesParameter) Name(p *Parameter) string { return "delaylines" }
func (d *delayLinesParameter) Type(p *Parameter) ParameterType { func (r *delayLinesParameter) RoundToGrid(p *Parameter, val int, up bool) int { return val }
return IntegerParameter
}
func (d *delayLinesParameter) Name(p *Parameter) string {
return "delaylines"
}
func (d *delayLinesParameter) Hint(p *Parameter) ParameterHint { func (d *delayLinesParameter) Hint(p *Parameter) ParameterHint {
return ParameterHint{strconv.Itoa(d.Value(p)), true} return ParameterHint{strconv.Itoa(d.Value(p)), true}
} }
func (d *delayLinesParameter) Info(p *Parameter) (string, bool) {
return "", false
}
func (d *delayLinesParameter) LargeStep(p *Parameter) int { func (d *delayLinesParameter) LargeStep(p *Parameter) int {
return 4 return 4
} }
@@ -452,27 +543,51 @@ func (r *reverbParameter) SetValue(p *Parameter, v int) bool {
copy(p.unit.VarArgs, entry.varArgs) copy(p.unit.VarArgs, entry.varArgs)
return true return true
} }
func (r *reverbParameter) Range(p *Parameter) IntRange { func (r *reverbParameter) Range(p *Parameter) IntRange { return IntRange{Min: 0, Max: len(reverbs)} }
return IntRange{Min: 0, Max: len(reverbs)} func (r *reverbParameter) Type(p *Parameter) ParameterType { return IntegerParameter }
} func (r *reverbParameter) Name(p *Parameter) string { return "reverb" }
func (r *reverbParameter) Type(p *Parameter) ParameterType { func (r *reverbParameter) RoundToGrid(p *Parameter, val int, up bool) int { return val }
return IntegerParameter func (r *reverbParameter) Reset(p *Parameter) {}
}
func (r *reverbParameter) Name(p *Parameter) string {
return "reverb"
}
func (r *reverbParameter) Hint(p *Parameter) ParameterHint { func (r *reverbParameter) Hint(p *Parameter) ParameterHint {
i := r.Value(p) i := r.Value(p)
label := "0 / custom" label := "custom"
if i > 0 { if i > 0 {
label = fmt.Sprintf("%v / %v", i, reverbs[i-1].name) label = reverbs[i-1].name
} }
return ParameterHint{label, true} return ParameterHint{label, true}
} }
func (r *reverbParameter) Info(p *Parameter) (string, bool) {
return "", false func roundToGrid(value, grid int, up bool) int {
if up {
return value + mod(-value, grid)
}
return value - mod(value, grid)
} }
func (r *reverbParameter) LargeStep(p *Parameter) int {
return 1 func mod(a, b int) int {
m := a % b
if a < 0 && b < 0 {
m -= b
}
if a < 0 && b > 0 {
m += b
}
return m
}
func roundToSliceGrid(value int, grid []int, up bool) int {
if up {
for _, v := range grid {
if value < v {
return v
}
}
} else {
for i := len(grid) - 1; i >= 0; i-- {
if value > grid[i] {
return grid[i]
}
}
}
return value
} }
func (r *reverbParameter) Reset(p *Parameter) {}
+3 -2
View File
@@ -66,7 +66,7 @@ var defaultUnits = map[string]sointu.Unit{
"clip": {Type: "clip", Parameters: map[string]int{"stereo": 0}}, "clip": {Type: "clip", Parameters: map[string]int{"stereo": 0}},
"hold": {Type: "hold", Parameters: map[string]int{"stereo": 0, "holdfreq": 64}}, "hold": {Type: "hold", Parameters: map[string]int{"stereo": 0, "holdfreq": 64}},
"distort": {Type: "distort", Parameters: map[string]int{"stereo": 0, "drive": 64}}, "distort": {Type: "distort", Parameters: map[string]int{"stereo": 0, "drive": 64}},
"filter": {Type: "filter", Parameters: map[string]int{"stereo": 0, "frequency": 64, "resonance": 64, "lowpass": 1, "bandpass": 0, "highpass": 0, "negbandpass": 0, "neghighpass": 0}}, "filter": {Type: "filter", Parameters: map[string]int{"stereo": 0, "frequency": 64, "resonance": 64, "lowpass": 1, "bandpass": 0, "highpass": 0}},
"out": {Type: "out", Parameters: map[string]int{"stereo": 1, "gain": 64}}, "out": {Type: "out", Parameters: map[string]int{"stereo": 1, "gain": 64}},
"outaux": {Type: "outaux", Parameters: map[string]int{"stereo": 1, "outgain": 64, "auxgain": 64}}, "outaux": {Type: "outaux", Parameters: map[string]int{"stereo": 1, "outgain": 64, "auxgain": 64}},
"aux": {Type: "aux", Parameters: map[string]int{"stereo": 1, "gain": 64, "channel": 2}}, "aux": {Type: "aux", Parameters: map[string]int{"stereo": 1, "gain": 64, "channel": 2}},
@@ -76,7 +76,7 @@ var defaultUnits = map[string]sointu.Unit{
"in": {Type: "in", Parameters: map[string]int{"stereo": 1, "channel": 2}}, "in": {Type: "in", Parameters: map[string]int{"stereo": 1, "channel": 2}},
"speed": {Type: "speed", Parameters: map[string]int{}}, "speed": {Type: "speed", Parameters: map[string]int{}},
"compressor": {Type: "compressor", Parameters: map[string]int{"stereo": 0, "attack": 64, "release": 64, "invgain": 64, "threshold": 64, "ratio": 64}}, "compressor": {Type: "compressor", Parameters: map[string]int{"stereo": 0, "attack": 64, "release": 64, "invgain": 64, "threshold": 64, "ratio": 64}},
"send": {Type: "send", Parameters: map[string]int{"stereo": 0, "amount": 128, "voice": 0, "unit": 0, "port": 0, "sendpop": 1}}, "send": {Type: "send", Parameters: map[string]int{"stereo": 0, "amount": 64, "voice": 0, "unit": 0, "port": 0, "sendpop": 1}},
"sync": {Type: "sync", Parameters: map[string]int{}}, "sync": {Type: "sync", Parameters: map[string]int{}},
} }
@@ -157,6 +157,7 @@ func (m LoadPreset) Do() {
m.d.Song.Patch = append(m.d.Song.Patch, defaultInstrument.Copy()) m.d.Song.Patch = append(m.d.Song.Patch, defaultInstrument.Copy())
} }
newInstr := instrumentPresets[m.Index].Copy() newInstr := instrumentPresets[m.Index].Copy()
newInstr.NumVoices = clamp(m.d.Song.Patch[m.d.InstrIndex].NumVoices, 1, vm.MAX_VOICES)
m.Model.assignUnitIDs(newInstr.Units) m.Model.assignUnitIDs(newInstr.Units)
m.d.Song.Patch[m.d.InstrIndex] = newInstr m.d.Song.Patch[m.d.InstrIndex] = newInstr
} }
+2 -2
View File
@@ -25,10 +25,10 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 221 id: 221
parameters: {bandpass: 0, frequency: 13, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 13, highpass: 1, lowpass: 0, resonance: 128, stereo: 0}
- type: filter - type: filter
id: 1 id: 1
parameters: {bandpass: 0, frequency: 25, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 104, stereo: 0} parameters: {bandpass: 0, frequency: 25, highpass: 0, lowpass: 1, resonance: 104, stereo: 0}
- type: pan - type: pan
id: 222 id: 222
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+21 -12
View File
@@ -1,12 +1,9 @@
name: BassPunch name: bass-punch
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 216
id: 1 parameters: {}
parameters: {attack: 0, decay: 64, gain: 55, release: 76, stereo: 0, sustain: 64} comment: Main oscillators
- type: send
id: 2
parameters: {amount: 112, port: 4, sendpop: 0, target: 1}
- type: oscillator - type: oscillator
id: 3 id: 3
parameters: {color: 64, detune: 64, gain: 106, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 52, type: 2} parameters: {color: 64, detune: 64, gain: 106, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 52, type: 2}
@@ -16,6 +13,21 @@ units:
- type: addp - type: addp
id: 5 id: 5
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 217
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 0, decay: 64, gain: 55, release: 76, stereo: 0, sustain: 64}
- type: send
id: 2
parameters: {amount: 112, port: 4, sendpop: 0, target: 1}
- type: mulp
id: 12
parameters: {stereo: 0}
- id: 218
parameters: {}
comment: Effects & output
- type: envelope - type: envelope
id: 6 id: 6
parameters: {attack: 0, decay: 70, gain: 128, release: 70, stereo: 0, sustain: 18} parameters: {attack: 0, decay: 70, gain: 128, release: 70, stereo: 0, sustain: 18}
@@ -27,13 +39,10 @@ units:
parameters: {amount: 96, port: 0, sendpop: 1, target: 11} parameters: {amount: 96, port: 0, sendpop: 1, target: 11}
- type: filter - type: filter
id: 10 id: 10
parameters: {bandpass: 0, frequency: 39, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 74, stereo: 0} parameters: {bandpass: 0, frequency: 39, highpass: 0, lowpass: 1, resonance: 74, stereo: 0}
- type: filter - type: filter
id: 11 id: 11
parameters: {bandpass: 0, frequency: 11, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 11, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: mulp
id: 12
parameters: {stereo: 0}
- type: pan - type: pan
id: 14 id: 14
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+26 -14
View File
@@ -1,18 +1,9 @@
name: bass name: bass
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 218
id: 1 parameters: {}
parameters: {attack: 32, decay: 64, gain: 64, release: 64, stereo: 0, sustain: 64} comment: Modulations
- type: send
id: 2
parameters: {amount: 120, port: 4, sendpop: 0, target: 1}
- type: oscillator
id: 3
parameters: {color: 80, detune: 64, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 2}
- type: oscillator
id: 4
parameters: {color: 96, detune: 72, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 1}
- type: oscillator - type: oscillator
id: 5 id: 5
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 90, stereo: 0, transpose: 32, type: 0} parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 90, stereo: 0, transpose: 32, type: 0}
@@ -22,18 +13,39 @@ units:
- type: send - type: send
id: 38 id: 38
parameters: {amount: 60, port: 1, sendpop: 1, target: 4} parameters: {amount: 60, port: 1, sendpop: 1, target: 4}
- id: 219
parameters: {}
comment: Main oscillators
- type: oscillator
id: 3
parameters: {color: 80, detune: 64, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 2}
- type: oscillator
id: 4
parameters: {color: 96, detune: 72, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 1}
- type: addp - type: addp
id: 40 id: 40
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 220
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 32, decay: 64, gain: 64, release: 64, stereo: 0, sustain: 64}
- type: send
id: 2
parameters: {amount: 120, port: 4, sendpop: 0, target: 1}
- type: mulp - type: mulp
id: 217 id: 217
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 221
parameters: {}
comment: Effects & output
- type: filter - type: filter
id: 11 id: 11
parameters: {bandpass: 0, frequency: 18, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 64, stereo: 0} parameters: {bandpass: 0, frequency: 18, highpass: -1, lowpass: 1, resonance: 64, stereo: 0}
- type: filter - type: filter
id: 12 id: 12
parameters: {bandpass: 0, frequency: 32, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 48, stereo: 0} parameters: {bandpass: 0, frequency: 32, highpass: 0, lowpass: 1, resonance: 48, stereo: 0}
- type: distort - type: distort
id: 13 id: 13
parameters: {drive: 88, stereo: 0} parameters: {drive: 88, stereo: 0}
+21 -9
View File
@@ -1,30 +1,42 @@
name: dark name: dark
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 184
id: 1 parameters: {}
parameters: {attack: 0, decay: 64, gain: 128, release: 64, stereo: 0, sustain: 64} comment: Modulations
- type: oscillator
id: 2
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 2}
- type: oscillator - type: oscillator
id: 3 id: 3
parameters: {color: 128, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 52, type: 0} parameters: {color: 128, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 52, type: 0}
- type: send - type: send
id: 4 id: 4
parameters: {amount: 96, port: 3, sendpop: 1, target: 6} parameters: {amount: 96, port: 3, sendpop: 1, target: 6}
- id: 185
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 6 id: 6
parameters: {color: 64, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 127, stereo: 0, transpose: 40, type: 1} parameters: {color: 64, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 127, stereo: 0, transpose: 40, type: 1}
- type: oscillator
id: 2
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 2}
- type: mulp - type: mulp
id: 181 id: 181
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - id: 186
id: 182 parameters: {}
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 48, stereo: 0} comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 0, decay: 64, gain: 128, release: 64, stereo: 0, sustain: 64}
- type: mulp - type: mulp
id: 183 id: 183
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 187
parameters: {}
comment: Effects & output
- type: filter
id: 182
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, resonance: 48, stereo: 0}
- type: pan - type: pan
id: 10 id: 10
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+29 -17
View File
@@ -1,21 +1,24 @@
name: deepness name: deepness
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 217
id: 1 parameters: {}
parameters: {attack: 0, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 112} comment: Modulations
- type: oscillator - type: oscillator
id: 2 id: 2
parameters: {color: 128, detune: 64, gain: 117, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0} parameters: {color: 128, detune: 64, gain: 117, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0}
- type: send
id: 3
parameters: {amount: 112, port: 2, sendpop: 0, target: 211}
- type: send - type: send
id: 4 id: 4
parameters: {amount: 112, port: 3, sendpop: 0, target: 212} parameters: {amount: 112, port: 3, sendpop: 0, target: 212}
- type: send - type: send
id: 5 id: 5
parameters: {amount: 40, port: 3, sendpop: 1, target: 213} parameters: {amount: 40, port: 3, sendpop: 0, target: 213}
- type: send
id: 3
parameters: {amount: 112, port: 2, sendpop: 1, target: 211}
- id: 216
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 211 id: 211
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1} parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1}
@@ -31,22 +34,31 @@ units:
- type: addp - type: addp
id: 11 id: 11
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - id: 215
id: 12 parameters: {}
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 88, stereo: 0} comment: Main envelope
- type: filter - type: envelope
id: 13 id: 1
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 88, stereo: 0} parameters: {attack: 0, decay: 32, gain: 128, release: 64, stereo: 0, sustain: 112}
- type: mulp - type: mulp
id: 14 id: 14
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 214
parameters: {}
comment: Effects & output
- type: filter
id: 12
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, resonance: 88, stereo: 0}
- type: filter
id: 13
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, resonance: 88, stereo: 0}
- type: delay
id: 16
parameters: {damp: 64, dry: 128, feedback: 64, notetracking: 2, pregain: 64, stereo: 0}
varargs: [32]
- type: pan - type: pan
id: 15 id: 15
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: delay
id: 16
parameters: {damp: 64, dry: 128, feedback: 64, notetracking: 2, pregain: 64, stereo: 1}
varargs: [32, 32]
- type: outaux - type: outaux
id: 20 id: 20
parameters: {auxgain: 22, outgain: 21, stereo: 1} parameters: {auxgain: 22, outgain: 21, stereo: 1}
@@ -1,6 +1,9 @@
name: House Bass Organ name: house-bass-organ
numvoices: 2 numvoices: 1
units: units:
- id: 231
parameters: {}
comment: Main oscillators & envelope
- type: envelope - type: envelope
id: 207 id: 207
parameters: {attack: 37, decay: 74, gain: 78, release: 44, stereo: 0, sustain: 49} parameters: {attack: 37, decay: 74, gain: 78, release: 44, stereo: 0, sustain: 49}
@@ -16,15 +19,27 @@ units:
- type: mulp - type: mulp
id: 209 id: 209
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 232
parameters: {}
comment: Effects
- type: envelope
id: 220
parameters: {attack: 0, decay: 72, gain: 76, release: 45, stereo: 0, sustain: 47}
- type: send
id: 217
parameters: {amount: 128, port: 0, sendpop: 1, stereo: 0, target: 218, voice: 0}
- type: filter - type: filter
id: 218 id: 218
parameters: {bandpass: 0, frequency: 0, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 0, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: filter - type: filter
id: 219 id: 219
parameters: {bandpass: 0, frequency: 66, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 66, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: distort - type: distort
id: 215 id: 215
parameters: {drive: 86, stereo: 0} parameters: {drive: 86, stereo: 0}
- id: 233
parameters: {}
comment: Noise
- type: envelope - type: envelope
id: 221 id: 221
parameters: {attack: 32, decay: 53, gain: 64, release: 5, stereo: 0, sustain: 0} parameters: {attack: 32, decay: 53, gain: 64, release: 5, stereo: 0, sustain: 0}
@@ -34,12 +49,21 @@ units:
- type: mulp - type: mulp
id: 223 id: 223
parameters: {stereo: 0} parameters: {stereo: 0}
- type: loadnote
id: 226
parameters: {stereo: 0}
- type: send
id: 227
parameters: {amount: 54, port: 0, sendpop: 1, stereo: 0, target: 225, voice: 0}
- type: filter - type: filter
id: 225 id: 225
parameters: {bandpass: 0, frequency: 71, highpass: 0, lowpass: 1, negbandpass: 1, neghighpass: 0, resonance: 81, stereo: 0} parameters: {bandpass: -1, frequency: 71, highpass: 0, lowpass: 1, resonance: 81, stereo: 0}
- type: addp - type: addp
id: 224 id: 224
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 234
parameters: {}
comment: Effects & output
- type: distort - type: distort
id: 228 id: 228
parameters: {drive: 67, stereo: 0} parameters: {drive: 67, stereo: 0}
@@ -55,15 +79,3 @@ units:
- type: outaux - type: outaux
id: 212 id: 212
parameters: {auxgain: 29, outgain: 69, stereo: 1} parameters: {auxgain: 29, outgain: 69, stereo: 1}
- type: envelope
id: 220
parameters: {attack: 0, decay: 72, gain: 76, release: 45, stereo: 0, sustain: 47}
- type: send
id: 217
parameters: {amount: 128, port: 0, sendpop: 1, stereo: 0, target: 218, unit: 0, voice: 0}
- type: loadnote
id: 226
parameters: {stereo: 0}
- type: send
id: 227
parameters: {amount: 54, port: 0, sendpop: 1, stereo: 0, target: 225, unit: 0, voice: 0}
@@ -1,15 +1,9 @@
name: Mid Bass name: mid-bass
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 68
id: 1 parameters: {}
parameters: {attack: 0, decay: 72, gain: 128, release: 16, stereo: 0, sustain: 0} comment: Modulations
- type: send
id: 2
parameters: {amount: 88, port: 0, sendpop: 0, target: 13}
- type: distort
id: 3
parameters: {drive: 16, stereo: 0}
- type: noise - type: noise
id: 5 id: 5
parameters: {gain: 128, shape: 64, stereo: 0} parameters: {gain: 128, shape: 64, stereo: 0}
@@ -22,6 +16,9 @@ units:
- type: send - type: send
id: 67 id: 67
parameters: {amount: 74, port: 0, sendpop: 1, target: 14} parameters: {amount: 74, port: 0, sendpop: 1, target: 14}
- id: 69
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 10 id: 10
parameters: {color: 64, detune: 62, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 2} parameters: {color: 64, detune: 62, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 2}
@@ -31,15 +28,33 @@ units:
- type: addp - type: addp
id: 12 id: 12
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - id: 70
id: 13 parameters: {}
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} comment: Filters
- type: filter - type: filter
id: 14 id: 14
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 0} parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, resonance: 64, stereo: 0}
- type: filter
id: 13
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- id: 71
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 0, decay: 72, gain: 128, release: 16, stereo: 0, sustain: 0}
- type: send
id: 2
parameters: {amount: 88, port: 0, sendpop: 0, target: 13}
- type: distort
id: 3
parameters: {drive: 16, stereo: 0}
- type: mulp - type: mulp
id: 15 id: 15
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 72
parameters: {}
comment: Effects & output
- type: delay - type: delay
id: 16 id: 16
parameters: {damp: 64, dry: 128, feedback: 64, notetracking: 2, pregain: 64, stereo: 0} parameters: {damp: 64, dry: 128, feedback: 64, notetracking: 2, pregain: 64, stereo: 0}
+27 -15
View File
@@ -1,18 +1,9 @@
name: not-from-this-world name: not-from-this-world
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 208
id: 1 parameters: {}
parameters: {attack: 0, decay: 88, gain: 128, release: 6, stereo: 0, sustain: 128} comment: Main oscillators
- type: oscillator
id: 2
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 88, shape: 64, stereo: 0, transpose: 17, type: 0}
- type: send
id: 3
parameters: {amount: 72, port: 0, sendpop: 0, target: 13}
- type: send
id: 4
parameters: {amount: 48, port: 0, sendpop: 1, target: 15}
- type: oscillator - type: oscillator
id: 6 id: 6
parameters: {color: 56, detune: 67, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 40, type: 1} parameters: {color: 56, detune: 67, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 40, type: 1}
@@ -31,27 +22,48 @@ units:
- type: mulp - type: mulp
id: 11 id: 11
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 207
parameters: {}
comment: Modulated filters
- type: oscillator
id: 2
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 88, shape: 64, stereo: 0, transpose: 17, type: 0}
- type: send
id: 3
parameters: {amount: 72, port: 0, sendpop: 0, target: 13}
- type: send
id: 4
parameters: {amount: 48, port: 0, sendpop: 1, target: 15}
- type: push - type: push
id: 12 id: 12
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 13 id: 13
parameters: {bandpass: 1, frequency: 32, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 0} parameters: {bandpass: 1, frequency: 32, highpass: 0, lowpass: 0, resonance: 64, stereo: 0}
- type: xch - type: xch
id: 14 id: 14
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 15 id: 15
parameters: {bandpass: 1, frequency: 96, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 79, stereo: 0} parameters: {bandpass: 1, frequency: 96, highpass: 0, lowpass: 0, resonance: 79, stereo: 0}
- type: addp - type: addp
id: 16 id: 16
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 17 id: 17
parameters: {bandpass: 0, frequency: 19, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 37, stereo: 0} parameters: {bandpass: 0, frequency: 19, highpass: 1, lowpass: 0, resonance: 37, stereo: 0}
- id: 206
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 0, decay: 88, gain: 128, release: 6, stereo: 0, sustain: 128}
- type: mulp - type: mulp
id: 18 id: 18
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 205
parameters: {}
comment: Effects & output
- type: pan - type: pan
id: 19 id: 19
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
@@ -1,18 +1,21 @@
name: SlapBass name: slap-bass
numvoices: 1 numvoices: 1
units: units:
- id: 1066
parameters: {}
comment: Modulations
- type: envelope - type: envelope
id: 1059 id: 1059
parameters: {attack: 12, channel: 2, decay: 71, gain: 128, release: 74, stereo: 1, sustain: 40} parameters: {attack: 12, decay: 71, gain: 128, release: 74, stereo: 1, sustain: 40}
- type: send
id: 200
parameters: {amount: 95, damp: 64, dry: 128, feedback: 125, notetracking: 0, port: 0, pregain: 40, sendpop: 0, stereo: 1, target: 170}
- type: send - type: send
id: 30 id: 30
parameters: {amount: 37, gain: 128, port: 3, sendpop: 1, stereo: 1, target: 400, voice: 0} parameters: {amount: 37, port: 3, sendpop: 0, stereo: 1, target: 400, voice: 0}
- type: envelope - type: send
id: 21 id: 200
parameters: {attack: 40, decay: 65, gain: 74, release: 71, stereo: 0, sustain: 77} parameters: {amount: 95, port: 0, sendpop: 1, stereo: 1, target: 170}
- id: 1065
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 400 id: 400
parameters: {color: 116, detune: 64, gain: 128, lfo: 0, phase: 80, shape: 84, stereo: 0, transpose: 64, type: 0, unison: 2} parameters: {color: 116, detune: 64, gain: 128, lfo: 0, phase: 80, shape: 84, stereo: 0, transpose: 64, type: 0, unison: 2}
@@ -27,19 +30,28 @@ units:
parameters: {color: 67, detune: 64, gain: 128, looplength: 905, loopstart: 6513, phase: 0, samplestart: 1252819, shape: 105, stereo: 0, transpose: 93, type: 4, unison: 0} parameters: {color: 67, detune: 64, gain: 128, looplength: 905, loopstart: 6513, phase: 0, samplestart: 1252819, shape: 105, stereo: 0, transpose: 93, type: 4, unison: 0}
- type: filter - type: filter
id: 1035 id: 1035
parameters: {bandpass: 0, frequency: 50, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 100, stereo: 0} parameters: {bandpass: 0, frequency: 50, highpass: -1, lowpass: 1, resonance: 100, stereo: 0}
- type: addp - type: addp
id: 1032 id: 1032
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 1064
parameters: {}
comment: Main envelope
- type: envelope
id: 21
parameters: {attack: 40, decay: 65, gain: 74, release: 71, stereo: 0, sustain: 77}
- type: mulp - type: mulp
id: 22 id: 22
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 1063
parameters: {}
comment: Filters & output
- type: filter - type: filter
id: 170 id: 170
parameters: {bandpass: 0, frequency: 28, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 65, stereo: 0} parameters: {bandpass: 0, frequency: 28, highpass: 0, lowpass: 1, resonance: 65, stereo: 0}
- type: filter - type: filter
id: 1062 id: 1062
parameters: {bandpass: 0, frequency: 57, highpass: 0, lowpass: 1, negbandpass: 1, neghighpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: -1, frequency: 57, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: pan - type: pan
id: 18 id: 18
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+25 -21
View File
@@ -1,66 +1,70 @@
name: Kick name: kick
comment: 'Suggested note: C-3' comment: 'Suggested note: C-3'
numvoices: 2 numvoices: 1
units: units:
- type: envelope - id: 296
id: 261 parameters: {}
parameters: {attack: 16, decay: 51, gain: 128, release: 59, stereo: 0, sustain: 0} comment: Tick
- type: noise - type: noise
id: 269 id: 269
parameters: {gain: 103, shape: 128, stereo: 0} parameters: {gain: 103, shape: 128, stereo: 0}
- type: send - type: send
id: 268 id: 268
parameters: {amount: 81, port: 0, sendpop: 1, stereo: 0, target: 262, unit: 0, voice: 0} parameters: {amount: 81, port: 0, sendpop: 1, stereo: 0, target: 262, voice: 0}
- type: envelope
id: 261
parameters: {attack: 16, decay: 51, gain: 128, release: 59, stereo: 0, sustain: 0}
- type: oscillator - type: oscillator
id: 262 id: 262
parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 57, type: 0} parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 57, type: 0}
- type: filter - type: filter
id: 281 id: 281
parameters: {bandpass: 0, frequency: 81, highpass: 1, lowpass: 0, negbandpass: 1, neghighpass: 0, resonance: 102, stereo: 0} parameters: {bandpass: -1, frequency: 81, highpass: 1, lowpass: 0, resonance: 102, stereo: 0}
- type: mulp - type: mulp
id: 263 id: 263
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 285 - id: 297
parameters: {} parameters: {}
comment: Pitch drop
- type: envelope - type: envelope
id: 280 id: 280
parameters: {attack: 39, decay: 64, gain: 99, release: 14, stereo: 0, sustain: 4} parameters: {attack: 39, decay: 64, gain: 99, release: 14, stereo: 0, sustain: 4}
- type: send - type: send
id: 284 id: 284
parameters: {amount: 75, port: 0, sendpop: 1, stereo: 0, target: 277, unit: 0, voice: 0} parameters: {amount: 75, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- id: 286
parameters: {}
- type: noise - type: noise
id: 275 id: 275
parameters: {gain: 31, shape: 61, stereo: 0} parameters: {gain: 31, shape: 61, stereo: 0}
- type: send - type: send
id: 276 id: 276
parameters: {amount: 86, port: 0, sendpop: 1, stereo: 0, target: 277, unit: 0, voice: 0} parameters: {amount: 86, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- type: envelope - id: 285
id: 274 parameters: {}
parameters: {attack: 39, decay: 69, gain: 60, release: 42, stereo: 0, sustain: 1} comment: Body & tail
- type: oscillator - type: oscillator
id: 277 id: 277
parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 45, type: 0} parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 45, type: 0}
- type: filter - type: filter
id: 283 id: 283
parameters: {bandpass: 0, frequency: 13, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 13, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: filter - type: filter
id: 287 id: 287
parameters: {bandpass: 0, frequency: 108, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 108, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: envelope
id: 274
parameters: {attack: 39, decay: 69, gain: 60, release: 42, stereo: 0, sustain: 1}
- type: mulp - type: mulp
id: 279 id: 279
parameters: {stereo: 0} parameters: {stereo: 0}
- type: addp - type: addp
id: 271 id: 271
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 295
parameters: {}
comment: Output
- type: pan - type: pan
id: 294 id: 294
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: delay
id: 272
parameters: {damp: 23, dry: 128, feedback: 0, notetracking: 0, pregain: 48, stereo: 1}
varargs: [1, 1395]
- type: outaux - type: outaux
id: 266 id: 266
parameters: {auxgain: 0, outgain: 86, stereo: 1} parameters: {auxgain: 0, outgain: 86, stereo: 1}
@@ -1,19 +1,19 @@
name: clap edm name: clap-edm
numvoices: 1 numvoices: 1
units: units:
- type: envelope - type: envelope
id: 14 id: 14
parameters: {attack: 0, decay: 66, gain: 128, panning: 64, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 66, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: delay - type: delay
id: 15 id: 15
parameters: {auxgain: 64, damp: 0, dry: 0, feedback: 66, notetracking: 0, outgain: 64, pregain: 128, stereo: 0} parameters: {damp: 0, dry: 0, feedback: 66, notetracking: 0, pregain: 128, stereo: 0}
varargs: [1047, 693] varargs: [1047, 693]
- type: noise - type: noise
id: 16 id: 16
parameters: {gain: 65, shape: 128, stereo: 0} parameters: {gain: 65, shape: 128, stereo: 0}
- type: filter - type: filter
id: 39 id: 39
parameters: {bandpass: 1, frequency: 55, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 66, stereo: 0} parameters: {bandpass: 1, frequency: 55, highpass: 0, lowpass: 0, resonance: 66, stereo: 0}
- type: mulp - type: mulp
id: 17 id: 17
parameters: {stereo: 0} parameters: {stereo: 0}
@@ -29,7 +29,7 @@ units:
parameters: {gain: 128, shape: 79, stereo: 0} parameters: {gain: 128, shape: 79, stereo: 0}
- type: filter - type: filter
id: 23 id: 23
parameters: {bandpass: 1, frequency: 43, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 43, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: mulp - type: mulp
id: 21 id: 21
parameters: {stereo: 0} parameters: {stereo: 0}
+1 -1
View File
@@ -51,7 +51,7 @@ units:
parameters: {drive: 89, stereo: 0} parameters: {drive: 89, stereo: 0}
- type: filter - type: filter
id: 5 id: 5
parameters: {bandpass: 1, frequency: 46, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 46, stereo: 0} parameters: {bandpass: 1, frequency: 46, highpass: -1, lowpass: 1, resonance: 46, stereo: 0}
- type: pan - type: pan
id: 175 id: 175
parameters: {panning: 73, stereo: 0} parameters: {panning: 73, stereo: 0}
@@ -1,6 +1,6 @@
name: Crash909 name: crash-909
comment: Use range C-4 to G-4 comment: Use range C-4 to G-4
numvoices: 2 numvoices: 1
units: units:
- type: envelope - type: envelope
id: 1 id: 1
@@ -13,7 +13,7 @@ units:
parameters: {stereo: 1} parameters: {stereo: 1}
- type: pan - type: pan
id: 5 id: 5
parameters: {damp: 0, dry: 128, feedback: 96, notetracking: 2, panning: 50, pregain: 40, stereo: 1} parameters: {panning: 50, stereo: 1}
- type: outaux - type: outaux
id: 6 id: 6
parameters: {auxgain: 21, outgain: 70, panning: 64, stereo: 1} parameters: {auxgain: 21, outgain: 70, stereo: 1}
@@ -1,4 +1,4 @@
name: hihat closed name: hihat-closed
numvoices: 1 numvoices: 1
units: units:
- type: envelope - type: envelope
@@ -18,10 +18,10 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 15 id: 15
parameters: {bandpass: 0, frequency: 67, highpass: 0, lowpass: 0, negbandpass: 1, neghighpass: 1, resonance: 95, stereo: 0} parameters: {bandpass: -1, frequency: 67, highpass: -1, lowpass: 0, resonance: 95, stereo: 0}
- type: filter - type: filter
id: 4 id: 4
parameters: {bandpass: 0, frequency: 109, highpass: 0, lowpass: 1, negbandpass: 1, neghighpass: 0, resonance: 55, stereo: 0} parameters: {bandpass: -1, frequency: 109, highpass: 0, lowpass: 1, resonance: 55, stereo: 0}
- type: pan - type: pan
id: 5 id: 5
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
@@ -1,10 +1,13 @@
name: hihat open name: hihat-generator
comment: | comment: |
Closed hihat: Atk 8 + Dec 60 Closed hihat: Atk 8 + Dec 60
Open hihat: Atk8 + Dec75 Open hihat: Atk8 + Dec75
Shaker: Atk55 + Dec60 Shaker: Atk55 + Dec60
numvoices: 2 numvoices: 1
units: units:
- id: 333
parameters: {}
comment: Main envelopes
- type: envelope - type: envelope
id: 1 id: 1
parameters: {attack: 7, decay: 60, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 7, decay: 60, gain: 128, release: 0, stereo: 0, sustain: 0}
@@ -14,27 +17,36 @@ units:
- type: mulp - type: mulp
id: 332 id: 332
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 334
parameters: {}
comment: Noise
- type: noise - type: noise
id: 2 id: 2
parameters: {gain: 63, shape: 52, stereo: 0} parameters: {gain: 63, shape: 52, stereo: 0}
- type: mulp - type: mulp
id: 15 id: 15
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 335
parameters: {}
comment: Modulated filters
- type: noise
id: 10
parameters: {gain: 31, shape: 50, stereo: 0}
- type: send
id: 11
parameters: {amount: 51, port: 0, sendpop: 1, stereo: 0, target: 12, voice: 0}
- type: filter - type: filter
id: 12 id: 12
parameters: {bandpass: 0, frequency: 110, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 110, highpass: 1, lowpass: 0, resonance: 128, stereo: 0}
- type: filter - type: filter
id: 331 id: 331
parameters: {bandpass: 0, frequency: 94, highpass: 0, lowpass: 0, negbandpass: 1, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: -1, frequency: 94, highpass: 0, lowpass: 0, resonance: 128, stereo: 0}
- id: 336
parameters: {}
comment: Output
- type: pan - type: pan
id: 5 id: 5
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: outaux - type: outaux
id: 6 id: 6
parameters: {auxgain: 0, outgain: 59, stereo: 1} parameters: {auxgain: 0, outgain: 59, stereo: 1}
- type: noise
id: 10
parameters: {gain: 31, shape: 50, stereo: 0}
- type: send
id: 11
parameters: {amount: 51, port: 0, sendpop: 1, stereo: 0, target: 12, unit: 0, voice: 0}
@@ -1,4 +1,4 @@
name: Open hihat name: hihat-open-sample
numvoices: 1 numvoices: 1
units: units:
- type: envelope - type: envelope
@@ -1,6 +1,9 @@
name: Hihat Open name: hihat-open
numvoices: 2 numvoices: 1
units: units:
- id: 19
parameters: {}
comment: Main envelopes
- type: envelope - type: envelope
id: 1 id: 1
parameters: {attack: 12, decay: 68, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 12, decay: 68, gain: 128, release: 0, stereo: 0, sustain: 0}
@@ -10,29 +13,39 @@ units:
- type: addp - type: addp
id: 14 id: 14
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 20
parameters: {}
comment: Noise
- type: noise - type: noise
id: 2 id: 2
parameters: {gain: 63, shape: 52, stereo: 0} parameters: {gain: 63, shape: 52, stereo: 0}
- type: mulp - type: mulp
id: 15 id: 15
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 18
parameters: {}
comment: Modulated filters
- type: noise
id: 10
parameters: {gain: 9, shape: 65, stereo: 0}
- type: hold
id: 16
parameters: {holdfreq: 0, stereo: 0}
- type: send
id: 11
parameters: {amount: 42, port: 0, sendpop: 1, stereo: 0, target: 4, voice: 0}
- type: filter - type: filter
id: 4 id: 4
parameters: {bandpass: 1, frequency: 120, highpass: 1, lowpass: 0, negbandpass: 1, neghighpass: 0, resonance: 104, stereo: 0} parameters: {bandpass: 0, frequency: 120, highpass: 1, lowpass: 0, resonance: 104, stereo: 0}
- type: filter - type: filter
id: 12 id: 12
parameters: {bandpass: 0, frequency: 119, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 119, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- id: 17
parameters: {}
comment: Output
- type: pan - type: pan
id: 5 id: 5
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: outaux - type: outaux
id: 6 id: 6
parameters: {auxgain: 0, outgain: 59, stereo: 1} parameters: {auxgain: 0, outgain: 59, stereo: 1}
- type: noise
id: 10
parameters: {gain: 9, shape: 65, stereo: 0}
- type: hold
parameters: {holdfreq: 0, stereo: 0}
- type: send
id: 11
parameters: {amount: 42, port: 0, sendpop: 1, stereo: 0, target: 4, unit: 0, voice: 0}
@@ -1,4 +1,4 @@
name: hihat (sample) name: hihat-sample
numvoices: 1 numvoices: 1
units: units:
- type: envelope - type: envelope
-39
View File
@@ -1,39 +0,0 @@
name: Instr
numvoices: 1
units:
- type: oscillator
id: 2
parameters: {color: 0, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 48, stereo: 0, transpose: 76, type: 1, unison: 0}
- type: send
id: 21
parameters: {amount: 78, port: 0, sendpop: 0, stereo: 0, target: 12, unit: 0, voice: 0}
- type: send
id: 22
parameters: {amount: 86, port: 4, sendpop: 1, stereo: 0, target: 12, unit: 0, voice: 0}
- type: envelope
id: 1
parameters: {attack: 8, decay: 73, gain: 64, release: 0, stereo: 0, sustain: 0}
- type: oscillator
id: 12
parameters: {color: 128, detune: 62, gain: 128, phase: 0, shape: 60, stereo: 0, transpose: 46, type: 0, unison: 0}
- type: mulp
id: 14
parameters: {stereo: 0}
- type: envelope
id: 18
parameters: {attack: 64, decay: 64, gain: 64, release: 64, stereo: 0, sustain: 64}
- type: noise
id: 20
parameters: {gain: 64, shape: 64, stereo: 0}
- type: mulp
id: 19
parameters: {stereo: 0}
- type: addp
id: 23
parameters: {stereo: 0}
- type: pan
id: 5
parameters: {panning: 64, stereo: 0}
- type: outaux
id: 6
parameters: {auxgain: 0, outgain: 64, stereo: 1}
@@ -1,63 +1,67 @@
name: Kick name: kick-2
comment: 'Suggested note: C-3' comment: 'Suggested note: C-3'
numvoices: 2 numvoices: 1
units: units:
- id: 296
parameters: {}
comment: Tick
- type: noise
id: 269
parameters: {gain: 128, shape: 74, stereo: 0}
- type: send
id: 268
parameters: {amount: 81, port: 0, sendpop: 1, stereo: 0, target: 262, voice: 0}
- type: oscillator
id: 262
parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 76, stereo: 0, transpose: 64, type: 0}
- type: filter
id: 281
parameters: {bandpass: 1, frequency: 86, highpass: -1, lowpass: 0, resonance: 54, stereo: 0}
- type: envelope - type: envelope
id: 261 id: 261
parameters: {attack: 16, decay: 51, gain: 128, release: 59, stereo: 0, sustain: 0} parameters: {attack: 16, decay: 51, gain: 128, release: 59, stereo: 0, sustain: 0}
- type: noise
id: 269
parameters: {color: 64, detune: 64, gain: 128, phase: 0, shape: 74, stereo: 0, transpose: 64, type: 0}
- type: send
id: 268
parameters: {amount: 81, port: 0, sendpop: 1, stereo: 0, target: 262, unit: 0, voice: 0}
- type: oscillator
id: 262
parameters: {color: 128, damp: 0, detune: 64, dry: 128, feedback: 96, gain: 128, notetracking: 2, phase: 0, pregain: 40, shape: 76, stereo: 0, transpose: 64, type: 0}
- type: filter
id: 281
parameters: {bandpass: 1, frequency: 86, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 1, panning: 64, resonance: 54, stereo: 0}
- type: mulp - type: mulp
id: 263 id: 263
parameters: {auxgain: 64, outgain: 64, stereo: 0} parameters: {stereo: 0}
- id: 285 - id: 286
parameters: {} parameters: {}
comment: Pitch drop
- type: envelope - type: envelope
id: 280 id: 280
parameters: {attack: 39, decay: 64, gain: 99, release: 14, stereo: 0, sustain: 4} parameters: {attack: 39, decay: 64, gain: 99, release: 14, stereo: 0, sustain: 4}
- type: send - type: send
id: 284 id: 284
parameters: {amount: 75, port: 0, sendpop: 1, stereo: 0, target: 277, unit: 0, voice: 0} parameters: {amount: 75, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- id: 286
parameters: {}
- type: noise - type: noise
id: 275 id: 275
parameters: {gain: 33, shape: 80, stereo: 0} parameters: {gain: 33, shape: 80, stereo: 0}
- type: send - type: send
id: 276 id: 276
parameters: {amount: 86, port: 0, sendpop: 1, stereo: 0, target: 277, unit: 0, voice: 0} parameters: {amount: 86, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- type: envelope - id: 297
id: 274 parameters: {}
parameters: {attack: 39, decay: 69, gain: 60, release: 42, stereo: 0, sustain: 1} comment: Body & tail
- type: oscillator - type: oscillator
id: 277 id: 277
parameters: {color: 128, detune: 64, gain: 110, phase: 0, shape: 64, stereo: 0, transpose: 45, type: 0} parameters: {color: 128, detune: 64, gain: 110, phase: 0, shape: 64, stereo: 0, transpose: 45, type: 0}
- type: filter - type: filter
id: 283 id: 283
parameters: {bandpass: 0, frequency: 17, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 98, stereo: 0} parameters: {bandpass: 0, frequency: 17, highpass: -1, lowpass: 1, resonance: 98, stereo: 0}
- type: envelope
id: 274
parameters: {attack: 39, decay: 69, gain: 60, release: 42, stereo: 0, sustain: 1}
- type: mulp - type: mulp
id: 279 id: 279
parameters: {stereo: 0} parameters: {stereo: 0}
- type: addp - type: addp
id: 271 id: 271
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 295
parameters: {}
comment: Output
- type: pan - type: pan
id: 294 id: 294
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: delay
id: 272
parameters: {damp: 23, dry: 128, feedback: 0, notetracking: 0, pregain: 35, stereo: 1}
varargs: [1, 1395]
- type: outaux - type: outaux
id: 266 id: 266
parameters: {auxgain: 0, outgain: 123, stereo: 1} parameters: {auxgain: 0, outgain: 123, stereo: 1}
@@ -1,27 +1,31 @@
name: Kick 3 name: kick-3
comment: 'Suggested note: C-3' comment: 'Suggested note: C-3'
numvoices: 2 numvoices: 1
units: units:
- id: 336
parameters: {}
comment: Tick
- type: noise
id: 269
parameters: {gain: 128, shape: 73, stereo: 0}
- type: filter
id: 333
parameters: {bandpass: 1, frequency: 59, highpass: 0, lowpass: 0, resonance: 128, stereo: 0}
- type: envelope - type: envelope
id: 261 id: 261
parameters: {attack: 0, decay: 48, gain: 65, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 48, gain: 65, release: 0, stereo: 0, sustain: 0}
- type: noise
id: 269
parameters: {color: 64, detune: 64, gain: 128, phase: 0, shape: 73, stereo: 0, transpose: 64, type: 0}
- type: filter
id: 333
parameters: {bandpass: 1, frequency: 59, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0}
- type: mulp - type: mulp
id: 263 id: 263
parameters: {auxgain: 64, outgain: 64, stereo: 0} parameters: {stereo: 0}
- id: 285 - id: 286
parameters: {} parameters: {}
comment: Pitch drop
- type: noise - type: noise
id: 275 id: 275
parameters: {gain: 103, shape: 31, stereo: 0} parameters: {gain: 103, shape: 31, stereo: 0}
- type: send - type: send
id: 276 id: 276
parameters: {amount: 79, port: 0, sendpop: 1, stereo: 0, target: 277, unit: 0, voice: 0} parameters: {amount: 79, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- type: envelope - type: envelope
id: 280 id: 280
parameters: {attack: 0, decay: 67, gain: 90, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 67, gain: 90, release: 0, stereo: 0, sustain: 0}
@@ -33,32 +37,31 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: send - type: send
id: 284 id: 284
parameters: {amount: 73, port: 0, sendpop: 1, stereo: 0, target: 277, unit: 0, voice: 0} parameters: {amount: 73, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- id: 286 - id: 285
parameters: {} parameters: {}
- type: envelope comment: Body & tail
id: 274
parameters: {attack: 0, decay: 73, gain: 117, release: 0, stereo: 0, sustain: 0}
- type: oscillator - type: oscillator
id: 277 id: 277
parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 74, stereo: 0, transpose: 41, type: 0} parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 74, stereo: 0, transpose: 41, type: 0}
- type: filter - type: filter
id: 283 id: 283
parameters: {bandpass: 0, frequency: 10, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 54, stereo: 0} parameters: {bandpass: 0, frequency: 10, highpass: 1, lowpass: 0, resonance: 54, stereo: 0}
- type: envelope
id: 274
parameters: {attack: 0, decay: 73, gain: 117, release: 0, stereo: 0, sustain: 0}
- type: mulp - type: mulp
id: 279 id: 279
parameters: {stereo: 0} parameters: {stereo: 0}
- type: addp - type: addp
id: 271 id: 271
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 337
parameters: {}
comment: Output
- type: pan - type: pan
id: 294 id: 294
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: delay
id: 272
parameters: {damp: 23, dry: 128, feedback: 0, notetracking: 0, pregain: 35, stereo: 1}
varargs: [1, 1395]
disabled: true
- type: outaux - type: outaux
id: 266 id: 266
parameters: {auxgain: 0, outgain: 65, stereo: 1} parameters: {auxgain: 0, outgain: 65, stereo: 1}
@@ -1,27 +1,31 @@
name: Kick 3 name: kick-4
comment: 'Suggested note: C-3' comment: 'Suggested note: C-3'
numvoices: 2 numvoices: 1
units: units:
- id: 339
parameters: {}
comment: Tick
- type: noise
id: 269
parameters: {gain: 128, shape: 70, stereo: 0}
- type: filter
id: 333
parameters: {bandpass: 1, frequency: 41, highpass: 0, lowpass: 0, resonance: 78, stereo: 0}
- type: envelope - type: envelope
id: 261 id: 261
parameters: {attack: 0, decay: 51, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 51, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: noise
id: 269
parameters: {color: 64, detune: 64, gain: 128, phase: 0, shape: 70, stereo: 0, transpose: 64, type: 0}
- type: filter
id: 333
parameters: {bandpass: 1, frequency: 41, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 78, stereo: 0}
- type: mulp - type: mulp
id: 263 id: 263
parameters: {auxgain: 64, outgain: 64, stereo: 0} parameters: {stereo: 0}
- id: 285 - id: 285
parameters: {} parameters: {}
comment: Pitch drop
- type: noise - type: noise
id: 275 id: 275
parameters: {gain: 64, shape: 12, stereo: 0} parameters: {gain: 64, shape: 12, stereo: 0}
- type: send - type: send
id: 276 id: 276
parameters: {amount: 84, port: 0, sendpop: 1, stereo: 0, target: 277, unit: 0, voice: 0} parameters: {amount: 84, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- type: envelope - type: envelope
id: 280 id: 280
parameters: {attack: 0, decay: 64, gain: 83, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 64, gain: 83, release: 0, stereo: 0, sustain: 0}
@@ -33,18 +37,19 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: send - type: send
id: 284 id: 284
parameters: {amount: 75, port: 0, sendpop: 1, stereo: 0, target: 277, unit: 0, voice: 0} parameters: {amount: 75, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- id: 286 - id: 286
parameters: {} parameters: {}
- type: envelope comment: Body & tail
id: 274
parameters: {attack: 41, decay: 69, gain: 65, release: 0, stereo: 0, sustain: 0}
- type: oscillator - type: oscillator
id: 277 id: 277
parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 42, type: 0} parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 42, type: 0}
- type: filter - type: filter
id: 283 id: 283
parameters: {bandpass: 0, frequency: 14, highpass: 0, lowpass: 0, negbandpass: 1, neghighpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: -1, frequency: 14, highpass: -1, lowpass: 0, resonance: 128, stereo: 0}
- type: envelope
id: 274
parameters: {attack: 41, decay: 69, gain: 65, release: 0, stereo: 0, sustain: 0}
- type: mulp - type: mulp
id: 279 id: 279
parameters: {stereo: 0} parameters: {stereo: 0}
@@ -54,9 +59,12 @@ units:
- type: addp - type: addp
id: 271 id: 271
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 338
parameters: {}
comment: Output
- type: filter - type: filter
id: 337 id: 337
parameters: {bandpass: 1, frequency: 10, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 10, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: pan - type: pan
id: 294 id: 294
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
@@ -1,27 +1,16 @@
name: Kick 5 name: kick-5
comment: 'Suggested note: C-3' comment: 'Suggested note: C-3'
numvoices: 2 numvoices: 1
units: units:
- type: envelope
id: 261
parameters: {attack: 0, decay: 51, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: noise
id: 269
parameters: {color: 64, detune: 64, gain: 128, phase: 0, shape: 108, stereo: 0, transpose: 64, type: 0}
- type: filter
id: 333
parameters: {bandpass: 1, frequency: 50, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0}
- type: mulp
id: 263
parameters: {auxgain: 64, outgain: 64, stereo: 0}
- id: 285 - id: 285
parameters: {} parameters: {}
comment: Pitch drop
- type: noise - type: noise
id: 275 id: 275
parameters: {gain: 92, shape: 33, stereo: 0} parameters: {gain: 92, shape: 33, stereo: 0}
- type: send - type: send
id: 276 id: 276
parameters: {amount: 77, port: 0, sendpop: 1, stereo: 0, target: 277, unit: 0, voice: 0} parameters: {amount: 77, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- type: envelope - type: envelope
id: 280 id: 280
parameters: {attack: 0, decay: 63, gain: 90, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 63, gain: 90, release: 0, stereo: 0, sustain: 0}
@@ -33,9 +22,16 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: send - type: send
id: 284 id: 284
parameters: {amount: 75, port: 0, sendpop: 1, stereo: 0, target: 277, unit: 0, voice: 0} parameters: {amount: 75, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- id: 286 - id: 286
parameters: {} parameters: {}
comment: Body & tail
- type: oscillator
id: 277
parameters: {color: 128, detune: 64, gain: 104, phase: 0, shape: 64, stereo: 0, transpose: 46, type: 0}
- type: filter
id: 283
parameters: {bandpass: 1, frequency: 10, highpass: 1, lowpass: 0, resonance: 39, stereo: 0}
- type: envelope - type: envelope
id: 274 id: 274
parameters: {attack: 48, decay: 74, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 48, decay: 74, gain: 128, release: 0, stereo: 0, sustain: 0}
@@ -45,18 +41,30 @@ units:
- type: mulp - type: mulp
id: 337 id: 337
parameters: {stereo: 0} parameters: {stereo: 0}
- type: oscillator
id: 277
parameters: {color: 128, detune: 64, gain: 104, phase: 0, shape: 64, stereo: 0, transpose: 46, type: 0}
- type: filter
id: 283
parameters: {bandpass: 1, frequency: 10, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 39, stereo: 0}
- type: mulp - type: mulp
id: 279 id: 279
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 339
parameters: {}
comment: Tick
- type: envelope
id: 261
parameters: {attack: 0, decay: 51, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: noise
id: 269
parameters: {gain: 128, shape: 108, stereo: 0}
- type: filter
id: 333
parameters: {bandpass: 1, frequency: 50, highpass: 0, lowpass: 0, resonance: 128, stereo: 0}
- type: mulp
id: 263
parameters: {stereo: 0}
- type: addp - type: addp
id: 271 id: 271
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 338
parameters: {}
comment: Output
- type: pan - type: pan
id: 294 id: 294
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
@@ -1,54 +1,60 @@
name: kick test name: kick-6
numvoices: 1 numvoices: 1
units: units:
- type: oscillator
id: 2
parameters: {color: 0, detune: 64, gain: 80, lfo: 1, phase: 0, shape: 35, stereo: 0, transpose: 72, type: 1, unison: 1}
- type: send
id: 21
parameters: {amount: 78, port: 0, sendpop: 1, stereo: 0, target: 12, unit: 0, voice: 0}
- type: oscillator
id: 24
parameters: {color: 0, detune: 64, gain: 59, lfo: 1, phase: 0, shape: 88, stereo: 0, transpose: 64, type: 1, unison: 1}
- type: send
id: 22
parameters: {amount: 89, port: 4, sendpop: 1, stereo: 0, target: 12, unit: 0, voice: 0}
- type: envelope
id: 1
parameters: {attack: 0, decay: 72, gain: 64, release: 0, stereo: 0, sustain: 0}
- type: oscillator
id: 12
parameters: {color: 128, detune: 71, gain: 67, phase: 0, shape: 64, stereo: 0, transpose: 46, type: 0, unison: 2}
- type: mulp
id: 23
parameters: {stereo: 0}
- type: filter
id: 25
parameters: {bandpass: 0, frequency: 12, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 36, stereo: 0}
- id: 33 - id: 33
parameters: {} parameters: {}
- type: envelope comment: Tick
id: 26
parameters: {attack: 0, decay: 48, gain: 125, release: 0, stereo: 0, sustain: 0}
- type: noise - type: noise
id: 29 id: 29
parameters: {gain: 125, shape: 51, stereo: 0} parameters: {gain: 125, shape: 51, stereo: 0}
- type: filter - type: filter
id: 32 id: 32
parameters: {bandpass: 1, frequency: 55, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 55, highpass: 0, lowpass: 0, resonance: 128, stereo: 0}
- type: envelope
id: 26
parameters: {attack: 0, decay: 48, gain: 125, release: 0, stereo: 0, sustain: 0}
- type: mulp - type: mulp
id: 28 id: 28
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 35
parameters: {}
comment: Modulations
- type: oscillator
id: 24
parameters: {color: 0, detune: 64, gain: 59, lfo: 1, phase: 0, shape: 88, stereo: 0, transpose: 64, type: 1, unison: 1}
- type: send
id: 22
parameters: {amount: 89, port: 4, sendpop: 1, stereo: 0, target: 12, voice: 0}
- type: oscillator
id: 2
parameters: {color: 0, detune: 64, gain: 80, lfo: 1, phase: 0, shape: 35, stereo: 0, transpose: 72, type: 1, unison: 1}
- type: send
id: 21
parameters: {amount: 78, port: 0, sendpop: 1, stereo: 0, target: 12, voice: 0}
- id: 36
parameters: {}
comment: Body & tail
- type: oscillator
id: 12
parameters: {color: 128, detune: 71, gain: 67, phase: 0, shape: 64, stereo: 0, transpose: 46, type: 0, unison: 2}
- type: envelope
id: 1
parameters: {attack: 0, decay: 72, gain: 64, release: 0, stereo: 0, sustain: 0}
- type: mulp
id: 23
parameters: {stereo: 0}
- type: filter
id: 25
parameters: {bandpass: 0, frequency: 12, highpass: 1, lowpass: 0, resonance: 36, stereo: 0}
- type: addp - type: addp
id: 30 id: 30
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 34
parameters: {}
comment: Output
- type: pan - type: pan
id: 5 id: 5
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: delay
id: 31
parameters: {damp: 0, dry: 123, feedback: 0, notetracking: 0, pregain: 34, stereo: 0}
varargs: [1, 350]
- type: outaux - type: outaux
id: 6 id: 6
parameters: {auxgain: 0, outgain: 64, stereo: 1} parameters: {auxgain: 0, outgain: 64, stereo: 1}
@@ -1,40 +1,52 @@
name: kick edm name: kick-edm-2
comment: A#2 comment: A#2
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 130
id: 105 parameters: {}
parameters: {attack: 0, channel: 2, decay: 71, gain: 55, release: 0, stereo: 0, sustain: 0} comment: Pitch drop
- type: oscillator
id: 106
parameters: {color: 128, detune: 69, gain: 128, lfo: 0, phase: 64, shape: 80, stereo: 0, transpose: 70, type: 0, unison: 3}
- type: mulp
id: 129
parameters: {stereo: 0}
- type: envelope
id: 110
parameters: {attack: 0, decay: 74, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: oscillator
id: 128
parameters: {color: 59, detune: 64, gain: 80, looplength: 1, loopstart: 1034, phase: 0, samplestart: 741926, shape: 69, stereo: 0, transpose: 76, type: 4}
- type: filter
id: 113
parameters: {bandpass: 0, frequency: 108, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0}
- type: mulp
id: 10
parameters: {stereo: 0}
- type: addp
id: 127
parameters: {stereo: 0}
- type: pan
id: 114
parameters: {panning: 64, stereo: 0}
- type: outaux
id: 118
parameters: {auxgain: 0, outgain: 78, stereo: 1}
- type: envelope - type: envelope
id: 119 id: 119
parameters: {attack: 75, decay: 0, gain: 128, release: 0, stereo: 0, sustain: 128} parameters: {attack: 75, decay: 0, gain: 128, release: 0, stereo: 0, sustain: 128}
- type: send - type: send
id: 122 id: 122
parameters: {amount: 40, port: 0, sendpop: 1, target: 106} parameters: {amount: 40, port: 0, sendpop: 1, target: 106}
- id: 131
parameters: {}
comment: Body & tail
- type: oscillator
id: 106
parameters: {color: 128, detune: 69, gain: 128, lfo: 0, phase: 64, shape: 80, stereo: 0, transpose: 70, type: 0, unison: 3}
- type: envelope
id: 105
parameters: {attack: 0, decay: 71, gain: 55, release: 0, stereo: 0, sustain: 0}
- type: mulp
id: 129
parameters: {stereo: 0}
- id: 132
parameters: {}
comment: Tick
- type: oscillator
id: 128
parameters: {color: 59, detune: 64, gain: 80, looplength: 1, loopstart: 1034, phase: 0, samplestart: 741926, shape: 69, stereo: 0, transpose: 76, type: 4}
- type: filter
id: 113
parameters: {bandpass: 0, frequency: 108, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: envelope
id: 110
parameters: {attack: 0, decay: 74, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: mulp
id: 10
parameters: {stereo: 0}
- type: addp
id: 127
parameters: {stereo: 0}
- id: 133
parameters: {}
comment: Output
- type: pan
id: 114
parameters: {panning: 64, stereo: 0}
- type: outaux
id: 118
parameters: {auxgain: 0, outgain: 78, stereo: 1}
@@ -1,55 +1,10 @@
name: kick edm name: kick-edm
comment: A#2 comment: A#2
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 128
id: 105 parameters: {}
parameters: {attack: 29, channel: 2, decay: 65, gain: 71, release: 0, stereo: 0, sustain: 0} comment: Pitch drop
- type: oscillator
id: 106
parameters: {color: 115, detune: 64, gain: 54, lfo: 0, phase: 42, shape: 114, stereo: 0, transpose: 88, type: 1, unison: 1}
- type: distort
id: 107
parameters: {drive: 69, stereo: 0}
- type: mulp
id: 126
parameters: {stereo: 0}
- type: envelope
id: 110
parameters: {attack: 0, decay: 43, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: noise
id: 111
parameters: {gain: 102, shape: 84, stereo: 0}
- type: filter
id: 112
parameters: {bandpass: 0, frequency: 124, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 41, stereo: 0}
- type: filter
id: 113
parameters: {bandpass: 0, frequency: 84, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 87, stereo: 0}
- type: mulp
id: 10
parameters: {stereo: 0}
- type: addp
id: 127
parameters: {stereo: 0}
- type: filter
id: 12
parameters: {bandpass: 0, frequency: 14, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 75, stereo: 0}
- type: filter
id: 13
parameters: {bandpass: 0, frequency: 53, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0}
- type: filter
id: 14
parameters: {bandpass: 0, frequency: 7, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 76, stereo: 0}
- type: filter
id: 15
parameters: {bandpass: 0, frequency: 13, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 54, stereo: 0}
- type: pan
id: 114
parameters: {panning: 64, stereo: 0}
- type: outaux
id: 118
parameters: {auxgain: 0, outgain: 78, stereo: 1}
- type: envelope - type: envelope
id: 119 id: 119
parameters: {attack: 71, decay: 128, gain: 128, release: 0, stereo: 0, sustain: 74} parameters: {attack: 71, decay: 128, gain: 128, release: 0, stereo: 0, sustain: 74}
@@ -62,3 +17,63 @@ units:
- type: send - type: send
id: 122 id: 122
parameters: {amount: 0, port: 0, sendpop: 1, target: 106} parameters: {amount: 0, port: 0, sendpop: 1, target: 106}
- id: 129
parameters: {}
comment: Body & tail
- type: envelope
id: 105
parameters: {attack: 29, decay: 65, gain: 71, release: 0, stereo: 0, sustain: 0}
- type: oscillator
id: 106
parameters: {color: 115, detune: 64, gain: 54, lfo: 0, phase: 42, shape: 114, stereo: 0, transpose: 88, type: 1, unison: 1}
- type: distort
id: 107
parameters: {drive: 69, stereo: 0}
- type: mulp
id: 126
parameters: {stereo: 0}
- id: 130
parameters: {}
comment: Tick
- type: envelope
id: 110
parameters: {attack: 0, decay: 43, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: noise
id: 111
parameters: {gain: 102, shape: 84, stereo: 0}
- type: filter
id: 112
parameters: {bandpass: 0, frequency: 124, highpass: -1, lowpass: 1, resonance: 41, stereo: 0}
- type: filter
id: 113
parameters: {bandpass: 0, frequency: 84, highpass: 0, lowpass: 1, resonance: 87, stereo: 0}
- type: mulp
id: 10
parameters: {stereo: 0}
- type: addp
id: 127
parameters: {stereo: 0}
- id: 131
parameters: {}
comment: Filters
- type: filter
id: 12
parameters: {bandpass: 0, frequency: 14, highpass: -1, lowpass: 1, resonance: 75, stereo: 0}
- type: filter
id: 13
parameters: {bandpass: 0, frequency: 53, highpass: 1, lowpass: 1, resonance: 128, stereo: 0}
- type: filter
id: 14
parameters: {bandpass: 0, frequency: 7, highpass: 1, lowpass: 0, resonance: 76, stereo: 0}
- type: filter
id: 15
parameters: {bandpass: 0, frequency: 13, highpass: 1, lowpass: 0, resonance: 54, stereo: 0}
- id: 132
parameters: {}
comment: Output
- type: pan
id: 114
parameters: {panning: 64, stereo: 0}
- type: outaux
id: 118
parameters: {auxgain: 0, outgain: 78, stereo: 1}
@@ -1,4 +1,4 @@
name: Kick name: kick-sample
numvoices: 1 numvoices: 1
units: units:
- type: envelope - type: envelope
@@ -12,10 +12,10 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 1042 id: 1042
parameters: {bandpass: 0, frequency: 10, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 57, stereo: 0} parameters: {bandpass: 0, frequency: 10, highpass: -1, lowpass: 1, resonance: 57, stereo: 0}
- type: filter - type: filter
id: 1043 id: 1043
parameters: {bandpass: 1, frequency: 70, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 23, stereo: 0} parameters: {bandpass: 1, frequency: 70, highpass: -1, lowpass: 1, resonance: 23, stereo: 0}
- type: pan - type: pan
id: 1040 id: 1040
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+77 -25
View File
@@ -1,32 +1,84 @@
name: Rimshot name: rimshot
numvoices: 1 numvoices: 1
units: units:
- id: 3021
parameters: {}
comment: Modulations
- type: envelope
id: 3002
parameters: {attack: 0, decay: 48, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 3003
parameters: {amount: 107, port: 0, sendpop: 0, target: 3005}
- type: send
id: 3004
parameters: {amount: 80, port: 0, sendpop: 1, target: 3006}
- id: 3022
parameters: {}
comment: Main oscillators
- type: oscillator
id: 3005
parameters: {color: 128, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 32, stereo: 0, transpose: 64, type: 0}
- type: oscillator
id: 3006
parameters: {color: 128, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 80, stereo: 0, transpose: 64, type: 0}
- type: addp
id: 3010
parameters: {stereo: 0}
- id: 3023
parameters: {}
comment: Noise
- type: noise
id: 3007
parameters: {gain: 48, shape: 47, stereo: 0}
- type: filter
id: 3008
parameters: {bandpass: 1, frequency: 86, highpass: 0, lowpass: 1, resonance: 59, stereo: 0}
- type: filter
id: 3009
parameters: {bandpass: 1, frequency: 56, highpass: 1, lowpass: 1, resonance: 4, stereo: 0}
- type: addp
id: 3011
parameters: {stereo: 0}
- type: distort
id: 3012
parameters: {drive: 76, stereo: 0}
- id: 3024
parameters: {}
comment: Main envelope
- type: envelope - type: envelope
id: 3000 id: 3000
parameters: {attack: 0, decay: 76, gain: 51, release: 74, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 76, gain: 51, release: 74, stereo: 0, sustain: 0}
- type: send - type: send
parameters: {amount: 128, port: 4, sendpop: 0, target: 3000}
- type: envelope parameters: {attack: 0, decay: 48, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send parameters: {amount: 107, port: 0, sendpop: 0, target: 3001}
- type: send
parameters: {amount: 80, port: 0, sendpop: 1, target: 3002}
- type: oscillator
id: 3001 id: 3001
parameters: {color: 128, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 32, stereo: 0, transpose: 64, type: 0} parameters: {amount: 128, port: 4, sendpop: 0, stereo: 0, target: 3000}
- type: oscillator - type: mulp
id: 3002 id: 3013
parameters: {color: 128, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 80, stereo: 0, transpose: 64, type: 0} parameters: {stereo: 0}
- type: noise parameters: {gain: 48, shape: 47, stereo: 0} - id: 3025
- type: filter parameters: {bandpass: 1, frequency: 86, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 59, stereo: 0} parameters: {}
- type: filter parameters: {bandpass: 1, frequency: 56, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 4, stereo: 0} comment: Effects
- type: addp parameters: {stereo: 0} - type: dbgain
- type: addp parameters: {stereo: 0} id: 3014
- type: distort parameters: {drive: 76, stereo: 0} parameters: {decibels: 37, stereo: 0}
- type: mulp parameters: {stereo: 0} - type: compressor
- type: dbgain parameters: {decibels: 37, stereo: 0} id: 3015
- type: compressor parameters: {attack: 46, invgain: 114, ratio: 110, release: 49, stereo: 0, threshold: 62} parameters: {attack: 46, invgain: 114, ratio: 110, release: 49, stereo: 0, threshold: 64}
- type: mulp parameters: {stereo: 0} - type: mulp
- type: filter parameters: {bandpass: 0, frequency: 39, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 17, stereo: 0} id: 3016
- type: filter parameters: {bandpass: 0, frequency: 48, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {stereo: 0}
- type: pan parameters: {panning: 64, stereo: 0} - type: filter
- type: outaux parameters: {auxgain: 0, outgain: 48, stereo: 1} id: 3017
parameters: {bandpass: 0, frequency: 39, highpass: 1, lowpass: 0, resonance: 17, stereo: 0}
- type: filter
id: 3018
parameters: {bandpass: 0, frequency: 48, highpass: 1, lowpass: 0, resonance: 128, stereo: 0}
- id: 3026
parameters: {}
comment: Output
- type: pan
id: 3019
parameters: {panning: 64, stereo: 0}
- type: outaux
id: 3020
parameters: {auxgain: 0, outgain: 48, stereo: 1}
@@ -1,7 +1,10 @@
name: snare name: snare-2
comment: 'suggested note: E-4' comment: 'suggested note: E-4'
numvoices: 1 numvoices: 1
units: units:
- id: 340
parameters: {}
comment: Tom
- type: envelope - type: envelope
id: 288 id: 288
parameters: {attack: 0, decay: 53, gain: 64, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 53, gain: 64, release: 0, stereo: 0, sustain: 0}
@@ -11,14 +14,13 @@ units:
- type: mulp - type: mulp
id: 305 id: 305
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 338
parameters: {}
- type: delay - type: delay
id: 309 id: 309
parameters: {damp: 59, dry: 128, feedback: 90, notetracking: 0, pregain: 80, stereo: 0} parameters: {damp: 59, dry: 128, feedback: 90, notetracking: 0, pregain: 80, stereo: 0}
varargs: [235] varargs: [235]
- id: 329 - id: 329
parameters: {} parameters: {}
comment: Snare
- type: envelope - type: envelope
id: 313 id: 313
parameters: {attack: 0, decay: 68, gain: 73, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 68, gain: 73, release: 0, stereo: 0, sustain: 0}
@@ -33,12 +35,13 @@ units:
parameters: {drive: 10, stereo: 0} parameters: {drive: 10, stereo: 0}
- type: filter - type: filter
id: 339 id: 339
parameters: {bandpass: 0, frequency: 60, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 60, highpass: -1, lowpass: 0, resonance: 128, stereo: 0}
- type: addp - type: addp
id: 316 id: 316
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 328 - id: 328
parameters: {} parameters: {}
comment: Effects & output
- type: pan - type: pan
id: 292 id: 292
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
@@ -1,4 +1,4 @@
name: Snare (Adam) name: snare-adam
comment: | comment: |
Author: pestis/bC!. Suggested note: F#3. Originally from: 4k intro Adam. Author: pestis/bC!. Suggested note: F#3. Originally from: 4k intro Adam.
@@ -13,45 +13,73 @@ comment: |
Envelope-distort-send: Quickly drop the pitch of the tom from high to neutral. Envelope-distort-send: Quickly drop the pitch of the tom from high to neutral.
numvoices: 1 numvoices: 1
units: units:
- id: 31
parameters: {}
comment: Pitch drop
- type: envelope - type: envelope
id: 28
parameters: {attack: 0, decay: 60, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: distort
id: 29
parameters: {drive: 5, stereo: 0}
- type: send
id: 30
parameters: {amount: 90, port: 0, sendpop: 1, stereo: 0, target: 1, voice: 0}
- id: 32
parameters: {}
comment: Tom
- type: envelope
id: 10
parameters: {attack: 32, decay: 60, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 32, decay: 60, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: oscillator - type: oscillator
id: 1 id: 1
parameters: {color: 64, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1} parameters: {color: 64, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1}
- type: mulp - type: mulp
id: 11
parameters: {stereo: 0} parameters: {stereo: 0}
- parameters: {} - id: 12
parameters: {}
comment: Snare
- type: envelope - type: envelope
id: 13
parameters: {attack: 32, decay: 64, gain: 64, release: 66, stereo: 0, sustain: 0} parameters: {attack: 32, decay: 64, gain: 64, release: 66, stereo: 0, sustain: 0}
- type: distort - type: distort
id: 14
parameters: {drive: 32, stereo: 0} parameters: {drive: 32, stereo: 0}
- type: noise - type: noise
id: 15
parameters: {gain: 64, shape: 64, stereo: 0} parameters: {gain: 64, shape: 64, stereo: 0}
- type: mulp - type: mulp
id: 16
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
parameters: {bandpass: 0, frequency: 106, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} id: 17
parameters: {bandpass: 0, frequency: 106, highpass: 1, lowpass: 0, resonance: 128, stereo: 0}
- type: addp - type: addp
id: 18
parameters: {stereo: 0} parameters: {stereo: 0}
- parameters: {} - id: 19
parameters: {}
comment: Effects
- type: distort - type: distort
id: 20
parameters: {drive: 112, stereo: 0} parameters: {drive: 112, stereo: 0}
- type: delay - type: delay
parameters: {count: 8, damp: 0, delay: 1, dry: 128, feedback: 40, notetracking: 0, pregain: 24, stereo: 0} id: 21
parameters: {damp: 0, dry: 128, feedback: 40, notetracking: 0, pregain: 24, stereo: 0}
varargs: [1116, 1188, 1276, 1356, 1422, 1492, 1556, 1618] varargs: [1116, 1188, 1276, 1356, 1422, 1492, 1556, 1618]
- type: compressor - type: compressor
id: 22
parameters: {attack: 51, invgain: 64, ratio: 112, release: 49, stereo: 0, threshold: 64} parameters: {attack: 51, invgain: 64, ratio: 112, release: 49, stereo: 0, threshold: 64}
- type: mulp - type: mulp
id: 23
parameters: {stereo: 0} parameters: {stereo: 0}
- parameters: {} - id: 24
parameters: {}
comment: Output
- type: pan - type: pan
id: 25
parameters: {panning: 68, stereo: 0} parameters: {panning: 68, stereo: 0}
- type: outaux - type: outaux
id: 26
parameters: {auxgain: 0, outgain: 64, stereo: 1} parameters: {auxgain: 0, outgain: 64, stereo: 1}
- parameters: {}
- type: envelope
parameters: {attack: 0, decay: 60, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: distort
parameters: {drive: 5, stereo: 0}
- type: send
parameters: {amount: 90, port: 0, sendpop: 1, stereo: 0, target: 1, unit: 0, voice: 0}
@@ -1,7 +1,19 @@
name: snare edm 2 name: snare-edm-2
comment: 'Suggested range: E-4' comment: 'Suggested range: E-4'
numvoices: 2 numvoices: 1
units: units:
- id: 339
parameters: {}
comment: Pitch drop
- type: envelope
id: 233
parameters: {attack: 38, decay: 49, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 234
parameters: {amount: 70, port: 0, sendpop: 1, target: 218}
- id: 340
parameters: {}
comment: Tom
- type: envelope - type: envelope
id: 217 id: 217
parameters: {attack: 22, decay: 64, gain: 38, release: 0, stereo: 0, sustain: 0} parameters: {attack: 22, decay: 64, gain: 38, release: 0, stereo: 0, sustain: 0}
@@ -13,55 +25,31 @@ units:
parameters: {drive: 82, stereo: 0} parameters: {drive: 82, stereo: 0}
- type: mulp - type: mulp
id: 221 id: 221
parameters: {panning: 64, stereo: 0} parameters: {stereo: 0}
- id: 341
parameters: {}
comment: Snare
- type: envelope - type: envelope
id: 222 id: 222
parameters: {attack: 0, auxgain: 64, decay: 68, gain: 70, outgain: 64, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 68, gain: 70, release: 0, stereo: 0, sustain: 0}
- type: noise - type: noise
id: 223 id: 223
parameters: {gain: 31, shape: 12, stereo: 0} parameters: {gain: 31, shape: 12, stereo: 0}
- type: mulp - type: mulp
id: 224 id: 224
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter
id: 201
parameters: {bandpass: 0, frequency: 97, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0}
- type: filter - type: filter
id: 225 id: 225
parameters: {bandpass: 0, frequency: 108, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 108, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: filter
id: 201
parameters: {bandpass: 0, frequency: 97, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: addp - type: addp
id: 226 id: 226
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - id: 342
id: 202 parameters: {}
parameters: {bandpass: 0, frequency: 100, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0} comment: Modulations
- type: filter
id: 227
parameters: {bandpass: 0, frequency: 19, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 98, stereo: 0}
- type: filter
id: 228
parameters: {bandpass: 0, frequency: 15, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0}
- type: filter
id: 229
parameters: {bandpass: 0, frequency: 40, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 74, stereo: 0}
- type: filter
id: 230
parameters: {bandpass: 0, frequency: 23, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 42, stereo: 0}
- type: distort
id: 338
parameters: {drive: 88, stereo: 0}
- type: pan
id: 231
parameters: {panning: 59, stereo: 0}
- type: outaux
id: 232
parameters: {auxgain: 7, outgain: 60, stereo: 1}
- type: envelope
id: 233
parameters: {attack: 38, decay: 49, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 234
parameters: {amount: 70, port: 0, sendpop: 1, target: 218}
- type: envelope - type: envelope
id: 235 id: 235
parameters: {attack: 47, decay: 54, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 47, decay: 54, gain: 128, release: 0, stereo: 0, sustain: 0}
@@ -74,3 +62,33 @@ units:
- type: send - type: send
id: 238 id: 238
parameters: {amount: 26, port: 0, sendpop: 1, target: 202} parameters: {amount: 26, port: 0, sendpop: 1, target: 202}
- id: 343
parameters: {}
comment: Filters
- type: filter
id: 202
parameters: {bandpass: 0, frequency: 100, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: filter
id: 227
parameters: {bandpass: 0, frequency: 19, highpass: 1, lowpass: 0, resonance: 98, stereo: 0}
- type: filter
id: 228
parameters: {bandpass: 0, frequency: 15, highpass: 1, lowpass: 1, resonance: 128, stereo: 0}
- type: filter
id: 229
parameters: {bandpass: 0, frequency: 40, highpass: 1, lowpass: 1, resonance: 74, stereo: 0}
- type: filter
id: 230
parameters: {bandpass: 0, frequency: 23, highpass: 1, lowpass: 0, resonance: 42, stereo: 0}
- id: 344
parameters: {}
comment: Distort & output
- type: distort
id: 338
parameters: {drive: 88, stereo: 0}
- type: pan
id: 231
parameters: {panning: 59, stereo: 0}
- type: outaux
id: 232
parameters: {auxgain: 7, outgain: 60, stereo: 1}
@@ -1,7 +1,19 @@
name: snare edm 3 name: snare-edm-3
comment: 'Suggested range: E-4' comment: 'Suggested range: E-4'
numvoices: 2 numvoices: 1
units: units:
- id: 341
parameters: {}
comment: Pitch drop
- type: envelope
id: 233
parameters: {attack: 37, decay: 47, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 234
parameters: {amount: 69, port: 0, sendpop: 1, target: 218}
- id: 342
parameters: {}
comment: Tom
- type: envelope - type: envelope
id: 217 id: 217
parameters: {attack: 0, decay: 65, gain: 33, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 65, gain: 33, release: 0, stereo: 0, sustain: 0}
@@ -13,10 +25,13 @@ units:
parameters: {drive: 74, stereo: 0} parameters: {drive: 74, stereo: 0}
- type: mulp - type: mulp
id: 221 id: 221
parameters: {panning: 64, stereo: 0} parameters: {stereo: 0}
- id: 343
parameters: {}
comment: Snare
- type: envelope - type: envelope
id: 222 id: 222
parameters: {attack: 0, auxgain: 64, decay: 69, gain: 54, outgain: 64, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 69, gain: 54, release: 0, stereo: 0, sustain: 0}
- type: noise - type: noise
id: 223 id: 223
parameters: {gain: 22, shape: 14, stereo: 0} parameters: {gain: 22, shape: 14, stereo: 0}
@@ -25,37 +40,16 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 201 id: 201
parameters: {bandpass: 0, frequency: 80, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 98, stereo: 0} parameters: {bandpass: 0, frequency: 80, highpass: -1, lowpass: 1, resonance: 98, stereo: 0}
- type: filter - type: filter
id: 225 id: 225
parameters: {bandpass: 0, frequency: 120, highpass: 0, lowpass: 1, negbandpass: 1, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: -1, frequency: 120, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: addp - type: addp
id: 226 id: 226
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - id: 346
id: 202 parameters: {}
parameters: {bandpass: 0, frequency: 50, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 95, stereo: 0} comment: Modulations
- type: distort
id: 338
parameters: {drive: 112, stereo: 0}
- type: compressor
id: 339
parameters: {attack: 51, invgain: 58, ratio: 42, release: 63, stereo: 0, threshold: 15}
- type: mulp
id: 340
parameters: {stereo: 0}
- type: pan
id: 231
parameters: {panning: 59, stereo: 0}
- type: outaux
id: 232
parameters: {auxgain: 0, outgain: 75, stereo: 1}
- type: envelope
id: 233
parameters: {attack: 37, decay: 47, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 234
parameters: {amount: 69, port: 0, sendpop: 1, target: 218}
- type: envelope - type: envelope
id: 235 id: 235
parameters: {attack: 53, decay: 58, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 53, decay: 58, gain: 128, release: 0, stereo: 0, sustain: 0}
@@ -68,3 +62,27 @@ units:
- type: send - type: send
id: 238 id: 238
parameters: {amount: 32, port: 0, sendpop: 1, target: 202} parameters: {amount: 32, port: 0, sendpop: 1, target: 202}
- id: 344
parameters: {}
comment: Effects
- type: filter
id: 202
parameters: {bandpass: 0, frequency: 50, highpass: -1, lowpass: 1, resonance: 95, stereo: 0}
- type: distort
id: 338
parameters: {drive: 112, stereo: 0}
- type: compressor
id: 339
parameters: {attack: 51, invgain: 58, ratio: 42, release: 63, stereo: 0, threshold: 15}
- type: mulp
id: 340
parameters: {stereo: 0}
- id: 345
parameters: {}
comment: Output
- type: pan
id: 231
parameters: {panning: 59, stereo: 0}
- type: outaux
id: 232
parameters: {auxgain: 0, outgain: 75, stereo: 1}
@@ -1,7 +1,19 @@
name: snare edm name: snare-edm
comment: 'Suggested range: E-4' comment: 'Suggested range: E-4'
numvoices: 2 numvoices: 1
units: units:
- id: 241
parameters: {}
comment: Pitch drop
- type: envelope
id: 233
parameters: {attack: 38, decay: 49, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 234
parameters: {amount: 70, port: 0, sendpop: 1, target: 218}
- id: 239
parameters: {}
comment: Tom
- type: envelope - type: envelope
id: 217 id: 217
parameters: {attack: 22, decay: 64, gain: 38, release: 0, stereo: 0, sustain: 0} parameters: {attack: 22, decay: 64, gain: 38, release: 0, stereo: 0, sustain: 0}
@@ -13,61 +25,61 @@ units:
parameters: {drive: 78, stereo: 0} parameters: {drive: 78, stereo: 0}
- type: mulp - type: mulp
id: 221 id: 221
parameters: {panning: 64, stereo: 0} parameters: {stereo: 0}
- id: 240
parameters: {}
comment: Snare
- type: envelope - type: envelope
id: 222 id: 222
parameters: {attack: 0, auxgain: 64, decay: 68, gain: 70, outgain: 64, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 68, gain: 70, release: 0, stereo: 0, sustain: 0}
- type: noise - type: noise
id: 223 id: 223
parameters: {gain: 31, shape: 12, stereo: 0} parameters: {gain: 31, shape: 12, stereo: 0}
- type: mulp - type: mulp
id: 224 id: 224
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter
id: 201
parameters: {bandpass: 0, frequency: 97, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0}
- type: filter
id: 225
parameters: {bandpass: 0, frequency: 108, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0}
- type: addp
id: 226
parameters: {stereo: 0}
- type: filter
id: 202
parameters: {bandpass: 0, frequency: 100, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0}
- type: filter
id: 227
parameters: {bandpass: 0, frequency: 19, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 98, stereo: 0}
- type: filter
id: 228
parameters: {bandpass: 0, frequency: 15, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0}
- type: filter
id: 229
parameters: {bandpass: 0, frequency: 40, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 74, stereo: 0}
- type: filter
id: 230
parameters: {bandpass: 0, frequency: 23, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 42, stereo: 0}
- type: pan
id: 231
parameters: {panning: 59, stereo: 0}
- type: outaux
id: 232
parameters: {auxgain: 8, outgain: 128, stereo: 1}
- type: envelope
id: 233
parameters: {attack: 38, decay: 49, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send
id: 234
parameters: {amount: 70, port: 0, sendpop: 1, target: 218}
- type: envelope - type: envelope
id: 235 id: 235
parameters: {attack: 47, decay: 54, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 47, decay: 54, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send - type: send
id: 236 id: 236
parameters: {amount: 19, port: 0, sendpop: 1, target: 201} parameters: {amount: 19, port: 0, sendpop: 1, target: 201}
- type: filter
id: 201
parameters: {bandpass: 0, frequency: 97, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: filter
id: 225
parameters: {bandpass: 0, frequency: 108, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: addp
id: 226
parameters: {stereo: 0}
- id: 242
parameters: {}
comment: Filtering
- type: envelope - type: envelope
id: 237 id: 237
parameters: {attack: 54, decay: 68, gain: 128, release: 0, stereo: 0, sustain: 70} parameters: {attack: 54, decay: 68, gain: 128, release: 0, stereo: 0, sustain: 70}
- type: send - type: send
id: 238 id: 238
parameters: {amount: 26, port: 0, sendpop: 1, target: 202} parameters: {amount: 26, port: 0, sendpop: 1, target: 202}
- type: filter
id: 202
parameters: {bandpass: 0, frequency: 100, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: filter
id: 227
parameters: {bandpass: 0, frequency: 19, highpass: 1, lowpass: 0, resonance: 98, stereo: 0}
- type: filter
id: 229
parameters: {bandpass: 0, frequency: 40, highpass: 1, lowpass: 1, resonance: 74, stereo: 0}
- type: filter
id: 230
parameters: {bandpass: 0, frequency: 23, highpass: 1, lowpass: 0, resonance: 42, stereo: 0}
- id: 243
parameters: {}
comment: Output
- type: pan
id: 231
parameters: {panning: 59, stereo: 0}
- type: outaux
id: 232
parameters: {auxgain: 8, outgain: 128, stereo: 1}
@@ -1,43 +1,52 @@
name: snare edm 2 name: snare-sample-st
comment: 'Suggested range: E-2 to C-3' comment: 'Suggested range: E-2 to C-3'
numvoices: 1 numvoices: 1
units: units:
- id: 217
parameters: {}
comment: Tom
- type: envelope - type: envelope
id: 10
parameters: {attack: 14, decay: 68, gain: 110, release: 0, stereo: 0, sustain: 0} parameters: {attack: 14, decay: 68, gain: 110, release: 0, stereo: 0, sustain: 0}
- type: oscillator - type: oscillator
id: 200 id: 200
parameters: {color: 48, detune: 52, gain: 53, lfo: 0, looplength: 1, loopstart: 4276, phase: 0, samplestart: 560606, shape: 81, stereo: 0, transpose: 76, type: 4} parameters: {color: 48, detune: 52, gain: 53, lfo: 0, looplength: 1, loopstart: 4276, phase: 0, samplestart: 560606, shape: 81, stereo: 0, transpose: 76, type: 4}
- parameters: {}
- type: mulp - type: mulp
parameters: {panning: 64, stereo: 0} id: 202
parameters: {stereo: 0}
- id: 216
parameters: {}
comment: Snare
- type: envelope - type: envelope
parameters: {attack: 0, auxgain: 64, decay: 68, gain: 83, outgain: 64, release: 0, stereo: 0, sustain: 0} id: 203
parameters: {attack: 0, decay: 68, gain: 83, release: 0, stereo: 0, sustain: 0}
- type: noise - type: noise
id: 204
parameters: {gain: 39, shape: 2, stereo: 0} parameters: {gain: 39, shape: 2, stereo: 0}
- type: mulp - type: mulp
id: 205
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter
id: 201
parameters: {bandpass: 0, frequency: 110, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0}
- type: filter
parameters: {bandpass: 0, frequency: 118, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 112, stereo: 0}
- type: addp
parameters: {stereo: 0}
- type: pan
parameters: {panning: 59, stereo: 0}
- type: outaux
parameters: {auxgain: 8, outgain: 128, stereo: 1}
- type: envelope
parameters: {attack: 38, decay: 49, gain: 128, release: 0, stereo: 0, sustain: 0}
disabled: true
- type: send
parameters: {amount: 70, port: 0, sendpop: 1, target: 200}
disabled: true
- type: envelope - type: envelope
id: 213
parameters: {attack: 47, decay: 54, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 47, decay: 54, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send - type: send
parameters: {amount: 19, port: 0, sendpop: 1, target: 201} id: 214
- type: envelope parameters: {amount: 19, port: 0, sendpop: 1, target: 206}
parameters: {attack: 54, decay: 68, gain: 128, release: 0, stereo: 0, sustain: 70} - type: filter
- type: send id: 206
parameters: {amount: 26, port: 0, sendpop: 1, target: 202} parameters: {bandpass: 0, frequency: 110, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: filter
id: 207
parameters: {bandpass: 0, frequency: 118, highpass: 0, lowpass: 1, resonance: 112, stereo: 0}
- type: addp
id: 208
parameters: {stereo: 0}
- id: 215
parameters: {}
comment: Output
- type: pan
id: 209
parameters: {panning: 59, stereo: 0}
- type: outaux
id: 210
parameters: {auxgain: 8, outgain: 128, stereo: 1}
@@ -1,7 +1,10 @@
name: snare edm 2 (sample) name: snare-sample
comment: 'Suggested range: E-2 to C-3' comment: 'Suggested range: E-2 to C-3'
numvoices: 1 numvoices: 1
units: units:
- id: 311
parameters: {}
comment: Tom
- type: envelope - type: envelope
id: 301 id: 301
parameters: {attack: 0, decay: 66, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 66, gain: 128, release: 0, stereo: 0, sustain: 0}
@@ -13,10 +16,13 @@ units:
parameters: {drive: 100, stereo: 0} parameters: {drive: 100, stereo: 0}
- type: mulp - type: mulp
id: 303 id: 303
parameters: {panning: 64, stereo: 0} parameters: {stereo: 0}
- id: 312
parameters: {}
comment: Snare
- type: envelope - type: envelope
id: 304 id: 304
parameters: {attack: 0, auxgain: 64, decay: 67, gain: 100, outgain: 64, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 67, gain: 100, release: 0, stereo: 0, sustain: 0}
- type: noise - type: noise
id: 305 id: 305
parameters: {gain: 128, shape: 8, stereo: 0} parameters: {gain: 128, shape: 8, stereo: 0}
@@ -26,6 +32,9 @@ units:
- type: addp - type: addp
id: 308 id: 308
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 313
parameters: {}
comment: Output
- type: pan - type: pan
id: 309 id: 309
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+7 -4
View File
@@ -1,7 +1,10 @@
name: Snare 2 name: snare
comment: 'suggested note: E-4' comment: 'suggested note: E-4'
numvoices: 1 numvoices: 1
units: units:
- id: 334
parameters: {}
comment: Tom
- type: envelope - type: envelope
id: 288 id: 288
parameters: {attack: 0, decay: 53, gain: 64, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 53, gain: 64, release: 0, stereo: 0, sustain: 0}
@@ -11,14 +14,13 @@ units:
- type: mulp - type: mulp
id: 305 id: 305
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 334
parameters: {}
- type: delay - type: delay
id: 309 id: 309
parameters: {damp: 80, dry: 128, feedback: 86, notetracking: 0, pregain: 99, stereo: 0} parameters: {damp: 80, dry: 128, feedback: 86, notetracking: 0, pregain: 99, stereo: 0}
varargs: [229] varargs: [229]
- id: 329 - id: 329
parameters: {} parameters: {}
comment: Snare
- type: envelope - type: envelope
id: 313 id: 313
parameters: {attack: 0, decay: 70, gain: 63, release: 0, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 70, gain: 63, release: 0, stereo: 0, sustain: 0}
@@ -33,12 +35,13 @@ units:
parameters: {drive: 11, stereo: 0} parameters: {drive: 11, stereo: 0}
- type: filter - type: filter
id: 333 id: 333
parameters: {bandpass: 1, frequency: 86, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 86, highpass: 1, lowpass: 0, resonance: 128, stereo: 0}
- type: addp - type: addp
id: 316 id: 316
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 328 - id: 328
parameters: {} parameters: {}
comment: Effects & output
- type: pan - type: pan
id: 292 id: 292
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
@@ -1,5 +1,5 @@
name: DiscoTom name: tom-disco
numvoices: 2 numvoices: 1
units: units:
- type: envelope - type: envelope
id: 1 id: 1
@@ -12,15 +12,15 @@ units:
parameters: {stereo: 1} parameters: {stereo: 1}
- type: pan - type: pan
id: 5 id: 5
parameters: {damp: 0, dry: 128, feedback: 96, notetracking: 2, panning: 63, pregain: 40, stereo: 1} parameters: {panning: 63, stereo: 1}
- type: outaux - type: outaux
id: 6 id: 6
parameters: {auxgain: 7, outgain: 67, panning: 64, stereo: 1} parameters: {auxgain: 7, outgain: 67, stereo: 1}
- id: 12 - id: 12
parameters: {} parameters: {}
- type: envelope - type: envelope
id: 10 id: 10
parameters: {attack: 37, auxgain: 64, decay: 81, gain: 80, outgain: 64, release: 54, stereo: 0, sustain: 16} parameters: {attack: 37, decay: 81, gain: 80, release: 54, stereo: 0, sustain: 16}
- type: send - type: send
id: 11 id: 11
parameters: {amount: 84, port: 0, sendpop: 1, stereo: 0, target: 2, unit: 0, voice: 0} parameters: {amount: 84, port: 0, sendpop: 1, stereo: 0, target: 2, voice: 0}
+10 -10
View File
@@ -1,21 +1,21 @@
name: Clavi name: clavi
numvoices: 8 numvoices: 1
units: units:
- type: envelope - type: envelope
id: 1 id: 225
parameters: {attack: 0, decay: 62, gain: 77, release: 52, stereo: 1, sustain: 66} parameters: {attack: 0, decay: 62, gain: 77, release: 52, stereo: 1, sustain: 66}
- type: oscillator - type: oscillator
id: 2 id: 226
parameters: {color: 64, detune: 68, gain: 67, looplength: 84, loopstart: 290, phase: 0, samplestart: 401297, shape: 90, stereo: 1, transpose: 76, type: 4, unison: 3} parameters: {color: 64, detune: 68, gain: 67, looplength: 84, loopstart: 290, phase: 0, samplestart: 401297, shape: 90, stereo: 1, transpose: 76, type: 4, unison: 3}
- type: mulp - type: mulp
id: 3 id: 227
parameters: {stereo: 1} parameters: {stereo: 1}
- type: pan - type: pan
id: 5 id: 228
parameters: {damp: 0, dry: 128, feedback: 96, notetracking: 2, panning: 64, pregain: 40, stereo: 1} parameters: {panning: 64, stereo: 1}
- type: filter - type: filter
id: 1058 id: 1058
parameters: {bandpass: 0, frequency: 96, highpass: 0, lowpass: 1, negbandpass: 1, neghighpass: 1, panning: 64, resonance: 128, stereo: 1} parameters: {bandpass: -1, frequency: 96, highpass: -1, lowpass: 1, resonance: 128, stereo: 1}
- type: outaux - type: outaux
id: 6 id: 1059
parameters: {auxgain: 15, outgain: 54, panning: 64, stereo: 1} parameters: {auxgain: 15, outgain: 54, stereo: 1}
+1 -1
View File
@@ -1,5 +1,5 @@
name: lullaby name: lullaby
numvoices: 4 numvoices: 1
units: units:
- type: envelope - type: envelope
id: 1 id: 1
+2 -2
View File
@@ -1,5 +1,5 @@
name: KEYS Lullaby2 name: lullaby2
numvoices: 4 numvoices: 1
units: units:
- type: envelope - type: envelope
id: 1 id: 1
+39 -24
View File
@@ -1,51 +1,57 @@
name: minorium name: minorium
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 244
id: 1 parameters: {}
parameters: {attack: 0, decay: 64, gain: 128, release: 48, stereo: 0, sustain: 88} comment: Modulations
- type: oscillator
id: 5
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 8, type: 0}
- type: send
id: 238
parameters: {amount: 68, port: 1, sendpop: 0, target: 12}
- type: send
id: 6
parameters: {amount: 32, port: 0, sendpop: 0, target: 13}
- type: send
id: 239
parameters: {amount: 88, port: 0, sendpop: 1, target: 15}
- type: oscillator - type: oscillator
id: 2 id: 2
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 16, type: 0} parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 16, type: 0}
- type: send - type: send
id: 3 id: 3
parameters: {amount: 48, port: 0, sendpop: 1, target: 241} parameters: {amount: 48, port: 0, sendpop: 1, target: 241}
- type: oscillator - id: 245
id: 5 parameters: {}
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 8, type: 0} comment: Main oscillators
- type: send
id: 6
parameters: {amount: 32, port: 0, sendpop: 0, target: 13}
- type: send
id: 238
parameters: {amount: 68, port: 1, sendpop: 0, target: 12}
- type: send
id: 239
parameters: {amount: 88, port: 0, sendpop: 1, target: 15}
- type: oscillator
id: 240
parameters: {color: 16, detune: 64, gain: 72, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 67, type: 1}
- type: filter
id: 241
parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0}
- type: oscillator - type: oscillator
id: 12 id: 12
parameters: {color: 16, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 71, type: 1} parameters: {color: 16, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 71, type: 1}
- type: filter - type: filter
id: 13 id: 13
parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: oscillator - type: oscillator
id: 14 id: 14
parameters: {color: 16, detune: 64, gain: 96, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1} parameters: {color: 16, detune: 64, gain: 96, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1}
- type: filter - type: filter
id: 15 id: 15
parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: oscillator
id: 240
parameters: {color: 16, detune: 64, gain: 72, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 67, type: 1}
- type: filter
id: 241
parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: addp - type: addp
id: 16 id: 16
parameters: {stereo: 0} parameters: {stereo: 0}
- type: addp - type: addp
id: 17 id: 17
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 246
parameters: {}
comment: Filter
- type: envelope - type: envelope
id: 18 id: 18
parameters: {attack: 88, decay: 88, gain: 128, release: 96, stereo: 0, sustain: 96} parameters: {attack: 88, decay: 88, gain: 128, release: 96, stereo: 0, sustain: 96}
@@ -54,10 +60,19 @@ units:
parameters: {amount: 88, port: 0, sendpop: 1, target: 21} parameters: {amount: 88, port: 0, sendpop: 1, target: 21}
- type: filter - type: filter
id: 21 id: 21
parameters: {bandpass: 0, frequency: 32, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 16, stereo: 0} parameters: {bandpass: 0, frequency: 32, highpass: 1, lowpass: 1, resonance: 16, stereo: 0}
- id: 242
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 0, decay: 64, gain: 128, release: 48, stereo: 0, sustain: 88}
- type: mulp - type: mulp
id: 22 id: 22
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 243
parameters: {}
comment: Delay & output
- type: delay - type: delay
id: 23 id: 23
parameters: {damp: 128, dry: 96, feedback: 48, notetracking: 2, pregain: 48, stereo: 0} parameters: {damp: 128, dry: 96, feedback: 48, notetracking: 2, pregain: 48, stereo: 0}
+14 -6
View File
@@ -1,12 +1,15 @@
name: organ name: organ
numvoices: 4 numvoices: 1
units: units:
- id: 248
parameters: {}
comment: Sine-wave body
- type: envelope - type: envelope
id: 228 id: 228
parameters: {attack: 5, decay: 79, gain: 128, release: 37, stereo: 0, sustain: 79} parameters: {attack: 5, decay: 79, gain: 128, release: 37, stereo: 0, sustain: 79}
- type: oscillator - type: oscillator
id: 208 id: 208
parameters: {color: 64, detune: 64, gain: 55, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 3} parameters: {color: 64, detune: 64, gain: 128, phase: 114, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
- type: mul - type: mul
id: 229 id: 229
parameters: {stereo: 0} parameters: {stereo: 0}
@@ -27,6 +30,7 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 233 - id: 233
parameters: {} parameters: {}
comment: Snap
- type: envelope - type: envelope
id: 234 id: 234
parameters: {attack: 37, decay: 79, gain: 128, release: 63, stereo: 0, sustain: 79} parameters: {attack: 37, decay: 79, gain: 128, release: 63, stereo: 0, sustain: 79}
@@ -54,23 +58,27 @@ units:
- type: mulp - type: mulp
id: 242 id: 242
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 243
parameters: {}
- type: addp - type: addp
id: 244 id: 244
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 243
parameters: {}
comment: Filter & output
- type: filter - type: filter
id: 245 id: 245
parameters: {bandpass: 1, frequency: 0, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 0, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: pan - type: pan
id: 211 id: 211
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: outaux - type: outaux
id: 212 id: 212
parameters: {auxgain: 9, outgain: 25, stereo: 1} parameters: {auxgain: 9, outgain: 25, stereo: 1}
- id: 249
parameters: {}
comment: Filter modulation
- type: envelope - type: envelope
id: 246 id: 246
parameters: {attack: 0, decay: 76, gain: 83, release: 54, stereo: 0, sustain: 47} parameters: {attack: 0, decay: 76, gain: 83, release: 54, stereo: 0, sustain: 47}
- type: send - type: send
id: 247 id: 247
parameters: {amount: 128, port: 0, sendpop: 1, stereo: 0, target: 245, unit: 0, voice: 0} parameters: {amount: 128, port: 0, sendpop: 1, stereo: 0, target: 245, voice: 0}
+2 -2
View File
@@ -18,14 +18,14 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 6 id: 6
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: delay - type: delay
id: 60 id: 60
parameters: {damp: 8, dry: 64, feedback: 127, notetracking: 1, pregain: 64, stereo: 0} parameters: {damp: 8, dry: 64, feedback: 127, notetracking: 1, pregain: 64, stereo: 0}
varargs: [10787] varargs: [10787]
- type: filter - type: filter
id: 61 id: 61
parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 48, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: mulp - type: mulp
id: 62 id: 62
parameters: {stereo: 0} parameters: {stereo: 0}
+30 -18
View File
@@ -1,36 +1,48 @@
name: KEYS Rhodes name: rhodes
numvoices: 8 numvoices: 1
units: units:
- type: envelope - id: 183
id: 1 parameters: {}
parameters: {attack: 23, decay: 84, gain: 63, release: 64, stereo: 1, sustain: 58} comment: Modulations
- type: send
id: 182
parameters: {amount: 87, port: 0, sendpop: 0, stereo: 0, target: 175, unit: 0, voice: 0}
- type: oscillator - type: oscillator
id: 2 id: 2
parameters: {color: 64, detune: 64, gain: 70, lfo: 0, phase: 64, shape: 43, stereo: 1, transpose: 64, type: 0, unison: 0} parameters: {color: 64, detune: 64, gain: 70, lfo: 0, phase: 64, shape: 43, stereo: 1, transpose: 64, type: 0, unison: 0}
- type: send - type: send
id: 3 id: 3
parameters: {amount: 90, port: 2, sendpop: 1, stereo: 1, target: 5} parameters: {amount: 90, port: 2, sendpop: 1, stereo: 1, target: 5}
- id: 184
parameters: {}
comment: Envelope & osc
- type: envelope
id: 1
parameters: {attack: 23, decay: 84, gain: 63, release: 64, stereo: 0, sustain: 58}
- type: send
id: 182
parameters: {amount: 87, port: 0, sendpop: 0, stereo: 0, target: 175, voice: 0}
- type: oscillator - type: oscillator
id: 5 id: 5
parameters: {color: 128, detune: 64, gain: 78, lfo: 0, phase: 92, shape: 64, stereo: 1, transpose: 64, type: 0, unison: 0} parameters: {color: 128, detune: 64, gain: 78, lfo: 0, phase: 92, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0}
- type: mulp - type: mulp
id: 6 id: 6
parameters: {stereo: 1} parameters: {stereo: 0}
- id: 185
parameters: {}
comment: Filter & output
- type: filter - type: filter
id: 175 id: 175
parameters: {bandpass: 0, frequency: 38, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 111, stereo: 1} parameters: {bandpass: 0, frequency: 38, highpass: 0, lowpass: 1, resonance: 111, stereo: 0}
- type: pan
id: 176
parameters: {panning: 64, stereo: 0}
- type: outaux
id: 177
parameters: {auxgain: 0, outgain: 63, stereo: 1}
- id: 186
parameters: {}
comment: Panning modulation
- type: oscillator - type: oscillator
id: 180 id: 180
parameters: {color: 128, detune: 64, gain: 33, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 63, type: 0, unison: 0} parameters: {color: 128, detune: 64, gain: 33, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 63, type: 0, unison: 0}
- type: send - type: send
id: 181 id: 181
parameters: {amount: 128, port: 0, sendpop: 1, stereo: 0, target: 176, unit: 0, voice: 0} parameters: {amount: 128, port: 0, sendpop: 1, stereo: 0, target: 176, voice: 0}
- type: pan
id: 176
parameters: {panning: 64, stereo: 1}
- type: outaux
id: 177
parameters: {auxgain: 0, outgain: 63, stereo: 1}
+53 -59
View File
@@ -1,63 +1,9 @@
name: Flute name: flute
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 221
id: 51 parameters: {}
parameters: {attack: 2, decay: 52, gain: 128, release: 65, stereo: 1, sustain: 48} comment: Modulations
- type: oscillator
id: 57
parameters: {color: 72, detune: 64, gain: 91, looplength: 80, loopstart: 1948, phase: 0, samplestart: 577066, shape: 54, stereo: 1, transpose: 63, type: 4, unison: 0}
- type: hold
id: 205
parameters: {holdfreq: 80, stereo: 1}
- type: filter
id: 201
parameters: {bandpass: 1, frequency: 52, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 1}
- type: mulp
id: 53
parameters: {stereo: 1}
- type: envelope
id: 206
parameters: {attack: 57, decay: 64, gain: 64, release: 64, stereo: 0, sustain: 64}
- type: noise
id: 207
parameters: {gain: 20, shape: 16, stereo: 0}
- type: mulp
id: 208
parameters: {stereo: 0}
- type: filter
id: 219
parameters: {bandpass: 1, frequency: 90, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 117, stereo: 0}
- type: addp
id: 216
parameters: {stereo: 0}
- type: xch
id: 217
parameters: {stereo: 0}
- type: envelope
id: 214
parameters: {attack: 57, decay: 64, gain: 64, release: 64, stereo: 0, sustain: 64}
- type: noise
id: 210
parameters: {gain: 20, shape: 10, stereo: 0}
- type: mulp
id: 215
parameters: {stereo: 0}
- type: filter
id: 218
parameters: {bandpass: 1, frequency: 91, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0}
- type: addp
id: 209
parameters: {stereo: 0}
- type: filter
id: 220
parameters: {bandpass: 1, frequency: 77, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 1}
- type: pan
id: 55
parameters: {panning: 73, stereo: 1}
- type: outaux
id: 56
parameters: {auxgain: 77, outgain: 114, stereo: 1}
- type: envelope - type: envelope
id: 61 id: 61
parameters: {attack: 86, decay: 48, gain: 93, release: 0, stereo: 0, sustain: 72} parameters: {attack: 86, decay: 48, gain: 93, release: 0, stereo: 0, sustain: 72}
@@ -69,4 +15,52 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: send - type: send
id: 63 id: 63
parameters: {amount: 89, port: 1, sendpop: 1, stereo: 0, target: 57, unit: 0, voice: 0} parameters: {amount: 89, port: 1, sendpop: 1, stereo: 0, target: 57, voice: 0}
- id: 222
parameters: {}
comment: Main oscillator
- type: oscillator
id: 57
parameters: {color: 72, detune: 64, gain: 91, looplength: 80, loopstart: 1948, phase: 0, samplestart: 577066, shape: 54, stereo: 1, transpose: 63, type: 4, unison: 0}
- type: hold
id: 205
parameters: {holdfreq: 80, stereo: 1}
- type: filter
id: 201
parameters: {bandpass: 1, frequency: 52, highpass: 1, lowpass: 0, resonance: 128, stereo: 1}
- id: 223
parameters: {}
comment: Main envelope
- type: envelope
id: 51
parameters: {attack: 2, decay: 52, gain: 128, release: 65, stereo: 1, sustain: 48}
- type: mulp
id: 53
parameters: {stereo: 1}
- id: 224
parameters: {}
comment: Noise
- type: envelope
id: 206
parameters: {attack: 57, decay: 64, gain: 64, release: 64, stereo: 1, sustain: 64}
- type: noise
id: 207
parameters: {gain: 20, shape: 16, stereo: 1}
- type: mulp
id: 208
parameters: {stereo: 1}
- type: filter
id: 219
parameters: {bandpass: 1, frequency: 90, highpass: 0, lowpass: 0, resonance: 117, stereo: 1}
- type: addp
id: 216
parameters: {stereo: 1}
- type: filter
id: 220
parameters: {bandpass: 1, frequency: 77, highpass: 0, lowpass: 1, resonance: 128, stereo: 1}
- type: pan
id: 55
parameters: {panning: 75, stereo: 1}
- type: outaux
id: 56
parameters: {auxgain: 77, outgain: 114, stereo: 1}
+31 -16
View File
@@ -1,33 +1,39 @@
name: Jarresque name: jarresque
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 242
id: 1 parameters: {}
parameters: {attack: 80, decay: 128, gain: 67, release: 80, stereo: 0, sustain: 128} comment: Modulations
- type: oscillator - type: oscillator
id: 2 id: 2
parameters: {color: 64, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 16, type: 1} parameters: {color: 64, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 16, type: 1}
- type: send - type: send
id: 3 id: 5
parameters: {amount: 80, port: 0, sendpop: 0, target: 14} parameters: {amount: 58, port: 1, sendpop: 0, target: 10}
- type: send - type: send
id: 4 id: 4
parameters: {amount: 48, port: 0, sendpop: 0, target: 10} parameters: {amount: 48, port: 0, sendpop: 0, target: 10}
- type: send - type: send
id: 5 id: 3
parameters: {amount: 58, port: 1, sendpop: 1, target: 10} parameters: {amount: 80, port: 0, sendpop: 1, target: 14}
- id: 241
parameters: {}
comment: Modulated noise
- type: noise
id: 237
parameters: {gain: 16, shape: 64, stereo: 0}
- type: filter
id: 10
parameters: {bandpass: 1, frequency: 69, highpass: 0, lowpass: 0, resonance: 57, stereo: 0}
- id: 240
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 235 id: 235
parameters: {color: 3, detune: 73, gain: 63, lfo: 0, phase: 0, shape: 98, stereo: 0, transpose: 52, type: 1, unison: 1} parameters: {color: 3, detune: 73, gain: 63, lfo: 0, phase: 0, shape: 98, stereo: 0, transpose: 52, type: 1, unison: 1}
- type: oscillator - type: oscillator
id: 236 id: 236
parameters: {color: 57, detune: 60, gain: 38, lfo: 0, phase: 17, shape: 71, stereo: 0, transpose: 71, type: 1} parameters: {color: 57, detune: 60, gain: 38, lfo: 0, phase: 17, shape: 71, stereo: 0, transpose: 71, type: 1}
- type: noise
id: 237
parameters: {gain: 16, shape: 64, stereo: 0}
- type: filter
id: 10
parameters: {bandpass: 1, frequency: 69, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 57, stereo: 0}
- type: addp - type: addp
id: 11 id: 11
parameters: {stereo: 0} parameters: {stereo: 0}
@@ -39,19 +45,28 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 14 id: 14
parameters: {bandpass: 1, frequency: 57, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 57, highpass: 0, lowpass: 0, resonance: 128, stereo: 0}
- type: xch - type: xch
id: 15 id: 15
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 16 id: 16
parameters: {bandpass: 1, frequency: 93, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 93, highpass: 0, lowpass: 0, resonance: 128, stereo: 0}
- type: addp - type: addp
id: 17 id: 17
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 239
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 80, decay: 128, gain: 67, release: 80, stereo: 0, sustain: 128}
- type: mulp - type: mulp
id: 18 id: 18
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 238
parameters: {}
comment: Delay & output
- type: delay - type: delay
id: 19 id: 19
parameters: {damp: 64, dry: 128, feedback: 64, notetracking: 2, pregain: 51, stereo: 0} parameters: {damp: 64, dry: 128, feedback: 64, notetracking: 2, pregain: 51, stereo: 0}
+37 -25
View File
@@ -1,24 +1,9 @@
name: LEAD Morpher name: morpher
numvoices: 3 numvoices: 1
units: units:
- type: envelope - id: 235
id: 1 parameters: {}
parameters: {attack: 25, decay: 82, gain: 128, release: 64, stereo: 0, sustain: 103} comment: Main oscillators
- type: oscillator
id: 2
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 96, shape: 64, stereo: 0, transpose: 40, type: 0}
- type: send
id: 3
parameters: {amount: 46, port: 0, sendpop: 1, target: 15}
- type: oscillator
id: 5
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 86, shape: 64, stereo: 0, transpose: 33, type: 0}
- type: send
id: 6
parameters: {amount: 80, port: 0, sendpop: 0, target: 17}
- type: send
id: 229
parameters: {amount: 80, port: 3, sendpop: 1, target: 231}
- type: oscillator - type: oscillator
id: 231 id: 231
parameters: {color: 69, detune: 74, gain: 57, lfo: 0, phase: 0, shape: 128, stereo: 0, transpose: 64, type: 2, unison: 3} parameters: {color: 69, detune: 74, gain: 57, lfo: 0, phase: 0, shape: 128, stereo: 0, transpose: 64, type: 2, unison: 3}
@@ -28,27 +13,54 @@ units:
- type: addp - type: addp
id: 13 id: 13
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 236
parameters: {}
comment: Modulated filters
- type: push - type: push
id: 14 id: 14
parameters: {stereo: 0} parameters: {stereo: 0}
- type: oscillator
id: 5
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 86, shape: 64, stereo: 0, transpose: 33, type: 0}
- type: send
id: 229
parameters: {amount: 80, port: 3, sendpop: 0, target: 231}
- type: send
id: 6
parameters: {amount: 80, port: 0, sendpop: 1, target: 17}
- type: filter - type: filter
id: 15 id: 17
parameters: {bandpass: 1, frequency: 90, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 78, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: xch - type: xch
id: 16 id: 16
parameters: {stereo: 0} parameters: {stereo: 0}
- type: oscillator
id: 2
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 96, shape: 64, stereo: 0, transpose: 40, type: 0}
- type: send
id: 3
parameters: {amount: 46, port: 0, sendpop: 1, target: 15}
- type: filter - type: filter
id: 17 id: 15
parameters: {bandpass: 1, frequency: 78, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 90, highpass: 0, lowpass: 0, resonance: 128, stereo: 0}
- type: addp - type: addp
id: 18 id: 18
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 20 id: 20
parameters: {bandpass: 0, frequency: 93, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 93, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- id: 237
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 25, decay: 82, gain: 128, release: 64, stereo: 0, sustain: 103}
- type: mulp - type: mulp
id: 21 id: 21
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 233
parameters: {}
comment: Delay & output
- type: pan - type: pan
id: 23 id: 23
parameters: {panning: 61, stereo: 0} parameters: {panning: 61, stereo: 0}
@@ -1,9 +1,9 @@
name: LEAD BellLead2 name: bell-lead-2
numvoices: 4 numvoices: 1
units: units:
- type: envelope - id: 1005
id: 163 parameters: {}
parameters: {attack: 34, decay: 81, gain: 68, release: 78, stereo: 0, sustain: 103} comment: Main oscillators
- type: oscillator - type: oscillator
id: 165 id: 165
parameters: {color: 97, detune: 70, gain: 31, lfo: 0, phase: 0, shape: 86, stereo: 0, transpose: 76, type: 2, unison: 2} parameters: {color: 97, detune: 70, gain: 31, lfo: 0, phase: 0, shape: 86, stereo: 0, transpose: 76, type: 2, unison: 2}
@@ -13,9 +13,18 @@ units:
- type: addp - type: addp
id: 166 id: 166
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 1004
parameters: {}
comment: Main envelope
- type: envelope
id: 163
parameters: {attack: 34, decay: 81, gain: 68, release: 78, stereo: 0, sustain: 103}
- type: mulp - type: mulp
id: 167 id: 167
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 1003
parameters: {}
comment: Delay & output
- type: pan - type: pan
id: 168 id: 168
parameters: {panning: 59, stereo: 0} parameters: {panning: 59, stereo: 0}
@@ -1,6 +1,9 @@
name: BellLead name: bell-lead
numvoices: 4 numvoices: 1
units: units:
- id: 1011
parameters: {}
comment: Main envelope
- type: envelope - type: envelope
id: 163 id: 163
parameters: {attack: 34, decay: 102, gain: 68, release: 78, stereo: 0, sustain: 47} parameters: {attack: 34, decay: 102, gain: 68, release: 78, stereo: 0, sustain: 47}
@@ -10,6 +13,9 @@ units:
- type: mulp - type: mulp
id: 229 id: 229
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 1012
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 164 id: 164
parameters: {color: 91, detune: 52, gain: 64, lfo: 0, phase: 128, shape: 48, stereo: 0, transpose: 76, type: 0, unison: 3} parameters: {color: 91, detune: 52, gain: 64, lfo: 0, phase: 128, shape: 48, stereo: 0, transpose: 76, type: 0, unison: 3}
@@ -25,21 +31,30 @@ units:
- type: oscillator - type: oscillator
id: 1002 id: 1002
parameters: {color: 29, detune: 63, gain: 63, looplength: 821, loopstart: 2374, phase: 0, samplestart: 557335, shape: 76, stereo: 0, transpose: 67, type: 4, unison: 1} parameters: {color: 29, detune: 63, gain: 63, looplength: 821, loopstart: 2374, phase: 0, samplestart: 557335, shape: 76, stereo: 0, transpose: 67, type: 4, unison: 1}
- id: 1003
parameters: {}
disabled: true
- type: addp - type: addp
id: 1004 id: 1004
parameters: {stereo: 0} parameters: {stereo: 0}
- type: mulp - type: mulp
id: 167 id: 167
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - id: 1009
id: 217 parameters: {}
parameters: {bandpass: 0, frequency: 23, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} comment: Filters
- type: loadnote
id: 1006
parameters: {stereo: 0}
- type: send
id: 1007
parameters: {amount: 82, port: 0, sendpop: 1, stereo: 0, target: 1005, voice: 0}
- type: filter - type: filter
id: 1005 id: 1005
parameters: {bandpass: 0, frequency: 39, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 39, highpass: 1, lowpass: 0, resonance: 128, stereo: 0}
- type: filter
id: 217
parameters: {bandpass: 0, frequency: 23, highpass: 1, lowpass: 1, resonance: 128, stereo: 0}
- id: 1010
parameters: {}
comment: Delay & output
- type: pan - type: pan
id: 168 id: 168
parameters: {panning: 61, stereo: 0} parameters: {panning: 61, stereo: 0}
@@ -50,11 +65,3 @@ units:
- type: outaux - type: outaux
id: 172 id: 172
parameters: {auxgain: 41, outgain: 86, stereo: 1} parameters: {auxgain: 41, outgain: 86, stereo: 1}
- id: 1008
parameters: {}
- type: loadnote
id: 1006
parameters: {stereo: 0}
- type: send
id: 1007
parameters: {amount: 82, port: 0, sendpop: 1, stereo: 0, target: 1005, unit: 0, voice: 0}
@@ -1,6 +1,21 @@
name: LEAD HappyLead name: happy-lead
numvoices: 4 numvoices: 1
units: units:
- id: 235
parameters: {}
comment: Main oscillators
- type: oscillator
id: 164
parameters: {color: 65, detune: 56, gain: 64, lfo: 0, phase: 0, shape: 42, stereo: 0, transpose: 76, type: 1, unison: 2}
- type: oscillator
id: 165
parameters: {color: 64, detune: 54, gain: 64, lfo: 0, phase: 0, shape: 48, stereo: 0, transpose: 88, type: 1, unison: 3}
- type: addp
id: 166
parameters: {stereo: 0}
- id: 236
parameters: {}
comment: Main envelopes
- type: envelope - type: envelope
id: 163 id: 163
parameters: {attack: 19, decay: 88, gain: 128, release: 57, stereo: 0, sustain: 80} parameters: {attack: 19, decay: 88, gain: 128, release: 57, stereo: 0, sustain: 80}
@@ -10,27 +25,27 @@ units:
- type: mulp - type: mulp
id: 229 id: 229
parameters: {stereo: 0} parameters: {stereo: 0}
- type: oscillator
id: 164
parameters: {color: 65, detune: 56, gain: 64, lfo: 0, phase: 0, shape: 42, stereo: 0, transpose: 76, type: 1, unison: 2}
- type: add
id: 214
parameters: {stereo: 0}
- type: oscillator
id: 165
parameters: {color: 64, detune: 54, gain: 64, lfo: 0, phase: 0, shape: 48, stereo: 0, transpose: 88, type: 1, unison: 3}
- type: addp
id: 166
parameters: {stereo: 0}
- type: mulp - type: mulp
id: 167 id: 167
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - id: 234
id: 217 parameters: {}
parameters: {bandpass: 0, frequency: 91, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0} comment: Filters
- type: loadnote
id: 231
parameters: {stereo: 0}
- type: send
id: 232
parameters: {amount: 89, port: 0, sendpop: 1, stereo: 0, target: 230, voice: 0}
- type: filter - type: filter
id: 230 id: 230
parameters: {bandpass: 1, frequency: 49, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 49, highpass: -1, lowpass: 0, resonance: 128, stereo: 0}
- type: filter
id: 217
parameters: {bandpass: 0, frequency: 91, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- id: 233
parameters: {}
comment: Delay & output
- type: pan - type: pan
id: 168 id: 168
parameters: {panning: 60, stereo: 0} parameters: {panning: 60, stereo: 0}
@@ -41,9 +56,3 @@ units:
- type: outaux - type: outaux
id: 172 id: 172
parameters: {auxgain: 25, outgain: 38, stereo: 1} parameters: {auxgain: 25, outgain: 38, stereo: 1}
- type: loadnote
id: 231
parameters: {stereo: 0}
- type: send
id: 232
parameters: {amount: 89, port: 0, sendpop: 1, stereo: 0, target: 230, unit: 0, voice: 0}
@@ -1,15 +1,27 @@
name: LEAD SuperSaw 2 name: super-saw-2
numvoices: 4 numvoices: 1
units: units:
- type: envelope - id: 233
id: 1 parameters: {}
parameters: {attack: 11, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 36} comment: Modulations
- type: oscillator - type: oscillator
id: 2 id: 34
parameters: {color: 128, detune: 32, gain: 64, phase: 128, shape: 66, stereo: 0, transpose: 76, type: 1, unison: 3} parameters: {color: 128, detune: 64, gain: 65, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 45, type: 0}
- type: send
id: 35
parameters: {amount: 106, port: 2, sendpop: 0, stereo: 0, target: 228, voice: 0}
- type: send
id: 36
parameters: {amount: 128, port: 2, sendpop: 1, stereo: 0, target: 14, voice: 0}
- id: 232
parameters: {}
comment: Right
- type: oscillator - type: oscillator
id: 228 id: 228
parameters: {color: 128, detune: 88, gain: 64, lfo: 0, phase: 58, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3} parameters: {color: 128, detune: 88, gain: 64, lfo: 0, phase: 58, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: oscillator
id: 2
parameters: {color: 128, detune: 32, gain: 64, phase: 128, shape: 66, stereo: 0, transpose: 76, type: 1, unison: 3}
- type: addp - type: addp
id: 229 id: 229
parameters: {stereo: 0} parameters: {stereo: 0}
@@ -19,20 +31,21 @@ units:
- type: addp - type: addp
id: 24 id: 24
parameters: {stereo: 0} parameters: {stereo: 0}
- type: envelope
id: 1
parameters: {attack: 11, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 36}
- type: mulp - type: mulp
id: 17 id: 17
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 18 - id: 18
parameters: {} parameters: {}
- type: envelope comment: Left
id: 12
parameters: {attack: 18, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 35}
- type: oscillator
id: 13
parameters: {color: 128, detune: 32, gain: 64, phase: 44, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: oscillator - type: oscillator
id: 14 id: 14
parameters: {color: 128, detune: 96, gain: 64, lfo: 0, phase: 95, shape: 64, stereo: 0, transpose: 76, type: 1, unison: 3} parameters: {color: 128, detune: 96, gain: 64, lfo: 0, phase: 95, shape: 64, stereo: 0, transpose: 76, type: 1, unison: 3}
- type: oscillator
id: 13
parameters: {color: 128, detune: 32, gain: 64, phase: 44, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: addp - type: addp
id: 28 id: 28
parameters: {stereo: 0} parameters: {stereo: 0}
@@ -42,9 +55,15 @@ units:
- type: addp - type: addp
id: 15 id: 15
parameters: {stereo: 0} parameters: {stereo: 0}
- type: envelope
id: 12
parameters: {attack: 18, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 35}
- type: mulp - type: mulp
id: 26 id: 26
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 230
parameters: {}
comment: Effects & output
- type: delay - type: delay
id: 29 id: 29
parameters: {damp: 0, dry: 0, feedback: 0, notetracking: 0, pregain: 128, stereo: 0} parameters: {damp: 0, dry: 0, feedback: 0, notetracking: 0, pregain: 128, stereo: 0}
@@ -54,29 +73,16 @@ units:
parameters: {panning: 60, stereo: 1} parameters: {panning: 60, stereo: 1}
- type: filter - type: filter
id: 19 id: 19
parameters: {bandpass: 0, frequency: 113, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 120, stereo: 1} parameters: {bandpass: 0, frequency: 113, highpass: -1, lowpass: 1, resonance: 120, stereo: 1}
- id: 31
parameters: {}
- type: outaux - type: outaux
id: 6 id: 6
parameters: {auxgain: 7, outgain: 15, stereo: 1} parameters: {auxgain: 7, outgain: 15, stereo: 1}
- id: 231
parameters: {}
comment: Filter modulation
- type: envelope - type: envelope
id: 20 id: 20
parameters: {attack: 66, decay: 0, gain: 128, release: 74, stereo: 0, sustain: 128} parameters: {attack: 66, decay: 0, gain: 128, release: 74, stereo: 0, sustain: 128}
- type: invgain
id: 32
parameters: {invgain: 128, stereo: 0}
- type: send - type: send
id: 21 id: 21
parameters: {amount: 48, port: 0, sendpop: 1, stereo: 0, target: 19, unit: 0, voice: 0} parameters: {amount: 48, port: 0, sendpop: 1, stereo: 0, target: 19, voice: 0}
- id: 33
parameters: {}
- type: oscillator
id: 34
parameters: {color: 128, detune: 64, gain: 65, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 45, type: 0}
- type: send
id: 35
parameters: {amount: 106, port: 2, sendpop: 0, stereo: 0, target: 228, unit: 0, voice: 0}
- type: send
id: 36
parameters: {amount: 128, port: 2, sendpop: 1, stereo: 0, target: 14, unit: 0, voice: 0}
@@ -1,10 +1,10 @@
name: LEAD SuperSaw 3 name: super-saw-3
comment: Automate filter frequency for the classic trance sound comment: Automate filter frequency for the classic trance sound
numvoices: 4 numvoices: 1
units: units:
- type: envelope - id: 231
id: 228 parameters: {}
parameters: {attack: 1, decay: 0, gain: 64, release: 64, stereo: 0, sustain: 85} comment: Right
- type: oscillator - type: oscillator
id: 229 id: 229
parameters: {color: 128, detune: 100, gain: 64, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3} parameters: {color: 128, detune: 100, gain: 64, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
@@ -14,14 +14,15 @@ units:
- type: addp - type: addp
id: 13 id: 13
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 15 - type: envelope
parameters: {} id: 228
parameters: {attack: 1, decay: 0, gain: 64, release: 64, stereo: 0, sustain: 85}
- type: mulp - type: mulp
id: 16 id: 16
parameters: {stereo: 0} parameters: {stereo: 0}
- type: envelope - id: 230
id: 17 parameters: {}
parameters: {attack: 18, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 99} comment: Left
- type: oscillator - type: oscillator
id: 18 id: 18
parameters: {color: 128, detune: 31, gain: 64, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3} parameters: {color: 128, detune: 31, gain: 64, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
@@ -31,20 +32,22 @@ units:
- type: addp - type: addp
id: 20 id: 20
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 22 - type: envelope
parameters: {} id: 17
parameters: {attack: 18, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 99}
- type: mulp - type: mulp
id: 23 id: 23
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 31 - id: 31
parameters: {} parameters: {}
comment: Effects & output
- type: delay - type: delay
id: 24 id: 24
parameters: {damp: 0, dry: 0, feedback: 0, notetracking: 0, pregain: 128, stereo: 0} parameters: {damp: 0, dry: 0, feedback: 0, notetracking: 0, pregain: 128, stereo: 0}
varargs: [350] varargs: [350]
- type: filter - type: filter
id: 26 id: 26
parameters: {bandpass: 0, frequency: 128, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 77, stereo: 1} parameters: {bandpass: 0, frequency: 128, highpass: 0, lowpass: 1, resonance: 77, stereo: 1}
- type: compressor - type: compressor
id: 27 id: 27
parameters: {attack: 42, invgain: 91, ratio: 81, release: 63, stereo: 1, threshold: 55} parameters: {attack: 42, invgain: 91, ratio: 81, release: 63, stereo: 1, threshold: 55}
@@ -54,7 +57,7 @@ units:
- type: delay - type: delay
id: 29 id: 29
parameters: {damp: 91, dry: 64, feedback: 36, notetracking: 2, pregain: 25, stereo: 1} parameters: {damp: 91, dry: 64, feedback: 36, notetracking: 2, pregain: 25, stereo: 1}
varargs: [36, 41] varargs: [40, 41]
- type: outaux - type: outaux
id: 30 id: 30
parameters: {auxgain: 0, outgain: 29, stereo: 1} parameters: {auxgain: 0, outgain: 29, stereo: 1}
@@ -1,9 +1,21 @@
name: LEAD SuperSaw name: super-saw
numvoices: 4 numvoices: 1
units: units:
- type: envelope - id: 231
id: 1 parameters: {}
parameters: {attack: 11, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 99} comment: Modulations
- type: oscillator
id: 53
parameters: {color: 128, detune: 64, gain: 64, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0}
- type: send
id: 30
parameters: {amount: 128, port: 2, sendpop: 0, stereo: 0, target: 2, voice: 0}
- type: send
id: 54
parameters: {amount: 98, port: 2, sendpop: 1, stereo: 0, target: 14, voice: 0}
- id: 232
parameters: {}
comment: Right
- type: oscillator - type: oscillator
id: 2 id: 2
parameters: {color: 128, detune: 100, gain: 64, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3} parameters: {color: 128, detune: 100, gain: 64, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
@@ -19,20 +31,21 @@ units:
- type: addp - type: addp
id: 24 id: 24
parameters: {stereo: 0} parameters: {stereo: 0}
- type: envelope
id: 1
parameters: {attack: 11, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 99}
- type: mulp - type: mulp
id: 17 id: 17
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 18 - id: 18
parameters: {} parameters: {}
- type: envelope comment: Left
id: 12
parameters: {attack: 18, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 99}
- type: oscillator
id: 13
parameters: {color: 128, detune: 31, gain: 64, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: oscillator - type: oscillator
id: 14 id: 14
parameters: {color: 128, detune: 96, gain: 64, lfo: 0, phase: 64, shape: 64, stereo: 0, transpose: 76, type: 1, unison: 3} parameters: {color: 128, detune: 96, gain: 64, lfo: 0, phase: 64, shape: 64, stereo: 0, transpose: 76, type: 1, unison: 3}
- type: oscillator
id: 13
parameters: {color: 128, detune: 31, gain: 64, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: addp - type: addp
id: 28 id: 28
parameters: {stereo: 0} parameters: {stereo: 0}
@@ -42,9 +55,15 @@ units:
- type: addp - type: addp
id: 48 id: 48
parameters: {stereo: 0} parameters: {stereo: 0}
- type: envelope
id: 12
parameters: {attack: 18, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 99}
- type: mulp - type: mulp
id: 26 id: 26
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 233
parameters: {}
comment: Effects & output
- type: delay - type: delay
id: 49 id: 49
parameters: {damp: 0, dry: 0, feedback: 0, notetracking: 0, pregain: 128, stereo: 0} parameters: {damp: 0, dry: 0, feedback: 0, notetracking: 0, pregain: 128, stereo: 0}
@@ -54,7 +73,7 @@ units:
parameters: {panning: 60, stereo: 1} parameters: {panning: 60, stereo: 1}
- type: filter - type: filter
id: 19 id: 19
parameters: {bandpass: 0, frequency: 116, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 1} parameters: {bandpass: 0, frequency: 116, highpass: 0, lowpass: 1, resonance: 128, stereo: 1}
- type: delay - type: delay
id: 51 id: 51
parameters: {damp: 91, dry: 128, feedback: 96, notetracking: 2, pregain: 65, stereo: 1} parameters: {damp: 91, dry: 128, feedback: 96, notetracking: 2, pregain: 65, stereo: 1}
@@ -62,23 +81,14 @@ units:
- type: outaux - type: outaux
id: 6 id: 6
parameters: {auxgain: 0, outgain: 25, stereo: 1} parameters: {auxgain: 0, outgain: 25, stereo: 1}
- id: 230
parameters: {}
comment: Filter modulation
- type: envelope - type: envelope
id: 20 id: 20
parameters: {attack: 66, decay: 0, gain: 128, release: 74, stereo: 0, sustain: 128} parameters: {attack: 66, decay: 0, gain: 128, release: 74, stereo: 0, sustain: 128}
- type: invgain
id: 52
parameters: {invgain: 128, stereo: 0}
- type: send - type: send
id: 21 id: 21
parameters: {amount: 48, port: 0, sendpop: 1, stereo: 0, target: 19, unit: 0, voice: 0} parameters: {amount: 48, port: 0, sendpop: 1, stereo: 0, target: 19, voice: 0}
- id: 29 - id: 29
parameters: {} parameters: {}
- type: oscillator
id: 53
parameters: {color: 128, detune: 64, gain: 64, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0}
- type: send
id: 30
parameters: {amount: 128, port: 2, sendpop: 0, stereo: 0, target: 2, unit: 0, voice: 0}
- type: send
id: 54
parameters: {amount: 98, port: 2, sendpop: 1, stereo: 0, target: 14, unit: 0, voice: 0}
@@ -1,6 +1,9 @@
name: Pad Gen name: pad-gen
numvoices: 4 numvoices: 1
units: units:
- id: 233
parameters: {}
comment: Main envelopes
- type: envelope - type: envelope
id: 163 id: 163
parameters: {attack: 61, decay: 87, gain: 83, release: 76, stereo: 0, sustain: 79} parameters: {attack: 61, decay: 87, gain: 83, release: 76, stereo: 0, sustain: 79}
@@ -10,6 +13,9 @@ units:
- type: mulp - type: mulp
id: 229 id: 229
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 234
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 164 id: 164
parameters: {color: 41, detune: 52, gain: 64, lfo: 0, phase: 64, shape: 64, stereo: 0, transpose: 88, type: 1, unison: 3} parameters: {color: 41, detune: 52, gain: 64, lfo: 0, phase: 64, shape: 64, stereo: 0, transpose: 88, type: 1, unison: 3}
@@ -25,9 +31,12 @@ units:
- type: mulp - type: mulp
id: 167 id: 167
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 235
parameters: {}
comment: Effects & output
- type: filter - type: filter
id: 230 id: 230
parameters: {bandpass: 1, frequency: 68, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 93, stereo: 0} parameters: {bandpass: 1, frequency: 68, highpass: 1, lowpass: 0, resonance: 93, stereo: 0}
- type: pan - type: pan
id: 168 id: 168
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
@@ -38,9 +47,12 @@ units:
- type: outaux - type: outaux
id: 172 id: 172
parameters: {auxgain: 12, outgain: 16, stereo: 1} parameters: {auxgain: 12, outgain: 16, stereo: 1}
- id: 236
parameters: {}
comment: Filter modulation
- type: loadnote - type: loadnote
id: 231 id: 231
parameters: {stereo: 0} parameters: {stereo: 0}
- type: send - type: send
id: 232 id: 232
parameters: {amount: 94, port: 0, sendpop: 1, stereo: 0, target: 230, unit: 0, voice: 0} parameters: {amount: 94, port: 0, sendpop: 1, stereo: 0, target: 230, voice: 0}
+31 -19
View File
@@ -1,21 +1,9 @@
name: PadLong name: pad-long
numvoices: 2 numvoices: 1
units: units:
- type: envelope - id: 161
id: 1 parameters: {}
parameters: {attack: 74, decay: 96, gain: 64, release: 96, stereo: 0, sustain: 96} comment: Main oscillators
- type: envelope
id: 2
parameters: {attack: 96, decay: 104, gain: 64, release: 96, stereo: 0, sustain: 104}
- type: send
id: 3
parameters: {amount: 128, port: 0, sendpop: 1, target: 14}
- type: oscillator
id: 5
parameters: {color: 64, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 28, type: 1}
- type: send
id: 6
parameters: {amount: 96, port: 0, sendpop: 1, target: 13}
- type: oscillator - type: oscillator
id: 159 id: 159
parameters: {color: 0, detune: 80, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1} parameters: {color: 0, detune: 80, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1}
@@ -31,15 +19,39 @@ units:
- type: addp - type: addp
id: 12 id: 12
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 162
parameters: {}
comment: Modulated filters
- type: oscillator
id: 5
parameters: {color: 64, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 28, type: 1}
- type: send
id: 6
parameters: {amount: 96, port: 0, sendpop: 1, target: 13}
- type: filter - type: filter
id: 13 id: 13
parameters: {bandpass: 0, frequency: 53, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 53, highpass: 1, lowpass: 1, resonance: 128, stereo: 0}
- type: envelope
id: 2
parameters: {attack: 96, decay: 104, gain: 64, release: 96, stereo: 0, sustain: 104}
- type: send
id: 3
parameters: {amount: 128, port: 0, sendpop: 1, target: 14}
- type: filter - type: filter
id: 14 id: 14
parameters: {bandpass: 0, frequency: 16, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 48, stereo: 0} parameters: {bandpass: 0, frequency: 16, highpass: 0, lowpass: 1, resonance: 48, stereo: 0}
- id: 163
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 74, decay: 96, gain: 64, release: 96, stereo: 0, sustain: 96}
- type: mulp - type: mulp
id: 15 id: 15
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 164
parameters: {}
comment: Effects & output
- type: pan - type: pan
id: 16 id: 16
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+30 -15
View File
@@ -1,18 +1,9 @@
name: Pad name: pad
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 83
id: 1 parameters: {}
parameters: {attack: 72, decay: 96, gain: 128, release: 88, stereo: 0, sustain: 96} comment: Modulations
- type: send
id: 2
parameters: {amount: 64, port: 4, sendpop: 0, target: 1}
- type: oscillator
id: 3
parameters: {color: 80, detune: 60, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 2}
- type: oscillator
id: 4
parameters: {color: 96, detune: 72, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 1}
- type: oscillator - type: oscillator
id: 5 id: 5
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 90, stereo: 0, transpose: 32, type: 0} parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 90, stereo: 0, transpose: 32, type: 0}
@@ -22,24 +13,48 @@ units:
- type: send - type: send
id: 78 id: 78
parameters: {amount: 61, port: 1, sendpop: 1, target: 4} parameters: {amount: 61, port: 1, sendpop: 1, target: 4}
- id: 84
parameters: {}
comment: Main oscillators
- type: oscillator
id: 3
parameters: {color: 80, detune: 60, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 2}
- type: oscillator
id: 4
parameters: {color: 96, detune: 72, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 1}
- type: addp - type: addp
id: 80 id: 80
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 85
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 72, decay: 96, gain: 128, release: 88, stereo: 0, sustain: 96}
- type: send
id: 2
parameters: {amount: 64, port: 4, sendpop: 0, target: 1}
- type: mulp - type: mulp
id: 10 id: 10
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 82
parameters: {}
comment: Effects
- type: filter - type: filter
id: 11 id: 11
parameters: {bandpass: 0, frequency: 26, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 26, highpass: -1, lowpass: 1, resonance: 128, stereo: 0}
- type: filter - type: filter
id: 12 id: 12
parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 0} parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, resonance: 64, stereo: 0}
- type: distort - type: distort
id: 13 id: 13
parameters: {drive: 104, stereo: 0} parameters: {drive: 104, stereo: 0}
- type: hold - type: hold
id: 14 id: 14
parameters: {holdfreq: 128, stereo: 0} parameters: {holdfreq: 128, stereo: 0}
- id: 81
parameters: {}
comment: Output
- type: pan - type: pan
id: 15 id: 15
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+27 -15
View File
@@ -1,18 +1,9 @@
name: Pad2 name: pad2
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 85
id: 1 parameters: {}
parameters: {attack: 72, decay: 96, gain: 128, release: 88, stereo: 0, sustain: 96} comment: Modulations
- type: send
id: 2
parameters: {amount: 64, port: 4, sendpop: 0, target: 1}
- type: oscillator
id: 3
parameters: {color: 80, detune: 60, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 1}
- type: oscillator
id: 4
parameters: {color: 128, detune: 72, gain: 64, lfo: 0, phase: 32, shape: 112, stereo: 0, transpose: 64, type: 0}
- type: oscillator - type: oscillator
id: 5 id: 5
parameters: {color: 64, detune: 112, gain: 128, lfo: 1, phase: 0, shape: 16, stereo: 0, transpose: 80, type: 2} parameters: {color: 64, detune: 112, gain: 128, lfo: 1, phase: 0, shape: 16, stereo: 0, transpose: 80, type: 2}
@@ -22,18 +13,39 @@ units:
- type: send - type: send
id: 81 id: 81
parameters: {amount: 60, port: 1, sendpop: 1, target: 4} parameters: {amount: 60, port: 1, sendpop: 1, target: 4}
- id: 86
parameters: {}
comment: Main oscillators
- type: oscillator
id: 3
parameters: {color: 80, detune: 60, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 1}
- type: oscillator
id: 4
parameters: {color: 128, detune: 72, gain: 64, lfo: 0, phase: 32, shape: 112, stereo: 0, transpose: 64, type: 0}
- type: addp - type: addp
id: 83 id: 83
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 87
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 72, decay: 96, gain: 128, release: 88, stereo: 0, sustain: 96}
- type: send
id: 2
parameters: {amount: 64, port: 4, sendpop: 0, target: 1}
- type: mulp - type: mulp
id: 10 id: 10
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 84
parameters: {}
comment: Effects & output
- type: filter - type: filter
id: 11 id: 11
parameters: {bandpass: 0, frequency: 80, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 24, stereo: 0} parameters: {bandpass: 0, frequency: 80, highpass: 0, lowpass: 1, resonance: 24, stereo: 0}
- type: filter - type: filter
id: 12 id: 12
parameters: {bandpass: 0, frequency: 48, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 24, stereo: 0} parameters: {bandpass: 0, frequency: 48, highpass: 1, lowpass: 0, resonance: 24, stereo: 0}
- type: pan - type: pan
id: 13 id: 13
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+19 -7
View File
@@ -1,7 +1,10 @@
name: Brass name: brass
comment: Brass sound use for short stabs at C1-C2 range comment: Brass sound use for short stabs at C1-C2 range
numvoices: 4 numvoices: 1
units: units:
- id: 225
parameters: {}
comment: Main envelopes
- type: envelope - type: envelope
id: 163 id: 163
parameters: {attack: 24, decay: 128, gain: 59, release: 89, stereo: 0, sustain: 128} parameters: {attack: 24, decay: 128, gain: 59, release: 89, stereo: 0, sustain: 128}
@@ -11,6 +14,9 @@ units:
- type: mulp - type: mulp
id: 216 id: 216
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 226
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 164 id: 164
parameters: {color: 40, detune: 64, gain: 128, lfo: 0, phase: 68, shape: 88, stereo: 0, transpose: 64, type: 1, unison: 3} parameters: {color: 40, detune: 64, gain: 128, lfo: 0, phase: 68, shape: 88, stereo: 0, transpose: 64, type: 1, unison: 3}
@@ -29,27 +35,33 @@ units:
- type: mulp - type: mulp
id: 167 id: 167
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 227
parameters: {}
comment: Effects & output
- type: compressor - type: compressor
id: 222
parameters: {attack: 14, invgain: 97, ratio: 38, release: 61, stereo: 0, threshold: 27} parameters: {attack: 14, invgain: 97, ratio: 38, release: 61, stereo: 0, threshold: 27}
- type: mulp - type: mulp
id: 222 id: 223
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 217 id: 217
parameters: {bandpass: 1, frequency: 57, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 26, stereo: 0} parameters: {bandpass: 1, frequency: 57, highpass: 1, lowpass: 1, resonance: 26, stereo: 0}
- type: filter - type: filter
id: 218 id: 218
parameters: {bandpass: 1, frequency: 85, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 1, resonance: 33, stereo: 0} parameters: {bandpass: 1, frequency: 85, highpass: -1, lowpass: 0, resonance: 33, stereo: 0}
- type: pan - type: pan
id: 168 id: 168
parameters: {panning: 61, stereo: 0} parameters: {panning: 61, stereo: 0}
- type: outaux - type: outaux
id: 172 id: 172
parameters: {auxgain: 31, outgain: 67, stereo: 1} parameters: {auxgain: 31, outgain: 67, stereo: 1}
- parameters: {} - id: 224
parameters: {}
comment: Filter modulation
- type: loadnote - type: loadnote
id: 219 id: 219
parameters: {stereo: 0} parameters: {stereo: 0}
- type: send - type: send
id: 220 id: 220
parameters: {amount: 89, port: 0, sendpop: 1, stereo: 0, target: 218, unit: 0, voice: 0} parameters: {amount: 89, port: 0, sendpop: 1, stereo: 0, target: 218, voice: 0}
+25 -10
View File
@@ -1,9 +1,9 @@
name: Popper name: popper
numvoices: 3 numvoices: 1
units: units:
- type: envelope - id: 197
id: 1 parameters: {}
parameters: {attack: 0, decay: 65, gain: 128, release: 70, stereo: 0, sustain: 0} comment: Modulations
- type: envelope - type: envelope
id: 2 id: 2
parameters: {attack: 5, decay: 55, gain: 128, release: 80, stereo: 0, sustain: 0} parameters: {attack: 5, decay: 55, gain: 128, release: 80, stereo: 0, sustain: 0}
@@ -28,30 +28,45 @@ units:
- type: send - type: send
id: 12 id: 12
parameters: {amount: 80, port: 1, sendpop: 1, target: 16} parameters: {amount: 80, port: 1, sendpop: 1, target: 16}
- id: 196
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 14 id: 14
parameters: {color: 128, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 63, stereo: 0, transpose: 76, type: 2, unison: 0} parameters: {color: 128, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 63, stereo: 0, transpose: 76, type: 2, unison: 0}
- type: oscillator
id: 15
parameters: {color: 40, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 61, stereo: 0, transpose: 76, type: 2, unison: 0}
- type: oscillator - type: oscillator
id: 16 id: 16
parameters: {color: 0, detune: 64, gain: 64, lfo: 0, phase: 18, shape: 128, stereo: 0, transpose: 76, type: 1, unison: 2} parameters: {color: 0, detune: 64, gain: 64, lfo: 0, phase: 18, shape: 128, stereo: 0, transpose: 76, type: 1, unison: 2}
- type: oscillator
id: 15
parameters: {color: 40, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 61, stereo: 0, transpose: 76, type: 2, unison: 0}
- type: addp - type: addp
id: 17 id: 17
parameters: {stereo: 0} parameters: {stereo: 0}
- type: addp - type: addp
id: 18 id: 18
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 193
parameters: {}
comment: Filters
- type: filter - type: filter
id: 20 id: 20
parameters: {bandpass: 0, frequency: 71, highpass: 1, lowpass: 1, negbandpass: 1, neghighpass: 0, resonance: 96, stereo: 0} parameters: {bandpass: -1, frequency: 71, highpass: 1, lowpass: 1, resonance: 96, stereo: 0}
- type: filter - type: filter
id: 19 id: 19
parameters: {bandpass: 0, frequency: 50, highpass: 0, lowpass: 1, negbandpass: 1, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: -1, frequency: 50, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- id: 194
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 0, decay: 65, gain: 128, release: 70, stereo: 0, sustain: 0}
- type: mulp - type: mulp
id: 21 id: 21
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 195
parameters: {}
comment: Delays & output
- type: delay - type: delay
id: 22 id: 22
parameters: {damp: 63, dry: 128, feedback: 61, notetracking: 2, pregain: 46, stereo: 0} parameters: {damp: 63, dry: 128, feedback: 61, notetracking: 2, pregain: 46, stereo: 0}
@@ -1,7 +1,9 @@
name: Brass name: brass2
comment: Brass sound use for short stabs at C1-C2 range numvoices: 1
numvoices: 4
units: units:
- id: 228
parameters: {}
comment: Main envelopes
- type: envelope - type: envelope
id: 163 id: 163
parameters: {attack: 24, decay: 128, gain: 59, release: 57, stereo: 1, sustain: 114} parameters: {attack: 24, decay: 128, gain: 59, release: 57, stereo: 1, sustain: 114}
@@ -11,17 +13,21 @@ units:
- type: mulp - type: mulp
id: 216 id: 216
parameters: {stereo: 1} parameters: {stereo: 1}
- id: 229
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 164 id: 164
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 101, stereo: 1, transpose: 64, type: 1, unison: 3} parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 101, stereo: 1, transpose: 64, type: 1, unison: 3}
- type: distort - type: distort
id: 217
parameters: {drive: 60, stereo: 1} parameters: {drive: 60, stereo: 1}
- type: add - type: add
id: 214 id: 214
parameters: {stereo: 1} parameters: {stereo: 1}
- type: oscillator - type: oscillator
id: 165 id: 165
parameters: {color: 70, detune: 72, gain: 128, lfo: 0, phase: 16, shape: 47, stereo: 1, transpose: 76, type: 1, unison: 3} parameters: {color: 70, detune: 72, gain: 128, lfo: 0, phase: 16, shape: 40, stereo: 1, transpose: 76, type: 1, unison: 3}
- type: distort - type: distort
id: 223 id: 223
parameters: {drive: 60, stereo: 1} parameters: {drive: 60, stereo: 1}
@@ -34,27 +40,33 @@ units:
- type: mulp - type: mulp
id: 167 id: 167
parameters: {stereo: 1} parameters: {stereo: 1}
- id: 227
parameters: {}
comment: Effects & output
- type: compressor - type: compressor
id: 224
parameters: {attack: 14, invgain: 97, ratio: 38, release: 61, stereo: 1, threshold: 27} parameters: {attack: 14, invgain: 97, ratio: 38, release: 61, stereo: 1, threshold: 27}
- type: mulp - type: mulp
id: 222 id: 222
parameters: {stereo: 1} parameters: {stereo: 1}
- type: filter - type: filter
id: 217 id: 225
parameters: {bandpass: 1, frequency: 40, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 65, stereo: 1} parameters: {bandpass: 1, frequency: 40, highpass: 1, lowpass: 1, resonance: 65, stereo: 1}
- type: filter - type: filter
id: 218 id: 218
parameters: {bandpass: 1, frequency: 80, highpass: 0, lowpass: 0, negbandpass: 0, neghighpass: 1, resonance: 86, stereo: 1} parameters: {bandpass: 1, frequency: 80, highpass: -1, lowpass: 0, resonance: 86, stereo: 1}
- type: pan - type: pan
id: 168 id: 168
parameters: {panning: 50, stereo: 1} parameters: {panning: 50, stereo: 1}
- type: outaux - type: outaux
id: 172 id: 172
parameters: {auxgain: 31, outgain: 67, stereo: 1} parameters: {auxgain: 31, outgain: 67, stereo: 1}
- parameters: {} - id: 226
parameters: {}
comment: Filter modulation
- type: loadnote - type: loadnote
id: 219 id: 219
parameters: {stereo: 0} parameters: {stereo: 0}
- type: send - type: send
id: 220 id: 220
parameters: {amount: 124, port: 0, sendpop: 1, stereo: 0, target: 218, unit: 0, voice: 0} parameters: {amount: 124, port: 0, sendpop: 1, stereo: 0, target: 218, voice: 0}
+21 -6
View File
@@ -1,9 +1,9 @@
name: MoreAndMore name: more-and-more
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 233
id: 1 parameters: {}
parameters: {attack: 0, decay: 63, gain: 128, release: 32, stereo: 0, sustain: 0} comment: Modulations
- type: oscillator - type: oscillator
id: 2 id: 2
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 52, type: 0} parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 52, type: 0}
@@ -13,6 +13,9 @@ units:
- type: send - type: send
id: 4 id: 4
parameters: {amount: 72, port: 1, sendpop: 1, target: 226} parameters: {amount: 72, port: 1, sendpop: 1, target: 226}
- id: 232
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 6 id: 6
parameters: {color: 0, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1} parameters: {color: 0, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1}
@@ -22,6 +25,9 @@ units:
- type: addp - type: addp
id: 227 id: 227
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 231
parameters: {}
comment: Modulated filters
- type: envelope - type: envelope
id: 228 id: 228
parameters: {attack: 0, decay: 76, gain: 128, release: 32, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 76, gain: 128, release: 32, stereo: 0, sustain: 0}
@@ -33,13 +39,22 @@ units:
parameters: {amount: 88, port: 0, sendpop: 1, target: 14} parameters: {amount: 88, port: 0, sendpop: 1, target: 14}
- type: filter - type: filter
id: 13 id: 13
parameters: {bandpass: 0, frequency: 80, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 80, highpass: 1, lowpass: 1, resonance: 128, stereo: 0}
- type: filter - type: filter
id: 14 id: 14
parameters: {bandpass: 0, frequency: 80, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 80, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- id: 229
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 0, decay: 63, gain: 128, release: 32, stereo: 0, sustain: 0}
- type: mulp - type: mulp
id: 15 id: 15
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 230
parameters: {}
comment: Delay & output
- type: delay - type: delay
id: 16 id: 16
parameters: {damp: 64, dry: 128, feedback: 64, notetracking: 2, pregain: 64, stereo: 0} parameters: {damp: 64, dry: 128, feedback: 64, notetracking: 2, pregain: 64, stereo: 0}
+30 -15
View File
@@ -1,9 +1,15 @@
name: ShortPunchy name: punchy
numvoices: 1 numvoices: 1
units: units:
- type: envelope - id: 197
id: 1 parameters: {}
parameters: {attack: 0, decay: 70, gain: 128, release: 70, stereo: 0, sustain: 0} comment: Modulations
- type: oscillator
id: 11
parameters: {color: 128, detune: 64, gain: 64, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 96, type: 0}
- type: send
id: 12
parameters: {amount: 80, port: 1, sendpop: 1, target: 16}
- type: envelope - type: envelope
id: 2 id: 2
parameters: {attack: 0, decay: 65, gain: 101, release: 80, stereo: 0, sustain: 0} parameters: {attack: 0, decay: 65, gain: 101, release: 80, stereo: 0, sustain: 0}
@@ -22,36 +28,45 @@ units:
- type: send - type: send
id: 192 id: 192
parameters: {amount: 32, port: 3, sendpop: 1, target: 14} parameters: {amount: 32, port: 3, sendpop: 1, target: 14}
- type: oscillator - id: 195
id: 11 parameters: {}
parameters: {color: 128, detune: 64, gain: 64, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 96, type: 0} comment: Main oscillators
- type: send
id: 12
parameters: {amount: 80, port: 1, sendpop: 1, target: 16}
- type: oscillator - type: oscillator
id: 14 id: 14
parameters: {color: 128, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 76, type: 2} parameters: {color: 128, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 76, type: 2}
- type: oscillator
id: 15
parameters: {color: 64, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 2}
- type: oscillator - type: oscillator
id: 16 id: 16
parameters: {color: 0, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 76, type: 1} parameters: {color: 0, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 76, type: 1}
- type: oscillator
id: 15
parameters: {color: 64, detune: 64, gain: 64, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 2}
- type: addp - type: addp
id: 17 id: 17
parameters: {stereo: 0} parameters: {stereo: 0}
- type: addp - type: addp
id: 18 id: 18
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 196
parameters: {}
comment: Filters
- type: filter - type: filter
id: 19 id: 19
parameters: {bandpass: 0, frequency: 46, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 94, stereo: 0} parameters: {bandpass: 0, frequency: 46, highpass: 0, lowpass: 1, resonance: 94, stereo: 0}
- type: filter - type: filter
id: 20 id: 20
parameters: {bandpass: 0, frequency: 62, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 96, stereo: 0} parameters: {bandpass: 0, frequency: 62, highpass: 0, lowpass: 1, resonance: 96, stereo: 0}
- id: 193
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 0, decay: 70, gain: 128, release: 70, stereo: 0, sustain: 0}
- type: mulp - type: mulp
id: 21 id: 21
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 194
parameters: {}
comment: Effects & output
- type: delay - type: delay
id: 22 id: 22
parameters: {damp: 32, dry: 128, feedback: 64, notetracking: 2, pregain: 64, stereo: 0} parameters: {damp: 32, dry: 128, feedback: 64, notetracking: 2, pregain: 64, stereo: 0}
@@ -1,4 +1,4 @@
name: PL Sine name: sine-pluck
numvoices: 3 numvoices: 3
units: units:
- type: envelope - type: envelope
@@ -1,6 +1,9 @@
name: Super Pluck name: super-pluck
numvoices: 4 numvoices: 1
units: units:
- id: 34
parameters: {}
comment: Left
- type: envelope - type: envelope
id: 1 id: 1
parameters: {attack: 11, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 36} parameters: {attack: 11, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 36}
@@ -24,6 +27,7 @@ units:
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 18 - id: 18
parameters: {} parameters: {}
comment: Right
- type: envelope - type: envelope
id: 12 id: 12
parameters: {attack: 18, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 35} parameters: {attack: 18, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 35}
@@ -45,24 +49,28 @@ units:
- type: mulp - type: mulp
id: 26 id: 26
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 35
parameters: {}
comment: Effects & output
- type: delay - type: delay
id: 29
parameters: {damp: 0, dry: 0, feedback: 0, notetracking: 0, pregain: 128, stereo: 0} parameters: {damp: 0, dry: 0, feedback: 0, notetracking: 0, pregain: 128, stereo: 0}
varargs: [69] varargs: [69]
- type: pan - type: pan
id: 30
parameters: {panning: 60, stereo: 1} parameters: {panning: 60, stereo: 1}
- type: filter - type: filter
id: 19 id: 19
parameters: {bandpass: 0, frequency: 96, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 104, stereo: 1} parameters: {bandpass: 0, frequency: 96, highpass: 0, lowpass: 1, resonance: 104, stereo: 1}
- parameters: {}
- type: outaux - type: outaux
id: 6 id: 6
parameters: {auxgain: 14, outgain: 35, stereo: 1} parameters: {auxgain: 14, outgain: 35, stereo: 1}
- id: 36
parameters: {}
comment: Modulation
- type: envelope - type: envelope
id: 20 id: 20
parameters: {attack: 66, decay: 0, gain: 128, release: 74, stereo: 0, sustain: 128} parameters: {attack: 66, decay: 0, gain: 128, release: 74, stereo: 0, sustain: 128}
- type: invgain
parameters: {invgain: 59, stereo: 0}
- parameters: {}
- type: send - type: send
id: 21 id: 21
parameters: {amount: 48, port: 0, sendpop: 1, stereo: 0, target: 19, unit: 0, voice: 0} parameters: {amount: 29, port: 0, sendpop: 1, stereo: 0, target: 19, voice: 0}
@@ -1,9 +1,12 @@
name: Happy lead name: trance-bells
comment: |- comment: |-
Generic pluck generator Generic pluck generator
Use oscillator type, color and shape to alter the sound properties Use oscillator type, color and shape to alter the sound properties
numvoices: 4 numvoices: 1
units: units:
- id: 1007
parameters: {}
comment: Main envelopes
- type: envelope - type: envelope
id: 163 id: 163
parameters: {attack: 7, decay: 102, gain: 68, release: 78, stereo: 0, sustain: 47} parameters: {attack: 7, decay: 102, gain: 68, release: 78, stereo: 0, sustain: 47}
@@ -13,6 +16,9 @@ units:
- type: mulp - type: mulp
id: 216 id: 216
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 1008
parameters: {}
comment: Main oscillators
- type: oscillator - type: oscillator
id: 164 id: 164
parameters: {color: 91, detune: 52, gain: 128, lfo: 0, phase: 128, shape: 48, stereo: 0, transpose: 76, type: 0, unison: 3} parameters: {color: 91, detune: 52, gain: 128, lfo: 0, phase: 128, shape: 48, stereo: 0, transpose: 76, type: 0, unison: 3}
@@ -28,20 +34,30 @@ units:
- type: oscillator - type: oscillator
id: 1002 id: 1002
parameters: {color: 61, detune: 64, gain: 128, looplength: 821, loopstart: 2374, phase: 0, samplestart: 557335, shape: 58, stereo: 0, transpose: 55, type: 4, unison: 1} parameters: {color: 61, detune: 64, gain: 128, looplength: 821, loopstart: 2374, phase: 0, samplestart: 557335, shape: 58, stereo: 0, transpose: 55, type: 4, unison: 1}
- parameters: {}
disabled: true
- type: addp - type: addp
id: 1003 id: 1004
parameters: {stereo: 0} parameters: {stereo: 0}
- type: mulp - type: mulp
id: 167 id: 167
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - id: 1006
id: 217 parameters: {}
parameters: {bandpass: 0, frequency: 23, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} comment: Modulated filters
- type: loadnote
id: 219
parameters: {stereo: 0}
- type: send
id: 220
parameters: {amount: 82, port: 0, sendpop: 1, stereo: 0, target: 218, voice: 0}
- type: filter - type: filter
id: 218 id: 218
parameters: {bandpass: 0, frequency: 39, highpass: 1, lowpass: 0, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 39, highpass: 1, lowpass: 0, resonance: 128, stereo: 0}
- type: filter
id: 217
parameters: {bandpass: 0, frequency: 23, highpass: 1, lowpass: 1, resonance: 128, stereo: 0}
- id: 1005
parameters: {}
comment: Delay & output
- type: pan - type: pan
id: 168 id: 168
parameters: {panning: 61, stereo: 0} parameters: {panning: 61, stereo: 0}
@@ -52,9 +68,3 @@ units:
- type: outaux - type: outaux
id: 172 id: 172
parameters: {auxgain: 48, outgain: 24, stereo: 1} parameters: {auxgain: 48, outgain: 24, stereo: 1}
- type: loadnote
id: 219
parameters: {stereo: 0}
- type: send
id: 220
parameters: {amount: 82, port: 0, sendpop: 1, stereo: 0, target: 218, unit: 0, voice: 0}
+13 -18
View File
@@ -1,38 +1,33 @@
name: Pizzicato name: pizzicato
numvoices: 4 numvoices: 1
units: units:
- type: envelope - id: 223
id: 1 parameters: {}
parameters: {attack: 0, decay: 67, gain: 64, release: 62, stereo: 0, sustain: 0} comment: Main oscillators
- type: oscillator - type: oscillator
id: 2 id: 2
parameters: {color: 60, detune: 64, gain: 74, looplength: 137, loopstart: 549, phase: 0, samplestart: 1034191, shape: 89, stereo: 0, transpose: 40, type: 4, unison: 0} parameters: {color: 60, detune: 64, gain: 74, looplength: 137, loopstart: 549, phase: 0, samplestart: 1034191, shape: 89, stereo: 0, transpose: 40, type: 4, unison: 0}
- type: distort
id: 17
parameters: {drive: 93, stereo: 0}
disabled: true
- type: oscillator
id: 10
parameters: {color: 59, detune: 63, gain: 67, looplength: 100, loopstart: 942, phase: 0, samplestart: 1633072, shape: 56, stereo: 0, transpose: 55, type: 4, unison: 2}
disabled: true
- type: addp
id: 11
parameters: {stereo: 0}
disabled: true
- type: oscillator - type: oscillator
id: 221 id: 221
parameters: {color: 64, detune: 63, gain: 128, looplength: 398, loopstart: 2073, phase: 0, samplestart: 1034961, shape: 42, stereo: 0, transpose: 65, type: 4, unison: 0} parameters: {color: 64, detune: 63, gain: 128, looplength: 398, loopstart: 2073, phase: 0, samplestart: 1034961, shape: 42, stereo: 0, transpose: 65, type: 4, unison: 0}
- type: addp - type: addp
id: 16 id: 16
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 224
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 0, decay: 67, gain: 64, release: 62, stereo: 0, sustain: 0}
- type: mulp - type: mulp
id: 14 id: 14
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 222 - id: 222
parameters: {} parameters: {}
comment: Effects & output
- type: filter - type: filter
id: 15 id: 15
parameters: {bandpass: 1, frequency: 55, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {bandpass: 1, frequency: 55, highpass: 0, lowpass: 1, resonance: 128, stereo: 0}
- type: pan - type: pan
id: 5 id: 5
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
+30 -23
View File
@@ -1,56 +1,63 @@
name: Strings name: strings
numvoices: 3 numvoices: 1
units: units:
- id: 224
parameters: {}
comment: Modulations
- type: oscillator
id: 29
parameters: {color: 128, detune: 64, gain: 82, lfo: 1, phase: 0, shape: 35, stereo: 0, transpose: 82, type: 0}
- type: send
id: 44
parameters: {amount: 74, port: 1, sendpop: 0, stereo: 0, target: 24, voice: 0}
- type: send
id: 30
parameters: {amount: 48, port: 1, sendpop: 1, stereo: 0, target: 37, voice: 0}
- id: 225
parameters: {}
comment: Left
- type: envelope - type: envelope
id: 33 id: 33
parameters: {attack: 57, channel: 2, decay: 93, gain: 74, release: 71, stereo: 0, sustain: 64} parameters: {attack: 57, decay: 93, gain: 74, release: 71, stereo: 0, sustain: 64}
- type: oscillator
id: 19
parameters: {color: 69, damp: 64, detune: 64, dry: 128, feedback: 125, gain: 65, looplength: 11272, loopstart: 147, notetracking: 0, phase: 0, pregain: 40, samplestart: 1458843, shape: 64, stereo: 0, transpose: 65, type: 4, unison: 0}
- type: oscillator - type: oscillator
id: 24 id: 24
parameters: {color: 69, detune: 64, gain: 78, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 64, stereo: 0, transpose: 67, type: 4, unison: 1} parameters: {color: 69, detune: 64, gain: 78, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 64, stereo: 0, transpose: 67, type: 4, unison: 1}
- type: oscillator
id: 19
parameters: {color: 69, detune: 64, gain: 65, looplength: 11272, loopstart: 147, phase: 0, samplestart: 1458843, shape: 64, stereo: 0, transpose: 65, type: 4, unison: 0}
- type: addp - type: addp
id: 20 id: 20
parameters: {stereo: 0} parameters: {stereo: 0}
- type: mulp - type: mulp
id: 221 id: 221
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 226
parameters: {}
comment: Right
- type: envelope - type: envelope
id: 46 id: 46
parameters: {attack: 57, decay: 93, gain: 78, panning: 64, release: 71, stereo: 0, sustain: 64} parameters: {attack: 57, decay: 93, gain: 78, release: 71, stereo: 0, sustain: 64}
- type: oscillator - type: oscillator
id: 37 id: 37
parameters: {auxgain: 35, color: 64, detune: 64, gain: 64, looplength: 9710, loopstart: 251, outgain: 40, phase: 0, samplestart: 1448797, shape: 64, stereo: 0, transpose: 79, type: 4, unison: 1} parameters: {color: 64, detune: 64, gain: 64, looplength: 9710, loopstart: 251, phase: 0, samplestart: 1448797, shape: 64, stereo: 0, transpose: 79, type: 4, unison: 1}
- type: oscillator - type: oscillator
id: 38 id: 38
parameters: {color: 128, detune: 58, gain: 68, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 80, stereo: 0, transpose: 67, type: 4, unison: 0} parameters: {color: 128, detune: 58, gain: 68, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 80, stereo: 0, transpose: 67, type: 4, unison: 0}
- type: xch
id: 41
parameters: {stereo: 0}
- type: addp - type: addp
id: 39 id: 39
parameters: {stereo: 0} parameters: {stereo: 0}
- type: mulp - type: mulp
id: 35 id: 35
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 227
parameters: {}
comment: Effects & output
- type: hold - type: hold
id: 223 id: 223
parameters: {holdfreq: 75, stereo: 1} parameters: {holdfreq: 75, stereo: 1}
- type: filter - type: filter
id: 45 id: 45
parameters: {bandpass: 1, frequency: 114, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 1} parameters: {bandpass: 1, frequency: 114, highpass: 0, lowpass: 1, resonance: 128, stereo: 1}
- type: outaux - type: outaux
id: 23 id: 23
parameters: {auxgain: 15, outgain: 27, stereo: 1} parameters: {auxgain: 15, outgain: 27, stereo: 1}
- id: 28
parameters: {}
- type: oscillator
id: 29
parameters: {color: 128, detune: 64, gain: 82, lfo: 1, phase: 0, shape: 35, stereo: 0, transpose: 82, type: 0}
- type: send
id: 44
parameters: {amount: 74, port: 1, sendpop: 0, stereo: 0, target: 24, unit: 0, voice: 0}
- type: send
id: 30
parameters: {amount: 48, port: 1, sendpop: 1, stereo: 0, target: 37, unit: 0, voice: 0}
@@ -1,32 +1,36 @@
name: Pizzicato_octaves name: pizzicato-octaves
numvoices: 4 numvoices: 1
units: units:
- type: envelope - id: 226
id: 1 parameters: {}
parameters: {attack: 0, decay: 74, gain: 64, release: 62, stereo: 0, sustain: 0} comment: Main oscillators
- type: oscillator - type: oscillator
id: 2 id: 2
parameters: {color: 60, detune: 64, gain: 89, looplength: 398, loopstart: 2073, phase: 0, samplestart: 1034961, shape: 89, stereo: 0, transpose: 65, type: 4, unison: 0} parameters: {color: 60, detune: 64, gain: 89, looplength: 398, loopstart: 2073, phase: 0, samplestart: 1034961, shape: 89, stereo: 0, transpose: 65, type: 4, unison: 0}
- type: oscillator - type: oscillator
id: 224 id: 224
parameters: {auxgain: 64, color: 64, detune: 63, gain: 128, looplength: 398, loopstart: 2073, outgain: 64, phase: 0, samplestart: 1034961, shape: 42, stereo: 0, transpose: 77, type: 4, unison: 0} parameters: {color: 64, detune: 63, gain: 128, looplength: 398, loopstart: 2073, phase: 0, samplestart: 1034961, shape: 72, stereo: 0, transpose: 77, type: 4, unison: 0}
- type: distort
id: 50
parameters: {drive: 94, stereo: 0}
- type: addp - type: addp
id: 16 id: 16
parameters: {stereo: 0} parameters: {stereo: 0}
- id: 227
parameters: {}
comment: Main envelope
- type: envelope
id: 1
parameters: {attack: 0, decay: 74, gain: 64, release: 62, stereo: 0, sustain: 0}
- type: mulp - type: mulp
id: 14 id: 14
parameters: {bandpass: 0, frequency: 82, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} parameters: {stereo: 0}
- id: 228
parameters: {}
comment: Effects & output
- type: filter - type: filter
id: 15 id: 15
parameters: {bandpass: 0, frequency: 101, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 94, stereo: 0} parameters: {bandpass: 0, frequency: 101, highpass: -1, lowpass: 1, resonance: 94, stereo: 0}
- id: 225
parameters: {}
- type: pan - type: pan
id: 5 id: 5
parameters: {auxgain: 39, outgain: 58, panning: 65, stereo: 0} parameters: {panning: 65, stereo: 0}
- type: delay - type: delay
id: 49 id: 49
parameters: {damp: 72, dry: 116, feedback: 22, notetracking: 0, pregain: 86, stereo: 1} parameters: {damp: 72, dry: 116, feedback: 22, notetracking: 0, pregain: 86, stereo: 1}

Some files were not shown because too many files have changed in this diff Show More