├── lib ├── preset │ ├── dd_f.p │ ├── overblow.pset │ ├── mystery-flute-pres.pset │ └── fanfare.pset ├── mft.lua ├── binding.lua ├── dd.mfs ├── ddrm.lua ├── preset.lua ├── mod.lua └── doubledecker.sc ├── .gitmodules └── doubledecker.lua /lib/preset/dd_f.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sixolet/doubledecker/HEAD/lib/preset/dd_f.p -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/nb"] 2 | path = lib/nb 3 | url = https://github.com/sixolet/nb.git 4 | [submodule "lib/mftconf"] 5 | path = lib/mftconf 6 | url = https://github.com/juhavaaraniemi/mftconf.git 7 | -------------------------------------------------------------------------------- /lib/mft.lua: -------------------------------------------------------------------------------- 1 | local conf = require('doubledecker/lib/mftconf/lib/mftconf') 2 | 3 | local MFT = { 4 | turn_action = function(page, row, col, layer, val) end, 5 | page_action = function(page) end, 6 | push_action = function(page, row, col, z) end, 7 | } 8 | 9 | function MFT:init(confname) 10 | for i = 1, #midi.vports do -- query all ports 11 | if midi.vports[i].name == "Midi Fighter Twister" then 12 | self.conn = midi.connect(i) -- connect the MFT 13 | if confname then 14 | conf.load_conf(self.conn, confname) 15 | end 16 | self.conn.event = function(data) 17 | self:process_midi(data) 18 | end 19 | end 20 | end 21 | end 22 | 23 | function MFT:set_rgb_level(page, row, col, val) 24 | if not self.conn then return end 25 | self.conn:cc( 26 | 16 * (page - 1) + 4 * (row - 1) + (col - 1), 27 | 17 + util.clamp(math.floor(val * 30), 0, 30), 28 | 3) 29 | end 30 | 31 | function MFT:process_midi(data) 32 | local d = midi.to_msg(data) 33 | if d.type == "cc" then 34 | if not self.turn_action then return end 35 | --print(d.ch, d.cc, d.val) 36 | local page = math.floor(d.cc / 16) + 1 37 | local row = math.floor((d.cc % 16) / 4) + 1 38 | local col = d.cc % 4 + 1 39 | local layer 40 | if d.ch == 1 then layer = 1 end 41 | if d.ch == 5 then layer = 2 end 42 | if layer then 43 | self.turn_action(page, row, col, layer, d.val) 44 | elseif d.ch == 4 then 45 | if d.cc < 4 and d.val > 0 then 46 | self.page_action(d.cc + 1) 47 | end 48 | elseif d.ch == 2 then 49 | self.push_action(page, row, col, d.val > 0 and 1 or 0) 50 | else 51 | tab.print(d) 52 | end 53 | elseif d.type == "note_on" then 54 | tab.print(d) 55 | else 56 | tab.print(d) 57 | end 58 | end 59 | 60 | function MFT:page(n) 61 | if not self.conn then return end 62 | self.conn:note_on(n - 1, 127, 4) 63 | end 64 | 65 | function MFT:set_position(page, row, col, layer, value) 66 | if not self.conn then return end 67 | self.conn:cc(16 * (page - 1) + 4 * (row - 1) + (col - 1), value, layer == 1 and 1 or 5) 68 | end 69 | 70 | return MFT 71 | -------------------------------------------------------------------------------- /lib/binding.lua: -------------------------------------------------------------------------------- 1 | local Binding = { 2 | bindings = {}, 3 | receivers = {}, 4 | } 5 | 6 | Binding.__index = Binding 7 | 8 | 9 | function Binding:static_index(page, row, col, layer) 10 | -- print(page, row, col, layer) 11 | return (layer - 1) * 64 + (page - 1) * 16 + (row - 1) * 4 + (col - 1) + 1 12 | end 13 | 14 | function Binding:index() 15 | return self:static_index(self.page, self.row, self.col, self.layer) 16 | end 17 | 18 | -- Look for the binding in bindings. 19 | -- If it is there, return it. 20 | -- If not register it. 21 | function Binding:at(page, row, col, layer, descriptor) 22 | local index = self:static_index(page, row, col, layer) 23 | local o = self.bindings[index] 24 | if not o then 25 | o = { 26 | page = page, 27 | row = row, 28 | col = col, 29 | layer = layer, 30 | descriptor = descriptor, 31 | } 32 | setmetatable(o, self) 33 | self.bindings[index] = o 34 | end 35 | return o 36 | end 37 | 38 | function Binding:draw(x, y, selected) 39 | if self.display_value then 40 | screen.level(1) 41 | screen.rect(x, y + 2, self.display_value * 32, -7) 42 | screen.fill() 43 | end 44 | if selected then 45 | screen.level(16) 46 | else 47 | screen.level(8) 48 | end 49 | screen.move(x, y) 50 | screen.text(self.descriptor) 51 | end 52 | 53 | function Binding:get(page, row, col, layer) 54 | local index = self:static_index(page, row, col, layer) 55 | local o = self.bindings[index] 56 | return o 57 | end 58 | 59 | function Binding:add_listener(f) 60 | table.insert(self.receivers, f) 61 | end 62 | 63 | function Binding:clear() 64 | self.bindings = {} 65 | self.receivers = {} 66 | end 67 | 68 | function Binding:communicate(normalized) 69 | self.display_value = normalized 70 | for _, f in ipairs(self.receivers) do 71 | f(self.page, self.row, self.col, self.layer, normalized) 72 | end 73 | end 74 | 75 | function Binding:set(normalized) 76 | if self.param then 77 | if self.param.t == 3 or self.param.t == 5 then 78 | self.param:set_raw(normalized) 79 | elseif self.param.t == 2 then 80 | self.param:set( 81 | util.clamp( 82 | math.floor(self.param.count * normalized) + 1, 83 | 1, 84 | self.param.count 85 | ) 86 | ) 87 | end 88 | end 89 | end 90 | 91 | return Binding 92 | -------------------------------------------------------------------------------- /lib/dd.mfs: -------------------------------------------------------------------------------- 1 | 6?  2 |  q?  3 |  8q? 4 |  8? 5 |  ? 6 |  ? 7 |  d,? 8 |  d,? 9 |  ,? 10 |  ,?  11 |   wq? 12 |  13 |    q?  14 |   15 |  16 | q?  17 |    ??  18 |    q? 19 |    q? 20 |  q? 21 |  ?? 22 |  8q? 23 |  8? 24 |  ? 25 |  ? 26 |  d,? 27 |  d,? 28 |  ,? 29 |  ,? 30 |   wq? 31 |  q? 32 |  q? 33 |  ?? 34 |  q? 35 |  q? 36 |  q?  37 |  ??! 38 |     q?" 39 |  !!q?# 40 |   ""?$ 41 |  ##?% 42 |  $$?& 43 |  %%?' 44 |  &&8,?( 45 |  ''?) 46 |  ((?* 47 |  ))?+ 48 |   **,?, 49 |   ++d?- 50 |   ,,8,?. 51 |   --8,?/ 52 |   ..?0 53 |   //?1 54 | 00?2 55 | 11?3 56 | 22?4 57 | 33?5 58 | 44?6 59 | 55?7 60 | 66?8 61 | 77?9 62 | 88?: 63 | 99?; 64 | ::?< 65 | ;;?= 66 | <<?> 67 | ==?? 68 | >>?@ 69 | ??? -------------------------------------------------------------------------------- /doubledecker.lua: -------------------------------------------------------------------------------- 1 | -- Doubledecker 2 | -- 3 | -- Copies Deckard's Dream 4 | -- Copies Yamaha CS-80 5 | -- 6 | -- by @sixolet 7 | -- 8 | -- This is a midi synth. 9 | -- Plug in your midi controller. 10 | -- 11 | -- e1 navigates pages. 12 | -- k2 and k3 navigate params. 13 | -- e2 and e3 modify them. 14 | -- 15 | -- But that is tedious. 16 | -- 17 | -- If you have a 18 | -- Midi Fighter Twister 19 | -- Plug that in now. 20 | -- (will override its config) 21 | -- 22 | -- Or use a grid.: 23 | 24 | local dd = require('doubledecker/lib/mod') 25 | local nb = require('doubledecker/lib/nb/lib/nb') 26 | local bind = require('doubledecker/lib/binding') 27 | 28 | local g = grid.connect() 29 | 30 | mft = require('doubledecker/lib/mft') 31 | 32 | -- much of this code is copied/adapted from nbin 33 | 34 | local midi_device = {} -- container for connected midi devices 35 | local midi_device_names = { "none" } 36 | 37 | local target = nil 38 | 39 | local old_event = nil 40 | 41 | local notes = {} 42 | local bookeeping = {} 43 | for i = 0, 16 do 44 | notes[i] = {} 45 | end 46 | 47 | local page = 1 48 | local row = 1 49 | local col = 1 50 | 51 | local function find_region(note, chan) 52 | if note and bookeeping[note] then 53 | for r, ch in pairs(bookeeping[note]) do 54 | if ch == chan then 55 | return r 56 | end 57 | end 58 | end 59 | return 0 60 | end 61 | 62 | local function process_midi(data) 63 | local d = midi.to_msg(data) 64 | 65 | local region = find_region(d.note, d.ch) 66 | 67 | local mod_note 68 | if d.note then 69 | mod_note = region * 128 + d.note 70 | end 71 | 72 | if d.type == "note_on" then 73 | if not bookeeping[d.note] then 74 | bookeeping[d.note] = {} 75 | end 76 | -- find an unused region 77 | while bookeeping[d.note][region] ~= nil do 78 | region = region + 1 79 | end 80 | mod_note = region * 128 + d.note 81 | bookeeping[d.note][region] = d.ch 82 | -- print("on", mod_note, region, d.ch) 83 | dd:note_on(mod_note, d.vel / 127) 84 | notes[d.ch][d.note] = dd 85 | elseif d.type == "note_off" then 86 | if notes[d.ch][d.note] ~= nil then 87 | -- print("off", mod_note, region, d.ch) 88 | dd:note_off(mod_note) 89 | bookeeping[d.note][region] = nil 90 | notes[d.ch][d.note] = nil 91 | end 92 | elseif d.type == "pitchbend" then 93 | local bend_st = (util.round(d.val / 2)) / 8192 * 2 - 1 -- Convert to -1 to 1 94 | for n, _ in pairs(notes[d.ch]) do 95 | local r = find_region(n, d.ch) 96 | dd:pitch_bend(r * 128 + n, bend_st * params:get("bend range")) 97 | end 98 | elseif d.type == "channel_pressure" then 99 | local normalized = d.val / 127 100 | for n, _ in pairs(notes[d.ch]) do 101 | local r = find_region(n, d.ch) 102 | dd:modulate_note(r * 128 + n, "pressure", normalized) 103 | end 104 | elseif d.type == "key_pressure" then 105 | local normalized = d.val / 127 106 | if notes[d.ch][d.note] ~= nil then 107 | dd:modulate_note(mod_note, "pressure", normalized) 108 | end 109 | end 110 | end 111 | 112 | local function midi_target(x) 113 | if x > 1 then 114 | if target ~= nil then 115 | midi_device[target].event = old_event 116 | end 117 | target = x - 1 118 | old_event = midi_device[target].event 119 | midi_device[target].event = process_midi 120 | else 121 | if target ~= nil then 122 | midi_device[target].event = old_event 123 | end 124 | target = nil 125 | end 126 | end 127 | 128 | local screen_dirty = true 129 | 130 | function redraw() 131 | screen.clear() 132 | for r = 1, 4 do 133 | for c = 1, 4 do 134 | for l = 1, 2 do 135 | local layer = bind:get(page, r, c, l) 136 | if layer then 137 | local x = (c - 1) * 32 138 | local y = (r - 1) * 16 + l * 7 139 | layer:draw(x, y, r == row and c == col) 140 | end 141 | end 142 | end 143 | end 144 | screen.update() 145 | end 146 | 147 | local function mft_shade_page(n) 148 | if page == 1 or page == 2 then 149 | for row = 1, 4 do 150 | for col = 1, 4 do 151 | mft:set_rgb_level(page, row, col, page == 2 and (0.5 + row / 8) or (1 - row / 8)) 152 | end 153 | end 154 | end 155 | end 156 | 157 | local function set_page(n) 158 | mft:page(n) 159 | mft_shade_page(n) 160 | page = n 161 | screen_dirty = true 162 | end 163 | 164 | function enc(n, d) 165 | if n == 1 then 166 | set_page(util.wrap(page + d, 1, 3)) 167 | elseif n == 2 or n == 3 then 168 | local b = bind:get(page, row, col, n - 1) 169 | if b.param then 170 | b.param:delta(d) 171 | end 172 | end 173 | screen_dirty = true 174 | end 175 | 176 | function key(n, z) 177 | if z == 1 and n == 2 then 178 | row = util.wrap(row + 1, 1, 4) 179 | elseif z == 1 and n == 3 then 180 | col = util.wrap(col + 1, 1, 4) 181 | end 182 | screen_dirty = true 183 | end 184 | 185 | function g.key(x, y, z) 186 | if x == 1 and y == 8 and z == 1 then 187 | if params:get("doubledecker_grid_mode") == 1 then 188 | params:set("doubledecker_grid_mode", 2) 189 | else 190 | params:set("doubledecker_grid_mode", 1) 191 | end 192 | return 193 | end 194 | if params:get("doubledecker_grid_mode") == 1 then 195 | local note = params:get("doubledecker_grid_lowest") 196 | note = note + params:get("doubledecker_dx") * x 197 | note = note + params:get("doubledecker_dy") * (8 - y) 198 | if z == 1 then 199 | dd:note_on(note, 0.7) 200 | else 201 | dd:note_off(note) 202 | end 203 | elseif params:get("doubledecker_grid_mode") == 2 then 204 | local p, r, c 205 | if x <= 4 and y <= 4 then 206 | p = 1 207 | r = y 208 | c = x 209 | elseif x >= 4 and x <= 7 and y >= 5 then 210 | p = 3 211 | r = y - 4 212 | c = x - 3 213 | elseif x >= 7 and x <= 10 and y <= 4 then 214 | p = 2 215 | r = y 216 | c = x - 6 217 | elseif x == 12 or x == 13 then 218 | local b = bind:get(page, row, col, 1) 219 | b:set((9 - y) / 8) 220 | screen_dirty = true 221 | elseif x == 15 or x == 16 then 222 | local b = bind:get(page, row, col, 2) 223 | b:set((9 - y) / 8) 224 | screen_dirty = true 225 | end 226 | if p then 227 | row = r 228 | col = c 229 | set_page(p) 230 | end 231 | end 232 | end 233 | 234 | local bipolars = { 235 | doubledecker_detune = true, 236 | doubledecker_brilliance = true, 237 | doubledecker_resonance = true, 238 | doubledecker_filter_keyfollow_lo_1 = true, 239 | doubledecker_filter_keyfollow_hi_1 = true, 240 | doubledecker_amp_keyfollow_lo_1 = true, 241 | doubledecker_amp_keyfollow_hi_1 = true, 242 | doubledecker_filter_keyfollow_lo_2 = true, 243 | doubledecker_filter_keyfollow_hi_2 = true, 244 | doubledecker_amp_keyfollow_lo_2 = true, 245 | doubledecker_amp_keyfollow_hi_2 = true, 246 | doubledecker_filter_init_1 = true, 247 | doubledecker_filter_init_2 = true, 248 | doubledecker_filter_attack_level_1 = true, 249 | doubledecker_filter_attack_level_2 = true, 250 | } 251 | 252 | local function grid_redraw() 253 | g:all(0) 254 | if params:get("doubledecker_grid_mode") == 1 then 255 | for x = 1, 16, 1 do 256 | for y = 1, 8, 1 do 257 | local note = params:get("doubledecker_grid_lowest") 258 | note = note + params:get("doubledecker_dx") * x 259 | note = note + params:get("doubledecker_dy") * (8 - y) 260 | local hs = note % 12 261 | if hs == 0 then 262 | g:led(x, y, 6) 263 | elseif hs == 2 or hs == 4 or hs == 5 or hs == 7 or hs == 9 or hs == 11 then 264 | g:led(x, y, 3) 265 | end 266 | end 267 | end 268 | elseif params:get("doubledecker_grid_mode") == 2 then 269 | for i, p in ipairs { 1, 3, 2 } do 270 | for r = 1, 4 do 271 | for c = 1, 4 do 272 | local b = bind:get(p, r, c, 1) 273 | if b then 274 | local x = (i - 1) * 3 + c 275 | local y = r 276 | if p == 3 then y = y + 4 end 277 | g:led(x, y, math.floor(14 * (b.display_value or 0) + 1)) 278 | if p == page and r == row and c == col then 279 | g:led(x, y, 15) 280 | end 281 | end 282 | end 283 | end 284 | end 285 | for layer = 1, 2 do 286 | local b = bind:get(page, row, col, layer) 287 | if b then 288 | if b.param and bipolars[b.param.id] then 289 | local full_leds = math.floor(math.abs(b.display_value - 0.5) * 8) 290 | local remainder = (math.abs(b.display_value - 0.5) * 8) % 1 291 | if b.display_value > 0.5 then 292 | for i = 1, full_leds do 293 | for j = 0, 1 do 294 | g:led(12 + 3 * (layer - 1) + j, 5 - i, 10) 295 | end 296 | end 297 | if full_leds < 4 then 298 | for j = 0, 1 do 299 | g:led(12 + 3 * (layer - 1) + j, 4 - full_leds, 300 | math.floor(10 * remainder)) 301 | end 302 | end 303 | elseif b.display_value < 0.5 then 304 | for i = 1, full_leds do 305 | for j = 0, 1 do 306 | g:led(12 + 3 * (layer - 1) + j, 4 + i, 10) 307 | end 308 | end 309 | if full_leds < 4 then 310 | for j = 0, 1 do 311 | g:led(12 + 3 * (layer - 1) + j, 5 + full_leds, 312 | math.floor(10 * remainder)) 313 | end 314 | end 315 | end 316 | else 317 | local full_leds = math.floor(b.display_value * 8) 318 | for i = 1, full_leds do 319 | for j = 0, 1 do 320 | g:led(12 + 3 * (layer - 1) + j, 9 - i, 10) 321 | end 322 | end 323 | if full_leds < 8 then 324 | for j = 0, 1 do 325 | g:led(12 + 3 * (layer - 1) + j, 8 - full_leds, math.floor(10 * ((b.display_value * 8) % 1))) 326 | end 327 | end 328 | end 329 | end 330 | end 331 | end 332 | g:refresh() 333 | end 334 | 335 | 336 | function init() 337 | dd:copy_psets() 338 | nb:init() 339 | mft:init('/home/we/dust/code/doubledecker/lib/dd.mfs') 340 | mft_shade_page(1) 341 | mft_shade_page(2) 342 | mft:page(1) 343 | mft.turn_action = function(page, row, col, layer, val) 344 | local b = bind:get(page, row, col, layer) 345 | if b then 346 | b:set(val / 128) 347 | end 348 | end 349 | mft.page_action = function(p) 350 | page = p 351 | screen_dirty = true 352 | mft_shade_page(p) 353 | end 354 | osc.send( 355 | { "localhost", 57120 }, 356 | "/doubledecker/init", 357 | {}); 358 | for i = 1, #midi.vports do -- query all ports 359 | midi_device[i] = midi.connect(i) -- connect each device 360 | table.insert(midi_device_names, "port " .. i .. ": " .. util.trim_string_to_width(midi_device[i].name, 40)) -- register its name 361 | end 362 | params:add_option("midi source", "midi source", midi_device_names, 1, false) 363 | params:add_number("bend range", "bend range", 2, 48, 12) 364 | params:set_action("midi source", midi_target) 365 | nb:add_player_params() 366 | params:add_group("doubledecker_grid", "grid", 4) 367 | params:add_option("doubledecker_grid_mode", "grid mode", { "keyboard", "controller" }) 368 | params:hide("doubledecker_grid_mode") 369 | params:add_number("doubledecker_dx", "grid key dx", 1, 7, 1) 370 | params:add_number("doubledecker_dy", "grid key dy", 1, 12, 5) 371 | params:add_number("doubledecker_grid_lowest", "lowest note", 0, 36, 24) 372 | dd:active() 373 | bind:add_listener(function(page, row, col, layer, normalized) 374 | screen_dirty = true 375 | end) 376 | bind:add_listener(function(page, row, col, layer, normalized) 377 | mft:set_position(page, row, col, layer, math.floor(127 * normalized)) 378 | end) 379 | params:read() 380 | clock.run(function() 381 | clock.sleep(1 / 15) 382 | params:bang() 383 | while true do 384 | if screen_dirty then 385 | redraw() 386 | screen_dirty = false 387 | end 388 | grid_redraw() 389 | clock.sleep(1 / 15) 390 | end 391 | end) 392 | end 393 | 394 | function cleanup() 395 | bind:clear() 396 | end -------------------------------------------------------------------------------- /lib/ddrm.lua: -------------------------------------------------------------------------------- 1 | local DDRMSynthControl = {} 2 | 3 | local DDRMSynthMenu = {} 4 | 5 | function DDRMSynthMenu:new(id, name, param, byte, factor) 6 | local o = { 7 | id = id, 8 | name = name, 9 | param = param and ("doubledecker_" .. param) or nil, 10 | byte = byte, 11 | factor = factor, 12 | } 13 | setmetatable(o, self) 14 | self.__index = self 15 | return o 16 | end 17 | 18 | function DDRMSynthControl:new(id, name, param, cc, byte, layerByte, layer, mftCh, mftCC) 19 | local o = { 20 | id = id, 21 | name = name, 22 | param = param and ("doubledecker_" .. param) or nil, 23 | cc = cc, 24 | byte = byte, 25 | layerByte = layerByte, 26 | layer = layer, 27 | mftCh = mftCh, 28 | mftCC = mftCC, 29 | gridX = gridX, 30 | gridY = gridY, 31 | gridLayer = gridLayer, 32 | } 33 | setmetatable(o, self) 34 | self.__index = self 35 | return o 36 | end 37 | 38 | function DDRMSynthControl:newi(id, name, param, cc, byte, layerByte, layer, mftCh, mftCC) 39 | local o = { 40 | id = id, 41 | name = name, 42 | param = param and ("doubledecker_" .. param) or nil, 43 | cc = cc, 44 | byte = byte, 45 | layerByte = layerByte, 46 | layer = layer, 47 | mftCh = mftCh, 48 | mftCC = mftCC, 49 | gridX = gridX, 50 | gridY = gridY, 51 | gridLayer = gridLayer, 52 | inverted = true, 53 | } 54 | setmetatable(o, self) 55 | self.__index = self 56 | return o 57 | end 58 | 59 | function DDRMSynthControl:paramRawToByteValue(v) 60 | if self.inverted then 61 | return util.clamp(math.floor(255 * (1-v)), 0, 255) 62 | end 63 | return util.clamp(math.floor(255 * v), 0, 255) 64 | end 65 | 66 | function DDRMSynthControl:byteValueToParamRaw(b) 67 | if self.inverted then 68 | return (255 - b)/255 69 | end 70 | return b / 255 71 | end 72 | 73 | function DDRMSynthMenu:getByteValue() 74 | return math.floor(params:get(self.param) / self.factor) 75 | end 76 | 77 | function DDRMSynthMenu:setByteValue(val) 78 | params:set(self.param, self.factor * val) 79 | end 80 | 81 | function DDRMSynthControl:getByteValue() 82 | if self.param then 83 | local p = params:lookup_param(self.param) 84 | if p.t == 3 or p.t == 5 then -- tTaper or tControl 85 | return self:paramRawToByteValue(p:get_raw()) 86 | elseif p.t == 2 then -- tOption 87 | return math.floor(127 / p.count) * p:get() 88 | end 89 | end 90 | return -1 91 | end 92 | 93 | function DDRMSynthControl:setByteValue(val) 94 | if self.param then 95 | local p = params:lookup_param(self.param) 96 | if p.t == 3 or p.t == 5 then 97 | p:set_raw(self:byteValueToParamRaw(val)) 98 | elseif p.t == 2 then 99 | local v = val / math.floor(127 / p.count) 100 | p:set(math.floor(v) + 1) 101 | end 102 | end 103 | end 104 | 105 | local DDRM = {} 106 | 107 | -- you should be able to set multiple "controller devices" - grid, mft, midi, etc. 108 | -- When they recieve control, write through to the appropriate params. 109 | -- When we write to params, interpose something that sends updates to the controller devices. 110 | 111 | local CONTROLS = { 112 | DDRMSynthControl:new("DDRM_SPEED_VCO_1", "Ch I: PWM Speed", "layer_lfo_freq_1", 40, 0, 0, 1, 1, 2), 113 | DDRMSynthControl:new("DDRM_PWM_VCO_1", "Ch I: PWM Amount", "pwm_1", 41, 1, 1, 1, 5, 2), 114 | DDRMSynthControl:new("DDRM_PW_VCO_1", "Ch I: PW", "pw_1", 42, 2, 2, 1, 1, 1), 115 | DDRMSynthControl:new("DDRM_SQR_VCO_1", "Ch I: Square", nil, 43, 73, 24, 1), 116 | DDRMSynthControl:new("DDRM_SAW_VCO_1", "Ch I: Sawtooth", nil, 44, 74, 25, 1), 117 | DDRMSynthControl:new("DDRM_NOISE_VCO_1", "Ch I: Noise", "noise_1", 45, 3, 3, 1, 1, 3), 118 | DDRMSynthControl:new("DDRM_HPF_VCF_1", "Ch I: HPF", "hp_freq_1", 46, 4, 4, 1, 1, 5), 119 | DDRMSynthControl:new("DDRM_RESh_VCF_1", "Ch I: RESh", "hp_res_1", 47, 5, 5, 1, 5, 5), 120 | DDRMSynthControl:new("DDRM_LPF_VCF_1", "Ch I: LPF", "lp_freq_1", 48, 6, 6, 1, 1, 6), 121 | DDRMSynthControl:new("DDRM_RESl_VCF_1", "Ch I: RESl", "lp_res_1", 49, 7, 7, 1, 5, 6), 122 | DDRMSynthControl:new("DDRM_IL_VCF_1", "Ch I: VCF IL", "filter_init_1", 50, 8, 8, 1, 1, 9), 123 | DDRMSynthControl:new("DDRM_AL_VCF_1", "Ch I: VCF AL", "filter_attack_level_1", 51, 9, 9, 1, 5, 9), 124 | DDRMSynthControl:new("DDRM_A_VCF_1", "Ch I: VCF A", "filter_attack_1", 52, 10, 10, 1, 1, 10), 125 | DDRMSynthControl:new("DDRM_D_VCF_1", "Ch I: VCF D", "filter_decay_1", 53, 11, 11, 1, 1, 11), 126 | DDRMSynthControl:new("DDRM_R_VCF_1", "Ch I: VCF R", "filter_release_1", 54, 12, 12, 1, 1, 12), 127 | DDRMSynthControl:new("DDRM_VCF_VCA_1", "Ch I: VCF Level", "filt_1", 55, 13, 13, 1, 5, 4), 128 | DDRMSynthControl:new("DDRM_SINE__VCA_1", "Ch I: Sine Level", "sine_1", 56, 14, 14, 1, 1, 4), 129 | DDRMSynthControl:new("DDRM_A_VCA_1", "Ch I: VCA A", "amp_attack_1", 57, 15, 15, 1, 1, 13), 130 | DDRMSynthControl:new("DDRM_D_VCA_1", "Ch I: VCA D", "amp_decay_1", 58, 16, 16, 1, 1, 14), 131 | DDRMSynthControl:new("DDRM_S_VCA_1", "Ch I: VCA S", "amp_sustain_1", 59, 17, 17, 1, 1, 15), 132 | DDRMSynthControl:new("DDRM_R_VCA_1", "Ch I: VCA R", "amp_release_1", 60, 18, 18, 1, 1, 16), 133 | DDRMSynthControl:new("DDRM_LEVEL_VCA_1", "Ch I: Channel Level", "layer_amp_1", 61, 19, 19, 1, 5, 3), 134 | DDRMSynthControl:new("DDRM_INIT_BR_TOUCH_1", "Ch I: Initial Brilliance", "velocity_to_filter_1", 62, 20, 20, 1, 1, 7), 135 | DDRMSynthControl:new("DDRM_INIT_LEV_TOUCH_1", "Ch I: Initial Level", "velocity_to_amp_1", 63, 21, 21, 1, 5, 7), 136 | DDRMSynthControl:new("DDRM_AT_BR_TOUCH_1", "Ch I: After Brilliance", "pressure_to_filter_1", 65, 22, 22, 1, 1, 8), 137 | DDRMSynthControl:new("DDRM_AT_LEV_TOUCH_1", "Ch I: After Level", "pressure_to_amp_1", 66, 23, 23, 1, 5, 8), 138 | DDRMSynthControl:new("DDRM_SPEED_VCO_2", "Ch II: PWM Speed", "layer_lfo_freq_2", 67, 30, 0, 2), 139 | DDRMSynthControl:new("DDRM_PWM_VCO_2", "Ch II: PWM Amount", "pwm_2", 68, 31, 1, 2), 140 | DDRMSynthControl:new("DDRM_PW_VCO_2", "Ch II: PW", "pw_2", 69, 32, 2, 2), 141 | DDRMSynthControl:new("DDRM_SQR_VCO_2", "Ch II: Square", nil, 71, 76, 24, 2), 142 | DDRMSynthControl:new("DDRM_SAW_VCO_2", "Ch II: Sawtooth", nil, 70, 75, 25, 2), 143 | DDRMSynthControl:new("DDRM_NOISE_VCO_2", "Ch II: Noise", "noise_2", 72, 33, 3, 2), 144 | DDRMSynthControl:new("DDRM_HPF_VCF_2", "Ch II: HPF", "hp_freq_2", 73, 34, 4, 2), 145 | DDRMSynthControl:new("DDRM_RESh_VCF_2", "Ch II: RESh", "hp_res_2", 119, 35, 5, 2), 146 | DDRMSynthControl:new("DDRM_LPF_VCF_2", "Ch II: LPF", "lp_freq_2", 75, 36, 6, 2), 147 | DDRMSynthControl:new("DDRM_RESl_VCF_2", "Ch II: RESl", "lp_res_2", 76, 37, 7, 2), 148 | DDRMSynthControl:new("DDRM_IL_VCF_2", "Ch II: VCF IL", "filter_init_2", 77, 38, 8, 2), 149 | DDRMSynthControl:new("DDRM_AL_VCF_2", "Ch II: VCF AL", "filter_attack_level_2", 78, 39, 9, 2), 150 | DDRMSynthControl:new("DDRM_A_VCF_2", "Ch II: VCF A", "filter_attack_2", 79, 24, 10, 2), 151 | DDRMSynthControl:new("DDRM_D_VCF_2", "Ch II: VCF D", "filter_decay_2", 80, 25, 11, 2), 152 | DDRMSynthControl:new("DDRM_R_VCF_2", "Ch II: VCF R", "filter_release_2", 81, 26, 12, 2), 153 | DDRMSynthControl:new("DDRM_VCF_VCA_2", "Ch II: VCF Level", "filt_2", 82, 27, 13, 2), 154 | DDRMSynthControl:new("DDRM_SINE__VCA_2", "Ch II: Sine Level", "sine_2", 83, 28, 14, 2), 155 | DDRMSynthControl:new("DDRM_A_VCA_2", "Ch II: VCA A", "amp_attack_2", 84, 29, 15, 2), 156 | DDRMSynthControl:new("DDRM_D_VCA_2", "Ch II: VCA D", "amp_decay_2", 85, 40, 16, 2), 157 | DDRMSynthControl:new("DDRM_S_VCA_2", "Ch II: VCA S", "amp_sustain_2", 86, 41, 17, 2), 158 | DDRMSynthControl:new("DDRM_R_VCA_2", "Ch II: VCA R", "amp_release_2", 87, 42, 18, 2), 159 | DDRMSynthControl:new("DDRM_LEVEL_VCA_2", "Ch II: Channel Level", "layer_amp_2", 88, 43, 19, 2), 160 | DDRMSynthControl:new("DDRM_INIT_BR_TOUCH_2", "Ch II: Initial Brilliance", "velocity_to_filter_2", 89, 44, 20, 2), 161 | DDRMSynthControl:new("DDRM_INIT_LEV_TOUCH_2", "Ch II: Initial Level", "velocity_to_amp_2", 90, 45, 21, 2), 162 | DDRMSynthControl:new("DDRM_AT_BR_TOUCH_2", "Ch II: After Brilliance", "pressure_to_filter_2", 91, 46, 22, 2), 163 | DDRMSynthControl:new("DDRM_AT_LEV_TOUCH_2", "Ch II: After Level", "pressure_to_amp_2", 92, 47, 23, 2), 164 | DDRMSynthControl:new("DDRM_COARSE_PITCH", "Ch : Pitch Coarse", nil, 93, 77, -1, 0, false), 165 | DDRMSynthControl:new("DDRM_FINE_PITCH", "Ch : Pitch Fine", nil, 94, 78, -1, 0, false), 166 | DDRMSynthControl:new("DDRM_DETUNE_CH2_PITCH", "Ch : Detune Ch II", "detune", 95, 79, -1, 0), 167 | DDRMSynthControl:new("DDRM_FEET_1_FEET", "Ch : Feet I", "pitch_ratio_1", 102, 48, -1, 0), 168 | DDRMSynthControl:new("DDRM_FEET_2_FEET", "Ch : Feet II", "pitch_ratio_2", 103, 49, -1, 0), 169 | DDRMSynthControl:new("DDRM_FUNCTION_SUB_OSC", "Ch : Sub Osc Function", "lfo_shape", 104, 50, -1, 0), 170 | DDRMSynthControl:newi("DDRM_SPEED_SUB_OSC", "Ch : Sub Osc Speed", "lfo_rate", 105, 51, -1, 0), 171 | DDRMSynthControl:newi("DDRM_VCO_SUB_OSC", "Ch : Sub Osc VCO Amount", "lfo_to_freq", 106, 52, -1, 0), 172 | DDRMSynthControl:newi("DDRM_VCF_SUB_OSC", "Ch : Sub Osc VCF Amount", "lfo_to_filter", 107, 53, -1, 0), 173 | DDRMSynthControl:newi("DDRM_VCA_SUB_OSC", "Ch : Sub Osc VCA Amount", "lfo_to_amp", 108, 54, -1, 0), 174 | DDRMSynthControl:new("DDRM_MIX", "Ch : Mix", "mix", 8, 55, -1, 0), 175 | DDRMSynthControl:newi("DDRM_BRILL", "Ch : Brilliance", "brilliance", 109, 56, -1, 0), 176 | DDRMSynthControl:newi("DDRM_RESSO", "Ch : Ressonance", "resonance", 110, 57, -1, 0), 177 | DDRMSynthControl:newi("DDRM_INITIAL_TOUCH", "Ch : Initial Pitch Bend", "pitch_env", 111, 58, -1, 0), 178 | DDRMSynthControl:newi("DDRM_SPEED_TOUCH", "Ch : Touch Response Sub Osc Speed", "lfo_pres_to_freq", 112, 59, -1, 0), 179 | DDRMSynthControl:newi("DDRM_VCO_TOUCH", "Ch : Touch Response Sub Osc VCO Amount", "lfo_pres_to_vibrato", 113, 60, -1, 0), 180 | DDRMSynthControl:newi("DDRM_VCF_TOUCH", "Ch : Touch Response Sub Osc VCF Amount", "lfo_pres_to_filt", 114, 61, -1, 0), 181 | DDRMSynthControl:newi("DDRM_BR_LOW_KBRD", "Ch : Brilliance Low", "filter_keyfollow_lo_1", 115, 62, -1, 0), 182 | DDRMSynthControl:newi("DDRM_BR_HIGH_KBRD", "Ch : Brilliance High", "filter_keyfollow_hi_1", 116, 63, -1, 0), 183 | DDRMSynthControl:newi("DDRM_LEV_LOW_KBRD", "Ch : Level Low", "amp_keyfollow_lo_1", 117, 64, -1, 0), 184 | DDRMSynthControl:newi("DDRM_LEV_HIGH_KBRD", "Ch : Level High", "amp_keyfollow_hi_1", 118, 65, -1, 0), 185 | DDRMSynthControl:new("DDRM_GLIDE_MODE_GLIDE", "Ch : Glide Mode", nil, 39, -1, -1, 0), 186 | DDRMSynthControl:new("DDRM_GLIDE_TIME_GLIDE", "Ch : Glide Time", "portomento", 5, 66, -1, 0), 187 | DDRMSynthControl:new("DDRM_SUSTAIN_MODE", "Ch : Sustain Mode", nil, 9, -1, -1, 0, false), 188 | DDRMSynthControl:new("DDRM_SUSTAIN_TIME", "Ch : Sustain Time", nil, 11, -1, -1, 0, false), 189 | DDRMSynthMenu:new("MENU_PWM_MIN", "PWM Min", "layer_lfo_min", 85, 0.1), 190 | DDRMSynthMenu:new("MENU_PWM_MAX", "PWM Max", "layer_lfo_max", 84, 1), 191 | DDRMSynthMenu:new("MENU_LFO_MIN", "LFO Min", "global_lfo_min", 87, 0.1), 192 | DDRMSynthMenu:new("MENU_LFO_MAX", "LFO Max", "global_lfo_max", 86, 1), 193 | DDRMSynthMenu:new("MENU_ATTACK_MAX", "Attack Max", "attack_max", 88, 1), 194 | DDRMSynthMenu:new("MENU_RELEASE_MAX", "Release Max", "release_max", 89, 1), 195 | } 196 | 197 | local BY_ID = {} 198 | 199 | for _, control in ipairs(CONTROLS) do 200 | BY_ID[control.id] = control 201 | end 202 | -- Parameters that require special scaling 203 | BY_ID["DDRM_SQR_VCO_1"].getByteValue = function(self) 204 | if params:get("doubledecker_shape_" .. self.layer) == 3 then 205 | return 127 206 | end 207 | return 0 208 | end 209 | BY_ID["DDRM_SQR_VCO_1"].setByteValue = function(self, val) 210 | if val > 63 then 211 | params:set("doubledecker_shape_" .. self.layer, 3) 212 | end 213 | return 0 214 | end 215 | BY_ID["DDRM_SQR_VCO_2"].getByteValue = BY_ID["DDRM_SQR_VCO_1"].getByteValue 216 | BY_ID["DDRM_SQR_VCO_2"].setByteValue = BY_ID["DDRM_SQR_VCO_1"].setByteValue 217 | 218 | 219 | BY_ID["DDRM_SAW_VCO_1"].getByteValue = function(self) 220 | if params:get("doubledecker_shape_" .. self.layer) == 2 then 221 | return 127 222 | end 223 | return 0 224 | end 225 | BY_ID["DDRM_SAW_VCO_1"].setByteValue = function(self, val) 226 | if val > 63 then 227 | params:set("doubledecker_shape_" .. self.layer, 2) 228 | end 229 | return 0 230 | end 231 | BY_ID["DDRM_SAW_VCO_2"].getByteValue = BY_ID["DDRM_SAW_VCO_1"].getByteValue 232 | BY_ID["DDRM_SAW_VCO_2"].setByteValue = BY_ID["DDRM_SAW_VCO_1"].setByteValue 233 | 234 | 235 | BY_ID["DDRM_FEET_1_FEET"].pseudoLayer = 1 236 | BY_ID["DDRM_FEET_1_FEET"].getByteValue = function(self) 237 | local i = params:get("doubledecker_pitch_ratio_" .. self.pseudoLayer) 238 | if i <= 4 then 239 | return 0 240 | end 241 | if i == 5 then 242 | return 22 243 | end 244 | if i == 6 then 245 | return 43 246 | end 247 | if i == 7 then 248 | return 64 249 | end 250 | if i == 8 then 251 | return 85 252 | end 253 | if i >= 9 then 254 | return 127 255 | end 256 | end 257 | 258 | BY_ID["DDRM_FEET_2_FEET"].pseudoLayer = 2 259 | BY_ID["DDRM_FEET_2_FEET"].getByteValue = BY_ID["DDRM_FEET_1_FEET"].getByteValue 260 | 261 | BY_ID["DDRM_COARSE_PITCH"].getByteValue = function(self) return 64 end 262 | BY_ID["DDRM_FINE_PITCH"].getByteValue = function(self) return 64 end 263 | 264 | local BY_MFT = {} 265 | for _, control in ipairs(CONTROLS) do 266 | if control.mftCh and control.mftCC then 267 | if not BY_MFT[control.mftCh] then 268 | BY_MFT[control.mftCh] = {} 269 | end 270 | BY_MFT[control.mftCh][control.mftCC] = control 271 | end 272 | end 273 | 274 | 275 | function DDRM.bytes() 276 | local ret = {} 277 | for i, control in ipairs(CONTROLS) do 278 | -- print(i, control.byte, control:getByteValue()) 279 | if control.byte >= 0 then 280 | ret[control.byte + 1] = control:getByteValue() 281 | end 282 | end 283 | for i=1,98 do 284 | if ret[i] == nil then 285 | ret[i] = 0 286 | end 287 | end 288 | return ret 289 | end 290 | 291 | DDRM.by_id = BY_ID 292 | DDRM.controls = CONTROLS 293 | DDRM.by_mft = BY_MFT 294 | 295 | return DDRM 296 | -------------------------------------------------------------------------------- /lib/preset.lua: -------------------------------------------------------------------------------- 1 | local function forParamRaw(unprefix_param, inverted) 2 | local param_name = "doubledecker_" .. unprefix_param 3 | local param = params:lookup_param(param_name) 4 | local ret = {} 5 | function ret:getByte() 6 | local val = param:get_raw() 7 | if inverted then 8 | return util.clamp(math.floor(util.linlin(0, 1, 255, 0, val)), 0, 255) 9 | else 10 | return util.clamp(math.floor(util.linlin(0, 1, 0, 255, val)), 0, 255) 11 | end 12 | end 13 | 14 | function ret:setByte(b) 15 | if inverted then 16 | param:set_raw(util.linlin(0, 255, 1, 0, b)) 17 | else 18 | param:set_raw(util.linlin(0, 255, 0, 1, b)) 19 | end 20 | end 21 | 22 | return ret 23 | end 24 | 25 | local function forKeyfollow(unprefix_param, inverted) 26 | local param_name = "doubledecker_" .. unprefix_param 27 | local param1 = params:lookup_param(param_name .. "_1") 28 | local param2 = params:lookup_param(param_name .. "_2") 29 | local ret = {} 30 | function ret:getByte() 31 | local val = param1:get_raw() 32 | if inverted then 33 | return util.clamp(math.floor(util.linlin(0, 1, 255, 0, val)), 0, 255) 34 | else 35 | return util.clamp(math.floor(util.linlin(0, 1, 0, 255, val)), 0, 255) 36 | end 37 | end 38 | 39 | function ret:setByte(b) 40 | if inverted then 41 | param1:set_raw(util.linlin(0, 255, 1, 0, b)) 42 | param2:set_raw(util.linlin(0, 255, 1, 0, b)) 43 | else 44 | param1:set_raw(util.linlin(0, 255, 0, 1, b)) 45 | param2:set_raw(util.linlin(0, 255, 1, 0, b)) 46 | end 47 | end 48 | 49 | return ret 50 | end 51 | 52 | local function resolve_minmax(min, max) 53 | local min2 = min 54 | local max2 = max 55 | if type(min) == "string" then 56 | min2 = params:get("doubledecker_" .. min) 57 | end 58 | if type(max) == "string" then 59 | max2 = params:get("doubledecker_" .. max) 60 | end 61 | return min2, max2 62 | end 63 | 64 | CubicExpCurve = { 65 | a = 0, 66 | b = 0, 67 | c = 0, 68 | d = 0, 69 | aa = 0, 70 | bb = 0, 71 | cc = 0, 72 | dd = 0, 73 | } 74 | 75 | CubicExpCurve.__index = CubicExpCurve 76 | 77 | function CubicExpCurve:new(o) 78 | setmetatable(o, self) 79 | for i=0,255 do 80 | local x = i/255 81 | o[i] = o:to_exp(x) 82 | end 83 | return o 84 | end 85 | 86 | function CubicExpCurve:to_exp(x) 87 | return math.exp(self.a * (x ^ 3) + self.b * (x ^ 2) + self.c * x + self.d) 88 | end 89 | 90 | function CubicExpCurve:to_lin(y) 91 | local low = 0 92 | local high = 255 93 | while low + 1 < high do 94 | local mid = math.floor((low + high)/2) 95 | if y < self[mid] then 96 | -- it is in the left. 97 | high = mid 98 | elseif y > self[mid] then 99 | -- it is in the right 100 | low = mid 101 | else 102 | -- shortcut to returning the exact value. 103 | return mid/255 104 | end 105 | end 106 | local rightness = (y - self[low])/(self[high] - self[low]) 107 | return (low + rightness)/255 108 | end 109 | 110 | 111 | 112 | lpf_curve = CubicExpCurve:new{ 113 | a = -6.59, 114 | b = 11.6, 115 | c = 1.9, 116 | d = 3.68, 117 | } 118 | 119 | hpf_curve = CubicExpCurve:new{ 120 | a = -4.91, 121 | b = 10.5, 122 | c = -0.0511, 123 | d = 3.25, 124 | } 125 | 126 | local function forFilter(unprefix_param, transform) 127 | local param_name = "doubledecker_" .. unprefix_param 128 | local param = params:lookup_param(param_name) 129 | local ret = {} 130 | 131 | function ret:getByte() 132 | local val = param:get() 133 | return util.clamp(util.round(255*transform:to_lin(val), 1), 0, 255) 134 | end 135 | 136 | function ret:setByte(b) 137 | param:set(transform:to_exp(b/255)) 138 | end 139 | 140 | return ret 141 | end 142 | 143 | local function filter_xform(offset) 144 | return { 145 | fromlin = function(linMin, linMax, hzMin, hzMax, linX) 146 | return offset + util.linexp(linMin, linMax, hzMin, hzMax, linX) 147 | end, 148 | tolin = function(hzMin, hzMax, linMin, linMax, hz) 149 | return util.clamp( 150 | util.explin(hzMin, hzMax, linMin, linMax, util.clamp(hz - offset, hzMin, hzMax)), 151 | linMin, 152 | linMax) 153 | end, 154 | } 155 | end 156 | 157 | local function forParamTransformed(unprefix_param, min, max, scaling, inverted) 158 | local param_name = "doubledecker_" .. unprefix_param 159 | local param = params:lookup_param(param_name) 160 | local ret = {} 161 | 162 | function ret:getByte() 163 | local xform = util.linlin 164 | if type(scaling) == 'table' then 165 | xform = scaling.tolin 166 | elseif scaling == 'exp' then 167 | xform = util.explin 168 | end 169 | local val = param:get() 170 | local min2, max2 = resolve_minmax(min, max) 171 | if inverted then 172 | return util.clamp(math.floor(xform(min2, max2, 255, 0, val)), 0, 255) 173 | else 174 | return util.clamp(math.floor(xform(min2, max2, 0, 255, val)), 0, 255) 175 | end 176 | end 177 | 178 | function ret:setByte(b) 179 | local xform = util.linlin 180 | if type(scaling) == 'table' then 181 | xform = scaling.fromlin 182 | elseif scaling == 'exp' then 183 | xform = util.linexp 184 | end 185 | local min2, max2 = resolve_minmax(min, max) 186 | if inverted then 187 | param:set(xform(0, 255, max2, min2, b)) 188 | else 189 | param:set(xform(0, 255, min2, max2, b)) 190 | end 191 | end 192 | 193 | return ret 194 | end 195 | 196 | local function forParamIntScaled(unprefix_param, factor) 197 | local param_name = "doubledecker_" .. unprefix_param 198 | local param = params:lookup_param(param_name) 199 | local ret = {} 200 | if factor == nil then factor = 1 end 201 | function ret:getByte() 202 | local val = param:get() 203 | return math.floor(factor * val) 204 | end 205 | 206 | function ret:setByte(b) 207 | param:set(b / factor) 208 | end 209 | 210 | return ret 211 | end 212 | 213 | local function forFeet(unprefix_param) 214 | local param_name = "doubledecker_" .. unprefix_param 215 | local param = params:lookup_param(param_name) 216 | local ret = {} 217 | local ddToInternalMap = { 9, 8, 7, 6, 5, 3 } 218 | local internalToDDMap = { 6, 6, 6, 6, 5, 4, 3, 2, 1 } 219 | 220 | function ret:getByte() 221 | local internal = param:get() 222 | local dd = internalToDDMap[internal] 223 | return (dd - 1) * 42 + 21 224 | end 225 | 226 | function ret:setByte(b) 227 | local dd = util.clamp(math.floor(b / 42.5) + 1, 1, 6) 228 | param:set(ddToInternalMap[dd]) 229 | end 230 | 231 | return ret 232 | end 233 | 234 | 235 | local function forLfoShape(unprefix_param) 236 | local param_name = "doubledecker_" .. unprefix_param 237 | local param = params:lookup_param(param_name) 238 | local ret = {} 239 | 240 | function ret:getByte() 241 | local internal = 6 - param:get() 242 | return (internal) * 42 + 21 243 | end 244 | 245 | function ret:setByte(b) 246 | local dd = util.clamp(math.floor(b / 42.5) + 1, 1, 6) 247 | param:set(7 - dd) 248 | end 249 | 250 | return ret 251 | end 252 | 253 | local function forShape(unprefix_param, shape) 254 | local param_name = "doubledecker_" .. unprefix_param 255 | local param = params:lookup_param(param_name) 256 | local ret = {} 257 | function ret:getByte() 258 | local val = param:get() 259 | if shape == "pulse" and val == 3 or val == 4 then 260 | return 64 261 | elseif shape == "saw" and val == 2 or val == 4 then 262 | return 64 263 | end 264 | return 128 + 64 265 | end 266 | 267 | function ret:setByte(b) 268 | local val = param:get() 269 | local turn_on = b < 128 270 | local target_val 271 | local change 272 | local is_on 273 | if shape == "pulse" then 274 | change = 2 275 | is_on = (val == 3 or val == 4) 276 | else 277 | change = 1 278 | is_on = (val == 2 or val == 4) 279 | end 280 | if is_on and turn_on then return end 281 | if not is_on and not turn_on then return end 282 | if is_on and not turn_on then 283 | param:set(val - change) 284 | end 285 | if not is_on and turn_on then 286 | param:set(val + change) 287 | end 288 | end 289 | 290 | return ret 291 | end 292 | 293 | local function constant(val) 294 | local ret = {} 295 | 296 | function ret:getByte() 297 | return val 298 | end 299 | 300 | function ret:setByte(b) 301 | end 302 | 303 | return ret 304 | end 305 | 306 | local Preset = { 307 | bank = "", 308 | n_psets = 0, 309 | } 310 | 311 | function Preset:init() 312 | if self.byte_descriptors then return end 313 | self.byte_descriptors = { 314 | { index = 0, name = "SLIDER_VCO_SPEED_A", converter = forParamTransformed("layer_lfo_freq_1", "layer_lfo_min", "layer_lfo_max", 'exp') }, 315 | { index = 1, name = "SLIDER_VCO_PWM_A", converter = forParamRaw("pwm_1") }, 316 | { index = 2, name = "SLIDER_VCO_PW_A", converter = forParamRaw("pw_1", true) }, 317 | { index = 3, name = "SLIDER_VCO_NOISE_A", converter = forParamRaw("noise_1") }, 318 | { index = 4, name = "SLIDER_VCF_HPF_A", converter = forFilter("hp_freq_1", hpf_curve) }, 319 | { index = 5, name = "SLIDER_VCF_RESH_A", converter = forParamRaw("hp_res_1") }, 320 | { index = 6, name = "SLIDER_VCF_LPF_A", converter = forFilter("lp_freq_1", lpf_curve) }, 321 | { index = 7, name = "SLIDER_VCF_RESL_A", converter = forParamRaw("lp_res_1") }, 322 | { index = 8, name = "SLIDER_VCF_IL_A", converter = forParamTransformed("filter_init_1", -1, 0, 'lin', true) }, 323 | { index = 9, name = "SLIDER_VCF_AL_A", converter = forParamTransformed("filter_attack_level_1", 0, 1, 'lin') }, 324 | { index = 10, name = "SLIDER_VCF_ATTACK_A", converter = forParamTransformed("filter_attack_1", 0.005, "attack_max", 'exp') }, 325 | { index = 11, name = "SLIDER_VCF_DECAY_A", converter = forParamTransformed("filter_decay_1", 0.01, "release_max", 'exp') }, 326 | { index = 12, name = "SLIDER_VCF_RELEASE_A", converter = forParamTransformed("filter_release_1", 0.01, "release_max", 'exp') }, 327 | { index = 13, name = "SLIDER_VCA_VCFLEVEL_A", converter = forParamRaw("filt_1") }, 328 | { index = 14, name = "SLIDER_VCA_SINE_A", converter = forParamRaw("sine_1") }, 329 | { index = 15, name = "SLIDER_VCA_ATTACK_A", converter = forParamTransformed("amp_attack_1", 0.005, "attack_max", 'exp') }, 330 | { index = 16, name = "SLIDER_VCA_DECAY_A", converter = forParamTransformed("amp_decay_1", 0.01, "release_max", 'exp') }, 331 | { index = 17, name = "SLIDER_VCA_SUSTAIN_A", converter = forParamRaw("amp_sustain_1") }, 332 | { index = 18, name = "SLIDER_VCA_RELEASE_A", converter = forParamTransformed("amp_release_1", 0.01, "release_max", "exp") }, 333 | { index = 19, name = "SLIDER_VCA_LEVEL_A", converter = forParamRaw("layer_amp_1") }, 334 | { index = 20, name = "SLIDER_TR_INIT_BR_A", converter = forParamRaw("velocity_to_filter_1") }, 335 | { index = 21, name = "SLIDER_TR_INIT_LVL_A", converter = forParamRaw("velocity_to_amp_1") }, 336 | { index = 22, name = "SLIDER_TR_AFTR_BR_A", converter = forParamRaw("pressure_to_filter_1") }, 337 | { index = 23, name = "SLIDER_TR_AFTR_LVL_A", converter = forParamRaw("pressure_to_amp_1") }, 338 | { index = 24, name = "SLIDER_VCF_ATTACK_B", converter = forParamTransformed("filter_attack_2", 0.005, "attack_max", "exp") }, 339 | { index = 25, name = "SLIDER_VCF_DECAY_B", converter = forParamTransformed("filter_decay_2", 0.01, "release_max", "exp") }, 340 | { index = 26, name = "SLIDER_VCF_RELEASE_B", converter = forParamTransformed("filter_release_2", 0.01, "release_max", "exp") }, 341 | { index = 27, name = "SLIDER_VCA_VCFLEVEL_B", converter = forParamRaw("filt_2") }, 342 | { index = 28, name = "SLIDER_VCA_SINE_B", converter = forParamRaw("sine_2") }, 343 | { index = 29, name = "SLIDER_VCA_ATTACK_B", converter = forParamTransformed("amp_attack_2", 0.005, "attack_max", "exp") }, 344 | { index = 30, name = "SLIDER_VCO_SPEED_B", converter = forParamTransformed("layer_lfo_freq_2", "layer_lfo_min", "layer_lfo_max", "exp") }, 345 | { index = 31, name = "SLIDER_VCO_PWM_B", converter = forParamRaw("pwm_2") }, 346 | { index = 32, name = "SLIDER_VCO_PW_B", converter = forParamRaw("pw_2", true) }, 347 | { index = 33, name = "SLIDER_VCO_NOISE_B", converter = forParamRaw("noise_2") }, 348 | { index = 34, name = "SLIDER_VCF_HPF_B", converter = forFilter("hp_freq_2", hpf_curve) }, 349 | { index = 35, name = "SLIDER_VCF_RESH_B", converter = forParamRaw("hp_res_2") }, 350 | { index = 36, name = "SLIDER_VCF_LPF_B", converter = forFilter("lp_freq_2", lpf_curve) }, 351 | { index = 37, name = "SLIDER_VCF_RESL_B", converter = forParamRaw("lp_res_2") }, 352 | { index = 38, name = "SLIDER_VCF_IL_B", converter = forParamTransformed("filter_init_2", -1, 0, 'lin', true) }, 353 | { index = 39, name = "SLIDER_VCF_AL_B", converter = forParamTransformed("filter_attack_level_2", 0, 1, 'lin') }, 354 | { index = 40, name = "SLIDER_VCA_DECAY_B", converter = forParamTransformed("amp_decay_2", 0.01, "release_max", "exp") }, 355 | { index = 41, name = "SLIDER_VCA_SUSTAIN_B", converter = forParamRaw("amp_sustain_2") }, 356 | { index = 42, name = "SLIDER_VCA_RELEASE_B", converter = forParamTransformed("amp_release_2", 0.01, "release_max", "exp") }, 357 | { index = 43, name = "SLIDER_VCA_LEVEL_B", converter = forParamRaw("layer_amp_2") }, 358 | { index = 44, name = "SLIDER_TR_INIT_BR_B", converter = forParamRaw("velocity_to_filter_2") }, 359 | { index = 45, name = "SLIDER_TR_INIT_LVL_B", converter = forParamRaw("velocity_to_amp_2") }, 360 | { index = 46, name = "SLIDER_TR_AFTR_BR_B", converter = forParamRaw("pressure_to_filter_2") }, 361 | { index = 47, name = "SLIDER_TR_AFTR_LVL_B", converter = forParamRaw("pressure_to_amp_2") }, 362 | { index = 48, name = "SLIDER_FEET1", converter = forFeet("pitch_ratio_1") }, 363 | { index = 49, name = "SLIDER_FEET2", converter = forFeet("pitch_ratio_2") }, 364 | { index = 50, name = "SLIDER_SUBOSC_FUNC", converter = forLfoShape("lfo_shape") }, 365 | { index = 51, name = "SLIDER_SUBOSC_SPEED", converter = forParamTransformed("lfo_rate", "global_lfo_min", "global_lfo_max", "exp", true) }, 366 | { index = 52, name = "SLIDER_SUBOSC_VCO", converter = forParamRaw("lfo_to_freq", true) }, 367 | { index = 53, name = "SLIDER_SUBOSC_VCF", converter = forParamRaw("lfo_to_filter", true) }, 368 | { index = 54, name = "SLIDER_SUBOSC_VCA", converter = forParamRaw("lfo_to_amp", true) }, 369 | { index = 55, name = "SLIDER_MIX1", converter = forParamRaw("mix", true) }, 370 | { index = 56, name = "SLIDER_BRIL", converter = forParamRaw("brilliance", true) }, 371 | { index = 57, name = "SLIDER_RESO", converter = forParamRaw("resonance", true) }, 372 | { index = 58, name = "SLIDER_TR_PITCHBAND", converter = forParamTransformed("pitch_env", -0.1, 0, 'lin') }, 373 | { index = 59, name = "SLIDER_TR_SPEED", converter = forParamRaw("lfo_pres_to_freq", true) }, 374 | { index = 60, name = "SLIDER_TR_VCO", converter = forParamRaw("lfo_pres_to_vibrato", true) }, 375 | { index = 61, name = "SLIDER_TR_VCF", converter = forParamRaw("lfo_pres_to_filt", true) }, 376 | { index = 62, name = "SLIDER_KBRD_BRIL_LOW", converter = forKeyfollow("filter_keyfollow_lo", true) }, 377 | { index = 63, name = "SLIDER_KBRD_BRIL_HIGH", converter = forKeyfollow("filter_keyfollow_hi", true) }, 378 | { index = 64, name = "SLIDER_KBRD_LVL_LOW", converter = forKeyfollow("amp_keyfollow_lo", true) }, 379 | { index = 65, name = "SLIDER_KBRD_LVL_HIGH", converter = forKeyfollow("amp_keyfollow_hi", true) }, 380 | { index = 66, name = "SLIDER_PORT_GLIS", converter = forParamTransformed("portomento", 0, 1, 'lin', true) }, 381 | { index = 67, name = "unused1", converter = constant(254) }, 382 | { index = 68, name = "unused2", converter = constant(254) }, 383 | { index = 69, name = "unused3", converter = constant(254) }, 384 | { index = 70, name = "unused4", converter = constant(254) }, 385 | { index = 71, name = "unused5", converter = constant(254) }, 386 | { index = 72, name = "SWITCH_GLISSANDO", converter = constant(254) }, -- Revisit! 387 | { index = 73, name = "SWITCH_SQUARE_A", converter = forShape("shape_1", "pulse") }, 388 | { index = 74, name = "SWITCH_SAW_A", converter = forShape("shape_1", "saw") }, 389 | { index = 75, name = "SWITCH_SAW_B", converter = forShape("shape_2", "saw") }, 390 | { index = 76, name = "SWITCH_SQUARE_B", converter = forShape("shape_2", "pulse") }, 391 | { index = 77, name = "SLIDER_COARSE", converter = constant(128) }, -- why are these stored with patches? 392 | { index = 78, name = "SLIDER_FINE", converter = constant(128) }, 393 | { index = 79, name = "SLIDER_DETUNE", converter = forParamRaw("detune") }, 394 | { index = 80, name = "SWITCH_PORTAMENTO", converter = constant(255) }, 395 | { index = 81, name = "MENU_VOICE_MODE", converter = constant(1) }, -- revisit! 396 | { index = 82, name = "MENU_VOICE_DETUNE", converter = forParamRaw("drift") }, 397 | { index = 83, name = "MENU_PB_RANGE", converter = constant(3) }, -- Should be global 398 | { index = 84, name = "MENU_TIME_PWM_MAX", converter = forParamIntScaled("layer_lfo_max") }, 399 | { index = 85, name = "MENU_TIME_PWM_MIN", converter = forParamIntScaled("layer_lfo_min", 10) }, 400 | { index = 86, name = "MENU_TIME_LFO_MAX", converter = forParamIntScaled("global_lfo_max") }, 401 | { index = 87, name = "MENU_TIME_LFO_MIN", converter = forParamIntScaled("global_lfo_min", 10) }, 402 | { index = 88, name = "MENU_TIME_ATTACK", converter = forParamIntScaled("attack_max") }, 403 | { index = 89, name = "MENU_TIME_RELEASE", converter = forParamIntScaled("release_max") }, 404 | { index = 90, name = "MENU_VOICE_MONO", converter = constant(1) }, 405 | { index = 91, name = "MENU_VOICE_EGRETRIG", converter = constant(0) }, 406 | { index = 92, name = "MENU_VOICE_NOTEPRIORITY", converter = constant(0) }, 407 | { index = 93, name = "SWITCH_SUSTAIN", converter = constant(1) }, 408 | { index = 94, name = "MENU_PRESET_VOLUME", converter = forParamTransformed("amp", 0.125, 0.5, 'exp', true) }, 409 | { index = 95, name = "MENU_TIME_LFO_DEPTH", converter = constant(0) }, 410 | { index = 96, name = "MENU_MW_DESTINATION", converter = constant(0) }, 411 | { index = 97, name = "MENU_MW_POLARITY", converter = constant(0) }, 412 | } 413 | 414 | end 415 | 416 | function Preset:current_as_bytes() 417 | self:init() 418 | local ret = {} 419 | for _, descriptor in ipairs(self.byte_descriptors) do 420 | -- tab.print(descriptor) 421 | ret[descriptor.index] = descriptor.converter:getByte() 422 | end 423 | return ret 424 | end 425 | 426 | function Preset:read_file(filename) 427 | self:init() 428 | local fh, err = io.open(filename, "rb") 429 | local contents = fh:read("*all") 430 | self.bank = contents 431 | self.n_psets = math.floor(string.len(self.bank) / 98) 432 | end 433 | 434 | function Preset:load_preset(n) 435 | self:init() 436 | n = n - 1 437 | local bytes = { string.byte(self.bank, 98 * n + 1, 98 * (n + 1)) } 438 | for i = 98, 1, -1 do 439 | print(self.byte_descriptors[i].name, bytes[i]) 440 | self.byte_descriptors[i].converter:setByte(bytes[i]) 441 | end 442 | end 443 | 444 | return Preset 445 | -------------------------------------------------------------------------------- /lib/mod.lua: -------------------------------------------------------------------------------- 1 | local music = require("musicutil") 2 | local mod = require 'core/mods' 3 | local voice = require 'lib/voice' 4 | local bind = require 'doubledecker/lib/binding' 5 | local ddpreset = require 'doubledecker/lib/preset' 6 | 7 | if note_players == nil then 8 | note_players = {} 9 | end 10 | local VOICE_CARDS = 6 11 | 12 | local WAVEFORMS = { "none", 'saw', "pulse", "both (lf)" } 13 | 14 | local LFO_SHAPES = { "sine", "saw", "ramp", "square", "rand", "smooth" } 15 | 16 | local PITCH_RATIOS = { "1/4", "1/3", "1/2", "2/3", "1", "3/2", "2", "3", "4" } 17 | local PITCH_RATIO_VALUE = { 1 / 4, 1 / 3, 1 / 2, 2 / 3, 1, 3 / 2, 2, 3, 4 } 18 | 19 | local Player = { 20 | alloc = voice.new(VOICE_CARDS, voice.MODE_LRU), 21 | notes = {}, 22 | } 23 | 24 | local skip_when_reading = { 25 | doubledecker_preset = true, 26 | doubledecker_preset_num = true, 27 | } 28 | 29 | function Player:read_partial_pset(filename) 30 | for line in io.lines(filename) do 31 | for p, v in string.gmatch(line, '.(doubledecker_[%w_]*).: (%d+%.?%d*)') do 32 | print(p, v) 33 | if params.lookup[p] and not skip_when_reading[p] then 34 | local param = params:lookup_param(p) 35 | param:set(tonumber(v)) 36 | end 37 | end 38 | end 39 | end 40 | 41 | function Player:copy_psets() 42 | util.make_dir(_path.data.."doubledecker") 43 | os.execute('cp '.. _path.code .. 'doubledecker/lib/preset/*.p '.. _path.data .. 'doubledecker/') 44 | os.execute('cp '.. _path.code .. 'doubledecker/lib/preset/*.pset '.. _path.data .. 'doubledecker/') 45 | end 46 | 47 | function Player:add_params() 48 | local loading = true 49 | params:add_group("doubledecker_group", "doubledecker", 98) 50 | 51 | local function control_param(id, name, key, spec, binding) 52 | params:add_control(id, name, spec) 53 | local p = params:lookup_param(id) 54 | params:set_action(id, function(val) 55 | osc.send({ "localhost", 57120 }, "/doubledecker/set", { key, val }) 56 | if binding then 57 | binding:communicate(p:get_raw()) 58 | end 59 | end) 60 | if binding then 61 | binding.param = p 62 | end 63 | return p 64 | end 65 | local function taper_param(id, name, key, min, max, default, k, units, binding) 66 | params:add_taper(id, name, min, max, default, k, units) 67 | local p = params:lookup_param(id) 68 | params:set_action(id, function(val) 69 | osc.send({ "localhost", 57120 }, "/doubledecker/set", { key, val }) 70 | if binding then 71 | binding:communicate(p:get_raw()) 72 | end 73 | end) 74 | if binding then 75 | binding.param = p 76 | end 77 | return p 78 | end 79 | local function option_param(id, name, key, options, default, f, binding) 80 | if f == nil then 81 | f = function(v) return v - 1 end 82 | end 83 | params:add_option(id, name, options, default) 84 | local p = params:lookup_param(id) 85 | params:set_action(id, function(val) 86 | osc.send({ "localhost", 57120 }, "/doubledecker/set", { key, f(val) }) 87 | if binding then 88 | binding:communicate((val - 1) / (p.count - 1)) 89 | end 90 | end) 91 | if binding then 92 | binding.param = p 93 | end 94 | return p 95 | end 96 | local function max_param(id, name, targets, min, max, step, default) 97 | params:add_control(id, name, controlspec.new(min, max, 'lin', step, default)) 98 | params:hide(id) 99 | end 100 | local function min_param(id, name, targets, min, max, step, default) 101 | params:add_control(id, name, controlspec.new(min, max, 'lin', step, default)) 102 | params:hide(id) 103 | end 104 | params:add_option("doubledecker_voices", "voices", { "mono", "1 pair", "3 pairs", "poly 4", "poly 6" }, 4) 105 | params:add_control("doubledecker_voice_spread", "spread", controlspec.BIPOLAR) 106 | local phase_spread = control_param("doubledecker_lfo_phase_spread", "lfo spread", "lfoPhaseSpread", controlspec.UNIPOLAR) 107 | local psa = phase_spread.action 108 | phase_spread.action = function(v) 109 | -- We need to reset everything when changing phase spread, because it changes lfo allocation 110 | psa(v) 111 | osc.send({ "localhost", 57120 }, "/doubledecker/all_off", {}) 112 | self.notes = {} 113 | end 114 | 115 | params:set_action("doubledecker_voices", function(v) 116 | osc.send({ "localhost", 57120 }, "/doubledecker/all_off", {}) 117 | if v == 1 then 118 | self.alloc = voice.new(1, voice.MODE_LRU) 119 | params:hide("doubledecker_voice_spread") 120 | params:hide("doubledecker_lfo_phase_spread") 121 | elseif v == 2 then 122 | self.alloc = voice.new(1, voice.MODE_LRU) 123 | params:show("doubledecker_voice_spread") 124 | params:show("doubledecker_lfo_phase_spread") 125 | elseif v == 3 then 126 | self.alloc = voice.new(3, voice.MODE_LRU) 127 | params:show("doubledecker_voice_spread") 128 | params:show("doubledecker_lfo_phase_spread") 129 | elseif v == 4 then 130 | self.alloc = voice.new(4, voice.MODE_LRU) 131 | params:hide("doubledecker_voice_spread") 132 | params:hide("doubledecker_lfo_phase_spread") 133 | elseif v == 5 then 134 | self.alloc = voice.new(6, voice.MODE_LRU) 135 | params:hide("doubledecker_voice_spread") 136 | params:hide("doubledecker_lfo_phase_spread") 137 | end 138 | _menu.rebuild_params() 139 | self.notes = {} 140 | end) 141 | control_param("doubledecker_mix", "mix", "mix", 142 | controlspec.new(0, 1, 'lin', 0, 0.5), bind:at(3, 1, 1, 1, "mix")) 143 | taper_param("doubledecker_amp", "amp", "amp", 144 | 0, 1, 0.25, 2, nil, bind:at(3, 1, 2, 2, "amp")) 145 | taper_param("doubledecker_send_a", "send a", "sendA", 146 | 0, 1, 0, 2, nil, nil) 147 | taper_param("doubledecker_send_b", "send b", "sendB", 148 | 0, 1, 0, 2, nil, nil) 149 | control_param("doubledecker_pan", "pan", "pan", 150 | controlspec.new( -1, 1, 'lin', 0, 0), bind:at(3, 1, 1, 2, "pan")) 151 | control_param("doubledecker_detune", "detune", "detune", 152 | controlspec.new( -1, 1, 'lin', 0, 0), bind:at(3, 1, 3, 1, "detune")) 153 | control_param("doubledecker_drift", "drift", "drift", 154 | controlspec.new(0, 1, 'lin', 0, 0), bind:at(3, 1, 4, 2, "drift")) 155 | control_param("doubledecker_pitch_env", "pitch env amount", "pitchEnvAmount", 156 | controlspec.new( -2, 2, 'lin', 0, 0), bind:at(3, 1, 3, 2, "pEnv")) 157 | taper_param("doubledecker_portomento", "portomento", "portomento", 158 | 0, 10, 0, 2, 's', bind:at(3, 1, 4, 1, "port")) 159 | control_param("doubledecker_brilliance", "brilliance", "globalBrilliance", 160 | controlspec.new( -1, 1, 'lin', 0, 0), bind:at(3, 3, 3, 1, "bril")) 161 | control_param("doubledecker_resonance", "resonance", "globalResonance", 162 | controlspec.new( -1, 1, 'lin', 0, 0), bind:at(3, 3, 4, 1, "res")) 163 | for l = 1, 2 do 164 | params:add_separator("doubledecker_layer_" .. l, "layer " .. l) 165 | option_param("doubledecker_pitch_ratio_" .. l, "pitch ratio", "pitchRatio" .. l, 166 | PITCH_RATIOS, 5, function(v) return PITCH_RATIO_VALUE[v] end, bind:at(l, 3, 4, 2, "feet")) 167 | taper_param("doubledecker_layer_lfo_freq_" .. l, "pwm freq", "layerLfoFreq" .. l, 168 | 0.1, 100, 4, 2, "Hz", bind:at(l, 1, 2, 1, "pwS")) 169 | control_param("doubledecker_pwm_" .. l, "pwm", "layerLfoToPw" .. l, 170 | controlspec.new(0, 1, 'lin', 0, 0.1), bind:at(l, 1, 2, 2, "pwAt")) 171 | control_param("doubledecker_pw_" .. l, "pulse width", "pw" .. l, 172 | controlspec.new(0.1, 0.5, 'lin', 0, 0.4), bind:at(l, 1, 1, 2, "pw")) 173 | option_param("doubledecker_shape_" .. l, "shape", "waveform" .. l, 174 | WAVEFORMS, l + 1, nil, bind:at(l, 1, 1, 1, "shape")) 175 | taper_param("doubledecker_noise_" .. l, "noise", "noise" .. l, 176 | 0, 1, 0, 2, nil, bind:at(l, 1, 3, 1, "noise")) 177 | taper_param("doubledecker_hp_freq_" .. l, "hpf", "hpfFreq" .. l, 178 | 20, 10000, 60, 6, 'Hz', bind:at(l, 2, 1, 1, "hpf")) 179 | control_param("doubledecker_hp_res_" .. l, "hp res", "hpfRes" .. l, 180 | controlspec.new(0, 1, 'lin', 0, 0.2), bind:at(l, 2, 1, 2, "hpR")) 181 | taper_param("doubledecker_lp_freq_" .. l, "lpf", "lpfFreq" .. l, 182 | 100, 20000, 600, 4, 'Hz', bind:at(l, 2, 2, 1, "lpf")) 183 | control_param("doubledecker_lp_res_" .. l, "lp res", "lpfRes" .. l, 184 | controlspec.new(0, 1, 'lin', 0, 0.2), bind:at(l, 2, 2, 2, "lpR")) 185 | control_param("doubledecker_filter_init_" .. l, "filter I lvl", 'fEnvI' .. l, 186 | controlspec.new( -1, 1, 'lin', 0, 0), bind:at(l, 3, 1, 2, "IL")) 187 | control_param("doubledecker_filter_attack_level_" .. l, "filter A lvl", 'fEnvPeak' .. l, 188 | controlspec.new( -1, 1, 'lin', 0, 0.4), bind:at(l, 3, 1, 1, "AL")) 189 | taper_param("doubledecker_filter_attack_" .. l, "filter A", 'fEnvA' .. l, 190 | 0, 30, 0, 6, 's', bind:at(l, 3, 2, 1, "A")) 191 | taper_param("doubledecker_filter_decay_" .. l, "filter D", 'fEnvD' .. l, 192 | 0, 30, 1, 4, 's', bind:at(l, 3, 3, 1, "D")) 193 | taper_param("doubledecker_filter_release_" .. l, "filter R", 'fEnvR' .. l, 194 | 0, 30, 1, 4, 's', bind:at(l, 3, 4, 1, "R")) 195 | control_param("doubledecker_filt_" .. l, "filt amp", 'filtAmp' .. l, 196 | controlspec.new(0, 1, 'lin', 0, 1), bind:at(l, 1, 3, 2, "fAmp")) 197 | control_param("doubledecker_sine_" .. l, "sine amp", 'sineAmp' .. l, 198 | controlspec.new(0, 1, 'lin', 0, 0), bind:at(l, 1, 4, 1, "sine")) 199 | taper_param("doubledecker_amp_attack_" .. l, "amp A", 'aEnvA' .. l, 200 | 0, 30, 0.05, 6, 's', bind:at(l, 4, 1, 1, "A")) 201 | taper_param("doubledecker_amp_decay_" .. l, "amp D", 'aEnvD' .. l, 202 | 0, 30, 1, 4, 's', bind:at(l, 4, 2, 1, "D")) 203 | control_param("doubledecker_amp_sustain_" .. l, "amp S", "aEnvS" .. l, 204 | controlspec.new(0, 1, 'lin', 0, 0.5), bind:at(l, 4, 3, 1, "S")) 205 | taper_param("doubledecker_amp_release_" .. l, "amp R", 'aEnvR' .. l, 206 | 0, 30, 1, 4, 's', bind:at(l, 4, 4, 1, "R")) 207 | control_param("doubledecker_velocity_to_filter_" .. l, "velocity->filter", "velToFilt" .. l, 208 | controlspec.new(0, 1, 'lin', 0, 0.2), bind:at(l, 2, 3, 1, "iBril")) 209 | control_param("doubledecker_velocity_to_amp_" .. l, "velocity->amp", "velToAmp" .. l, 210 | controlspec.new(0, 1, 'lin', 0, 0.8), bind:at(l, 2, 3, 2, "iAmp")) 211 | control_param("doubledecker_pressure_to_filter_" .. l, "pressure->filter", "presToFilt" .. l, 212 | controlspec.new(0, 1, 'lin', 0, 0.5), bind:at(l, 2, 4, 1, "pBril")) 213 | control_param("doubledecker_pressure_to_amp_" .. l, "pressure->amp", "presToAmp" .. l, 214 | controlspec.new(0, 1, 'lin', 0, 0.5), bind:at(l, 2, 4, 2, "pAmp")) 215 | control_param("doubledecker_filter_keyfollow_lo_" .. l, "filter keyfollow lo", "filtKeyfollowLo" .. l, 216 | controlspec.new( -1, 1, 'lin', 0, 0), bind:at(3, 4, 1, l, "f lo" .. l)) 217 | control_param("doubledecker_filter_keyfollow_hi_" .. l, "filter keyfollow hi", "filtKeyfollowHi" .. l, 218 | controlspec.new( -1, 1, 'lin', 0, 0), bind:at(3, 4, 2, l, "f hi" .. l)) 219 | control_param("doubledecker_amp_keyfollow_lo_" .. l, "amp keyfollow lo", "ampKeyfollowLo" .. l, 220 | controlspec.new( -1, 1, 'lin', 0, 0), bind:at(3, 4, 3, l, "a lo" .. l)) 221 | control_param("doubledecker_amp_keyfollow_hi_" .. l, "amp keyfollow hi", "ampKeyfollowHi" .. l, 222 | controlspec.new( -1, 1, 'lin', 0, 0), bind:at(3, 4, 4, l, "a hi" .. l)) 223 | taper_param("doubledecker_layer_amp_" .. l, "layer amp", "layerAmp" .. l, 224 | 0, 1, 1, 2, nil, bind:at(l, 1, 4, 2, "layer" .. l)) 225 | option_param("doubledecker_invert_hpf_" .. l, "hpf response coef", "fEnvHiInvert" .. l, 226 | { "-1", "0", "1" }, 3, function(x) return x - 2 end) 227 | end 228 | params:add_separator("doubledecker_lfo", "lfo") 229 | option_param("doubledecker_lfo_shape", "shape", "globalLfoShape", 230 | LFO_SHAPES, 1, function(v) return v - 1 end, bind:at(3, 1, 2, 1, "shape")) 231 | taper_param("doubledecker_lfo_rate", "lfo freq", "globalLfoFreq", 232 | 1 / 30, 20, 4, 2, 'Hz', bind:at(3, 2, 1, 1, "rate")) 233 | taper_param("doubledecker_lfo_to_freq", "vibrato", "globalLfoToFreq", 234 | 0, 1, 0, 2, nil, bind:at(3, 2, 2, 1, "vibrato")) 235 | taper_param("doubledecker_lfo_to_filter", "filter lfo mod", "globalLfoToFilterFreq", 236 | 0, 1, 0, 2, nil, bind:at(3, 2, 3, 1, "f mod")) 237 | taper_param("doubledecker_lfo_to_amp", "tremolo", "globalLfoToAmp", 238 | 0, 1, 0, 2, nil, bind:at(3, 2, 4, 1, "tremolo")) 239 | taper_param("doubledecker_lfo_pres_to_freq", "press->lfo freq", "presToGlobalLfoFreq", 240 | 0, 1, 0, 2, nil, bind:at(3, 2, 1, 2, "pres")) 241 | taper_param("doubledecker_lfo_pres_to_vibrato", "press->vibrato", "presToGlobalLfoToFreq", 242 | 0, 1, 0, 2, nil, bind:at(3, 2, 2, 2, "pres")) 243 | taper_param("doubledecker_lfo_pres_to_filt", "press->filt lfo", "presToGlobalLfoToFilterFreq", 244 | 0, 1, 0, 2, nil, bind:at(3, 2, 3, 2, "pres")) 245 | taper_param("doubledecker_lfo_pres_to_amp", "press->tremolo", "presToGlobalLfoToAmp", 246 | 0, 1, 0, 2, nil, bind:at(3, 2, 4, 2, "pres")) 247 | option_param("doubledecker_lfo_sync", "sync", "globalLfoSync", { "off", "on" }, 2) 248 | option_param("doubledecker_lfo_scope", "scope", "globalLfoIndividual", { "global", "voice" }) 249 | params:add_separator("doubledecker_deep", "meta stuff") 250 | -- params:add_trigger("doubledecker_init", "init patch") 251 | params:add_file("doubledecker_preset", "preset", _path.data.."doubledecker/dd_f.p") 252 | params:lookup_param("doubledecker_preset").dir = _path.data.."doubledecker" 253 | params:add_number("doubledecker_preset_num", "n", 1, 128, 1) 254 | params:add_trigger("doubledecker_preset_load", "load") 255 | params:set_action("doubledecker_preset_load", function() 256 | local filename = params:get("doubledecker_preset") 257 | if not util.file_exists(filename) then 258 | print("can't find", filename) 259 | end 260 | if filename:sub( -5) == ".pset" then 261 | self:read_partial_pset(filename) 262 | elseif filename:sub( -2) == ".p" then 263 | ddpreset:read_file(filename) 264 | params:show("doubledecker_preset_num") 265 | ddpreset:load_preset(util.wrap(params:get("doubledecker_preset_num"), 1, ddpreset.n_psets)) 266 | else 267 | print("not a recognized preset format: ", filename) 268 | end 269 | end) 270 | -- params:hide("doubledecker_preset_num") 271 | params:set_action("doubledecker_preset", function(filename) 272 | if loading then return end 273 | params:hide("doubledecker_preset_num") 274 | if filename:sub( -2) == ".p" then 275 | params:show("doubledecker_preset_num") 276 | end 277 | _menu.rebuild_params() 278 | end) 279 | min_param("doubledecker_layer_lfo_min", "pwm lfo min", 280 | { "doubledecker_layer_lfo_freq_1", "doubledecker_layer_lfo_freq_2" }, 281 | 0.1, 5, 0.1, 0.7) 282 | max_param("doubledecker_layer_lfo_max", "pwm lfo max", 283 | { "doubledecker_layer_lfo_freq_1", "doubledecker_layer_lfo_freq_2" }, 284 | 10, 100, 1, 70) 285 | min_param("doubledecker_global_lfo_min", "global lfo min", { "doubledecker_lfo_rate" }, 286 | 0.1, 5, 0.1, 0.7) 287 | max_param("doubledecker_global_lfo_max", "global lfo min", { "doubledecker_lfo_rate" }, 288 | 10, 45, 1, 25) 289 | max_param("doubledecker_attack_max", "attack max", 290 | { "doubledecker_amp_attack_1", "doubledecker_filter_attack_1", "doubledecker_amp_attack_2", 291 | "doubledecker_filter_attack_2" }, 292 | 1, 100, 1, 1) 293 | max_param("doubledecker_release_max", "release_max", 294 | { 295 | "doubledecker_amp_release_1", 296 | "doubledecker_amp_decay_1", 297 | "doubledecker_filter_release_1", 298 | "doubledecker_filter_decay_1", 299 | "doubledecker_amp_release_2", 300 | "doubledecker_amp_decay_2", 301 | "doubledecker_filter_release_2", 302 | "doubledecker_filter_decay_2", 303 | }, 304 | 15, 150, 1, 15) 305 | params:hide("doubledecker_group") 306 | clock.run(function() 307 | clock.sleep(4) 308 | -- Do not load the pset file on initial load. 309 | loading = false 310 | end) 311 | end 312 | 313 | local spreads_table = { 314 | { 0 }, -- mono 315 | { -1, 1 }, -- unison 316 | { -1, 1 }, -- pairs 317 | { 0 }, -- 4 318 | { 0 }, -- 6 319 | } 320 | 321 | local function spreads() 322 | local voices = params:get("doubledecker_voices") 323 | --print("spreads table") 324 | --tab.print(spreads_table[voices]) 325 | return spreads_table[voices] 326 | end 327 | 328 | function Player:note_on(note, vel, properties) 329 | local slot = self.notes[note] 330 | if slot then 331 | --print("inc", note, slot.id) 332 | slot.count = slot.count + 1 333 | return 334 | end 335 | local slot = self.alloc:get() 336 | slot.count = 1 337 | --print("create", note, slot.id) 338 | local freq = music.note_num_to_freq(note % 128) 339 | local v = slot.id - 1 340 | local spread_amount = params:get("doubledecker_voice_spread") 341 | local detune = params:get("doubledecker_detune") 342 | local reuse_count = 5 343 | if self.alloc.polyphony == 1 then 344 | reuse_count = 100 345 | end 346 | slot.on_release = function() 347 | --print("release", note, slot.id) 348 | -- TODO: Find any voices this covered. 349 | for i, _ in ipairs(spreads()) do 350 | local vv = v + (i - 1) * 4 351 | osc.send( 352 | { "localhost", 57120 }, 353 | "/doubledecker/set_voice", 354 | { vv, "gate", 0 } 355 | ) 356 | end 357 | slot.count = nil 358 | self.notes[note] = nil 359 | end 360 | for i, s in ipairs(spreads()) do 361 | local vv = v + (i - 1) * 4 362 | osc.send( 363 | { "localhost", 57120 }, 364 | "/doubledecker/note_on", 365 | { 366 | vv, 367 | freq * (1.0594 ^ (s * detune)), 368 | vel, 369 | s * spread_amount, 370 | reuse_count, 371 | }) 372 | end 373 | self.notes[note] = slot; 374 | end 375 | 376 | function Player:describe() 377 | return { 378 | name = "doubledecker", 379 | supports_bend = true, 380 | supports_slew = false, 381 | note_mod_targets = { "pressure" }, 382 | modulate_description = "unsupported", 383 | } 384 | end 385 | 386 | function Player:modulate_note(note, key, value) 387 | if key == "pressure" then 388 | local slot = self.notes[note] 389 | if slot then 390 | for i, _ in ipairs(spreads()) do 391 | local vv = (slot.id - 1) + (i - 1) * 4 392 | osc.send( 393 | { "localhost", 57120 }, 394 | "/doubledecker/set_voice", 395 | { vv, "pressure", value }) 396 | end 397 | end 398 | end 399 | end 400 | 401 | function Player:pitch_bend(note, amount) 402 | local slot = self.notes[note] 403 | -- print("pb", note, amount) 404 | if slot then 405 | for i, s in ipairs(spreads()) do 406 | local freq = music.note_num_to_freq(note % 128 + amount) 407 | local detune = params:get("doubledecker_detune") 408 | local vv = (slot.id - 1) + (i - 1) * 4 409 | osc.send( 410 | { "localhost", 57120 }, 411 | "/doubledecker/set_voice", 412 | { vv, "freq", freq * (1.0594 ^ (s * detune)) }) 413 | end 414 | end 415 | end 416 | 417 | function Player:active() 418 | params:show("doubledecker_group") 419 | _menu.rebuild_params() 420 | end 421 | 422 | function Player:inactive() 423 | params:hide("doubledecker_group") 424 | _menu.rebuild_params() 425 | end 426 | 427 | function Player:note_off(note) 428 | local slot = self.notes[note] 429 | if slot then 430 | slot.count = slot.count - 1 431 | if slot.count <= 0 then 432 | self.alloc:release(slot) 433 | end 434 | end 435 | end 436 | 437 | mod.hook.register("system_post_startup", "doubledecker post startup", function() 438 | Player:copy_psets() 439 | end) 440 | 441 | mod.hook.register("script_pre_init", "doubledecker pre init", function() 442 | osc.send( 443 | { "localhost", 57120 }, 444 | "/doubledecker/init", 445 | {}); 446 | note_players["doubledecker"] = Player 447 | end) 448 | 449 | return Player 450 | -------------------------------------------------------------------------------- /lib/doubledecker.sc: -------------------------------------------------------------------------------- 1 | DoubleDecker { 2 | classvar 0, { 19 | v; 20 | }, 21 | { 22 | if ((params.lfoPhaseSpread > 0) && (v >= 3), {3}, {0}); 23 | }); 24 | ^lfoLoc; 25 | } 26 | 27 | *addSynthdefs { 28 | SynthDef(\doubledeckerNoise, { |out| 29 | Out.ar(out, WhiteNoise.ar); 30 | }).add; 31 | SynthDef(\doubledeckerLfoSine, { 32 | |out, globalLfoFreq=4, pressure=0, presToGlobalLfoFreq=0, phase=0| 33 | Out.kr(out, SinOsc.kr(globalLfoFreq*((pressure*presToGlobalLfoFreq) + 1), phase: phase)); 34 | }).add; 35 | SynthDef(\doubledeckerLfoSaw, { 36 | |out, globalLfoFreq=4, pressure=0, presToGlobalLfoFreq=0, phase=0| 37 | Out.kr(out, -1*LFSaw.kr(globalLfoFreq*((pressure*presToGlobalLfoFreq) + 1), iphase: phase)); 38 | }).add; 39 | SynthDef(\doubledeckerLfoRamp, { 40 | |out, globalLfoFreq=4, pressure=0, presToGlobalLfoFreq=0, phase=0| 41 | Out.kr(out, LFSaw.kr(globalLfoFreq*((pressure*presToGlobalLfoFreq) + 1), iphase: phase)); 42 | }).add; 43 | SynthDef(\doubledeckerLfoSquare, { 44 | |out, globalLfoFreq=4, pressure=0, presToGlobalLfoFreq=0, phase=0| 45 | Out.kr(out, LFPulse.kr(globalLfoFreq*((pressure*presToGlobalLfoFreq) + 1), iphase: phase)); 46 | }).add; 47 | SynthDef(\doubledeckerLfoRand, { 48 | |out, globalLfoFreq=4, pressure=0, presToGlobalLfoFreq=0, phase=0| 49 | Out.kr(out, -1*LFNoise0.kr(globalLfoFreq*((pressure*presToGlobalLfoFreq) + 1))); 50 | }).add; 51 | SynthDef(\doubledeckerLfoSmooth, { 52 | |out, globalLfoFreq=4, pressure=0, presToGlobalLfoFreq=0| 53 | Out.kr(out, -1*LFNoise2.kr(globalLfoFreq*((pressure*presToGlobalLfoFreq) + 1))); 54 | }).add; 55 | (["X", "S", "P", "B"]!2).allTuples.do { |tup| 56 | SynthDef(("doubledecker"++tup[0]++tup[1]).asSymbol, { 57 | | 58 | out, freq=220, velocity=0.4, pressure=0.1, gate=1, panSpread=0,// per-note stuff 59 | // layer 1 60 | pitchRatio1=1, 61 | layerLfoFreq1=3, pw1=0.4, noise1=0, 62 | hpfFreq1=60, hpfRes1=0.5, lpfFreq1=2000, lpfRes1=0.5, 63 | fEnvI1=0, fEnvPeak1=1, fEnvA1=0.01, fEnvD1=1, fEnvR1=1, fEnvHiInvert1=1, 64 | filtAmp1, sineAmp1, aEnvA1, aEnvD1, aEnvS1, aEnvR1, 65 | velToFilt1, velToAmp1, 66 | presToFilt1, presToAmp1, 67 | layerLfoToPw1, 68 | filtKeyfollowLo1, filtKeyfollowHi1, ampKeyfollowLo1, ampKeyfollowHi1, 69 | layerAmp1, 70 | // layer 2 71 | pitchRatio2=1, 72 | layerLfoFreq2, pw2, noise2, 73 | hpfFreq2, hpfRes2, lpfFreq2, lpfRes2, 74 | fEnvI2, fEnvPeak2, fEnvA2, fEnvD2, fEnvR2, fEnvHiInvert2, 75 | filtAmp2, sineAmp2, aEnvA2, aEnvD2, aEnvS2, aEnvR2, 76 | velToFilt2, velToAmp2, 77 | presToFilt2, presToAmp2, 78 | layerLfoToPw2, 79 | filtKeyfollowLo2, filtKeyfollowHi2, ampKeyfollowLo2, ampKeyfollowHi2, 80 | layerAmp2, 81 | // Both layers 82 | pan=0, 83 | noiseBuf, globalLfoBus, 84 | globalLfoToFreq, presToGlobalLfoToFreq, 85 | globalLfoToFilterFreq, presToGlobalLfoToFilterFreq, 86 | globalLfoToAmp, presToGlobalLfoToAmp, 87 | mix, globalBrilliance, globalResonance, 88 | detune, drift, 89 | pitchEnvAmount, portomento, 90 | amp, 91 | // sends 92 | sendABus, sendA, 93 | sendBBus, sendB 94 | | 95 | var keyRatio = freq/261.63; 96 | var layer = { 97 | | waveform, keyRatio, 98 | freq, velocity, pressure, gate, 99 | globalLfo, 100 | layerLfoFreq, 101 | pw, noise, noiseUgen, 102 | hpfFreq, hpfRes, lpfFreq, lpfRes, 103 | fEnvI, fEnvPeak, fEnvA, fEnvD, fEnvR, fEnvHiInvert, 104 | filtAmp, sineAmp, aEnvA, aEnvD, aEnvS, aEnvR, 105 | velToFilt, velToAmp, 106 | presToFilt, presToAmp, 107 | layerLfoToPw, 108 | globalLfoToFilterFreq, presToGlobalLfoToFilterFreq, 109 | globalLfoToAmp, presToGlobalLfoToAmp, 110 | filtKeyfollowLo, filtKeyfollowHi, ampKeyfollowLo, ampKeyfollowHi, 111 | layerAmp | 112 | var sound; 113 | var layerLfo; 114 | var filterEnv, ampEnv; 115 | var lpfMod, hpfMod; 116 | var modLpfFreq, modHpfFreq, modLayerLfoFreq, modAmp, modPw; 117 | var filtFreqRatio = keyRatio**((keyRatio > 1).if(filtKeyfollowHi, -1*filtKeyfollowLo)); 118 | var ampRatio = (keyRatio**((keyRatio > 1).if(ampKeyfollowHi, -1*ampKeyfollowLo))).clip(0, 4); 119 | filterEnv = EnvGen.kr( 120 | Env.new(levels: [fEnvI, fEnvPeak, 0, fEnvI], times: [fEnvA, fEnvD, fEnvR], releaseNode: 2), 121 | gate, 122 | doneAction: Done.none); 123 | ampEnv = EnvGen.kr(Env.adsr(aEnvA, aEnvD, aEnvS, aEnvR), gate, doneAction: Done.none); 124 | 125 | lpfMod = ( 126 | (globalLfoToFilterFreq*globalLfo) + 127 | (pressure*presToGlobalLfoToFilterFreq*globalLfo) + 128 | (3*filterEnv) + 129 | (presToFilt*pressure) + 130 | (velToFilt*velocity) + 131 | (2.32*globalBrilliance)); 132 | modLpfFreq = lpfFreq * filtFreqRatio * lpfMod.linexp(-7.6, 7.6, 1/320, 320); 133 | 134 | hpfMod = ( 135 | (fEnvHiInvert*( 136 | (globalLfoToFilterFreq*globalLfo) + 137 | (pressure*presToGlobalLfoToFilterFreq*globalLfo) + 138 | (filterEnv))) - 139 | (presToFilt*pressure) - 140 | (velToFilt*velocity) - 141 | (0.6*globalBrilliance) 142 | ); 143 | modHpfFreq = hpfFreq * filtFreqRatio * hpfMod.linexp(-7.6, 7.6, 1/50, 50); 144 | modLpfFreq = modLpfFreq.clip(20, 17000); 145 | modHpfFreq = modHpfFreq.clip(20, 17000); 146 | 147 | // Our main oscs 148 | sound = switch(waveform.asSymbol, 149 | \X, {0}, 150 | \S, {Saw.ar(freq)}, 151 | \P, { 152 | layerLfo = FSinOsc.kr(layerLfoFreq); 153 | modPw = pw / (1 + (layerLfoToPw*layerLfo.range(0, 1))); 154 | Pulse.ar(freq, width: modPw); 155 | }, 156 | \B, { // When both waves are required, efficiency demands we use the LF versions. 157 | layerLfo = FSinOsc.kr(layerLfoFreq); 158 | modPw = pw / (1 + (layerLfoToPw*layerLfo.range(0, 1))); 159 | 0.5*(LFPulse.ar(freq, width: modPw) + LFSaw.ar(freq)); 160 | }, 161 | {0}); 162 | 163 | // Add some noise 164 | sound = sound + (noise*noiseUgen); 165 | 166 | // Filter stage 167 | sound = RHPF.ar(sound, modHpfFreq, (hpfRes + (0.5*globalResonance)).linexp(0, 1, 0.8, 8).reciprocal); 168 | sound = RLPF.ar(sound, modLpfFreq, (lpfRes + (0.5*globalResonance)).linexp(0, 1, 0.8, 8).reciprocal); 169 | 170 | // Mix with sine. 171 | sound = (filtAmp * sound) + (sineAmp * FSinOsc.ar(freq)); 172 | 173 | // Velocity to amp 174 | ampEnv = LinSelectX.kr(velToAmp, [ampEnv, velocity*ampEnv]); 175 | // Pressure to amp 176 | ampEnv = LinSelectX.kr(presToAmp, [ampEnv, pressure*ampEnv]); 177 | // Global LFO to amp 178 | ampEnv = LinSelectX.kr(globalLfoToAmp, [ampEnv, globalLfo.range(0, 1)*ampEnv]); 179 | 180 | // Amp envelope. 181 | sound = layerAmp*ampEnv*ampRatio*sound; 182 | sound; 183 | }; 184 | var globalLfo, modFreq, noiseUgen, layer1, layer2, mixed, detuneRatio, driftAddition, pitchEnv, panned; 185 | globalLfo = In.kr(globalLfoBus, 1); 186 | detuneRatio = detune.linexp(0, 1, 1, 2**(1/12)); 187 | driftAddition = 3*drift*LFNoise1.kr(0.01); 188 | pitchEnv = Env.new( 189 | levels: [(pitchEnvAmount*velocity).linexp(-2, 2, 1/4, 4), 1], 190 | times: [0.1]); 191 | modFreq = freq.lag(portomento); 192 | modFreq = modFreq * EnvGen.kr(pitchEnv, gate, doneAction: Done.none); 193 | // Full range of frequency modulation is about +/- a full step; gentle. 194 | modFreq = modFreq * (1 + (0.1*globalLfoToFreq*globalLfo)); 195 | modFreq = modFreq * (1 + (0.1*presToGlobalLfoToFreq*pressure*globalLfo)); 196 | noiseUgen = PlayBuf.ar(1, noiseBuf, startPos: IRand.new(0, SampleRate.ir*4), loop: 1); 197 | layer1 = layer.value( 198 | tup[0].asSymbol, 199 | keyRatio, 200 | (detuneRatio*pitchRatio1*modFreq)+driftAddition, velocity, pressure, gate, 201 | globalLfo, 202 | layerLfoFreq1, 203 | pw1, noise1, noiseUgen, 204 | hpfFreq1, hpfRes1, lpfFreq1, lpfRes1, 205 | fEnvI1, fEnvPeak1, fEnvA1, fEnvD1, fEnvR1, fEnvHiInvert1, 206 | filtAmp1, sineAmp1, aEnvA1, aEnvD1, aEnvS1, aEnvR1, 207 | velToFilt1, velToAmp1, 208 | presToFilt1, presToAmp1, 209 | layerLfoToPw1, 210 | globalLfoToFilterFreq, presToGlobalLfoToFilterFreq, 211 | globalLfoToAmp, presToGlobalLfoToAmp, 212 | filtKeyfollowLo1, filtKeyfollowHi1, ampKeyfollowLo1, ampKeyfollowHi1, 213 | layerAmp1); 214 | layer2 = layer.value( 215 | tup[1].asSymbol, 216 | keyRatio, 217 | (detuneRatio.reciprocal*pitchRatio2*modFreq)+driftAddition, velocity, pressure, gate, 218 | globalLfo, 219 | layerLfoFreq2, 220 | pw2, noise2, noiseUgen, 221 | hpfFreq2, hpfRes2, lpfFreq2, lpfRes2, 222 | fEnvI2, fEnvPeak2, fEnvA2, fEnvD2, fEnvR2, fEnvHiInvert2, 223 | filtAmp1, sineAmp1, aEnvA2, aEnvD2, aEnvS2, aEnvR2, 224 | velToFilt2, velToAmp2, 225 | presToFilt2, presToAmp2, 226 | layerLfoToPw2, 227 | globalLfoToFilterFreq, presToGlobalLfoToFilterFreq, 228 | globalLfoToAmp, presToGlobalLfoToAmp, 229 | filtKeyfollowLo2, filtKeyfollowHi2, ampKeyfollowLo2, ampKeyfollowHi2, 230 | layerAmp2); 231 | mixed = LinSelectX.ar(mix, [layer1, layer2]); 232 | DetectSilence.ar(mixed+Impulse.ar(0), doneAction: Done.freeSelf); 233 | mixed = amp*mixed; 234 | panned = Pan2.ar(mixed, pan + panSpread); 235 | Out.ar(out, panned); 236 | Out.ar(sendABus, sendA*panned); 237 | Out.ar(sendBBus, sendB*panned); 238 | }).add; 239 | }; 240 | } 241 | 242 | *initClass { 243 | params = ( 244 | globalLfoFreq: 4, presToGlobalLfoFreq: 0, 245 | globalLfoShape: 0, globalLfoSync: 1, globalLfoIndividual: 1, lfoPhaseSpread: 0, 246 | pan: 0, 247 | 248 | waveform1: 1, pitchRatio1: 1, 249 | layerLfoFreq1: 3, pw1: 0.4, noise1: 0, 250 | hpfFreq1: 60, hpfRes1: 0.5, lpfFreq1: 600, lpfRes1: 0.5, 251 | fEnvI1: 0, fEnvPeak1: 1, fEnvA1: 0.01, fEnvD1: 1, fEnvR1:1, fEnvHiInvert1: 1, 252 | filtAmp1: 1, sineAmp1: 0, aEnvA1: 0.01, aEnvD1: 1, aEnvS1: 0.5, aEnvR1: 1, 253 | velToFilt1: 0.2, velToAmp1: 0.8, presToFilt1: 0.5, presToAmp1: 0.5, 254 | layerLfoToPw1: 0.1, 255 | filtKeyfollowLo1: 0, filtKeyfollowHi1: 0, ampKeyfollowLo1: 0, ampKeyfollowHi1: 0, 256 | layerAmp1: 1, 257 | 258 | waveform2: 2, pitchRatio2: 1, 259 | layerLfoFreq2: 3, pw2: 0.4, noise2: 0, 260 | hpfFreq2: 600, hpfRes2: 0.5, lpfFreq2: 1200, lpfRes2: 0.5, 261 | fEnvI2: 0, fEnvPeak2: 1, fEnvA2: 0.01, fEnvD2: 1, fEnvR2:1, fEnvHiInvert2: 1, 262 | filtAmp2: 1, sineAmp2: 0, aEnvA2: 0.01, aEnvD2: 1, aEnvS2: 0.5, aEnvR2: 1, 263 | velToFilt2: 0.2, velToAmp2: 0.8, presToFilt2: 0.5, presToAmp2: 0.5, 264 | layerLfoToPw2: 0.1, 265 | filtKeyfollowLo2: 0, filtKeyfollowHi2: 0, ampKeyfollowLo2: 0, ampKeyfollowHi2: 0, 266 | layerAmp2: 1, 267 | 268 | globalLfoToFreq: 0, presToGlobalLfoToFreq: 0, 269 | globalLfoToFilterFreq: 0, presToGlobalLfoToFilterFreq: 0, 270 | globalLfoToAmp: 0, presToGlobalLfoToAmp: 0, 271 | mix: 0.5, globalBrilliance: 0, globalResonance: 0, 272 | detune: 0, drift: 0, 273 | pitchEnvAmount: 0, portomento: 0, 274 | amp: 0.25, sendA: 0, sendB: 0, 275 | ); 276 | voices = nil!8; 277 | counts = 0!8; 278 | pressures = 0!8; 279 | lfos = nil!8; 280 | lastAction = 0; 281 | StartUp.add { 282 | var lfoOptions = [ 283 | \doubledeckerLfoSine, 284 | \doubledeckerLfoSaw, 285 | \doubledeckerLfoRamp, 286 | \doubledeckerLfoSquare, 287 | \doubledeckerLfoRand, 288 | \doubledeckerLfoSmooth]; 289 | OSCFunc.new({ |msg, time, addr, recvPort| 290 | var voice = msg[1].asInteger; 291 | var hz = msg[2].asFloat.clip(8, 6271.9); 292 | var velocity = msg[3].asFloat; 293 | var panSpread = msg[4].asFloat; 294 | var countLimit = msg[5].asFloat; 295 | DoubleDecker.dynamicInit(); 296 | // "on % % % %\n".postf(voice, hz, velocity, panSpread); 297 | Routine.new({ 298 | var lfoLoc = DoubleDecker.lfoLocForVoice(voice); 299 | if(lfos[lfoLoc] == nil, { 300 | lfos[lfoLoc] = Synth.new( 301 | lfoOptions[params.globalLfoShape.asInteger], 302 | [ 303 | \out, lfoBusses[lfoLoc], 304 | \globalLfoFreq, params.globalLfoFreq, 305 | \presToGlobalLfoFreq, params.presToGlobalLfoFreq, 306 | \pressure, 0, 307 | \phase, (voice >= 3).if(0.5pi * params.lfoPhaseSpread, -0.5pi * params.lfoPhaseSpread) 308 | ], 309 | target:lfoGroup); 310 | lfos[lfoLoc].onFree({ 311 | lfos[lfoLoc] = nil; 312 | }); 313 | }); 314 | // "note on for % with lfo % panSpread %\n".postf(voice, lfoLoc, panSpread); 315 | if((voices[voice] == nil) || (counts[voice] > countLimit), { 316 | var l1 = [\X, \S, \P, \B][params.waveform1]; 317 | var l2 = [\X, \S, \P, \B][params.waveform2]; 318 | var v; 319 | // "waveform 1 % l1 %\n".postf(params.waveform1, l1); 320 | if (voices[voice] != nil, { 321 | counts[voice] = 0; 322 | //"force release %\n".postf(voice); 323 | voices[voice].release(0.01); // Release fairly immediately, but try to avoid clicking. 10ms. 324 | }); 325 | v = Synth.new( 326 | ("doubledecker" ++ l1 ++ l2), 327 | [ 328 | \freq, hz, 329 | \out, 0, 330 | \velocity, velocity, 331 | \globalLfoBus, lfoBusses[lfoLoc], 332 | \noiseBuf, noiseBuf, 333 | \panSpread, panSpread, 334 | \sendABus, ~sendA ? Server.default.outputBus, 335 | \sendBBus, ~sendB ? Server.default.outputBus, 336 | ]++params.asPairs, 337 | target: group); 338 | voices[voice] = v; 339 | v.onFree({ 340 | var allOff; 341 | if (voices[voice] === v, { 342 | voices[voice] = nil; 343 | counts[voice] = 0; 344 | }); 345 | allOff = voices.every({|x, i| x == nil}); 346 | 347 | if(params.globalLfoSync > 0, { 348 | if(params.globalLfoIndividual > 0, { 349 | lfos[voice].free; 350 | }, { 351 | if(allOff, { 352 | lfos.do(_.free); 353 | pressures = 0!8; 354 | }); 355 | }); 356 | }); 357 | }); 358 | }, { 359 | voices[voice].set(\freq, hz, \velocity, velocity, \gate, 1); 360 | counts[voice] = counts[voice] + 1; 361 | }); 362 | }).play; 363 | }, "/doubledecker/note_on"); 364 | OSCFunc.new({ |msg, time, addr, recvPort| 365 | var voice = msg[1].asInteger; 366 | var key = msg[2].asSymbol; 367 | var value = msg[3].asFloat; 368 | DoubleDecker.dynamicInit(); 369 | // "set % % %\n".postf(voice, key, value); 370 | if(voices[voice] != nil, { 371 | voices[voice].set(key, value); 372 | // "% %\n".postf(key, value); 373 | }); 374 | if (params.globalLfoIndividual > 0, { 375 | if(lfos[voice] != nil, { 376 | lfos[voice].set(key, value); 377 | //"% %\n".postf(key, value); 378 | }); 379 | }, { 380 | if(key == \pressure, { 381 | pressures[voice] = value; 382 | lfoGroup.set(key, pressures.maxItem); 383 | }); 384 | }); 385 | }, "/doubledecker/set_voice"); 386 | 387 | OSCFunc.new({ |msg, time, addr, recvPort| 388 | var key = msg[1].asSymbol; 389 | var value = msg[2].asFloat; 390 | DoubleDecker.dynamicInit(); 391 | params[key] = value; 392 | lfoGroup.set(key, value); 393 | group.set(key, value); 394 | }, "/doubledecker/set"); 395 | 396 | OSCFunc.new({ |msg, time, addr, recvPort| 397 | DoubleDecker.dynamicInit(); 398 | }, "/doubledecker/init"); 399 | 400 | OSCFunc.new({ |msg, time, addr, recvPort| 401 | voices.do(_.free); 402 | lfos.do(_.free); 403 | }, "/doubledecker/all_off") 404 | } 405 | } 406 | } -------------------------------------------------------------------------------- /lib/preset/overblow.pset: -------------------------------------------------------------------------------- 1 | -- doubledecker 2 | "LEVELS": 9 3 | "REVERB": 11 4 | "rev_eng_input": -10.0 5 | "rev_cut_input": -10.0 6 | "rev_monitor_input": -inf 7 | "rev_tape_input": -inf 8 | "rev_return_level": -9.6432746655329e-16 9 | "rev_pre_delay": 60.0 10 | "rev_lf_fc": 200.0 11 | "rev_low_time": 6.0 12 | "rev_mid_time": 6.0 13 | "rev_hf_damping": 6000.0 14 | "COMPRESSOR": 8 15 | "comp_mix": 1 16 | "comp_ratio": 4.0 17 | "comp_threshold": -18.0 18 | "comp_attack": 5.0 19 | "comp_release": 50.0 20 | "comp_pre_gain": 0.0 21 | "comp_post_gain": 9.0 22 | "SOFTCUT": 3 23 | "cut_input_adc": -9.6432746655329e-16 24 | "cut_input_eng": -9.6432746655329e-16 25 | "cut_input_tape": -inf 26 | "CLOCK": 9 27 | "midi source": 2 28 | "bend range": 12 29 | "oilcan_oilcan_1": 124 30 | "oilcan_selected_timbre_1": 1 31 | "oilcan_freq_1_1": 48.267172000962 32 | "oilcan_sweep_time_1_1": 1.1255069395027 33 | "oilcan_sweep_ix_1_1": 0.04 34 | "oilcan_atk_1_1": 0.0 35 | "oilcan_car_rel_1_1": 0.23630446040355 36 | "oilcan_mod_rel_1_1": 20.812386925025 37 | "oilcan_mod_ix_1_1": 0.036282587176292 38 | "oilcan_mod_ratio_1_1": 1.0 39 | "oilcan_fb_1_1": 10.0 40 | "oilcan_fold_1_1": 0.0 41 | "oilcan_headroom_1_1": 1.0 42 | "oilcan_gain_1_1": 2.251162614549 43 | "oilcan_routing_1_1": 0.1 44 | "oilcan_level_1_1": 0.89596000511171 45 | "oilcan_freq_2_1": 216.73021153806 46 | "oilcan_sweep_time_2_1": 14.179498568211 47 | "oilcan_sweep_ix_2_1": 0.5 48 | "oilcan_atk_2_1": 0.0 49 | "oilcan_car_rel_2_1": 0.075995700204734 50 | "oilcan_mod_rel_2_1": 77.888329239103 51 | "oilcan_mod_ix_2_1": 0.42110774187376 52 | "oilcan_mod_ratio_2_1": 0.001 53 | "oilcan_fb_2_1": 10.0 54 | "oilcan_fold_2_1": 0.023401477535407 55 | "oilcan_headroom_2_1": 1.0 56 | "oilcan_gain_2_1": 1.0 57 | "oilcan_routing_2_1": 0.51 58 | "oilcan_level_2_1": 1.0 59 | "oilcan_freq_3_1": 6465.9180308895 60 | "oilcan_sweep_time_3_1": 0.1 61 | "oilcan_sweep_ix_3_1": 0.0 62 | "oilcan_atk_3_1": 0.000761421320832 63 | "oilcan_car_rel_3_1": 0.11215620475911 64 | "oilcan_mod_rel_3_1": 110.89882083825 65 | "oilcan_mod_ix_3_1": 0.39549781603158 66 | "oilcan_mod_ratio_3_1": 30.101755754031 67 | "oilcan_fb_3_1": 4.2999158623596 68 | "oilcan_fold_3_1": 16.827133959804 69 | "oilcan_headroom_3_1": 0.57538847271996 70 | "oilcan_gain_3_1": 0.28629857106017 71 | "oilcan_routing_3_1": 0.19 72 | "oilcan_level_3_1": 1.0 73 | "oilcan_freq_4_1": 6181.9679756622 74 | "oilcan_sweep_time_4_1": 0.1 75 | "oilcan_sweep_ix_4_1": 0.0 76 | "oilcan_atk_4_1": 0.028159374698623 77 | "oilcan_car_rel_4_1": 0.13956080881699 78 | "oilcan_mod_rel_4_1": 113.21244853834 79 | "oilcan_mod_ix_4_1": 0.33426240086974 80 | "oilcan_mod_ratio_4_1": 30.101755754031 81 | "oilcan_fb_4_1": 4.2999158623596 82 | "oilcan_fold_4_1": 16.827133959804 83 | "oilcan_headroom_4_1": 0.497914356027 84 | "oilcan_gain_4_1": 0.28629857106017 85 | "oilcan_routing_4_1": 0.19 86 | "oilcan_level_4_1": 1.0 87 | "oilcan_freq_5_1": 243.47364212317 88 | "oilcan_sweep_time_5_1": 43.52785136081 89 | "oilcan_sweep_ix_5_1": 0.0099999999999991 90 | "oilcan_atk_5_1": 0.0 91 | "oilcan_car_rel_5_1": 0.083526229522557 92 | "oilcan_mod_rel_5_1": 31.562544299578 93 | "oilcan_mod_ix_5_1": 0.22756640205149 94 | "oilcan_mod_ratio_5_1": 4.7029457589911 95 | "oilcan_fb_5_1": 3.3426240086974 96 | "oilcan_fold_5_1": 0.0 97 | "oilcan_headroom_5_1": 0.41298740960665 98 | "oilcan_gain_5_1": 1.0 99 | "oilcan_routing_5_1": 0.315 100 | "oilcan_level_5_1": 1.0 101 | "oilcan_freq_6_1": 778.56532911316 102 | "oilcan_sweep_time_6_1": 0.1 103 | "oilcan_sweep_ix_6_1": 0.04 104 | "oilcan_atk_6_1": 0.0 105 | "oilcan_car_rel_6_1": 0.066632716015893 106 | "oilcan_mod_rel_6_1": 170.67825684905 107 | "oilcan_mod_ix_6_1": 0.75122731071337 108 | "oilcan_mod_ratio_6_1": 3.5722947678015 109 | "oilcan_fb_6_1": 0.0 110 | "oilcan_fold_6_1": 1.210364029648 111 | "oilcan_headroom_6_1": 1.0 112 | "oilcan_gain_6_1": 1.0 113 | "oilcan_routing_6_1": 0.1 114 | "oilcan_level_6_1": 0.53120852876635 115 | "oilcan_freq_7_1": 127.09959126288 116 | "oilcan_sweep_time_7_1": 100.0 117 | "oilcan_sweep_ix_7_1": 0.01 118 | "oilcan_atk_7_1": 0.0 119 | "oilcan_car_rel_7_1": 0.075995700204734 120 | "oilcan_mod_rel_7_1": 185.19584764648 121 | "oilcan_mod_ix_7_1": 0.10608378159998 122 | "oilcan_mod_ratio_7_1": 3.9194612216259 123 | "oilcan_fb_7_1": 10.0 124 | "oilcan_fold_7_1": 0.0 125 | "oilcan_headroom_7_1": 1.0 126 | "oilcan_gain_7_1": 1.0 127 | "oilcan_routing_7_1": 0.1 128 | "oilcan_level_7_1": 1.0 129 | "oilcan_freq_mult_1": 1.0 130 | "oilcan_sweep_time_mult_1": 1.0 131 | "oilcan_sweep_ix_mult_1": 1.0 132 | "oilcan_atk_mult_1": 1.0 133 | "oilcan_car_rel_mult_1": 1.0 134 | "oilcan_mod_rel_mult_1": 1.0 135 | "oilcan_mod_ix_mult_1": 1.0 136 | "oilcan_mod_ratio_mult_1": 1.0 137 | "oilcan_fb_mult_1": 1.0 138 | "oilcan_fold_mult_1": 1.0 139 | "oilcan_headroom_mult_1": 1.0 140 | "oilcan_gain_mult_1": 1.0 141 | "oilcan_routing_mult_1": 1.0 142 | "oilcan_level_mult_1": 1.0 143 | "oilcan_trig_1": 0 144 | "oilcan_copy_multipliers_1": 0 145 | "oilcan_paste_multipliers_1": 0 146 | "oilcan_copy_timbre_1": 0 147 | "oilcan_paste_timbre_1": 0 148 | "oilcan_target_file_1": /home/we/dust/data/oilcan/default-1.oilkit 149 | "oilcan_save_kit_1": 0 150 | "oilcan_load_kit_1": 0 151 | "oilcan_save_new_1": 0 152 | "oilcan_oilcan_2": 124 153 | "oilcan_selected_timbre_2": 1 154 | "oilcan_freq_1_2": 48.267172000962 155 | "oilcan_sweep_time_1_2": 1.1255069395027 156 | "oilcan_sweep_ix_1_2": 0.04 157 | "oilcan_atk_1_2": 0.0 158 | "oilcan_car_rel_1_2": 0.23630446040355 159 | "oilcan_mod_rel_1_2": 20.812386925025 160 | "oilcan_mod_ix_1_2": 0.036282587176292 161 | "oilcan_mod_ratio_1_2": 1.0 162 | "oilcan_fb_1_2": 10.0 163 | "oilcan_fold_1_2": 0.0 164 | "oilcan_headroom_1_2": 1.0 165 | "oilcan_gain_1_2": 2.251162614549 166 | "oilcan_routing_1_2": 0.1 167 | "oilcan_level_1_2": 0.89596000511171 168 | "oilcan_freq_2_2": 216.73021153806 169 | "oilcan_sweep_time_2_2": 14.179498568211 170 | "oilcan_sweep_ix_2_2": 0.5 171 | "oilcan_atk_2_2": 0.0 172 | "oilcan_car_rel_2_2": 0.075995700204734 173 | "oilcan_mod_rel_2_2": 77.888329239103 174 | "oilcan_mod_ix_2_2": 0.42110774187376 175 | "oilcan_mod_ratio_2_2": 0.001 176 | "oilcan_fb_2_2": 10.0 177 | "oilcan_fold_2_2": 0.023401477535407 178 | "oilcan_headroom_2_2": 1.0 179 | "oilcan_gain_2_2": 1.0 180 | "oilcan_routing_2_2": 0.51 181 | "oilcan_level_2_2": 1.0 182 | "oilcan_freq_3_2": 6465.9180308895 183 | "oilcan_sweep_time_3_2": 0.1 184 | "oilcan_sweep_ix_3_2": 0.0 185 | "oilcan_atk_3_2": 0.000761421320832 186 | "oilcan_car_rel_3_2": 0.11215620475911 187 | "oilcan_mod_rel_3_2": 110.89882083825 188 | "oilcan_mod_ix_3_2": 0.39549781603158 189 | "oilcan_mod_ratio_3_2": 30.101755754031 190 | "oilcan_fb_3_2": 4.2999158623596 191 | "oilcan_fold_3_2": 16.827133959804 192 | "oilcan_headroom_3_2": 0.57538847271996 193 | "oilcan_gain_3_2": 0.28629857106017 194 | "oilcan_routing_3_2": 0.19 195 | "oilcan_level_3_2": 1.0 196 | "oilcan_freq_4_2": 6181.9679756622 197 | "oilcan_sweep_time_4_2": 0.1 198 | "oilcan_sweep_ix_4_2": 0.0 199 | "oilcan_atk_4_2": 0.028159374698623 200 | "oilcan_car_rel_4_2": 0.13956080881699 201 | "oilcan_mod_rel_4_2": 113.21244853834 202 | "oilcan_mod_ix_4_2": 0.33426240086974 203 | "oilcan_mod_ratio_4_2": 30.101755754031 204 | "oilcan_fb_4_2": 4.2999158623596 205 | "oilcan_fold_4_2": 16.827133959804 206 | "oilcan_headroom_4_2": 0.497914356027 207 | "oilcan_gain_4_2": 0.28629857106017 208 | "oilcan_routing_4_2": 0.19 209 | "oilcan_level_4_2": 1.0 210 | "oilcan_freq_5_2": 243.47364212317 211 | "oilcan_sweep_time_5_2": 43.52785136081 212 | "oilcan_sweep_ix_5_2": 0.0099999999999991 213 | "oilcan_atk_5_2": 0.0 214 | "oilcan_car_rel_5_2": 0.083526229522557 215 | "oilcan_mod_rel_5_2": 31.562544299578 216 | "oilcan_mod_ix_5_2": 0.22756640205149 217 | "oilcan_mod_ratio_5_2": 4.7029457589911 218 | "oilcan_fb_5_2": 3.3426240086974 219 | "oilcan_fold_5_2": 0.0 220 | "oilcan_headroom_5_2": 0.41298740960665 221 | "oilcan_gain_5_2": 1.0 222 | "oilcan_routing_5_2": 0.315 223 | "oilcan_level_5_2": 1.0 224 | "oilcan_freq_6_2": 778.56532911316 225 | "oilcan_sweep_time_6_2": 0.1 226 | "oilcan_sweep_ix_6_2": 0.04 227 | "oilcan_atk_6_2": 0.0 228 | "oilcan_car_rel_6_2": 0.066632716015893 229 | "oilcan_mod_rel_6_2": 170.67825684905 230 | "oilcan_mod_ix_6_2": 0.75122731071337 231 | "oilcan_mod_ratio_6_2": 3.5722947678015 232 | "oilcan_fb_6_2": 0.0 233 | "oilcan_fold_6_2": 1.210364029648 234 | "oilcan_headroom_6_2": 1.0 235 | "oilcan_gain_6_2": 1.0 236 | "oilcan_routing_6_2": 0.1 237 | "oilcan_level_6_2": 0.53120852876635 238 | "oilcan_freq_7_2": 127.09959126288 239 | "oilcan_sweep_time_7_2": 100.0 240 | "oilcan_sweep_ix_7_2": 0.01 241 | "oilcan_atk_7_2": 0.0 242 | "oilcan_car_rel_7_2": 0.075995700204734 243 | "oilcan_mod_rel_7_2": 185.19584764648 244 | "oilcan_mod_ix_7_2": 0.10608378159998 245 | "oilcan_mod_ratio_7_2": 3.9194612216259 246 | "oilcan_fb_7_2": 10.0 247 | "oilcan_fold_7_2": 0.0 248 | "oilcan_headroom_7_2": 1.0 249 | "oilcan_gain_7_2": 1.0 250 | "oilcan_routing_7_2": 0.1 251 | "oilcan_level_7_2": 1.0 252 | "oilcan_freq_mult_2": 1.0 253 | "oilcan_sweep_time_mult_2": 1.0 254 | "oilcan_sweep_ix_mult_2": 1.0 255 | "oilcan_atk_mult_2": 1.0 256 | "oilcan_car_rel_mult_2": 1.0 257 | "oilcan_mod_rel_mult_2": 1.0 258 | "oilcan_mod_ix_mult_2": 1.0 259 | "oilcan_mod_ratio_mult_2": 1.0 260 | "oilcan_fb_mult_2": 1.0 261 | "oilcan_fold_mult_2": 1.0 262 | "oilcan_headroom_mult_2": 1.0 263 | "oilcan_gain_mult_2": 1.0 264 | "oilcan_routing_mult_2": 1.0 265 | "oilcan_level_mult_2": 1.0 266 | "oilcan_trig_2": 0 267 | "oilcan_copy_multipliers_2": 0 268 | "oilcan_paste_multipliers_2": 0 269 | "oilcan_copy_timbre_2": 0 270 | "oilcan_paste_timbre_2": 0 271 | "oilcan_target_file_2": /home/we/dust/data/oilcan/default-1.oilkit 272 | "oilcan_save_kit_2": 0 273 | "oilcan_load_kit_2": 0 274 | "oilcan_save_new_2": 0 275 | "oilcan_oilcan_3": 124 276 | "oilcan_selected_timbre_3": 1 277 | "oilcan_freq_1_3": 48.267172000962 278 | "oilcan_sweep_time_1_3": 1.1255069395027 279 | "oilcan_sweep_ix_1_3": 0.04 280 | "oilcan_atk_1_3": 0.0 281 | "oilcan_car_rel_1_3": 0.23630446040355 282 | "oilcan_mod_rel_1_3": 20.812386925025 283 | "oilcan_mod_ix_1_3": 0.036282587176292 284 | "oilcan_mod_ratio_1_3": 1.0 285 | "oilcan_fb_1_3": 10.0 286 | "oilcan_fold_1_3": 0.0 287 | "oilcan_headroom_1_3": 1.0 288 | "oilcan_gain_1_3": 2.251162614549 289 | "oilcan_routing_1_3": 0.1 290 | "oilcan_level_1_3": 0.89596000511171 291 | "oilcan_freq_2_3": 216.73021153806 292 | "oilcan_sweep_time_2_3": 14.179498568211 293 | "oilcan_sweep_ix_2_3": 0.5 294 | "oilcan_atk_2_3": 0.0 295 | "oilcan_car_rel_2_3": 0.075995700204734 296 | "oilcan_mod_rel_2_3": 77.888329239103 297 | "oilcan_mod_ix_2_3": 0.42110774187376 298 | "oilcan_mod_ratio_2_3": 0.001 299 | "oilcan_fb_2_3": 10.0 300 | "oilcan_fold_2_3": 0.023401477535407 301 | "oilcan_headroom_2_3": 1.0 302 | "oilcan_gain_2_3": 1.0 303 | "oilcan_routing_2_3": 0.51 304 | "oilcan_level_2_3": 1.0 305 | "oilcan_freq_3_3": 6465.9180308895 306 | "oilcan_sweep_time_3_3": 0.1 307 | "oilcan_sweep_ix_3_3": 0.0 308 | "oilcan_atk_3_3": 0.000761421320832 309 | "oilcan_car_rel_3_3": 0.11215620475911 310 | "oilcan_mod_rel_3_3": 110.89882083825 311 | "oilcan_mod_ix_3_3": 0.39549781603158 312 | "oilcan_mod_ratio_3_3": 30.101755754031 313 | "oilcan_fb_3_3": 4.2999158623596 314 | "oilcan_fold_3_3": 16.827133959804 315 | "oilcan_headroom_3_3": 0.57538847271996 316 | "oilcan_gain_3_3": 0.28629857106017 317 | "oilcan_routing_3_3": 0.19 318 | "oilcan_level_3_3": 1.0 319 | "oilcan_freq_4_3": 6181.9679756622 320 | "oilcan_sweep_time_4_3": 0.1 321 | "oilcan_sweep_ix_4_3": 0.0 322 | "oilcan_atk_4_3": 0.028159374698623 323 | "oilcan_car_rel_4_3": 0.13956080881699 324 | "oilcan_mod_rel_4_3": 113.21244853834 325 | "oilcan_mod_ix_4_3": 0.33426240086974 326 | "oilcan_mod_ratio_4_3": 30.101755754031 327 | "oilcan_fb_4_3": 4.2999158623596 328 | "oilcan_fold_4_3": 16.827133959804 329 | "oilcan_headroom_4_3": 0.497914356027 330 | "oilcan_gain_4_3": 0.28629857106017 331 | "oilcan_routing_4_3": 0.19 332 | "oilcan_level_4_3": 1.0 333 | "oilcan_freq_5_3": 243.47364212317 334 | "oilcan_sweep_time_5_3": 43.52785136081 335 | "oilcan_sweep_ix_5_3": 0.0099999999999991 336 | "oilcan_atk_5_3": 0.0 337 | "oilcan_car_rel_5_3": 0.083526229522557 338 | "oilcan_mod_rel_5_3": 31.562544299578 339 | "oilcan_mod_ix_5_3": 0.22756640205149 340 | "oilcan_mod_ratio_5_3": 4.7029457589911 341 | "oilcan_fb_5_3": 3.3426240086974 342 | "oilcan_fold_5_3": 0.0 343 | "oilcan_headroom_5_3": 0.41298740960665 344 | "oilcan_gain_5_3": 1.0 345 | "oilcan_routing_5_3": 0.315 346 | "oilcan_level_5_3": 1.0 347 | "oilcan_freq_6_3": 778.56532911316 348 | "oilcan_sweep_time_6_3": 0.1 349 | "oilcan_sweep_ix_6_3": 0.04 350 | "oilcan_atk_6_3": 0.0 351 | "oilcan_car_rel_6_3": 0.066632716015893 352 | "oilcan_mod_rel_6_3": 170.67825684905 353 | "oilcan_mod_ix_6_3": 0.75122731071337 354 | "oilcan_mod_ratio_6_3": 3.5722947678015 355 | "oilcan_fb_6_3": 0.0 356 | "oilcan_fold_6_3": 1.210364029648 357 | "oilcan_headroom_6_3": 1.0 358 | "oilcan_gain_6_3": 1.0 359 | "oilcan_routing_6_3": 0.1 360 | "oilcan_level_6_3": 0.53120852876635 361 | "oilcan_freq_7_3": 127.09959126288 362 | "oilcan_sweep_time_7_3": 100.0 363 | "oilcan_sweep_ix_7_3": 0.01 364 | "oilcan_atk_7_3": 0.0 365 | "oilcan_car_rel_7_3": 0.075995700204734 366 | "oilcan_mod_rel_7_3": 185.19584764648 367 | "oilcan_mod_ix_7_3": 0.10608378159998 368 | "oilcan_mod_ratio_7_3": 3.9194612216259 369 | "oilcan_fb_7_3": 10.0 370 | "oilcan_fold_7_3": 0.0 371 | "oilcan_headroom_7_3": 1.0 372 | "oilcan_gain_7_3": 1.0 373 | "oilcan_routing_7_3": 0.1 374 | "oilcan_level_7_3": 1.0 375 | "oilcan_freq_mult_3": 1.0 376 | "oilcan_sweep_time_mult_3": 1.0 377 | "oilcan_sweep_ix_mult_3": 1.0 378 | "oilcan_atk_mult_3": 1.0 379 | "oilcan_car_rel_mult_3": 1.0 380 | "oilcan_mod_rel_mult_3": 1.0 381 | "oilcan_mod_ix_mult_3": 1.0 382 | "oilcan_mod_ratio_mult_3": 1.0 383 | "oilcan_fb_mult_3": 1.0 384 | "oilcan_fold_mult_3": 1.0 385 | "oilcan_headroom_mult_3": 1.0 386 | "oilcan_gain_mult_3": 1.0 387 | "oilcan_routing_mult_3": 1.0 388 | "oilcan_level_mult_3": 1.0 389 | "oilcan_trig_3": 0 390 | "oilcan_copy_multipliers_3": 0 391 | "oilcan_paste_multipliers_3": 0 392 | "oilcan_copy_timbre_3": 0 393 | "oilcan_paste_timbre_3": 0 394 | "oilcan_target_file_3": /home/we/dust/data/oilcan/default-1.oilkit 395 | "oilcan_save_kit_3": 0 396 | "oilcan_load_kit_3": 0 397 | "oilcan_save_new_3": 0 398 | "oilcan_oilcan_4": 124 399 | "oilcan_selected_timbre_4": 1 400 | "oilcan_freq_1_4": 48.267172000962 401 | "oilcan_sweep_time_1_4": 1.1255069395027 402 | "oilcan_sweep_ix_1_4": 0.04 403 | "oilcan_atk_1_4": 0.0 404 | "oilcan_car_rel_1_4": 0.23630446040355 405 | "oilcan_mod_rel_1_4": 20.812386925025 406 | "oilcan_mod_ix_1_4": 0.036282587176292 407 | "oilcan_mod_ratio_1_4": 1.0 408 | "oilcan_fb_1_4": 10.0 409 | "oilcan_fold_1_4": 0.0 410 | "oilcan_headroom_1_4": 1.0 411 | "oilcan_gain_1_4": 2.251162614549 412 | "oilcan_routing_1_4": 0.1 413 | "oilcan_level_1_4": 0.89596000511171 414 | "oilcan_freq_2_4": 216.73021153806 415 | "oilcan_sweep_time_2_4": 14.179498568211 416 | "oilcan_sweep_ix_2_4": 0.5 417 | "oilcan_atk_2_4": 0.0 418 | "oilcan_car_rel_2_4": 0.075995700204734 419 | "oilcan_mod_rel_2_4": 77.888329239103 420 | "oilcan_mod_ix_2_4": 0.42110774187376 421 | "oilcan_mod_ratio_2_4": 0.001 422 | "oilcan_fb_2_4": 10.0 423 | "oilcan_fold_2_4": 0.023401477535407 424 | "oilcan_headroom_2_4": 1.0 425 | "oilcan_gain_2_4": 1.0 426 | "oilcan_routing_2_4": 0.51 427 | "oilcan_level_2_4": 1.0 428 | "oilcan_freq_3_4": 6465.9180308895 429 | "oilcan_sweep_time_3_4": 0.1 430 | "oilcan_sweep_ix_3_4": 0.0 431 | "oilcan_atk_3_4": 0.000761421320832 432 | "oilcan_car_rel_3_4": 0.11215620475911 433 | "oilcan_mod_rel_3_4": 110.89882083825 434 | "oilcan_mod_ix_3_4": 0.39549781603158 435 | "oilcan_mod_ratio_3_4": 30.101755754031 436 | "oilcan_fb_3_4": 4.2999158623596 437 | "oilcan_fold_3_4": 16.827133959804 438 | "oilcan_headroom_3_4": 0.57538847271996 439 | "oilcan_gain_3_4": 0.28629857106017 440 | "oilcan_routing_3_4": 0.19 441 | "oilcan_level_3_4": 1.0 442 | "oilcan_freq_4_4": 6181.9679756622 443 | "oilcan_sweep_time_4_4": 0.1 444 | "oilcan_sweep_ix_4_4": 0.0 445 | "oilcan_atk_4_4": 0.028159374698623 446 | "oilcan_car_rel_4_4": 0.13956080881699 447 | "oilcan_mod_rel_4_4": 113.21244853834 448 | "oilcan_mod_ix_4_4": 0.33426240086974 449 | "oilcan_mod_ratio_4_4": 30.101755754031 450 | "oilcan_fb_4_4": 4.2999158623596 451 | "oilcan_fold_4_4": 16.827133959804 452 | "oilcan_headroom_4_4": 0.497914356027 453 | "oilcan_gain_4_4": 0.28629857106017 454 | "oilcan_routing_4_4": 0.19 455 | "oilcan_level_4_4": 1.0 456 | "oilcan_freq_5_4": 243.47364212317 457 | "oilcan_sweep_time_5_4": 43.52785136081 458 | "oilcan_sweep_ix_5_4": 0.0099999999999991 459 | "oilcan_atk_5_4": 0.0 460 | "oilcan_car_rel_5_4": 0.083526229522557 461 | "oilcan_mod_rel_5_4": 31.562544299578 462 | "oilcan_mod_ix_5_4": 0.22756640205149 463 | "oilcan_mod_ratio_5_4": 4.7029457589911 464 | "oilcan_fb_5_4": 3.3426240086974 465 | "oilcan_fold_5_4": 0.0 466 | "oilcan_headroom_5_4": 0.41298740960665 467 | "oilcan_gain_5_4": 1.0 468 | "oilcan_routing_5_4": 0.315 469 | "oilcan_level_5_4": 1.0 470 | "oilcan_freq_6_4": 778.56532911316 471 | "oilcan_sweep_time_6_4": 0.1 472 | "oilcan_sweep_ix_6_4": 0.04 473 | "oilcan_atk_6_4": 0.0 474 | "oilcan_car_rel_6_4": 0.066632716015893 475 | "oilcan_mod_rel_6_4": 170.67825684905 476 | "oilcan_mod_ix_6_4": 0.75122731071337 477 | "oilcan_mod_ratio_6_4": 3.5722947678015 478 | "oilcan_fb_6_4": 0.0 479 | "oilcan_fold_6_4": 1.210364029648 480 | "oilcan_headroom_6_4": 1.0 481 | "oilcan_gain_6_4": 1.0 482 | "oilcan_routing_6_4": 0.1 483 | "oilcan_level_6_4": 0.53120852876635 484 | "oilcan_freq_7_4": 127.09959126288 485 | "oilcan_sweep_time_7_4": 100.0 486 | "oilcan_sweep_ix_7_4": 0.01 487 | "oilcan_atk_7_4": 0.0 488 | "oilcan_car_rel_7_4": 0.075995700204734 489 | "oilcan_mod_rel_7_4": 185.19584764648 490 | "oilcan_mod_ix_7_4": 0.10608378159998 491 | "oilcan_mod_ratio_7_4": 3.9194612216259 492 | "oilcan_fb_7_4": 10.0 493 | "oilcan_fold_7_4": 0.0 494 | "oilcan_headroom_7_4": 1.0 495 | "oilcan_gain_7_4": 1.0 496 | "oilcan_routing_7_4": 0.1 497 | "oilcan_level_7_4": 1.0 498 | "oilcan_freq_mult_4": 1.0 499 | "oilcan_sweep_time_mult_4": 1.0 500 | "oilcan_sweep_ix_mult_4": 1.0 501 | "oilcan_atk_mult_4": 1.0 502 | "oilcan_car_rel_mult_4": 1.0 503 | "oilcan_mod_rel_mult_4": 1.0 504 | "oilcan_mod_ix_mult_4": 1.0 505 | "oilcan_mod_ratio_mult_4": 1.0 506 | "oilcan_fb_mult_4": 1.0 507 | "oilcan_fold_mult_4": 1.0 508 | "oilcan_headroom_mult_4": 1.0 509 | "oilcan_gain_mult_4": 1.0 510 | "oilcan_routing_mult_4": 1.0 511 | "oilcan_level_mult_4": 1.0 512 | "oilcan_trig_4": 0 513 | "oilcan_copy_multipliers_4": 0 514 | "oilcan_paste_multipliers_4": 0 515 | "oilcan_copy_timbre_4": 0 516 | "oilcan_paste_timbre_4": 0 517 | "oilcan_target_file_4": /home/we/dust/data/oilcan/default-1.oilkit 518 | "oilcan_save_kit_4": 0 519 | "oilcan_load_kit_4": 0 520 | "oilcan_save_new_4": 0 521 | "nb_ansible__1": 3 522 | "nb_ansible_portomento_1": 0.0 523 | "nb_ansible_freq_1": 440.0 524 | "nb_ansible_tune_1": 0 525 | "nb_ansible__2": 3 526 | "nb_ansible_portomento_2": 0.0 527 | "nb_ansible_freq_2": 440.0 528 | "nb_ansible_tune_2": 0 529 | "nb_ansible__3": 3 530 | "nb_ansible_portomento_3": 0.0 531 | "nb_ansible_freq_3": 440.0 532 | "nb_ansible_tune_3": 0 533 | "nb_ansible__4": 3 534 | "nb_ansible_portomento_4": 0.0 535 | "nb_ansible_freq_4": 440.0 536 | "nb_ansible_tune_4": 0 537 | "nb_crow__1_2": 11 538 | "nb_crow_attack_time_1_2": 0.1 539 | "nb_crow_attack_shape_1_2": 3 540 | "nb_crow_decay_time_1_2": 1.0 541 | "nb_crow_decay_shape_1_2": 3 542 | "nb_crow_sustain_1_2": 0.75 543 | "nb_crow_release_time_1_2": 0.5 544 | "nb_crow_release_shape_1_2": 3 545 | "nb_crow_portomento_1_2": 0.0 546 | "nb_crow_legato_1_2": 1 547 | "nb_crow_freq_1_2": 440.0 548 | "nb_crow_tune_1_2": 0 549 | "nb_crow__3_4": 11 550 | "nb_crow_attack_time_3_4": 0.1 551 | "nb_crow_attack_shape_3_4": 3 552 | "nb_crow_decay_time_3_4": 1.0 553 | "nb_crow_decay_shape_3_4": 3 554 | "nb_crow_sustain_3_4": 0.75 555 | "nb_crow_release_time_3_4": 0.5 556 | "nb_crow_release_shape_3_4": 3 557 | "nb_crow_portomento_3_4": 0.0 558 | "nb_crow_legato_3_4": 1 559 | "nb_crow_freq_3_4": 440.0 560 | "nb_crow_tune_3_4": 0 561 | "nb_crow__paraphonic": 10 562 | "nb_crow_attack_time_paraphonic": 0.1 563 | "nb_crow_attack_shape_paraphonic": 3 564 | "nb_crow_decay_time_paraphonic": 1.0 565 | "nb_crow_decay_shape_paraphonic": 3 566 | "nb_crow_sustain_paraphonic": 0.75 567 | "nb_crow_release_time_paraphonic": 0.5 568 | "nb_crow_release_shape_paraphonic": 3 569 | "nb_crow_legato_paraphonic": 1 570 | "nb_crow_freq_paraphonic": 440.0 571 | "nb_crow_tune_paraphonic": 0 572 | "doubledecker_group": 95 573 | "doubledecker_voices": 5 574 | "doubledecker_mix": 0.5 575 | "doubledecker_amp": 0.20739677970568 576 | "doubledecker_pan": 0.0 577 | "doubledecker_detune": 0.015625 578 | "doubledecker_drift": 0 579 | "doubledecker_pitch_env": 0.0035156249999995 580 | "doubledecker_portomento": 0.0 581 | "doubledecker_brilliance": 0.171875 582 | "doubledecker_resonance": 0.125 583 | "doubledecker_pitch_ratio_1": 5 584 | "doubledecker_layer_lfo_freq_1": 9.0629453417426 585 | "doubledecker_pwm_1": 0.1 586 | "doubledecker_pw_1": 0.465625 587 | "doubledecker_shape_1": 3 588 | "doubledecker_noise_1": 0.0 589 | "doubledecker_hp_freq_1": 96.397691618254 590 | "doubledecker_hp_res_1": 0.3515625 591 | "doubledecker_lp_freq_1": 737.96620527369 592 | "doubledecker_lp_res_1": 0.3515625 593 | "doubledecker_filter_init_1": -0.015625 594 | "doubledecker_filter_attack_level_1": 0.1875 595 | "doubledecker_filter_attack_1": 7.2955374413786 596 | "doubledecker_filter_decay_1": 5.2727039711706 597 | "doubledecker_filter_release_1": 1.0 598 | "doubledecker_filt_1": 1 599 | "doubledecker_sine_1": 0 600 | "doubledecker_amp_attack_1": 0.05 601 | "doubledecker_amp_decay_1": 1.0 602 | "doubledecker_amp_sustain_1": 0.5 603 | "doubledecker_amp_release_1": 1.0 604 | "doubledecker_velocity_to_filter_1": 0.2 605 | "doubledecker_velocity_to_amp_1": 0.1640625 606 | "doubledecker_pressure_to_filter_1": 0.5 607 | "doubledecker_pressure_to_amp_1": 0.2578125 608 | "doubledecker_filter_keyfollow_lo_1": 0.0 609 | "doubledecker_filter_keyfollow_hi_1": 0.21875 610 | "doubledecker_amp_keyfollow_lo_1": 0.0 611 | "doubledecker_amp_keyfollow_hi_1": 0.0 612 | "doubledecker_layer_amp_1": 1.0 613 | "doubledecker_invert_hpf_1": 3 614 | "doubledecker_pitch_ratio_2": 6 615 | "doubledecker_layer_lfo_freq_2": 6.1724798505808 616 | "doubledecker_pwm_2": 0.5 617 | "doubledecker_pw_2": 0.321875 618 | "doubledecker_shape_2": 3 619 | "doubledecker_noise_2": 0.0 620 | "doubledecker_hp_freq_2": 149.50774741589 621 | "doubledecker_hp_res_2": 0.203125 622 | "doubledecker_lp_freq_2": 268.92988182061 623 | "doubledecker_lp_res_2": 0.2734375 624 | "doubledecker_filter_init_2": 0.0 625 | "doubledecker_filter_attack_level_2": 0.4375 626 | "doubledecker_filter_attack_2": 0.48496158125112 627 | "doubledecker_filter_decay_2": 1.1643406615517 628 | "doubledecker_filter_release_2": 0.036098890844914 629 | "doubledecker_filt_2": 1 630 | "doubledecker_sine_2": 0 631 | "doubledecker_amp_attack_2": 0.05 632 | "doubledecker_amp_decay_2": 1.0 633 | "doubledecker_amp_sustain_2": 0.5 634 | "doubledecker_amp_release_2": 1.0 635 | "doubledecker_velocity_to_filter_2": 0.2 636 | "doubledecker_velocity_to_amp_2": 0.1484375 637 | "doubledecker_pressure_to_filter_2": 0.484375 638 | "doubledecker_pressure_to_amp_2": 0.265625 639 | "doubledecker_filter_keyfollow_lo_2": 0.0 640 | "doubledecker_filter_keyfollow_hi_2": 0.671875 641 | "doubledecker_amp_keyfollow_lo_2": 0.0 642 | "doubledecker_amp_keyfollow_hi_2": 0.0 643 | "doubledecker_layer_amp_2": 1.0 644 | "doubledecker_invert_hpf_2": 3 645 | "doubledecker_lfo_shape": 1 646 | "doubledecker_lfo_rate": 2.3929815219232 647 | "doubledecker_lfo_to_freq": 0.0 648 | "doubledecker_lfo_to_filter": 0.060785584089898 649 | "doubledecker_lfo_to_amp": 0.0 650 | "doubledecker_lfo_pres_to_freq": 0.0 651 | "doubledecker_lfo_pres_to_vibrato": 0.054099866662192 652 | "doubledecker_lfo_pres_to_filt": 0.0 653 | "doubledecker_lfo_pres_to_amp": 0.0 654 | "doubledecker_lfo_sync": 2 655 | "doubledecker_lfo_scope": 1 656 | "doubledecker_preset": - 657 | "doubledecker_preset_num": 1 658 | "doubledecker_layer_lfo_min": 0.7 659 | "doubledecker_layer_lfo_max": 70 660 | "doubledecker_global_lfo_min": 0.7 661 | "doubledecker_global_lfo_max": 25 662 | "doubledecker_attack_max": 1 663 | "doubledecker_release_max": 15 664 | "plaits_1_group": 22 665 | "plaits_style_1": 1 666 | "plaits_gate_1": 0 667 | "plaits_note_1": 36 668 | "plaits_model_1": 14 669 | "plaits_decay_1": 0.5 670 | "plaits_a_1": 0.05 671 | "plaits_d_1": 0.5 672 | "plaits_s_1": 0.5 673 | "plaits_r_1": 0.5 674 | "plaits_harmonics_1": 0.3 675 | "plaits_timbre_1": 0.3 676 | "plaits_morph_1": 0.3 677 | "plaits_amp_1": 0.2 678 | "plaits_aux_1": 0 679 | "plaits_fm_mod_1": 0 680 | "plaits_timb_mod_1": 0 681 | "plaits_morph_mod_1": 0 682 | "plaits_lpg_color_1": 0.5 683 | "plaits_gain_1": 1.0 684 | "plaits_pan_1": 0.0 685 | "plaits_slew_1": 0 686 | "plaits_2_group": 22 687 | "plaits_style_2": 1 688 | "plaits_gate_2": 0 689 | "plaits_note_2": 36 690 | "plaits_model_2": 14 691 | "plaits_decay_2": 0.5 692 | "plaits_a_2": 0.05 693 | "plaits_d_2": 0.5 694 | "plaits_s_2": 0.5 695 | "plaits_r_2": 0.5 696 | "plaits_harmonics_2": 0.3 697 | "plaits_timbre_2": 0.3 698 | "plaits_morph_2": 0.3 699 | "plaits_amp_2": 0.2 700 | "plaits_aux_2": 0 701 | "plaits_fm_mod_2": 0 702 | "plaits_timb_mod_2": 0 703 | "plaits_morph_mod_2": 0 704 | "plaits_lpg_color_2": 0.5 705 | "plaits_gain_2": 1.0 706 | "plaits_pan_2": 0.0 707 | "plaits_slew_2": 0 708 | "plaits_3_group": 22 709 | "plaits_style_3": 1 710 | "plaits_gate_3": 0 711 | "plaits_note_3": 36 712 | "plaits_model_3": 14 713 | "plaits_decay_3": 0.5 714 | "plaits_a_3": 0.05 715 | "plaits_d_3": 0.5 716 | "plaits_s_3": 0.5 717 | "plaits_r_3": 0.5 718 | "plaits_harmonics_3": 0.3 719 | "plaits_timbre_3": 0.3 720 | "plaits_morph_3": 0.3 721 | "plaits_amp_3": 0.2 722 | "plaits_aux_3": 0 723 | "plaits_fm_mod_3": 0 724 | "plaits_timb_mod_3": 0 725 | "plaits_morph_mod_3": 0 726 | "plaits_lpg_color_3": 0.5 727 | "plaits_gain_3": 1.0 728 | "plaits_pan_3": 0.0 729 | "plaits_slew_3": 0 730 | "plaits_4_group": 22 731 | "plaits_style_4": 1 732 | "plaits_gate_4": 0 733 | "plaits_note_4": 36 734 | "plaits_model_4": 14 735 | "plaits_decay_4": 0.5 736 | "plaits_a_4": 0.05 737 | "plaits_d_4": 0.5 738 | "plaits_s_4": 0.5 739 | "plaits_r_4": 0.5 740 | "plaits_harmonics_4": 0.3 741 | "plaits_timbre_4": 0.3 742 | "plaits_morph_4": 0.3 743 | "plaits_amp_4": 0.2 744 | "plaits_aux_4": 0 745 | "plaits_fm_mod_4": 0 746 | "plaits_timb_mod_4": 0 747 | "plaits_morph_mod_4": 0 748 | "plaits_lpg_color_4": 0.5 749 | "plaits_gain_4": 1.0 750 | "plaits_pan_4": 0.0 751 | "plaits_slew_4": 0 752 | "nb_jf_n_1": 1 753 | "nb_jf_slew_1": 0 754 | "nb_jf_n_2": 1 755 | "nb_jf_slew_2": 0 756 | "nb_jf_n_3": 1 757 | "nb_jf_slew_3": 0 758 | "nb_jf_n_4": 1 759 | "nb_jf_slew_4": 0 760 | "nb_jf_n_5": 1 761 | "nb_jf_slew_5": 0 762 | "nb_jf_n_6": 1 763 | "nb_jf_slew_6": 0 764 | "nb_jf_unison": 1 765 | "nb_jf_unison_detune": 0 766 | "midi_voice_1_1": 2 767 | "midi_chan_1_1": 1 768 | "midi_modulation_cc_1_1": 72 769 | "midi_voice_2_1": 2 770 | "midi_chan_2_1": 1 771 | "midi_modulation_cc_2_1": 72 772 | "midi_voice_17_1": 2 773 | "midi_chan_17_1": 1 774 | "midi_modulation_cc_17_1": 72 775 | "nb_passencore": 4 776 | "nb_passencore_root": 12 777 | "nb_passencore_scale": 1 778 | "nb_passencore_voice": 1 779 | "nb_passencore_voice_hidden_string": 780 | "nb_w_syn": 11 781 | "nb_w/style": 1 782 | "nb_w/curve": 5.0 783 | "nb_w/ramp": 0.0 784 | "nb_w/fm_index": 1.0 785 | "nb_w/fm_env": 1.0 786 | "nb_w/fm_num": 1 787 | "nb_w/fm_denom": 1 788 | "nb_w/lpg_time": 0.0 789 | "nb_w/lpg_symmetry": -5.0 790 | "nb_sentinel_param": 0 791 | "doubledecker_grid": 4 792 | "doubledecker_grid_mode": 1 793 | "doubledecker_dx": 1 794 | "doubledecker_dy": 5 795 | "doubledecker_grid_lowest": 24 796 | "mod depths": 65 797 | "matrix_depth_1": 0.0 798 | "matrix_depth_1_cell": 799 | "matrix_depth_2": 0.0 800 | "matrix_depth_2_cell": 801 | "matrix_depth_3": 0.0 802 | "matrix_depth_3_cell": 803 | "matrix_depth_4": 0.0 804 | "matrix_depth_4_cell": 805 | "matrix_depth_5": 0.0 806 | "matrix_depth_5_cell": 807 | "matrix_depth_6": 0.0 808 | "matrix_depth_6_cell": 809 | "matrix_depth_7": 0.0 810 | "matrix_depth_7_cell": 811 | "matrix_depth_8": 0.0 812 | "matrix_depth_8_cell": 813 | "matrix_depth_9": 0.0 814 | "matrix_depth_9_cell": 815 | "matrix_depth_10": 0.0 816 | "matrix_depth_10_cell": 817 | "matrix_depth_11": 0.0 818 | "matrix_depth_11_cell": 819 | "matrix_depth_12": 0.0 820 | "matrix_depth_12_cell": 821 | "matrix_depth_13": 0.0 822 | "matrix_depth_13_cell": 823 | "matrix_depth_14": 0.0 824 | "matrix_depth_14_cell": 825 | "matrix_depth_15": 0.0 826 | "matrix_depth_15_cell": 827 | "matrix_depth_16": 0.0 828 | "matrix_depth_16_cell": 829 | "matrix_connect_1": 0 830 | "matrix_connect_1_cell": 831 | "matrix_connect_2": 0 832 | "matrix_connect_2_cell": 833 | "matrix_connect_3": 0 834 | "matrix_connect_3_cell": 835 | "matrix_connect_4": 0 836 | "matrix_connect_4_cell": 837 | "matrix_connect_5": 0 838 | "matrix_connect_5_cell": 839 | "matrix_connect_6": 0 840 | "matrix_connect_6_cell": 841 | "matrix_connect_7": 0 842 | "matrix_connect_7_cell": 843 | "matrix_connect_8": 0 844 | "matrix_connect_8_cell": 845 | "matrix_connect_9": 0 846 | "matrix_connect_9_cell": 847 | "matrix_connect_10": 0 848 | "matrix_connect_10_cell": 849 | "matrix_connect_11": 0 850 | "matrix_connect_11_cell": 851 | "matrix_connect_12": 0 852 | "matrix_connect_12_cell": 853 | "matrix_connect_13": 0 854 | "matrix_connect_13_cell": 855 | "matrix_connect_14": 0 856 | "matrix_connect_14_cell": 857 | "matrix_connect_15": 0 858 | "matrix_connect_15_cell": 859 | "matrix_connect_16": 0 860 | "matrix_connect_16_cell": 861 | "tg_root": 12 862 | "tg_scale": 1 863 | "tg_voicegroup_1": 6 864 | "tg_voice_1": 1 865 | "tg_voice_1_hidden_string": 866 | "tg_note_1": 36 867 | "tg_gate_1": 0 868 | "tg_length_1": 0.3 869 | "tg_voicegroup_2": 6 870 | "tg_voice_2": 1 871 | "tg_voice_2_hidden_string": 872 | "tg_note_2": 36 873 | "tg_gate_2": 0 874 | "tg_length_2": 0.3 875 | "tg_voicegroup_3": 6 876 | "tg_voice_3": 1 877 | "tg_voice_3_hidden_string": 878 | "tg_note_3": 36 879 | "tg_gate_3": 0 880 | "tg_length_3": 0.3 881 | "tg_voicegroup_4": 6 882 | "tg_voice_4": 1 883 | "tg_voice_4_hidden_string": 884 | "tg_note_4": 36 885 | "tg_gate_4": 0 886 | "tg_length_4": 0.3 887 | "nb in midi source": 1 888 | "nb in pitch bend range": 12 889 | "nb_in_voice": 1 890 | "nb_in_voice_hidden_string": 891 | "nb_in_pressure_1": 1 892 | "nb_in_pressure_2": 1 893 | "nb_in_pressure_2_sens": 0.0 894 | "rhythm 1": 6 895 | "tk_1_rhythm_active": 1 896 | "tk_1_div": 7 897 | "tk_1_swing": 50 898 | "tk_1_rhythm_length": 8 899 | "tk_1_rhythm_fill": 1 900 | "tk_1_rhythm_offset": 0 901 | "rhythm 2": 6 902 | "tk_2_rhythm_active": 1 903 | "tk_2_div": 7 904 | "tk_2_swing": 50 905 | "tk_2_rhythm_length": 8 906 | "tk_2_rhythm_fill": 1 907 | "tk_2_rhythm_offset": 0 908 | "rhythm 3": 6 909 | "tk_3_rhythm_active": 1 910 | "tk_3_div": 7 911 | "tk_3_swing": 50 912 | "tk_3_rhythm_length": 8 913 | "tk_3_rhythm_fill": 1 914 | "tk_3_rhythm_offset": 0 915 | "rhythm 4": 6 916 | "tk_4_rhythm_active": 1 917 | "tk_4_div": 7 918 | "tk_4_swing": 50 919 | "tk_4_rhythm_length": 8 920 | "tk_4_rhythm_fill": 1 921 | "tk_4_rhythm_offset": 0 922 | "lfo 1": 6 923 | "tk_1_clocked": 0 924 | "tk_1_clocked_period": 7 925 | "tk_1_unclocked_period": 1.0 926 | "tk_1_lfo_bipolar": 0 927 | "tk_1_shape": 1 928 | "tk_1_lfo_width": 0.5 929 | "lfo 2": 6 930 | "tk_2_clocked": 0 931 | "tk_2_clocked_period": 7 932 | "tk_2_unclocked_period": 1.0 933 | "tk_2_lfo_bipolar": 0 934 | "tk_2_shape": 1 935 | "tk_2_lfo_width": 0.5 936 | "lfo 3": 6 937 | "tk_3_clocked": 0 938 | "tk_3_clocked_period": 7 939 | "tk_3_unclocked_period": 1.0 940 | "tk_3_lfo_bipolar": 0 941 | "tk_3_shape": 1 942 | "tk_3_lfo_width": 0.5 943 | "lfo 4": 6 944 | "tk_4_clocked": 0 945 | "tk_4_clocked_period": 7 946 | "tk_4_unclocked_period": 1.0 947 | "tk_4_lfo_bipolar": 0 948 | "tk_4_shape": 1 949 | "tk_4_lfo_width": 0.5 950 | "sequence 1": 23 951 | "tk_1_seq_pos": 1 952 | "tk_1_seq_active": 1 953 | "tk_1_seq_length": 4 954 | "tk_1_seq_shred": 0 955 | "tk_1_seq_zero": 0 956 | "tk_1_val_1": 0 957 | "tk_1_val_2": 0 958 | "tk_1_val_3": 0 959 | "tk_1_val_4": 0 960 | "tk_1_val_5": 0 961 | "tk_1_val_6": 0 962 | "tk_1_val_7": 0 963 | "tk_1_val_8": 0 964 | "tk_1_val_9": 0 965 | "tk_1_val_10": 0 966 | "tk_1_val_11": 0 967 | "tk_1_val_12": 0 968 | "tk_1_val_13": 0 969 | "tk_1_val_14": 0 970 | "tk_1_val_15": 0 971 | "tk_1_val_16": 0 972 | "sequence 2": 23 973 | "tk_2_seq_pos": 1 974 | "tk_2_seq_active": 1 975 | "tk_2_seq_length": 4 976 | "tk_2_seq_shred": 0 977 | "tk_2_seq_zero": 0 978 | "tk_2_val_1": 0 979 | "tk_2_val_2": 0 980 | "tk_2_val_3": 0 981 | "tk_2_val_4": 0 982 | "tk_2_val_5": 0 983 | "tk_2_val_6": 0 984 | "tk_2_val_7": 0 985 | "tk_2_val_8": 0 986 | "tk_2_val_9": 0 987 | "tk_2_val_10": 0 988 | "tk_2_val_11": 0 989 | "tk_2_val_12": 0 990 | "tk_2_val_13": 0 991 | "tk_2_val_14": 0 992 | "tk_2_val_15": 0 993 | "tk_2_val_16": 0 994 | "sequence 3": 23 995 | "tk_3_seq_pos": 1 996 | "tk_3_seq_active": 1 997 | "tk_3_seq_length": 4 998 | "tk_3_seq_shred": 0 999 | "tk_3_seq_zero": 0 1000 | "tk_3_val_1": 0 1001 | "tk_3_val_2": 0 1002 | "tk_3_val_3": 0 1003 | "tk_3_val_4": 0 1004 | "tk_3_val_5": 0 1005 | "tk_3_val_6": 0 1006 | "tk_3_val_7": 0 1007 | "tk_3_val_8": 0 1008 | "tk_3_val_9": 0 1009 | "tk_3_val_10": 0 1010 | "tk_3_val_11": 0 1011 | "tk_3_val_12": 0 1012 | "tk_3_val_13": 0 1013 | "tk_3_val_14": 0 1014 | "tk_3_val_15": 0 1015 | "tk_3_val_16": 0 1016 | "sequence 4": 23 1017 | "tk_4_seq_pos": 1 1018 | "tk_4_seq_active": 1 1019 | "tk_4_seq_length": 4 1020 | "tk_4_seq_shred": 0 1021 | "tk_4_seq_zero": 0 1022 | "tk_4_val_1": 0 1023 | "tk_4_val_2": 0 1024 | "tk_4_val_3": 0 1025 | "tk_4_val_4": 0 1026 | "tk_4_val_5": 0 1027 | "tk_4_val_6": 0 1028 | "tk_4_val_7": 0 1029 | "tk_4_val_8": 0 1030 | "tk_4_val_9": 0 1031 | "tk_4_val_10": 0 1032 | "tk_4_val_11": 0 1033 | "tk_4_val_12": 0 1034 | "tk_4_val_13": 0 1035 | "tk_4_val_14": 0 1036 | "tk_4_val_15": 0 1037 | "tk_4_val_16": 0 1038 | "macro 1": 2 1039 | "tk_1_macro_active": 1 1040 | "tk_1_macro_value": 0 1041 | "macro 2": 2 1042 | "tk_2_macro_active": 1 1043 | "tk_2_macro_value": 0 1044 | "macro 3": 2 1045 | "tk_3_macro_active": 1 1046 | "tk_3_macro_value": 0 1047 | "macro 4": 2 1048 | "tk_4_macro_active": 1 1049 | "tk_4_macro_value": 0 1050 | "cyrene_version": 1051 | "cy_play": 0 1052 | "cy_pattern_length": 16 1053 | "cy_grid_resolution": 3 1054 | "cy_shuffle_basis": 1 1055 | "cy_shuffle_feel": 1 1056 | "cy_swing_amount": 0 1057 | "cy_grids_pattern_x": 128 1058 | "cy_grids_pattern_y": 128 1059 | "cy_pattern_chaos": 10 1060 | "Kick": 5 1061 | "cy_1_density": 50 1062 | "cy_1_euclidean_enabled": 1 1063 | "cy_1_euclidean_length": 8 1064 | "cy_1_euclidean_trigs": 0 1065 | "cy_1_euclidean_rotation": 0 1066 | "Snare": 5 1067 | "cy_2_density": 50 1068 | "cy_2_euclidean_enabled": 1 1069 | "cy_2_euclidean_length": 8 1070 | "cy_2_euclidean_trigs": 0 1071 | "cy_2_euclidean_rotation": 0 1072 | "Hi-Hat": 5 1073 | "cy_3_density": 50 1074 | "cy_3_euclidean_enabled": 1 1075 | "cy_3_euclidean_length": 8 1076 | "cy_3_euclidean_trigs": 0 1077 | "cy_3_euclidean_rotation": 0 1078 | "Track 4": 5 1079 | "cy_4_density": 50 1080 | "cy_4_euclidean_enabled": 1 1081 | "cy_4_euclidean_length": 8 1082 | "cy_4_euclidean_trigs": 0 1083 | "cy_4_euclidean_rotation": 0 1084 | "Track 5": 5 1085 | "cy_5_density": 50 1086 | "cy_5_euclidean_enabled": 1 1087 | "cy_5_euclidean_length": 8 1088 | "cy_5_euclidean_trigs": 0 1089 | "cy_5_euclidean_rotation": 0 1090 | "Track 6": 5 1091 | "cy_6_density": 50 1092 | "cy_6_euclidean_enabled": 1 1093 | "cy_6_euclidean_length": 8 1094 | "cy_6_euclidean_trigs": 0 1095 | "cy_6_euclidean_rotation": 0 1096 | "Track 7": 5 1097 | "cy_7_density": 50 1098 | "cy_7_euclidean_enabled": 1 1099 | "cy_7_euclidean_length": 8 1100 | "cy_7_euclidean_trigs": 0 1101 | "cy_7_euclidean_rotation": 0 1102 | "MIDI": 15 1103 | "cy_midi_out": 1 1104 | "cy_1_midi_note": 36 1105 | "cy_1_midi_chan": 1 1106 | "cy_2_midi_note": 38 1107 | "cy_2_midi_chan": 1 1108 | "cy_3_midi_note": 42 1109 | "cy_3_midi_chan": 1 1110 | "cy_4_midi_note": 46 1111 | "cy_4_midi_chan": 1 1112 | "cy_5_midi_note": 70 1113 | "cy_5_midi_chan": 1 1114 | "cy_6_midi_note": 37 1115 | "cy_6_midi_chan": 1 1116 | "cy_7_midi_note": 63 1117 | "cy_7_midi_chan": 1 1118 | "Crow": 20 1119 | "cy_crow_out": 1 1120 | "cy_crow_in": 1 1121 | "cy_crow_out_1_track": 1 1122 | "cy_crow_out_1_mode": 3 1123 | "cy_crow_out_1_attack": 0.03 1124 | "cy_crow_out_1_release": 0.3 1125 | "cy_crow_out_2_track": 2 1126 | "cy_crow_out_2_mode": 3 1127 | "cy_crow_out_2_attack": 0.03 1128 | "cy_crow_out_2_release": 0.3 1129 | "cy_crow_out_3_track": 3 1130 | "cy_crow_out_3_mode": 3 1131 | "cy_crow_out_3_attack": 0.03 1132 | "cy_crow_out_3_release": 0.3 1133 | "cy_crow_out_4_track": 4 1134 | "cy_crow_out_4_mode": 3 1135 | "cy_crow_out_4_attack": 0.03 1136 | "cy_crow_out_4_release": 0.3 1137 | "cy_crow_in_1_param": 1 1138 | "cy_crow_in_2_param": 1 1139 | "crow out 1": 9 1140 | "ck_1_mode": 1 1141 | "ck_1_pulse_len": 0.01 1142 | "ck_1_gate": 0 1143 | "ck_1_voltage": 0.0 1144 | "ck_1_resolution": 0.1 1145 | "ck_1_note": 48 1146 | "ck_1_tuning": 440.0 1147 | "ck_1_scale": 1 1148 | "crow out 2": 9 1149 | "ck_2_mode": 1 1150 | "ck_2_pulse_len": 0.01 1151 | "ck_2_gate": 0 1152 | "ck_2_voltage": 0.0 1153 | "ck_2_resolution": 0.1 1154 | "ck_2_note": 48 1155 | "ck_2_tuning": 440.0 1156 | "ck_2_scale": 1 1157 | "crow out 3": 9 1158 | "ck_3_mode": 1 1159 | "ck_3_pulse_len": 0.01 1160 | "ck_3_gate": 0 1161 | "ck_3_voltage": 0.0 1162 | "ck_3_resolution": 0.1 1163 | "ck_3_note": 48 1164 | "ck_3_tuning": 440.0 1165 | "ck_3_scale": 1 1166 | "crow out 4": 9 1167 | "ck_4_mode": 1 1168 | "ck_4_pulse_len": 0.01 1169 | "ck_4_gate": 0 1170 | "ck_4_voltage": 0.0 1171 | "ck_4_resolution": 0.1 1172 | "ck_4_note": 48 1173 | "ck_4_tuning": 440.0 1174 | "ck_4_scale": 1 1175 | "nbout_chan_1": 1 1176 | "nbout_chan_1_hidden_string": 1177 | -------------------------------------------------------------------------------- /lib/preset/mystery-flute-pres.pset: -------------------------------------------------------------------------------- 1 | -- doubledecker 2 | "LEVELS": 9 3 | "REVERB": 11 4 | "rev_eng_input": -10.0 5 | "rev_cut_input": -10.0 6 | "rev_monitor_input": -inf 7 | "rev_tape_input": -inf 8 | "rev_return_level": -9.6432746655329e-16 9 | "rev_pre_delay": 60.0 10 | "rev_lf_fc": 200.0 11 | "rev_low_time": 6.0 12 | "rev_mid_time": 6.0 13 | "rev_hf_damping": 6000.0 14 | "COMPRESSOR": 8 15 | "comp_mix": 1 16 | "comp_ratio": 4.0 17 | "comp_threshold": -18.0 18 | "comp_attack": 5.0 19 | "comp_release": 50.0 20 | "comp_pre_gain": 0.0 21 | "comp_post_gain": 9.0 22 | "SOFTCUT": 3 23 | "cut_input_adc": -9.6432746655329e-16 24 | "cut_input_eng": -9.6432746655329e-16 25 | "cut_input_tape": -inf 26 | "CLOCK": 9 27 | "midi source": 2 28 | "bend range": 12 29 | "oilcan_oilcan_1": 124 30 | "oilcan_selected_timbre_1": 1 31 | "oilcan_freq_1_1": 48.267172000962 32 | "oilcan_sweep_time_1_1": 1.1255069395027 33 | "oilcan_sweep_ix_1_1": 0.04 34 | "oilcan_atk_1_1": 0.0 35 | "oilcan_car_rel_1_1": 0.23630446040355 36 | "oilcan_mod_rel_1_1": 20.812386925025 37 | "oilcan_mod_ix_1_1": 0.036282587176292 38 | "oilcan_mod_ratio_1_1": 1.0 39 | "oilcan_fb_1_1": 10.0 40 | "oilcan_fold_1_1": 0.0 41 | "oilcan_headroom_1_1": 1.0 42 | "oilcan_gain_1_1": 2.251162614549 43 | "oilcan_routing_1_1": 0.1 44 | "oilcan_level_1_1": 0.89596000511171 45 | "oilcan_freq_2_1": 216.73021153806 46 | "oilcan_sweep_time_2_1": 14.179498568211 47 | "oilcan_sweep_ix_2_1": 0.5 48 | "oilcan_atk_2_1": 0.0 49 | "oilcan_car_rel_2_1": 0.075995700204734 50 | "oilcan_mod_rel_2_1": 77.888329239103 51 | "oilcan_mod_ix_2_1": 0.42110774187376 52 | "oilcan_mod_ratio_2_1": 0.001 53 | "oilcan_fb_2_1": 10.0 54 | "oilcan_fold_2_1": 0.023401477535407 55 | "oilcan_headroom_2_1": 1.0 56 | "oilcan_gain_2_1": 1.0 57 | "oilcan_routing_2_1": 0.51 58 | "oilcan_level_2_1": 1.0 59 | "oilcan_freq_3_1": 6465.9180308895 60 | "oilcan_sweep_time_3_1": 0.1 61 | "oilcan_sweep_ix_3_1": 0.0 62 | "oilcan_atk_3_1": 0.000761421320832 63 | "oilcan_car_rel_3_1": 0.11215620475911 64 | "oilcan_mod_rel_3_1": 110.89882083825 65 | "oilcan_mod_ix_3_1": 0.39549781603158 66 | "oilcan_mod_ratio_3_1": 30.101755754031 67 | "oilcan_fb_3_1": 4.2999158623596 68 | "oilcan_fold_3_1": 16.827133959804 69 | "oilcan_headroom_3_1": 0.57538847271996 70 | "oilcan_gain_3_1": 0.28629857106017 71 | "oilcan_routing_3_1": 0.19 72 | "oilcan_level_3_1": 1.0 73 | "oilcan_freq_4_1": 6181.9679756622 74 | "oilcan_sweep_time_4_1": 0.1 75 | "oilcan_sweep_ix_4_1": 0.0 76 | "oilcan_atk_4_1": 0.028159374698623 77 | "oilcan_car_rel_4_1": 0.13956080881699 78 | "oilcan_mod_rel_4_1": 113.21244853834 79 | "oilcan_mod_ix_4_1": 0.33426240086974 80 | "oilcan_mod_ratio_4_1": 30.101755754031 81 | "oilcan_fb_4_1": 4.2999158623596 82 | "oilcan_fold_4_1": 16.827133959804 83 | "oilcan_headroom_4_1": 0.497914356027 84 | "oilcan_gain_4_1": 0.28629857106017 85 | "oilcan_routing_4_1": 0.19 86 | "oilcan_level_4_1": 1.0 87 | "oilcan_freq_5_1": 243.47364212317 88 | "oilcan_sweep_time_5_1": 43.52785136081 89 | "oilcan_sweep_ix_5_1": 0.0099999999999991 90 | "oilcan_atk_5_1": 0.0 91 | "oilcan_car_rel_5_1": 0.083526229522557 92 | "oilcan_mod_rel_5_1": 31.562544299578 93 | "oilcan_mod_ix_5_1": 0.22756640205149 94 | "oilcan_mod_ratio_5_1": 4.7029457589911 95 | "oilcan_fb_5_1": 3.3426240086974 96 | "oilcan_fold_5_1": 0.0 97 | "oilcan_headroom_5_1": 0.41298740960665 98 | "oilcan_gain_5_1": 1.0 99 | "oilcan_routing_5_1": 0.315 100 | "oilcan_level_5_1": 1.0 101 | "oilcan_freq_6_1": 778.56532911316 102 | "oilcan_sweep_time_6_1": 0.1 103 | "oilcan_sweep_ix_6_1": 0.04 104 | "oilcan_atk_6_1": 0.0 105 | "oilcan_car_rel_6_1": 0.066632716015893 106 | "oilcan_mod_rel_6_1": 170.67825684905 107 | "oilcan_mod_ix_6_1": 0.75122731071337 108 | "oilcan_mod_ratio_6_1": 3.5722947678015 109 | "oilcan_fb_6_1": 0.0 110 | "oilcan_fold_6_1": 1.210364029648 111 | "oilcan_headroom_6_1": 1.0 112 | "oilcan_gain_6_1": 1.0 113 | "oilcan_routing_6_1": 0.1 114 | "oilcan_level_6_1": 0.53120852876635 115 | "oilcan_freq_7_1": 127.09959126288 116 | "oilcan_sweep_time_7_1": 100.0 117 | "oilcan_sweep_ix_7_1": 0.01 118 | "oilcan_atk_7_1": 0.0 119 | "oilcan_car_rel_7_1": 0.075995700204734 120 | "oilcan_mod_rel_7_1": 185.19584764648 121 | "oilcan_mod_ix_7_1": 0.10608378159998 122 | "oilcan_mod_ratio_7_1": 3.9194612216259 123 | "oilcan_fb_7_1": 10.0 124 | "oilcan_fold_7_1": 0.0 125 | "oilcan_headroom_7_1": 1.0 126 | "oilcan_gain_7_1": 1.0 127 | "oilcan_routing_7_1": 0.1 128 | "oilcan_level_7_1": 1.0 129 | "oilcan_freq_mult_1": 1.0 130 | "oilcan_sweep_time_mult_1": 1.0 131 | "oilcan_sweep_ix_mult_1": 1.0 132 | "oilcan_atk_mult_1": 1.0 133 | "oilcan_car_rel_mult_1": 1.0 134 | "oilcan_mod_rel_mult_1": 1.0 135 | "oilcan_mod_ix_mult_1": 1.0 136 | "oilcan_mod_ratio_mult_1": 1.0 137 | "oilcan_fb_mult_1": 1.0 138 | "oilcan_fold_mult_1": 1.0 139 | "oilcan_headroom_mult_1": 1.0 140 | "oilcan_gain_mult_1": 1.0 141 | "oilcan_routing_mult_1": 1.0 142 | "oilcan_level_mult_1": 1.0 143 | "oilcan_trig_1": 0 144 | "oilcan_copy_multipliers_1": 0 145 | "oilcan_paste_multipliers_1": 0 146 | "oilcan_copy_timbre_1": 0 147 | "oilcan_paste_timbre_1": 0 148 | "oilcan_target_file_1": /home/we/dust/data/oilcan/default-1.oilkit 149 | "oilcan_save_kit_1": 0 150 | "oilcan_load_kit_1": 0 151 | "oilcan_save_new_1": 0 152 | "oilcan_oilcan_2": 124 153 | "oilcan_selected_timbre_2": 1 154 | "oilcan_freq_1_2": 48.267172000962 155 | "oilcan_sweep_time_1_2": 1.1255069395027 156 | "oilcan_sweep_ix_1_2": 0.04 157 | "oilcan_atk_1_2": 0.0 158 | "oilcan_car_rel_1_2": 0.23630446040355 159 | "oilcan_mod_rel_1_2": 20.812386925025 160 | "oilcan_mod_ix_1_2": 0.036282587176292 161 | "oilcan_mod_ratio_1_2": 1.0 162 | "oilcan_fb_1_2": 10.0 163 | "oilcan_fold_1_2": 0.0 164 | "oilcan_headroom_1_2": 1.0 165 | "oilcan_gain_1_2": 2.251162614549 166 | "oilcan_routing_1_2": 0.1 167 | "oilcan_level_1_2": 0.89596000511171 168 | "oilcan_freq_2_2": 216.73021153806 169 | "oilcan_sweep_time_2_2": 14.179498568211 170 | "oilcan_sweep_ix_2_2": 0.5 171 | "oilcan_atk_2_2": 0.0 172 | "oilcan_car_rel_2_2": 0.075995700204734 173 | "oilcan_mod_rel_2_2": 77.888329239103 174 | "oilcan_mod_ix_2_2": 0.42110774187376 175 | "oilcan_mod_ratio_2_2": 0.001 176 | "oilcan_fb_2_2": 10.0 177 | "oilcan_fold_2_2": 0.023401477535407 178 | "oilcan_headroom_2_2": 1.0 179 | "oilcan_gain_2_2": 1.0 180 | "oilcan_routing_2_2": 0.51 181 | "oilcan_level_2_2": 1.0 182 | "oilcan_freq_3_2": 6465.9180308895 183 | "oilcan_sweep_time_3_2": 0.1 184 | "oilcan_sweep_ix_3_2": 0.0 185 | "oilcan_atk_3_2": 0.000761421320832 186 | "oilcan_car_rel_3_2": 0.11215620475911 187 | "oilcan_mod_rel_3_2": 110.89882083825 188 | "oilcan_mod_ix_3_2": 0.39549781603158 189 | "oilcan_mod_ratio_3_2": 30.101755754031 190 | "oilcan_fb_3_2": 4.2999158623596 191 | "oilcan_fold_3_2": 16.827133959804 192 | "oilcan_headroom_3_2": 0.57538847271996 193 | "oilcan_gain_3_2": 0.28629857106017 194 | "oilcan_routing_3_2": 0.19 195 | "oilcan_level_3_2": 1.0 196 | "oilcan_freq_4_2": 6181.9679756622 197 | "oilcan_sweep_time_4_2": 0.1 198 | "oilcan_sweep_ix_4_2": 0.0 199 | "oilcan_atk_4_2": 0.028159374698623 200 | "oilcan_car_rel_4_2": 0.13956080881699 201 | "oilcan_mod_rel_4_2": 113.21244853834 202 | "oilcan_mod_ix_4_2": 0.33426240086974 203 | "oilcan_mod_ratio_4_2": 30.101755754031 204 | "oilcan_fb_4_2": 4.2999158623596 205 | "oilcan_fold_4_2": 16.827133959804 206 | "oilcan_headroom_4_2": 0.497914356027 207 | "oilcan_gain_4_2": 0.28629857106017 208 | "oilcan_routing_4_2": 0.19 209 | "oilcan_level_4_2": 1.0 210 | "oilcan_freq_5_2": 243.47364212317 211 | "oilcan_sweep_time_5_2": 43.52785136081 212 | "oilcan_sweep_ix_5_2": 0.0099999999999991 213 | "oilcan_atk_5_2": 0.0 214 | "oilcan_car_rel_5_2": 0.083526229522557 215 | "oilcan_mod_rel_5_2": 31.562544299578 216 | "oilcan_mod_ix_5_2": 0.22756640205149 217 | "oilcan_mod_ratio_5_2": 4.7029457589911 218 | "oilcan_fb_5_2": 3.3426240086974 219 | "oilcan_fold_5_2": 0.0 220 | "oilcan_headroom_5_2": 0.41298740960665 221 | "oilcan_gain_5_2": 1.0 222 | "oilcan_routing_5_2": 0.315 223 | "oilcan_level_5_2": 1.0 224 | "oilcan_freq_6_2": 778.56532911316 225 | "oilcan_sweep_time_6_2": 0.1 226 | "oilcan_sweep_ix_6_2": 0.04 227 | "oilcan_atk_6_2": 0.0 228 | "oilcan_car_rel_6_2": 0.066632716015893 229 | "oilcan_mod_rel_6_2": 170.67825684905 230 | "oilcan_mod_ix_6_2": 0.75122731071337 231 | "oilcan_mod_ratio_6_2": 3.5722947678015 232 | "oilcan_fb_6_2": 0.0 233 | "oilcan_fold_6_2": 1.210364029648 234 | "oilcan_headroom_6_2": 1.0 235 | "oilcan_gain_6_2": 1.0 236 | "oilcan_routing_6_2": 0.1 237 | "oilcan_level_6_2": 0.53120852876635 238 | "oilcan_freq_7_2": 127.09959126288 239 | "oilcan_sweep_time_7_2": 100.0 240 | "oilcan_sweep_ix_7_2": 0.01 241 | "oilcan_atk_7_2": 0.0 242 | "oilcan_car_rel_7_2": 0.075995700204734 243 | "oilcan_mod_rel_7_2": 185.19584764648 244 | "oilcan_mod_ix_7_2": 0.10608378159998 245 | "oilcan_mod_ratio_7_2": 3.9194612216259 246 | "oilcan_fb_7_2": 10.0 247 | "oilcan_fold_7_2": 0.0 248 | "oilcan_headroom_7_2": 1.0 249 | "oilcan_gain_7_2": 1.0 250 | "oilcan_routing_7_2": 0.1 251 | "oilcan_level_7_2": 1.0 252 | "oilcan_freq_mult_2": 1.0 253 | "oilcan_sweep_time_mult_2": 1.0 254 | "oilcan_sweep_ix_mult_2": 1.0 255 | "oilcan_atk_mult_2": 1.0 256 | "oilcan_car_rel_mult_2": 1.0 257 | "oilcan_mod_rel_mult_2": 1.0 258 | "oilcan_mod_ix_mult_2": 1.0 259 | "oilcan_mod_ratio_mult_2": 1.0 260 | "oilcan_fb_mult_2": 1.0 261 | "oilcan_fold_mult_2": 1.0 262 | "oilcan_headroom_mult_2": 1.0 263 | "oilcan_gain_mult_2": 1.0 264 | "oilcan_routing_mult_2": 1.0 265 | "oilcan_level_mult_2": 1.0 266 | "oilcan_trig_2": 0 267 | "oilcan_copy_multipliers_2": 0 268 | "oilcan_paste_multipliers_2": 0 269 | "oilcan_copy_timbre_2": 0 270 | "oilcan_paste_timbre_2": 0 271 | "oilcan_target_file_2": /home/we/dust/data/oilcan/default-1.oilkit 272 | "oilcan_save_kit_2": 0 273 | "oilcan_load_kit_2": 0 274 | "oilcan_save_new_2": 0 275 | "oilcan_oilcan_3": 124 276 | "oilcan_selected_timbre_3": 1 277 | "oilcan_freq_1_3": 48.267172000962 278 | "oilcan_sweep_time_1_3": 1.1255069395027 279 | "oilcan_sweep_ix_1_3": 0.04 280 | "oilcan_atk_1_3": 0.0 281 | "oilcan_car_rel_1_3": 0.23630446040355 282 | "oilcan_mod_rel_1_3": 20.812386925025 283 | "oilcan_mod_ix_1_3": 0.036282587176292 284 | "oilcan_mod_ratio_1_3": 1.0 285 | "oilcan_fb_1_3": 10.0 286 | "oilcan_fold_1_3": 0.0 287 | "oilcan_headroom_1_3": 1.0 288 | "oilcan_gain_1_3": 2.251162614549 289 | "oilcan_routing_1_3": 0.1 290 | "oilcan_level_1_3": 0.89596000511171 291 | "oilcan_freq_2_3": 216.73021153806 292 | "oilcan_sweep_time_2_3": 14.179498568211 293 | "oilcan_sweep_ix_2_3": 0.5 294 | "oilcan_atk_2_3": 0.0 295 | "oilcan_car_rel_2_3": 0.075995700204734 296 | "oilcan_mod_rel_2_3": 77.888329239103 297 | "oilcan_mod_ix_2_3": 0.42110774187376 298 | "oilcan_mod_ratio_2_3": 0.001 299 | "oilcan_fb_2_3": 10.0 300 | "oilcan_fold_2_3": 0.023401477535407 301 | "oilcan_headroom_2_3": 1.0 302 | "oilcan_gain_2_3": 1.0 303 | "oilcan_routing_2_3": 0.51 304 | "oilcan_level_2_3": 1.0 305 | "oilcan_freq_3_3": 6465.9180308895 306 | "oilcan_sweep_time_3_3": 0.1 307 | "oilcan_sweep_ix_3_3": 0.0 308 | "oilcan_atk_3_3": 0.000761421320832 309 | "oilcan_car_rel_3_3": 0.11215620475911 310 | "oilcan_mod_rel_3_3": 110.89882083825 311 | "oilcan_mod_ix_3_3": 0.39549781603158 312 | "oilcan_mod_ratio_3_3": 30.101755754031 313 | "oilcan_fb_3_3": 4.2999158623596 314 | "oilcan_fold_3_3": 16.827133959804 315 | "oilcan_headroom_3_3": 0.57538847271996 316 | "oilcan_gain_3_3": 0.28629857106017 317 | "oilcan_routing_3_3": 0.19 318 | "oilcan_level_3_3": 1.0 319 | "oilcan_freq_4_3": 6181.9679756622 320 | "oilcan_sweep_time_4_3": 0.1 321 | "oilcan_sweep_ix_4_3": 0.0 322 | "oilcan_atk_4_3": 0.028159374698623 323 | "oilcan_car_rel_4_3": 0.13956080881699 324 | "oilcan_mod_rel_4_3": 113.21244853834 325 | "oilcan_mod_ix_4_3": 0.33426240086974 326 | "oilcan_mod_ratio_4_3": 30.101755754031 327 | "oilcan_fb_4_3": 4.2999158623596 328 | "oilcan_fold_4_3": 16.827133959804 329 | "oilcan_headroom_4_3": 0.497914356027 330 | "oilcan_gain_4_3": 0.28629857106017 331 | "oilcan_routing_4_3": 0.19 332 | "oilcan_level_4_3": 1.0 333 | "oilcan_freq_5_3": 243.47364212317 334 | "oilcan_sweep_time_5_3": 43.52785136081 335 | "oilcan_sweep_ix_5_3": 0.0099999999999991 336 | "oilcan_atk_5_3": 0.0 337 | "oilcan_car_rel_5_3": 0.083526229522557 338 | "oilcan_mod_rel_5_3": 31.562544299578 339 | "oilcan_mod_ix_5_3": 0.22756640205149 340 | "oilcan_mod_ratio_5_3": 4.7029457589911 341 | "oilcan_fb_5_3": 3.3426240086974 342 | "oilcan_fold_5_3": 0.0 343 | "oilcan_headroom_5_3": 0.41298740960665 344 | "oilcan_gain_5_3": 1.0 345 | "oilcan_routing_5_3": 0.315 346 | "oilcan_level_5_3": 1.0 347 | "oilcan_freq_6_3": 778.56532911316 348 | "oilcan_sweep_time_6_3": 0.1 349 | "oilcan_sweep_ix_6_3": 0.04 350 | "oilcan_atk_6_3": 0.0 351 | "oilcan_car_rel_6_3": 0.066632716015893 352 | "oilcan_mod_rel_6_3": 170.67825684905 353 | "oilcan_mod_ix_6_3": 0.75122731071337 354 | "oilcan_mod_ratio_6_3": 3.5722947678015 355 | "oilcan_fb_6_3": 0.0 356 | "oilcan_fold_6_3": 1.210364029648 357 | "oilcan_headroom_6_3": 1.0 358 | "oilcan_gain_6_3": 1.0 359 | "oilcan_routing_6_3": 0.1 360 | "oilcan_level_6_3": 0.53120852876635 361 | "oilcan_freq_7_3": 127.09959126288 362 | "oilcan_sweep_time_7_3": 100.0 363 | "oilcan_sweep_ix_7_3": 0.01 364 | "oilcan_atk_7_3": 0.0 365 | "oilcan_car_rel_7_3": 0.075995700204734 366 | "oilcan_mod_rel_7_3": 185.19584764648 367 | "oilcan_mod_ix_7_3": 0.10608378159998 368 | "oilcan_mod_ratio_7_3": 3.9194612216259 369 | "oilcan_fb_7_3": 10.0 370 | "oilcan_fold_7_3": 0.0 371 | "oilcan_headroom_7_3": 1.0 372 | "oilcan_gain_7_3": 1.0 373 | "oilcan_routing_7_3": 0.1 374 | "oilcan_level_7_3": 1.0 375 | "oilcan_freq_mult_3": 1.0 376 | "oilcan_sweep_time_mult_3": 1.0 377 | "oilcan_sweep_ix_mult_3": 1.0 378 | "oilcan_atk_mult_3": 1.0 379 | "oilcan_car_rel_mult_3": 1.0 380 | "oilcan_mod_rel_mult_3": 1.0 381 | "oilcan_mod_ix_mult_3": 1.0 382 | "oilcan_mod_ratio_mult_3": 1.0 383 | "oilcan_fb_mult_3": 1.0 384 | "oilcan_fold_mult_3": 1.0 385 | "oilcan_headroom_mult_3": 1.0 386 | "oilcan_gain_mult_3": 1.0 387 | "oilcan_routing_mult_3": 1.0 388 | "oilcan_level_mult_3": 1.0 389 | "oilcan_trig_3": 0 390 | "oilcan_copy_multipliers_3": 0 391 | "oilcan_paste_multipliers_3": 0 392 | "oilcan_copy_timbre_3": 0 393 | "oilcan_paste_timbre_3": 0 394 | "oilcan_target_file_3": /home/we/dust/data/oilcan/default-1.oilkit 395 | "oilcan_save_kit_3": 0 396 | "oilcan_load_kit_3": 0 397 | "oilcan_save_new_3": 0 398 | "oilcan_oilcan_4": 124 399 | "oilcan_selected_timbre_4": 1 400 | "oilcan_freq_1_4": 48.267172000962 401 | "oilcan_sweep_time_1_4": 1.1255069395027 402 | "oilcan_sweep_ix_1_4": 0.04 403 | "oilcan_atk_1_4": 0.0 404 | "oilcan_car_rel_1_4": 0.23630446040355 405 | "oilcan_mod_rel_1_4": 20.812386925025 406 | "oilcan_mod_ix_1_4": 0.036282587176292 407 | "oilcan_mod_ratio_1_4": 1.0 408 | "oilcan_fb_1_4": 10.0 409 | "oilcan_fold_1_4": 0.0 410 | "oilcan_headroom_1_4": 1.0 411 | "oilcan_gain_1_4": 2.251162614549 412 | "oilcan_routing_1_4": 0.1 413 | "oilcan_level_1_4": 0.89596000511171 414 | "oilcan_freq_2_4": 216.73021153806 415 | "oilcan_sweep_time_2_4": 14.179498568211 416 | "oilcan_sweep_ix_2_4": 0.5 417 | "oilcan_atk_2_4": 0.0 418 | "oilcan_car_rel_2_4": 0.075995700204734 419 | "oilcan_mod_rel_2_4": 77.888329239103 420 | "oilcan_mod_ix_2_4": 0.42110774187376 421 | "oilcan_mod_ratio_2_4": 0.001 422 | "oilcan_fb_2_4": 10.0 423 | "oilcan_fold_2_4": 0.023401477535407 424 | "oilcan_headroom_2_4": 1.0 425 | "oilcan_gain_2_4": 1.0 426 | "oilcan_routing_2_4": 0.51 427 | "oilcan_level_2_4": 1.0 428 | "oilcan_freq_3_4": 6465.9180308895 429 | "oilcan_sweep_time_3_4": 0.1 430 | "oilcan_sweep_ix_3_4": 0.0 431 | "oilcan_atk_3_4": 0.000761421320832 432 | "oilcan_car_rel_3_4": 0.11215620475911 433 | "oilcan_mod_rel_3_4": 110.89882083825 434 | "oilcan_mod_ix_3_4": 0.39549781603158 435 | "oilcan_mod_ratio_3_4": 30.101755754031 436 | "oilcan_fb_3_4": 4.2999158623596 437 | "oilcan_fold_3_4": 16.827133959804 438 | "oilcan_headroom_3_4": 0.57538847271996 439 | "oilcan_gain_3_4": 0.28629857106017 440 | "oilcan_routing_3_4": 0.19 441 | "oilcan_level_3_4": 1.0 442 | "oilcan_freq_4_4": 6181.9679756622 443 | "oilcan_sweep_time_4_4": 0.1 444 | "oilcan_sweep_ix_4_4": 0.0 445 | "oilcan_atk_4_4": 0.028159374698623 446 | "oilcan_car_rel_4_4": 0.13956080881699 447 | "oilcan_mod_rel_4_4": 113.21244853834 448 | "oilcan_mod_ix_4_4": 0.33426240086974 449 | "oilcan_mod_ratio_4_4": 30.101755754031 450 | "oilcan_fb_4_4": 4.2999158623596 451 | "oilcan_fold_4_4": 16.827133959804 452 | "oilcan_headroom_4_4": 0.497914356027 453 | "oilcan_gain_4_4": 0.28629857106017 454 | "oilcan_routing_4_4": 0.19 455 | "oilcan_level_4_4": 1.0 456 | "oilcan_freq_5_4": 243.47364212317 457 | "oilcan_sweep_time_5_4": 43.52785136081 458 | "oilcan_sweep_ix_5_4": 0.0099999999999991 459 | "oilcan_atk_5_4": 0.0 460 | "oilcan_car_rel_5_4": 0.083526229522557 461 | "oilcan_mod_rel_5_4": 31.562544299578 462 | "oilcan_mod_ix_5_4": 0.22756640205149 463 | "oilcan_mod_ratio_5_4": 4.7029457589911 464 | "oilcan_fb_5_4": 3.3426240086974 465 | "oilcan_fold_5_4": 0.0 466 | "oilcan_headroom_5_4": 0.41298740960665 467 | "oilcan_gain_5_4": 1.0 468 | "oilcan_routing_5_4": 0.315 469 | "oilcan_level_5_4": 1.0 470 | "oilcan_freq_6_4": 778.56532911316 471 | "oilcan_sweep_time_6_4": 0.1 472 | "oilcan_sweep_ix_6_4": 0.04 473 | "oilcan_atk_6_4": 0.0 474 | "oilcan_car_rel_6_4": 0.066632716015893 475 | "oilcan_mod_rel_6_4": 170.67825684905 476 | "oilcan_mod_ix_6_4": 0.75122731071337 477 | "oilcan_mod_ratio_6_4": 3.5722947678015 478 | "oilcan_fb_6_4": 0.0 479 | "oilcan_fold_6_4": 1.210364029648 480 | "oilcan_headroom_6_4": 1.0 481 | "oilcan_gain_6_4": 1.0 482 | "oilcan_routing_6_4": 0.1 483 | "oilcan_level_6_4": 0.53120852876635 484 | "oilcan_freq_7_4": 127.09959126288 485 | "oilcan_sweep_time_7_4": 100.0 486 | "oilcan_sweep_ix_7_4": 0.01 487 | "oilcan_atk_7_4": 0.0 488 | "oilcan_car_rel_7_4": 0.075995700204734 489 | "oilcan_mod_rel_7_4": 185.19584764648 490 | "oilcan_mod_ix_7_4": 0.10608378159998 491 | "oilcan_mod_ratio_7_4": 3.9194612216259 492 | "oilcan_fb_7_4": 10.0 493 | "oilcan_fold_7_4": 0.0 494 | "oilcan_headroom_7_4": 1.0 495 | "oilcan_gain_7_4": 1.0 496 | "oilcan_routing_7_4": 0.1 497 | "oilcan_level_7_4": 1.0 498 | "oilcan_freq_mult_4": 1.0 499 | "oilcan_sweep_time_mult_4": 1.0 500 | "oilcan_sweep_ix_mult_4": 1.0 501 | "oilcan_atk_mult_4": 1.0 502 | "oilcan_car_rel_mult_4": 1.0 503 | "oilcan_mod_rel_mult_4": 1.0 504 | "oilcan_mod_ix_mult_4": 1.0 505 | "oilcan_mod_ratio_mult_4": 1.0 506 | "oilcan_fb_mult_4": 1.0 507 | "oilcan_fold_mult_4": 1.0 508 | "oilcan_headroom_mult_4": 1.0 509 | "oilcan_gain_mult_4": 1.0 510 | "oilcan_routing_mult_4": 1.0 511 | "oilcan_level_mult_4": 1.0 512 | "oilcan_trig_4": 0 513 | "oilcan_copy_multipliers_4": 0 514 | "oilcan_paste_multipliers_4": 0 515 | "oilcan_copy_timbre_4": 0 516 | "oilcan_paste_timbre_4": 0 517 | "oilcan_target_file_4": /home/we/dust/data/oilcan/default-1.oilkit 518 | "oilcan_save_kit_4": 0 519 | "oilcan_load_kit_4": 0 520 | "oilcan_save_new_4": 0 521 | "nb_ansible__1": 3 522 | "nb_ansible_portomento_1": 0.0 523 | "nb_ansible_freq_1": 440.0 524 | "nb_ansible_tune_1": 0 525 | "nb_ansible__2": 3 526 | "nb_ansible_portomento_2": 0.0 527 | "nb_ansible_freq_2": 440.0 528 | "nb_ansible_tune_2": 0 529 | "nb_ansible__3": 3 530 | "nb_ansible_portomento_3": 0.0 531 | "nb_ansible_freq_3": 440.0 532 | "nb_ansible_tune_3": 0 533 | "nb_ansible__4": 3 534 | "nb_ansible_portomento_4": 0.0 535 | "nb_ansible_freq_4": 440.0 536 | "nb_ansible_tune_4": 0 537 | "nb_crow__1_2": 11 538 | "nb_crow_attack_time_1_2": 0.1 539 | "nb_crow_attack_shape_1_2": 3 540 | "nb_crow_decay_time_1_2": 1.0 541 | "nb_crow_decay_shape_1_2": 3 542 | "nb_crow_sustain_1_2": 0.75 543 | "nb_crow_release_time_1_2": 0.5 544 | "nb_crow_release_shape_1_2": 3 545 | "nb_crow_portomento_1_2": 0.0 546 | "nb_crow_legato_1_2": 1 547 | "nb_crow_freq_1_2": 440.0 548 | "nb_crow_tune_1_2": 0 549 | "nb_crow__3_4": 11 550 | "nb_crow_attack_time_3_4": 0.1 551 | "nb_crow_attack_shape_3_4": 3 552 | "nb_crow_decay_time_3_4": 1.0 553 | "nb_crow_decay_shape_3_4": 3 554 | "nb_crow_sustain_3_4": 0.75 555 | "nb_crow_release_time_3_4": 0.5 556 | "nb_crow_release_shape_3_4": 3 557 | "nb_crow_portomento_3_4": 0.0 558 | "nb_crow_legato_3_4": 1 559 | "nb_crow_freq_3_4": 440.0 560 | "nb_crow_tune_3_4": 0 561 | "nb_crow__paraphonic": 10 562 | "nb_crow_attack_time_paraphonic": 0.1 563 | "nb_crow_attack_shape_paraphonic": 3 564 | "nb_crow_decay_time_paraphonic": 1.0 565 | "nb_crow_decay_shape_paraphonic": 3 566 | "nb_crow_sustain_paraphonic": 0.75 567 | "nb_crow_release_time_paraphonic": 0.5 568 | "nb_crow_release_shape_paraphonic": 3 569 | "nb_crow_legato_paraphonic": 1 570 | "nb_crow_freq_paraphonic": 440.0 571 | "nb_crow_tune_paraphonic": 0 572 | "doubledecker_group": 95 573 | "doubledecker_voices": 5 574 | "doubledecker_mix": 0.4921875 575 | "doubledecker_amp": 0.20739677970568 576 | "doubledecker_pan": 0.0 577 | "doubledecker_detune": 0.015625 578 | "doubledecker_drift": 0 579 | "doubledecker_pitch_env": 0.0035156249999995 580 | "doubledecker_portomento": 0.0 581 | "doubledecker_brilliance": 0.0 582 | "doubledecker_resonance": -0.203125 583 | "doubledecker_pitch_ratio_1": 5 584 | "doubledecker_layer_lfo_freq_1": 9.0629453417426 585 | "doubledecker_pwm_1": 0.1 586 | "doubledecker_pw_1": 0.465625 587 | "doubledecker_shape_1": 3 588 | "doubledecker_noise_1": 0.0 589 | "doubledecker_hp_freq_1": 96.397691618254 590 | "doubledecker_hp_res_1": 0.3515625 591 | "doubledecker_lp_freq_1": 737.96620527369 592 | "doubledecker_lp_res_1": 0.2421875 593 | "doubledecker_filter_init_1": -0.015625 594 | "doubledecker_filter_attack_level_1": 0.015625 595 | "doubledecker_filter_attack_1": 7.2955374413786 596 | "doubledecker_filter_decay_1": 5.2727039711706 597 | "doubledecker_filter_release_1": 1.2190682474257 598 | "doubledecker_filt_1": 1 599 | "doubledecker_sine_1": 0 600 | "doubledecker_amp_attack_1": 0.66668155439846 601 | "doubledecker_amp_decay_1": 1.0 602 | "doubledecker_amp_sustain_1": 0.5 603 | "doubledecker_amp_release_1": 0.78297961390574 604 | "doubledecker_velocity_to_filter_1": 0.2 605 | "doubledecker_velocity_to_amp_1": 0.1640625 606 | "doubledecker_pressure_to_filter_1": 0.625 607 | "doubledecker_pressure_to_amp_1": 0.9921875 608 | "doubledecker_filter_keyfollow_lo_1": 0.0 609 | "doubledecker_filter_keyfollow_hi_1": 0.21875 610 | "doubledecker_amp_keyfollow_lo_1": 0.0 611 | "doubledecker_amp_keyfollow_hi_1": 0.0 612 | "doubledecker_layer_amp_1": 1.0 613 | "doubledecker_invert_hpf_1": 3 614 | "doubledecker_pitch_ratio_2": 6 615 | "doubledecker_layer_lfo_freq_2": 6.1724798505808 616 | "doubledecker_pwm_2": 0.5 617 | "doubledecker_pw_2": 0.321875 618 | "doubledecker_shape_2": 3 619 | "doubledecker_noise_2": 0.0 620 | "doubledecker_hp_freq_2": 149.50774741589 621 | "doubledecker_hp_res_2": 0.203125 622 | "doubledecker_lp_freq_2": 268.92988182061 623 | "doubledecker_lp_res_2": 0.2734375 624 | "doubledecker_filter_init_2": 0.0 625 | "doubledecker_filter_attack_level_2": 0.4375 626 | "doubledecker_filter_attack_2": 0.48496158125112 627 | "doubledecker_filter_decay_2": 1.1643406615517 628 | "doubledecker_filter_release_2": 0.036098890844914 629 | "doubledecker_filt_2": 1 630 | "doubledecker_sine_2": 0 631 | "doubledecker_amp_attack_2": 0.20242965576891 632 | "doubledecker_amp_decay_2": 1.0 633 | "doubledecker_amp_sustain_2": 0.5 634 | "doubledecker_amp_release_2": 1.0 635 | "doubledecker_velocity_to_filter_2": 0.2 636 | "doubledecker_velocity_to_amp_2": 0.1484375 637 | "doubledecker_pressure_to_filter_2": 0.484375 638 | "doubledecker_pressure_to_amp_2": 0.9921875 639 | "doubledecker_filter_keyfollow_lo_2": 0.0 640 | "doubledecker_filter_keyfollow_hi_2": 0.671875 641 | "doubledecker_amp_keyfollow_lo_2": 0.0 642 | "doubledecker_amp_keyfollow_hi_2": 0.0 643 | "doubledecker_layer_amp_2": 1.0 644 | "doubledecker_invert_hpf_2": 3 645 | "doubledecker_lfo_shape": 1 646 | "doubledecker_lfo_rate": 5.0141827055289 647 | "doubledecker_lfo_to_freq": 0.0 648 | "doubledecker_lfo_to_filter": 0.054099866662192 649 | "doubledecker_lfo_to_amp": 0.0 650 | "doubledecker_lfo_pres_to_freq": 0.43417377003384 651 | "doubledecker_lfo_pres_to_vibrato": 0.071214183687377 652 | "doubledecker_lfo_pres_to_filt": 0.11392059253463 653 | "doubledecker_lfo_pres_to_amp": 0.0 654 | "doubledecker_lfo_sync": 2 655 | "doubledecker_lfo_scope": 1 656 | "doubledecker_preset": - 657 | "doubledecker_preset_num": 1 658 | "doubledecker_layer_lfo_min": 0.7 659 | "doubledecker_layer_lfo_max": 70 660 | "doubledecker_global_lfo_min": 0.7 661 | "doubledecker_global_lfo_max": 25 662 | "doubledecker_attack_max": 1 663 | "doubledecker_release_max": 15 664 | "plaits_1_group": 22 665 | "plaits_style_1": 1 666 | "plaits_gate_1": 0 667 | "plaits_note_1": 36 668 | "plaits_model_1": 14 669 | "plaits_decay_1": 0.5 670 | "plaits_a_1": 0.05 671 | "plaits_d_1": 0.5 672 | "plaits_s_1": 0.5 673 | "plaits_r_1": 0.5 674 | "plaits_harmonics_1": 0.3 675 | "plaits_timbre_1": 0.3 676 | "plaits_morph_1": 0.3 677 | "plaits_amp_1": 0.2 678 | "plaits_aux_1": 0 679 | "plaits_fm_mod_1": 0 680 | "plaits_timb_mod_1": 0 681 | "plaits_morph_mod_1": 0 682 | "plaits_lpg_color_1": 0.5 683 | "plaits_gain_1": 1.0 684 | "plaits_pan_1": 0.0 685 | "plaits_slew_1": 0 686 | "plaits_2_group": 22 687 | "plaits_style_2": 1 688 | "plaits_gate_2": 0 689 | "plaits_note_2": 36 690 | "plaits_model_2": 14 691 | "plaits_decay_2": 0.5 692 | "plaits_a_2": 0.05 693 | "plaits_d_2": 0.5 694 | "plaits_s_2": 0.5 695 | "plaits_r_2": 0.5 696 | "plaits_harmonics_2": 0.3 697 | "plaits_timbre_2": 0.3 698 | "plaits_morph_2": 0.3 699 | "plaits_amp_2": 0.2 700 | "plaits_aux_2": 0 701 | "plaits_fm_mod_2": 0 702 | "plaits_timb_mod_2": 0 703 | "plaits_morph_mod_2": 0 704 | "plaits_lpg_color_2": 0.5 705 | "plaits_gain_2": 1.0 706 | "plaits_pan_2": 0.0 707 | "plaits_slew_2": 0 708 | "plaits_3_group": 22 709 | "plaits_style_3": 1 710 | "plaits_gate_3": 0 711 | "plaits_note_3": 36 712 | "plaits_model_3": 14 713 | "plaits_decay_3": 0.5 714 | "plaits_a_3": 0.05 715 | "plaits_d_3": 0.5 716 | "plaits_s_3": 0.5 717 | "plaits_r_3": 0.5 718 | "plaits_harmonics_3": 0.3 719 | "plaits_timbre_3": 0.3 720 | "plaits_morph_3": 0.3 721 | "plaits_amp_3": 0.2 722 | "plaits_aux_3": 0 723 | "plaits_fm_mod_3": 0 724 | "plaits_timb_mod_3": 0 725 | "plaits_morph_mod_3": 0 726 | "plaits_lpg_color_3": 0.5 727 | "plaits_gain_3": 1.0 728 | "plaits_pan_3": 0.0 729 | "plaits_slew_3": 0 730 | "plaits_4_group": 22 731 | "plaits_style_4": 1 732 | "plaits_gate_4": 0 733 | "plaits_note_4": 36 734 | "plaits_model_4": 14 735 | "plaits_decay_4": 0.5 736 | "plaits_a_4": 0.05 737 | "plaits_d_4": 0.5 738 | "plaits_s_4": 0.5 739 | "plaits_r_4": 0.5 740 | "plaits_harmonics_4": 0.3 741 | "plaits_timbre_4": 0.3 742 | "plaits_morph_4": 0.3 743 | "plaits_amp_4": 0.2 744 | "plaits_aux_4": 0 745 | "plaits_fm_mod_4": 0 746 | "plaits_timb_mod_4": 0 747 | "plaits_morph_mod_4": 0 748 | "plaits_lpg_color_4": 0.5 749 | "plaits_gain_4": 1.0 750 | "plaits_pan_4": 0.0 751 | "plaits_slew_4": 0 752 | "nb_jf_n_1": 1 753 | "nb_jf_slew_1": 0 754 | "nb_jf_n_2": 1 755 | "nb_jf_slew_2": 0 756 | "nb_jf_n_3": 1 757 | "nb_jf_slew_3": 0 758 | "nb_jf_n_4": 1 759 | "nb_jf_slew_4": 0 760 | "nb_jf_n_5": 1 761 | "nb_jf_slew_5": 0 762 | "nb_jf_n_6": 1 763 | "nb_jf_slew_6": 0 764 | "nb_jf_unison": 1 765 | "nb_jf_unison_detune": 0 766 | "midi_voice_1_1": 2 767 | "midi_chan_1_1": 1 768 | "midi_modulation_cc_1_1": 72 769 | "midi_voice_2_1": 2 770 | "midi_chan_2_1": 1 771 | "midi_modulation_cc_2_1": 72 772 | "midi_voice_17_1": 2 773 | "midi_chan_17_1": 1 774 | "midi_modulation_cc_17_1": 72 775 | "nb_passencore": 4 776 | "nb_passencore_root": 12 777 | "nb_passencore_scale": 1 778 | "nb_passencore_voice": 1 779 | "nb_passencore_voice_hidden_string": 780 | "nb_w_syn": 11 781 | "nb_w/style": 1 782 | "nb_w/curve": 5.0 783 | "nb_w/ramp": 0.0 784 | "nb_w/fm_index": 1.0 785 | "nb_w/fm_env": 1.0 786 | "nb_w/fm_num": 1 787 | "nb_w/fm_denom": 1 788 | "nb_w/lpg_time": 0.0 789 | "nb_w/lpg_symmetry": -5.0 790 | "nb_sentinel_param": 0 791 | "doubledecker_grid": 4 792 | "doubledecker_grid_mode": 1 793 | "doubledecker_dx": 1 794 | "doubledecker_dy": 5 795 | "doubledecker_grid_lowest": 24 796 | "mod depths": 65 797 | "matrix_depth_1": 0.0 798 | "matrix_depth_1_cell": 799 | "matrix_depth_2": 0.0 800 | "matrix_depth_2_cell": 801 | "matrix_depth_3": 0.0 802 | "matrix_depth_3_cell": 803 | "matrix_depth_4": 0.0 804 | "matrix_depth_4_cell": 805 | "matrix_depth_5": 0.0 806 | "matrix_depth_5_cell": 807 | "matrix_depth_6": 0.0 808 | "matrix_depth_6_cell": 809 | "matrix_depth_7": 0.0 810 | "matrix_depth_7_cell": 811 | "matrix_depth_8": 0.0 812 | "matrix_depth_8_cell": 813 | "matrix_depth_9": 0.0 814 | "matrix_depth_9_cell": 815 | "matrix_depth_10": 0.0 816 | "matrix_depth_10_cell": 817 | "matrix_depth_11": 0.0 818 | "matrix_depth_11_cell": 819 | "matrix_depth_12": 0.0 820 | "matrix_depth_12_cell": 821 | "matrix_depth_13": 0.0 822 | "matrix_depth_13_cell": 823 | "matrix_depth_14": 0.0 824 | "matrix_depth_14_cell": 825 | "matrix_depth_15": 0.0 826 | "matrix_depth_15_cell": 827 | "matrix_depth_16": 0.0 828 | "matrix_depth_16_cell": 829 | "matrix_connect_1": 0 830 | "matrix_connect_1_cell": 831 | "matrix_connect_2": 0 832 | "matrix_connect_2_cell": 833 | "matrix_connect_3": 0 834 | "matrix_connect_3_cell": 835 | "matrix_connect_4": 0 836 | "matrix_connect_4_cell": 837 | "matrix_connect_5": 0 838 | "matrix_connect_5_cell": 839 | "matrix_connect_6": 0 840 | "matrix_connect_6_cell": 841 | "matrix_connect_7": 0 842 | "matrix_connect_7_cell": 843 | "matrix_connect_8": 0 844 | "matrix_connect_8_cell": 845 | "matrix_connect_9": 0 846 | "matrix_connect_9_cell": 847 | "matrix_connect_10": 0 848 | "matrix_connect_10_cell": 849 | "matrix_connect_11": 0 850 | "matrix_connect_11_cell": 851 | "matrix_connect_12": 0 852 | "matrix_connect_12_cell": 853 | "matrix_connect_13": 0 854 | "matrix_connect_13_cell": 855 | "matrix_connect_14": 0 856 | "matrix_connect_14_cell": 857 | "matrix_connect_15": 0 858 | "matrix_connect_15_cell": 859 | "matrix_connect_16": 0 860 | "matrix_connect_16_cell": 861 | "tg_root": 12 862 | "tg_scale": 1 863 | "tg_voicegroup_1": 6 864 | "tg_voice_1": 1 865 | "tg_voice_1_hidden_string": 866 | "tg_note_1": 36 867 | "tg_gate_1": 0 868 | "tg_length_1": 0.3 869 | "tg_voicegroup_2": 6 870 | "tg_voice_2": 1 871 | "tg_voice_2_hidden_string": 872 | "tg_note_2": 36 873 | "tg_gate_2": 0 874 | "tg_length_2": 0.3 875 | "tg_voicegroup_3": 6 876 | "tg_voice_3": 1 877 | "tg_voice_3_hidden_string": 878 | "tg_note_3": 36 879 | "tg_gate_3": 0 880 | "tg_length_3": 0.3 881 | "tg_voicegroup_4": 6 882 | "tg_voice_4": 1 883 | "tg_voice_4_hidden_string": 884 | "tg_note_4": 36 885 | "tg_gate_4": 0 886 | "tg_length_4": 0.3 887 | "nb in midi source": 1 888 | "nb in pitch bend range": 12 889 | "nb_in_voice": 1 890 | "nb_in_voice_hidden_string": 891 | "nb_in_pressure_1": 1 892 | "nb_in_pressure_2": 1 893 | "nb_in_pressure_2_sens": 0.0 894 | "rhythm 1": 6 895 | "tk_1_rhythm_active": 1 896 | "tk_1_div": 7 897 | "tk_1_swing": 50 898 | "tk_1_rhythm_length": 8 899 | "tk_1_rhythm_fill": 1 900 | "tk_1_rhythm_offset": 0 901 | "rhythm 2": 6 902 | "tk_2_rhythm_active": 1 903 | "tk_2_div": 7 904 | "tk_2_swing": 50 905 | "tk_2_rhythm_length": 8 906 | "tk_2_rhythm_fill": 1 907 | "tk_2_rhythm_offset": 0 908 | "rhythm 3": 6 909 | "tk_3_rhythm_active": 1 910 | "tk_3_div": 7 911 | "tk_3_swing": 50 912 | "tk_3_rhythm_length": 8 913 | "tk_3_rhythm_fill": 1 914 | "tk_3_rhythm_offset": 0 915 | "rhythm 4": 6 916 | "tk_4_rhythm_active": 1 917 | "tk_4_div": 7 918 | "tk_4_swing": 50 919 | "tk_4_rhythm_length": 8 920 | "tk_4_rhythm_fill": 1 921 | "tk_4_rhythm_offset": 0 922 | "lfo 1": 6 923 | "tk_1_clocked": 0 924 | "tk_1_clocked_period": 7 925 | "tk_1_unclocked_period": 1.0 926 | "tk_1_lfo_bipolar": 0 927 | "tk_1_shape": 1 928 | "tk_1_lfo_width": 0.5 929 | "lfo 2": 6 930 | "tk_2_clocked": 0 931 | "tk_2_clocked_period": 7 932 | "tk_2_unclocked_period": 1.0 933 | "tk_2_lfo_bipolar": 0 934 | "tk_2_shape": 1 935 | "tk_2_lfo_width": 0.5 936 | "lfo 3": 6 937 | "tk_3_clocked": 0 938 | "tk_3_clocked_period": 7 939 | "tk_3_unclocked_period": 1.0 940 | "tk_3_lfo_bipolar": 0 941 | "tk_3_shape": 1 942 | "tk_3_lfo_width": 0.5 943 | "lfo 4": 6 944 | "tk_4_clocked": 0 945 | "tk_4_clocked_period": 7 946 | "tk_4_unclocked_period": 1.0 947 | "tk_4_lfo_bipolar": 0 948 | "tk_4_shape": 1 949 | "tk_4_lfo_width": 0.5 950 | "sequence 1": 23 951 | "tk_1_seq_pos": 1 952 | "tk_1_seq_active": 1 953 | "tk_1_seq_length": 4 954 | "tk_1_seq_shred": 0 955 | "tk_1_seq_zero": 0 956 | "tk_1_val_1": 0 957 | "tk_1_val_2": 0 958 | "tk_1_val_3": 0 959 | "tk_1_val_4": 0 960 | "tk_1_val_5": 0 961 | "tk_1_val_6": 0 962 | "tk_1_val_7": 0 963 | "tk_1_val_8": 0 964 | "tk_1_val_9": 0 965 | "tk_1_val_10": 0 966 | "tk_1_val_11": 0 967 | "tk_1_val_12": 0 968 | "tk_1_val_13": 0 969 | "tk_1_val_14": 0 970 | "tk_1_val_15": 0 971 | "tk_1_val_16": 0 972 | "sequence 2": 23 973 | "tk_2_seq_pos": 1 974 | "tk_2_seq_active": 1 975 | "tk_2_seq_length": 4 976 | "tk_2_seq_shred": 0 977 | "tk_2_seq_zero": 0 978 | "tk_2_val_1": 0 979 | "tk_2_val_2": 0 980 | "tk_2_val_3": 0 981 | "tk_2_val_4": 0 982 | "tk_2_val_5": 0 983 | "tk_2_val_6": 0 984 | "tk_2_val_7": 0 985 | "tk_2_val_8": 0 986 | "tk_2_val_9": 0 987 | "tk_2_val_10": 0 988 | "tk_2_val_11": 0 989 | "tk_2_val_12": 0 990 | "tk_2_val_13": 0 991 | "tk_2_val_14": 0 992 | "tk_2_val_15": 0 993 | "tk_2_val_16": 0 994 | "sequence 3": 23 995 | "tk_3_seq_pos": 1 996 | "tk_3_seq_active": 1 997 | "tk_3_seq_length": 4 998 | "tk_3_seq_shred": 0 999 | "tk_3_seq_zero": 0 1000 | "tk_3_val_1": 0 1001 | "tk_3_val_2": 0 1002 | "tk_3_val_3": 0 1003 | "tk_3_val_4": 0 1004 | "tk_3_val_5": 0 1005 | "tk_3_val_6": 0 1006 | "tk_3_val_7": 0 1007 | "tk_3_val_8": 0 1008 | "tk_3_val_9": 0 1009 | "tk_3_val_10": 0 1010 | "tk_3_val_11": 0 1011 | "tk_3_val_12": 0 1012 | "tk_3_val_13": 0 1013 | "tk_3_val_14": 0 1014 | "tk_3_val_15": 0 1015 | "tk_3_val_16": 0 1016 | "sequence 4": 23 1017 | "tk_4_seq_pos": 1 1018 | "tk_4_seq_active": 1 1019 | "tk_4_seq_length": 4 1020 | "tk_4_seq_shred": 0 1021 | "tk_4_seq_zero": 0 1022 | "tk_4_val_1": 0 1023 | "tk_4_val_2": 0 1024 | "tk_4_val_3": 0 1025 | "tk_4_val_4": 0 1026 | "tk_4_val_5": 0 1027 | "tk_4_val_6": 0 1028 | "tk_4_val_7": 0 1029 | "tk_4_val_8": 0 1030 | "tk_4_val_9": 0 1031 | "tk_4_val_10": 0 1032 | "tk_4_val_11": 0 1033 | "tk_4_val_12": 0 1034 | "tk_4_val_13": 0 1035 | "tk_4_val_14": 0 1036 | "tk_4_val_15": 0 1037 | "tk_4_val_16": 0 1038 | "macro 1": 2 1039 | "tk_1_macro_active": 1 1040 | "tk_1_macro_value": 0 1041 | "macro 2": 2 1042 | "tk_2_macro_active": 1 1043 | "tk_2_macro_value": 0 1044 | "macro 3": 2 1045 | "tk_3_macro_active": 1 1046 | "tk_3_macro_value": 0 1047 | "macro 4": 2 1048 | "tk_4_macro_active": 1 1049 | "tk_4_macro_value": 0 1050 | "cyrene_version": 1051 | "cy_play": 0 1052 | "cy_pattern_length": 16 1053 | "cy_grid_resolution": 3 1054 | "cy_shuffle_basis": 1 1055 | "cy_shuffle_feel": 1 1056 | "cy_swing_amount": 0 1057 | "cy_grids_pattern_x": 128 1058 | "cy_grids_pattern_y": 128 1059 | "cy_pattern_chaos": 10 1060 | "Kick": 5 1061 | "cy_1_density": 50 1062 | "cy_1_euclidean_enabled": 1 1063 | "cy_1_euclidean_length": 8 1064 | "cy_1_euclidean_trigs": 0 1065 | "cy_1_euclidean_rotation": 0 1066 | "Snare": 5 1067 | "cy_2_density": 50 1068 | "cy_2_euclidean_enabled": 1 1069 | "cy_2_euclidean_length": 8 1070 | "cy_2_euclidean_trigs": 0 1071 | "cy_2_euclidean_rotation": 0 1072 | "Hi-Hat": 5 1073 | "cy_3_density": 50 1074 | "cy_3_euclidean_enabled": 1 1075 | "cy_3_euclidean_length": 8 1076 | "cy_3_euclidean_trigs": 0 1077 | "cy_3_euclidean_rotation": 0 1078 | "Track 4": 5 1079 | "cy_4_density": 50 1080 | "cy_4_euclidean_enabled": 1 1081 | "cy_4_euclidean_length": 8 1082 | "cy_4_euclidean_trigs": 0 1083 | "cy_4_euclidean_rotation": 0 1084 | "Track 5": 5 1085 | "cy_5_density": 50 1086 | "cy_5_euclidean_enabled": 1 1087 | "cy_5_euclidean_length": 8 1088 | "cy_5_euclidean_trigs": 0 1089 | "cy_5_euclidean_rotation": 0 1090 | "Track 6": 5 1091 | "cy_6_density": 50 1092 | "cy_6_euclidean_enabled": 1 1093 | "cy_6_euclidean_length": 8 1094 | "cy_6_euclidean_trigs": 0 1095 | "cy_6_euclidean_rotation": 0 1096 | "Track 7": 5 1097 | "cy_7_density": 50 1098 | "cy_7_euclidean_enabled": 1 1099 | "cy_7_euclidean_length": 8 1100 | "cy_7_euclidean_trigs": 0 1101 | "cy_7_euclidean_rotation": 0 1102 | "MIDI": 15 1103 | "cy_midi_out": 1 1104 | "cy_1_midi_note": 36 1105 | "cy_1_midi_chan": 1 1106 | "cy_2_midi_note": 38 1107 | "cy_2_midi_chan": 1 1108 | "cy_3_midi_note": 42 1109 | "cy_3_midi_chan": 1 1110 | "cy_4_midi_note": 46 1111 | "cy_4_midi_chan": 1 1112 | "cy_5_midi_note": 70 1113 | "cy_5_midi_chan": 1 1114 | "cy_6_midi_note": 37 1115 | "cy_6_midi_chan": 1 1116 | "cy_7_midi_note": 63 1117 | "cy_7_midi_chan": 1 1118 | "Crow": 20 1119 | "cy_crow_out": 1 1120 | "cy_crow_in": 1 1121 | "cy_crow_out_1_track": 1 1122 | "cy_crow_out_1_mode": 3 1123 | "cy_crow_out_1_attack": 0.03 1124 | "cy_crow_out_1_release": 0.3 1125 | "cy_crow_out_2_track": 2 1126 | "cy_crow_out_2_mode": 3 1127 | "cy_crow_out_2_attack": 0.03 1128 | "cy_crow_out_2_release": 0.3 1129 | "cy_crow_out_3_track": 3 1130 | "cy_crow_out_3_mode": 3 1131 | "cy_crow_out_3_attack": 0.03 1132 | "cy_crow_out_3_release": 0.3 1133 | "cy_crow_out_4_track": 4 1134 | "cy_crow_out_4_mode": 3 1135 | "cy_crow_out_4_attack": 0.03 1136 | "cy_crow_out_4_release": 0.3 1137 | "cy_crow_in_1_param": 1 1138 | "cy_crow_in_2_param": 1 1139 | "crow out 1": 9 1140 | "ck_1_mode": 1 1141 | "ck_1_pulse_len": 0.01 1142 | "ck_1_gate": 0 1143 | "ck_1_voltage": 0.0 1144 | "ck_1_resolution": 0.1 1145 | "ck_1_note": 48 1146 | "ck_1_tuning": 440.0 1147 | "ck_1_scale": 1 1148 | "crow out 2": 9 1149 | "ck_2_mode": 1 1150 | "ck_2_pulse_len": 0.01 1151 | "ck_2_gate": 0 1152 | "ck_2_voltage": 0.0 1153 | "ck_2_resolution": 0.1 1154 | "ck_2_note": 48 1155 | "ck_2_tuning": 440.0 1156 | "ck_2_scale": 1 1157 | "crow out 3": 9 1158 | "ck_3_mode": 1 1159 | "ck_3_pulse_len": 0.01 1160 | "ck_3_gate": 0 1161 | "ck_3_voltage": 0.0 1162 | "ck_3_resolution": 0.1 1163 | "ck_3_note": 48 1164 | "ck_3_tuning": 440.0 1165 | "ck_3_scale": 1 1166 | "crow out 4": 9 1167 | "ck_4_mode": 1 1168 | "ck_4_pulse_len": 0.01 1169 | "ck_4_gate": 0 1170 | "ck_4_voltage": 0.0 1171 | "ck_4_resolution": 0.1 1172 | "ck_4_note": 48 1173 | "ck_4_tuning": 440.0 1174 | "ck_4_scale": 1 1175 | "nbout_chan_1": 1 1176 | "nbout_chan_1_hidden_string": 1177 | -------------------------------------------------------------------------------- /lib/preset/fanfare.pset: -------------------------------------------------------------------------------- 1 | -- doubledecker 2 | "LEVELS": 9 3 | "REVERB": 11 4 | "rev_eng_input": -10.0 5 | "rev_cut_input": -10.0 6 | "rev_monitor_input": -inf 7 | "rev_tape_input": -inf 8 | "rev_return_level": -9.6432746655329e-16 9 | "rev_pre_delay": 60.0 10 | "rev_lf_fc": 200.0 11 | "rev_low_time": 6.0 12 | "rev_mid_time": 6.0 13 | "rev_hf_damping": 6000.0 14 | "COMPRESSOR": 8 15 | "comp_mix": 1 16 | "comp_ratio": 4.0 17 | "comp_threshold": -18.0 18 | "comp_attack": 5.0 19 | "comp_release": 50.0 20 | "comp_pre_gain": 0.0 21 | "comp_post_gain": 9.0 22 | "SOFTCUT": 3 23 | "cut_input_adc": -9.6432746655329e-16 24 | "cut_input_eng": -9.6432746655329e-16 25 | "cut_input_tape": -inf 26 | "CLOCK": 9 27 | "midi source": 2 28 | "bend range": 12 29 | "oilcan_oilcan_1": 124 30 | "oilcan_selected_timbre_1": 1 31 | "oilcan_freq_1_1": 48.267172000962 32 | "oilcan_sweep_time_1_1": 1.1255069395027 33 | "oilcan_sweep_ix_1_1": 0.04 34 | "oilcan_atk_1_1": 0.0 35 | "oilcan_car_rel_1_1": 0.23630446040355 36 | "oilcan_mod_rel_1_1": 20.812386925025 37 | "oilcan_mod_ix_1_1": 0.036282587176292 38 | "oilcan_mod_ratio_1_1": 1.0 39 | "oilcan_fb_1_1": 10.0 40 | "oilcan_fold_1_1": 0.0 41 | "oilcan_headroom_1_1": 1.0 42 | "oilcan_gain_1_1": 2.251162614549 43 | "oilcan_routing_1_1": 0.1 44 | "oilcan_level_1_1": 0.89596000511171 45 | "oilcan_freq_2_1": 216.73021153806 46 | "oilcan_sweep_time_2_1": 14.179498568211 47 | "oilcan_sweep_ix_2_1": 0.5 48 | "oilcan_atk_2_1": 0.0 49 | "oilcan_car_rel_2_1": 0.075995700204734 50 | "oilcan_mod_rel_2_1": 77.888329239103 51 | "oilcan_mod_ix_2_1": 0.42110774187376 52 | "oilcan_mod_ratio_2_1": 0.001 53 | "oilcan_fb_2_1": 10.0 54 | "oilcan_fold_2_1": 0.023401477535407 55 | "oilcan_headroom_2_1": 1.0 56 | "oilcan_gain_2_1": 1.0 57 | "oilcan_routing_2_1": 0.51 58 | "oilcan_level_2_1": 1.0 59 | "oilcan_freq_3_1": 6465.9180308895 60 | "oilcan_sweep_time_3_1": 0.1 61 | "oilcan_sweep_ix_3_1": 0.0 62 | "oilcan_atk_3_1": 0.000761421320832 63 | "oilcan_car_rel_3_1": 0.11215620475911 64 | "oilcan_mod_rel_3_1": 110.89882083825 65 | "oilcan_mod_ix_3_1": 0.39549781603158 66 | "oilcan_mod_ratio_3_1": 30.101755754031 67 | "oilcan_fb_3_1": 4.2999158623596 68 | "oilcan_fold_3_1": 16.827133959804 69 | "oilcan_headroom_3_1": 0.57538847271996 70 | "oilcan_gain_3_1": 0.28629857106017 71 | "oilcan_routing_3_1": 0.19 72 | "oilcan_level_3_1": 1.0 73 | "oilcan_freq_4_1": 6181.9679756622 74 | "oilcan_sweep_time_4_1": 0.1 75 | "oilcan_sweep_ix_4_1": 0.0 76 | "oilcan_atk_4_1": 0.028159374698623 77 | "oilcan_car_rel_4_1": 0.13956080881699 78 | "oilcan_mod_rel_4_1": 113.21244853834 79 | "oilcan_mod_ix_4_1": 0.33426240086974 80 | "oilcan_mod_ratio_4_1": 30.101755754031 81 | "oilcan_fb_4_1": 4.2999158623596 82 | "oilcan_fold_4_1": 16.827133959804 83 | "oilcan_headroom_4_1": 0.497914356027 84 | "oilcan_gain_4_1": 0.28629857106017 85 | "oilcan_routing_4_1": 0.19 86 | "oilcan_level_4_1": 1.0 87 | "oilcan_freq_5_1": 243.47364212317 88 | "oilcan_sweep_time_5_1": 43.52785136081 89 | "oilcan_sweep_ix_5_1": 0.0099999999999991 90 | "oilcan_atk_5_1": 0.0 91 | "oilcan_car_rel_5_1": 0.083526229522557 92 | "oilcan_mod_rel_5_1": 31.562544299578 93 | "oilcan_mod_ix_5_1": 0.22756640205149 94 | "oilcan_mod_ratio_5_1": 4.7029457589911 95 | "oilcan_fb_5_1": 3.3426240086974 96 | "oilcan_fold_5_1": 0.0 97 | "oilcan_headroom_5_1": 0.41298740960665 98 | "oilcan_gain_5_1": 1.0 99 | "oilcan_routing_5_1": 0.315 100 | "oilcan_level_5_1": 1.0 101 | "oilcan_freq_6_1": 778.56532911316 102 | "oilcan_sweep_time_6_1": 0.1 103 | "oilcan_sweep_ix_6_1": 0.04 104 | "oilcan_atk_6_1": 0.0 105 | "oilcan_car_rel_6_1": 0.066632716015893 106 | "oilcan_mod_rel_6_1": 170.67825684905 107 | "oilcan_mod_ix_6_1": 0.75122731071337 108 | "oilcan_mod_ratio_6_1": 3.5722947678015 109 | "oilcan_fb_6_1": 0.0 110 | "oilcan_fold_6_1": 1.210364029648 111 | "oilcan_headroom_6_1": 1.0 112 | "oilcan_gain_6_1": 1.0 113 | "oilcan_routing_6_1": 0.1 114 | "oilcan_level_6_1": 0.53120852876635 115 | "oilcan_freq_7_1": 127.09959126288 116 | "oilcan_sweep_time_7_1": 100.0 117 | "oilcan_sweep_ix_7_1": 0.01 118 | "oilcan_atk_7_1": 0.0 119 | "oilcan_car_rel_7_1": 0.075995700204734 120 | "oilcan_mod_rel_7_1": 185.19584764648 121 | "oilcan_mod_ix_7_1": 0.10608378159998 122 | "oilcan_mod_ratio_7_1": 3.9194612216259 123 | "oilcan_fb_7_1": 10.0 124 | "oilcan_fold_7_1": 0.0 125 | "oilcan_headroom_7_1": 1.0 126 | "oilcan_gain_7_1": 1.0 127 | "oilcan_routing_7_1": 0.1 128 | "oilcan_level_7_1": 1.0 129 | "oilcan_freq_mult_1": 1.0 130 | "oilcan_sweep_time_mult_1": 1.0 131 | "oilcan_sweep_ix_mult_1": 1.0 132 | "oilcan_atk_mult_1": 1.0 133 | "oilcan_car_rel_mult_1": 1.0 134 | "oilcan_mod_rel_mult_1": 1.0 135 | "oilcan_mod_ix_mult_1": 1.0 136 | "oilcan_mod_ratio_mult_1": 1.0 137 | "oilcan_fb_mult_1": 1.0 138 | "oilcan_fold_mult_1": 1.0 139 | "oilcan_headroom_mult_1": 1.0 140 | "oilcan_gain_mult_1": 1.0 141 | "oilcan_routing_mult_1": 1.0 142 | "oilcan_level_mult_1": 1.0 143 | "oilcan_trig_1": 0 144 | "oilcan_copy_multipliers_1": 0 145 | "oilcan_paste_multipliers_1": 0 146 | "oilcan_copy_timbre_1": 0 147 | "oilcan_paste_timbre_1": 0 148 | "oilcan_target_file_1": /home/we/dust/data/oilcan/default-1.oilkit 149 | "oilcan_save_kit_1": 0 150 | "oilcan_load_kit_1": 0 151 | "oilcan_save_new_1": 0 152 | "oilcan_oilcan_2": 124 153 | "oilcan_selected_timbre_2": 1 154 | "oilcan_freq_1_2": 48.267172000962 155 | "oilcan_sweep_time_1_2": 1.1255069395027 156 | "oilcan_sweep_ix_1_2": 0.04 157 | "oilcan_atk_1_2": 0.0 158 | "oilcan_car_rel_1_2": 0.23630446040355 159 | "oilcan_mod_rel_1_2": 20.812386925025 160 | "oilcan_mod_ix_1_2": 0.036282587176292 161 | "oilcan_mod_ratio_1_2": 1.0 162 | "oilcan_fb_1_2": 10.0 163 | "oilcan_fold_1_2": 0.0 164 | "oilcan_headroom_1_2": 1.0 165 | "oilcan_gain_1_2": 2.251162614549 166 | "oilcan_routing_1_2": 0.1 167 | "oilcan_level_1_2": 0.89596000511171 168 | "oilcan_freq_2_2": 216.73021153806 169 | "oilcan_sweep_time_2_2": 14.179498568211 170 | "oilcan_sweep_ix_2_2": 0.5 171 | "oilcan_atk_2_2": 0.0 172 | "oilcan_car_rel_2_2": 0.075995700204734 173 | "oilcan_mod_rel_2_2": 77.888329239103 174 | "oilcan_mod_ix_2_2": 0.42110774187376 175 | "oilcan_mod_ratio_2_2": 0.001 176 | "oilcan_fb_2_2": 10.0 177 | "oilcan_fold_2_2": 0.023401477535407 178 | "oilcan_headroom_2_2": 1.0 179 | "oilcan_gain_2_2": 1.0 180 | "oilcan_routing_2_2": 0.51 181 | "oilcan_level_2_2": 1.0 182 | "oilcan_freq_3_2": 6465.9180308895 183 | "oilcan_sweep_time_3_2": 0.1 184 | "oilcan_sweep_ix_3_2": 0.0 185 | "oilcan_atk_3_2": 0.000761421320832 186 | "oilcan_car_rel_3_2": 0.11215620475911 187 | "oilcan_mod_rel_3_2": 110.89882083825 188 | "oilcan_mod_ix_3_2": 0.39549781603158 189 | "oilcan_mod_ratio_3_2": 30.101755754031 190 | "oilcan_fb_3_2": 4.2999158623596 191 | "oilcan_fold_3_2": 16.827133959804 192 | "oilcan_headroom_3_2": 0.57538847271996 193 | "oilcan_gain_3_2": 0.28629857106017 194 | "oilcan_routing_3_2": 0.19 195 | "oilcan_level_3_2": 1.0 196 | "oilcan_freq_4_2": 6181.9679756622 197 | "oilcan_sweep_time_4_2": 0.1 198 | "oilcan_sweep_ix_4_2": 0.0 199 | "oilcan_atk_4_2": 0.028159374698623 200 | "oilcan_car_rel_4_2": 0.13956080881699 201 | "oilcan_mod_rel_4_2": 113.21244853834 202 | "oilcan_mod_ix_4_2": 0.33426240086974 203 | "oilcan_mod_ratio_4_2": 30.101755754031 204 | "oilcan_fb_4_2": 4.2999158623596 205 | "oilcan_fold_4_2": 16.827133959804 206 | "oilcan_headroom_4_2": 0.497914356027 207 | "oilcan_gain_4_2": 0.28629857106017 208 | "oilcan_routing_4_2": 0.19 209 | "oilcan_level_4_2": 1.0 210 | "oilcan_freq_5_2": 243.47364212317 211 | "oilcan_sweep_time_5_2": 43.52785136081 212 | "oilcan_sweep_ix_5_2": 0.0099999999999991 213 | "oilcan_atk_5_2": 0.0 214 | "oilcan_car_rel_5_2": 0.083526229522557 215 | "oilcan_mod_rel_5_2": 31.562544299578 216 | "oilcan_mod_ix_5_2": 0.22756640205149 217 | "oilcan_mod_ratio_5_2": 4.7029457589911 218 | "oilcan_fb_5_2": 3.3426240086974 219 | "oilcan_fold_5_2": 0.0 220 | "oilcan_headroom_5_2": 0.41298740960665 221 | "oilcan_gain_5_2": 1.0 222 | "oilcan_routing_5_2": 0.315 223 | "oilcan_level_5_2": 1.0 224 | "oilcan_freq_6_2": 778.56532911316 225 | "oilcan_sweep_time_6_2": 0.1 226 | "oilcan_sweep_ix_6_2": 0.04 227 | "oilcan_atk_6_2": 0.0 228 | "oilcan_car_rel_6_2": 0.066632716015893 229 | "oilcan_mod_rel_6_2": 170.67825684905 230 | "oilcan_mod_ix_6_2": 0.75122731071337 231 | "oilcan_mod_ratio_6_2": 3.5722947678015 232 | "oilcan_fb_6_2": 0.0 233 | "oilcan_fold_6_2": 1.210364029648 234 | "oilcan_headroom_6_2": 1.0 235 | "oilcan_gain_6_2": 1.0 236 | "oilcan_routing_6_2": 0.1 237 | "oilcan_level_6_2": 0.53120852876635 238 | "oilcan_freq_7_2": 127.09959126288 239 | "oilcan_sweep_time_7_2": 100.0 240 | "oilcan_sweep_ix_7_2": 0.01 241 | "oilcan_atk_7_2": 0.0 242 | "oilcan_car_rel_7_2": 0.075995700204734 243 | "oilcan_mod_rel_7_2": 185.19584764648 244 | "oilcan_mod_ix_7_2": 0.10608378159998 245 | "oilcan_mod_ratio_7_2": 3.9194612216259 246 | "oilcan_fb_7_2": 10.0 247 | "oilcan_fold_7_2": 0.0 248 | "oilcan_headroom_7_2": 1.0 249 | "oilcan_gain_7_2": 1.0 250 | "oilcan_routing_7_2": 0.1 251 | "oilcan_level_7_2": 1.0 252 | "oilcan_freq_mult_2": 1.0 253 | "oilcan_sweep_time_mult_2": 1.0 254 | "oilcan_sweep_ix_mult_2": 1.0 255 | "oilcan_atk_mult_2": 1.0 256 | "oilcan_car_rel_mult_2": 1.0 257 | "oilcan_mod_rel_mult_2": 1.0 258 | "oilcan_mod_ix_mult_2": 1.0 259 | "oilcan_mod_ratio_mult_2": 1.0 260 | "oilcan_fb_mult_2": 1.0 261 | "oilcan_fold_mult_2": 1.0 262 | "oilcan_headroom_mult_2": 1.0 263 | "oilcan_gain_mult_2": 1.0 264 | "oilcan_routing_mult_2": 1.0 265 | "oilcan_level_mult_2": 1.0 266 | "oilcan_trig_2": 0 267 | "oilcan_copy_multipliers_2": 0 268 | "oilcan_paste_multipliers_2": 0 269 | "oilcan_copy_timbre_2": 0 270 | "oilcan_paste_timbre_2": 0 271 | "oilcan_target_file_2": /home/we/dust/data/oilcan/default-1.oilkit 272 | "oilcan_save_kit_2": 0 273 | "oilcan_load_kit_2": 0 274 | "oilcan_save_new_2": 0 275 | "oilcan_oilcan_3": 124 276 | "oilcan_selected_timbre_3": 1 277 | "oilcan_freq_1_3": 48.267172000962 278 | "oilcan_sweep_time_1_3": 1.1255069395027 279 | "oilcan_sweep_ix_1_3": 0.04 280 | "oilcan_atk_1_3": 0.0 281 | "oilcan_car_rel_1_3": 0.23630446040355 282 | "oilcan_mod_rel_1_3": 20.812386925025 283 | "oilcan_mod_ix_1_3": 0.036282587176292 284 | "oilcan_mod_ratio_1_3": 1.0 285 | "oilcan_fb_1_3": 10.0 286 | "oilcan_fold_1_3": 0.0 287 | "oilcan_headroom_1_3": 1.0 288 | "oilcan_gain_1_3": 2.251162614549 289 | "oilcan_routing_1_3": 0.1 290 | "oilcan_level_1_3": 0.89596000511171 291 | "oilcan_freq_2_3": 216.73021153806 292 | "oilcan_sweep_time_2_3": 14.179498568211 293 | "oilcan_sweep_ix_2_3": 0.5 294 | "oilcan_atk_2_3": 0.0 295 | "oilcan_car_rel_2_3": 0.075995700204734 296 | "oilcan_mod_rel_2_3": 77.888329239103 297 | "oilcan_mod_ix_2_3": 0.42110774187376 298 | "oilcan_mod_ratio_2_3": 0.001 299 | "oilcan_fb_2_3": 10.0 300 | "oilcan_fold_2_3": 0.023401477535407 301 | "oilcan_headroom_2_3": 1.0 302 | "oilcan_gain_2_3": 1.0 303 | "oilcan_routing_2_3": 0.51 304 | "oilcan_level_2_3": 1.0 305 | "oilcan_freq_3_3": 6465.9180308895 306 | "oilcan_sweep_time_3_3": 0.1 307 | "oilcan_sweep_ix_3_3": 0.0 308 | "oilcan_atk_3_3": 0.000761421320832 309 | "oilcan_car_rel_3_3": 0.11215620475911 310 | "oilcan_mod_rel_3_3": 110.89882083825 311 | "oilcan_mod_ix_3_3": 0.39549781603158 312 | "oilcan_mod_ratio_3_3": 30.101755754031 313 | "oilcan_fb_3_3": 4.2999158623596 314 | "oilcan_fold_3_3": 16.827133959804 315 | "oilcan_headroom_3_3": 0.57538847271996 316 | "oilcan_gain_3_3": 0.28629857106017 317 | "oilcan_routing_3_3": 0.19 318 | "oilcan_level_3_3": 1.0 319 | "oilcan_freq_4_3": 6181.9679756622 320 | "oilcan_sweep_time_4_3": 0.1 321 | "oilcan_sweep_ix_4_3": 0.0 322 | "oilcan_atk_4_3": 0.028159374698623 323 | "oilcan_car_rel_4_3": 0.13956080881699 324 | "oilcan_mod_rel_4_3": 113.21244853834 325 | "oilcan_mod_ix_4_3": 0.33426240086974 326 | "oilcan_mod_ratio_4_3": 30.101755754031 327 | "oilcan_fb_4_3": 4.2999158623596 328 | "oilcan_fold_4_3": 16.827133959804 329 | "oilcan_headroom_4_3": 0.497914356027 330 | "oilcan_gain_4_3": 0.28629857106017 331 | "oilcan_routing_4_3": 0.19 332 | "oilcan_level_4_3": 1.0 333 | "oilcan_freq_5_3": 243.47364212317 334 | "oilcan_sweep_time_5_3": 43.52785136081 335 | "oilcan_sweep_ix_5_3": 0.0099999999999991 336 | "oilcan_atk_5_3": 0.0 337 | "oilcan_car_rel_5_3": 0.083526229522557 338 | "oilcan_mod_rel_5_3": 31.562544299578 339 | "oilcan_mod_ix_5_3": 0.22756640205149 340 | "oilcan_mod_ratio_5_3": 4.7029457589911 341 | "oilcan_fb_5_3": 3.3426240086974 342 | "oilcan_fold_5_3": 0.0 343 | "oilcan_headroom_5_3": 0.41298740960665 344 | "oilcan_gain_5_3": 1.0 345 | "oilcan_routing_5_3": 0.315 346 | "oilcan_level_5_3": 1.0 347 | "oilcan_freq_6_3": 778.56532911316 348 | "oilcan_sweep_time_6_3": 0.1 349 | "oilcan_sweep_ix_6_3": 0.04 350 | "oilcan_atk_6_3": 0.0 351 | "oilcan_car_rel_6_3": 0.066632716015893 352 | "oilcan_mod_rel_6_3": 170.67825684905 353 | "oilcan_mod_ix_6_3": 0.75122731071337 354 | "oilcan_mod_ratio_6_3": 3.5722947678015 355 | "oilcan_fb_6_3": 0.0 356 | "oilcan_fold_6_3": 1.210364029648 357 | "oilcan_headroom_6_3": 1.0 358 | "oilcan_gain_6_3": 1.0 359 | "oilcan_routing_6_3": 0.1 360 | "oilcan_level_6_3": 0.53120852876635 361 | "oilcan_freq_7_3": 127.09959126288 362 | "oilcan_sweep_time_7_3": 100.0 363 | "oilcan_sweep_ix_7_3": 0.01 364 | "oilcan_atk_7_3": 0.0 365 | "oilcan_car_rel_7_3": 0.075995700204734 366 | "oilcan_mod_rel_7_3": 185.19584764648 367 | "oilcan_mod_ix_7_3": 0.10608378159998 368 | "oilcan_mod_ratio_7_3": 3.9194612216259 369 | "oilcan_fb_7_3": 10.0 370 | "oilcan_fold_7_3": 0.0 371 | "oilcan_headroom_7_3": 1.0 372 | "oilcan_gain_7_3": 1.0 373 | "oilcan_routing_7_3": 0.1 374 | "oilcan_level_7_3": 1.0 375 | "oilcan_freq_mult_3": 1.0 376 | "oilcan_sweep_time_mult_3": 1.0 377 | "oilcan_sweep_ix_mult_3": 1.0 378 | "oilcan_atk_mult_3": 1.0 379 | "oilcan_car_rel_mult_3": 1.0 380 | "oilcan_mod_rel_mult_3": 1.0 381 | "oilcan_mod_ix_mult_3": 1.0 382 | "oilcan_mod_ratio_mult_3": 1.0 383 | "oilcan_fb_mult_3": 1.0 384 | "oilcan_fold_mult_3": 1.0 385 | "oilcan_headroom_mult_3": 1.0 386 | "oilcan_gain_mult_3": 1.0 387 | "oilcan_routing_mult_3": 1.0 388 | "oilcan_level_mult_3": 1.0 389 | "oilcan_trig_3": 0 390 | "oilcan_copy_multipliers_3": 0 391 | "oilcan_paste_multipliers_3": 0 392 | "oilcan_copy_timbre_3": 0 393 | "oilcan_paste_timbre_3": 0 394 | "oilcan_target_file_3": /home/we/dust/data/oilcan/default-1.oilkit 395 | "oilcan_save_kit_3": 0 396 | "oilcan_load_kit_3": 0 397 | "oilcan_save_new_3": 0 398 | "oilcan_oilcan_4": 124 399 | "oilcan_selected_timbre_4": 1 400 | "oilcan_freq_1_4": 48.267172000962 401 | "oilcan_sweep_time_1_4": 1.1255069395027 402 | "oilcan_sweep_ix_1_4": 0.04 403 | "oilcan_atk_1_4": 0.0 404 | "oilcan_car_rel_1_4": 0.23630446040355 405 | "oilcan_mod_rel_1_4": 20.812386925025 406 | "oilcan_mod_ix_1_4": 0.036282587176292 407 | "oilcan_mod_ratio_1_4": 1.0 408 | "oilcan_fb_1_4": 10.0 409 | "oilcan_fold_1_4": 0.0 410 | "oilcan_headroom_1_4": 1.0 411 | "oilcan_gain_1_4": 2.251162614549 412 | "oilcan_routing_1_4": 0.1 413 | "oilcan_level_1_4": 0.89596000511171 414 | "oilcan_freq_2_4": 216.73021153806 415 | "oilcan_sweep_time_2_4": 14.179498568211 416 | "oilcan_sweep_ix_2_4": 0.5 417 | "oilcan_atk_2_4": 0.0 418 | "oilcan_car_rel_2_4": 0.075995700204734 419 | "oilcan_mod_rel_2_4": 77.888329239103 420 | "oilcan_mod_ix_2_4": 0.42110774187376 421 | "oilcan_mod_ratio_2_4": 0.001 422 | "oilcan_fb_2_4": 10.0 423 | "oilcan_fold_2_4": 0.023401477535407 424 | "oilcan_headroom_2_4": 1.0 425 | "oilcan_gain_2_4": 1.0 426 | "oilcan_routing_2_4": 0.51 427 | "oilcan_level_2_4": 1.0 428 | "oilcan_freq_3_4": 6465.9180308895 429 | "oilcan_sweep_time_3_4": 0.1 430 | "oilcan_sweep_ix_3_4": 0.0 431 | "oilcan_atk_3_4": 0.000761421320832 432 | "oilcan_car_rel_3_4": 0.11215620475911 433 | "oilcan_mod_rel_3_4": 110.89882083825 434 | "oilcan_mod_ix_3_4": 0.39549781603158 435 | "oilcan_mod_ratio_3_4": 30.101755754031 436 | "oilcan_fb_3_4": 4.2999158623596 437 | "oilcan_fold_3_4": 16.827133959804 438 | "oilcan_headroom_3_4": 0.57538847271996 439 | "oilcan_gain_3_4": 0.28629857106017 440 | "oilcan_routing_3_4": 0.19 441 | "oilcan_level_3_4": 1.0 442 | "oilcan_freq_4_4": 6181.9679756622 443 | "oilcan_sweep_time_4_4": 0.1 444 | "oilcan_sweep_ix_4_4": 0.0 445 | "oilcan_atk_4_4": 0.028159374698623 446 | "oilcan_car_rel_4_4": 0.13956080881699 447 | "oilcan_mod_rel_4_4": 113.21244853834 448 | "oilcan_mod_ix_4_4": 0.33426240086974 449 | "oilcan_mod_ratio_4_4": 30.101755754031 450 | "oilcan_fb_4_4": 4.2999158623596 451 | "oilcan_fold_4_4": 16.827133959804 452 | "oilcan_headroom_4_4": 0.497914356027 453 | "oilcan_gain_4_4": 0.28629857106017 454 | "oilcan_routing_4_4": 0.19 455 | "oilcan_level_4_4": 1.0 456 | "oilcan_freq_5_4": 243.47364212317 457 | "oilcan_sweep_time_5_4": 43.52785136081 458 | "oilcan_sweep_ix_5_4": 0.0099999999999991 459 | "oilcan_atk_5_4": 0.0 460 | "oilcan_car_rel_5_4": 0.083526229522557 461 | "oilcan_mod_rel_5_4": 31.562544299578 462 | "oilcan_mod_ix_5_4": 0.22756640205149 463 | "oilcan_mod_ratio_5_4": 4.7029457589911 464 | "oilcan_fb_5_4": 3.3426240086974 465 | "oilcan_fold_5_4": 0.0 466 | "oilcan_headroom_5_4": 0.41298740960665 467 | "oilcan_gain_5_4": 1.0 468 | "oilcan_routing_5_4": 0.315 469 | "oilcan_level_5_4": 1.0 470 | "oilcan_freq_6_4": 778.56532911316 471 | "oilcan_sweep_time_6_4": 0.1 472 | "oilcan_sweep_ix_6_4": 0.04 473 | "oilcan_atk_6_4": 0.0 474 | "oilcan_car_rel_6_4": 0.066632716015893 475 | "oilcan_mod_rel_6_4": 170.67825684905 476 | "oilcan_mod_ix_6_4": 0.75122731071337 477 | "oilcan_mod_ratio_6_4": 3.5722947678015 478 | "oilcan_fb_6_4": 0.0 479 | "oilcan_fold_6_4": 1.210364029648 480 | "oilcan_headroom_6_4": 1.0 481 | "oilcan_gain_6_4": 1.0 482 | "oilcan_routing_6_4": 0.1 483 | "oilcan_level_6_4": 0.53120852876635 484 | "oilcan_freq_7_4": 127.09959126288 485 | "oilcan_sweep_time_7_4": 100.0 486 | "oilcan_sweep_ix_7_4": 0.01 487 | "oilcan_atk_7_4": 0.0 488 | "oilcan_car_rel_7_4": 0.075995700204734 489 | "oilcan_mod_rel_7_4": 185.19584764648 490 | "oilcan_mod_ix_7_4": 0.10608378159998 491 | "oilcan_mod_ratio_7_4": 3.9194612216259 492 | "oilcan_fb_7_4": 10.0 493 | "oilcan_fold_7_4": 0.0 494 | "oilcan_headroom_7_4": 1.0 495 | "oilcan_gain_7_4": 1.0 496 | "oilcan_routing_7_4": 0.1 497 | "oilcan_level_7_4": 1.0 498 | "oilcan_freq_mult_4": 1.0 499 | "oilcan_sweep_time_mult_4": 1.0 500 | "oilcan_sweep_ix_mult_4": 1.0 501 | "oilcan_atk_mult_4": 1.0 502 | "oilcan_car_rel_mult_4": 1.0 503 | "oilcan_mod_rel_mult_4": 1.0 504 | "oilcan_mod_ix_mult_4": 1.0 505 | "oilcan_mod_ratio_mult_4": 1.0 506 | "oilcan_fb_mult_4": 1.0 507 | "oilcan_fold_mult_4": 1.0 508 | "oilcan_headroom_mult_4": 1.0 509 | "oilcan_gain_mult_4": 1.0 510 | "oilcan_routing_mult_4": 1.0 511 | "oilcan_level_mult_4": 1.0 512 | "oilcan_trig_4": 0 513 | "oilcan_copy_multipliers_4": 0 514 | "oilcan_paste_multipliers_4": 0 515 | "oilcan_copy_timbre_4": 0 516 | "oilcan_paste_timbre_4": 0 517 | "oilcan_target_file_4": /home/we/dust/data/oilcan/default-1.oilkit 518 | "oilcan_save_kit_4": 0 519 | "oilcan_load_kit_4": 0 520 | "oilcan_save_new_4": 0 521 | "nb_ansible__1": 3 522 | "nb_ansible_portomento_1": 0.0 523 | "nb_ansible_freq_1": 440.0 524 | "nb_ansible_tune_1": 0 525 | "nb_ansible__2": 3 526 | "nb_ansible_portomento_2": 0.0 527 | "nb_ansible_freq_2": 440.0 528 | "nb_ansible_tune_2": 0 529 | "nb_ansible__3": 3 530 | "nb_ansible_portomento_3": 0.0 531 | "nb_ansible_freq_3": 440.0 532 | "nb_ansible_tune_3": 0 533 | "nb_ansible__4": 3 534 | "nb_ansible_portomento_4": 0.0 535 | "nb_ansible_freq_4": 440.0 536 | "nb_ansible_tune_4": 0 537 | "nb_crow__1_2": 11 538 | "nb_crow_attack_time_1_2": 0.1 539 | "nb_crow_attack_shape_1_2": 3 540 | "nb_crow_decay_time_1_2": 1.0 541 | "nb_crow_decay_shape_1_2": 3 542 | "nb_crow_sustain_1_2": 0.75 543 | "nb_crow_release_time_1_2": 0.5 544 | "nb_crow_release_shape_1_2": 3 545 | "nb_crow_portomento_1_2": 0.0 546 | "nb_crow_legato_1_2": 1 547 | "nb_crow_freq_1_2": 440.0 548 | "nb_crow_tune_1_2": 0 549 | "nb_crow__3_4": 11 550 | "nb_crow_attack_time_3_4": 0.1 551 | "nb_crow_attack_shape_3_4": 3 552 | "nb_crow_decay_time_3_4": 1.0 553 | "nb_crow_decay_shape_3_4": 3 554 | "nb_crow_sustain_3_4": 0.75 555 | "nb_crow_release_time_3_4": 0.5 556 | "nb_crow_release_shape_3_4": 3 557 | "nb_crow_portomento_3_4": 0.0 558 | "nb_crow_legato_3_4": 1 559 | "nb_crow_freq_3_4": 440.0 560 | "nb_crow_tune_3_4": 0 561 | "nb_crow__paraphonic": 10 562 | "nb_crow_attack_time_paraphonic": 0.1 563 | "nb_crow_attack_shape_paraphonic": 3 564 | "nb_crow_decay_time_paraphonic": 1.0 565 | "nb_crow_decay_shape_paraphonic": 3 566 | "nb_crow_sustain_paraphonic": 0.75 567 | "nb_crow_release_time_paraphonic": 0.5 568 | "nb_crow_release_shape_paraphonic": 3 569 | "nb_crow_legato_paraphonic": 1 570 | "nb_crow_freq_paraphonic": 440.0 571 | "nb_crow_tune_paraphonic": 0 572 | "doubledecker_group": 95 573 | "doubledecker_voices": 4 574 | "doubledecker_voice_spread": 1 575 | "doubledecker_mix": 0.4921875 576 | "doubledecker_amp": 0.71646767439676 577 | "doubledecker_pan": 0.0 578 | "doubledecker_detune": -0.015625 579 | "doubledecker_drift": 0.05 580 | "doubledecker_pitch_env": 0.0035156249999995 581 | "doubledecker_portomento": 0.0 582 | "doubledecker_brilliance": 0.234375 583 | "doubledecker_resonance": -0.4375 584 | "doubledecker_pitch_ratio_1": 7 585 | "doubledecker_layer_lfo_freq_1": 3.0322305279444 586 | "doubledecker_pwm_1": 0.09375 587 | "doubledecker_pw_1": 0.34375 588 | "doubledecker_shape_1": 2 589 | "doubledecker_noise_1": 0.0 590 | "doubledecker_hp_freq_1": 337.54599184578 591 | "doubledecker_hp_res_1": 0.3828125 592 | "doubledecker_lp_freq_1": 1735.8471991308 593 | "doubledecker_lp_res_1": 0.5 594 | "doubledecker_filter_init_1": -0.015625 595 | "doubledecker_filter_attack_level_1": 0.15625 596 | "doubledecker_filter_attack_1": 0.0035776020100435 597 | "doubledecker_filter_decay_1": 0.3585001937535 598 | "doubledecker_filter_release_1": 0.39239636148722 599 | "doubledecker_filt_1": 1 600 | "doubledecker_sine_1": 0.23 601 | "doubledecker_amp_attack_1": 0.056287323559063 602 | "doubledecker_amp_decay_1": 0.25466816354865 603 | "doubledecker_amp_sustain_1": 0.265625 604 | "doubledecker_amp_release_1": 0.25466816354865 605 | "doubledecker_velocity_to_filter_1": 0.1640625 606 | "doubledecker_velocity_to_amp_1": 0.4140625 607 | "doubledecker_pressure_to_filter_1": 0.5390625 608 | "doubledecker_pressure_to_amp_1": 0.171875 609 | "doubledecker_filter_keyfollow_lo_1": -0.21875 610 | "doubledecker_filter_keyfollow_hi_1": 0.171875 611 | "doubledecker_amp_keyfollow_lo_1": 0.0 612 | "doubledecker_amp_keyfollow_hi_1": 0.0 613 | "doubledecker_layer_amp_1": 1.0 614 | "doubledecker_invert_hpf_1": 3 615 | "doubledecker_pitch_ratio_2": 7 616 | "doubledecker_layer_lfo_freq_2": 3.9233439161571 617 | "doubledecker_pwm_2": 0.0775 618 | "doubledecker_pw_2": 0.196 619 | "doubledecker_shape_2": 3 620 | "doubledecker_noise_2": 0.0 621 | "doubledecker_hp_freq_2": 279.01489518022 622 | "doubledecker_hp_res_2": 0.4296875 623 | "doubledecker_lp_freq_2": 1341.4917237016 624 | "doubledecker_lp_res_2": 0.421875 625 | "doubledecker_filter_init_2": 0.011875 626 | "doubledecker_filter_attack_level_2": 0.390625 627 | "doubledecker_filter_attack_2": 0.0 628 | "doubledecker_filter_decay_2": 0.28051964462777 629 | "doubledecker_filter_release_2": 1.3938967796026 630 | "doubledecker_filt_2": 1 631 | "doubledecker_sine_2": 0.1953125 632 | "doubledecker_amp_attack_2": 0.060271832558291 633 | "doubledecker_amp_decay_2": 0.20724184177702 634 | "doubledecker_amp_sustain_2": 0.2265625 635 | "doubledecker_amp_release_2": 0.45380264334759 636 | "doubledecker_velocity_to_filter_2": 0.2 637 | "doubledecker_velocity_to_amp_2": 0.1484375 638 | "doubledecker_pressure_to_filter_2": 0.40625 639 | "doubledecker_pressure_to_amp_2": 0.296875 640 | "doubledecker_filter_keyfollow_lo_2": -0.40625 641 | "doubledecker_filter_keyfollow_hi_2": 0.078125 642 | "doubledecker_amp_keyfollow_lo_2": 0.0 643 | "doubledecker_amp_keyfollow_hi_2": 0.0 644 | "doubledecker_layer_amp_2": 0.45292432825604 645 | "doubledecker_invert_hpf_2": 3 646 | "doubledecker_lfo_shape": 1 647 | "doubledecker_lfo_rate": 2.6562017917935 648 | "doubledecker_lfo_to_freq": 0.0 649 | "doubledecker_lfo_to_filter": 0.0 650 | "doubledecker_lfo_to_amp": 0.0 651 | "doubledecker_lfo_pres_to_freq": 0.43417377003384 652 | "doubledecker_lfo_pres_to_vibrato": 0.050834544837261 653 | "doubledecker_lfo_pres_to_filt": 0.057416609823663 654 | "doubledecker_lfo_pres_to_amp": 0.057416609823663 655 | "doubledecker_lfo_sync": 2 656 | "doubledecker_lfo_scope": 1 657 | "doubledecker_preset": - 658 | "doubledecker_preset_num": 1 659 | "doubledecker_layer_lfo_min": 0.7 660 | "doubledecker_layer_lfo_max": 70 661 | "doubledecker_global_lfo_min": 0.7 662 | "doubledecker_global_lfo_max": 25 663 | "doubledecker_attack_max": 1 664 | "doubledecker_release_max": 15 665 | "plaits_1_group": 22 666 | "plaits_style_1": 1 667 | "plaits_gate_1": 0 668 | "plaits_note_1": 36 669 | "plaits_model_1": 14 670 | "plaits_decay_1": 0.5 671 | "plaits_a_1": 0.05 672 | "plaits_d_1": 0.5 673 | "plaits_s_1": 0.5 674 | "plaits_r_1": 0.5 675 | "plaits_harmonics_1": 0.3 676 | "plaits_timbre_1": 0.3 677 | "plaits_morph_1": 0.3 678 | "plaits_amp_1": 0.2 679 | "plaits_aux_1": 0 680 | "plaits_fm_mod_1": 0 681 | "plaits_timb_mod_1": 0 682 | "plaits_morph_mod_1": 0 683 | "plaits_lpg_color_1": 0.5 684 | "plaits_gain_1": 1.0 685 | "plaits_pan_1": 0.0 686 | "plaits_slew_1": 0 687 | "plaits_2_group": 22 688 | "plaits_style_2": 1 689 | "plaits_gate_2": 0 690 | "plaits_note_2": 36 691 | "plaits_model_2": 14 692 | "plaits_decay_2": 0.5 693 | "plaits_a_2": 0.05 694 | "plaits_d_2": 0.5 695 | "plaits_s_2": 0.5 696 | "plaits_r_2": 0.5 697 | "plaits_harmonics_2": 0.3 698 | "plaits_timbre_2": 0.3 699 | "plaits_morph_2": 0.3 700 | "plaits_amp_2": 0.2 701 | "plaits_aux_2": 0 702 | "plaits_fm_mod_2": 0 703 | "plaits_timb_mod_2": 0 704 | "plaits_morph_mod_2": 0 705 | "plaits_lpg_color_2": 0.5 706 | "plaits_gain_2": 1.0 707 | "plaits_pan_2": 0.0 708 | "plaits_slew_2": 0 709 | "plaits_3_group": 22 710 | "plaits_style_3": 1 711 | "plaits_gate_3": 0 712 | "plaits_note_3": 36 713 | "plaits_model_3": 14 714 | "plaits_decay_3": 0.5 715 | "plaits_a_3": 0.05 716 | "plaits_d_3": 0.5 717 | "plaits_s_3": 0.5 718 | "plaits_r_3": 0.5 719 | "plaits_harmonics_3": 0.3 720 | "plaits_timbre_3": 0.3 721 | "plaits_morph_3": 0.3 722 | "plaits_amp_3": 0.2 723 | "plaits_aux_3": 0 724 | "plaits_fm_mod_3": 0 725 | "plaits_timb_mod_3": 0 726 | "plaits_morph_mod_3": 0 727 | "plaits_lpg_color_3": 0.5 728 | "plaits_gain_3": 1.0 729 | "plaits_pan_3": 0.0 730 | "plaits_slew_3": 0 731 | "plaits_4_group": 22 732 | "plaits_style_4": 1 733 | "plaits_gate_4": 0 734 | "plaits_note_4": 36 735 | "plaits_model_4": 14 736 | "plaits_decay_4": 0.5 737 | "plaits_a_4": 0.05 738 | "plaits_d_4": 0.5 739 | "plaits_s_4": 0.5 740 | "plaits_r_4": 0.5 741 | "plaits_harmonics_4": 0.3 742 | "plaits_timbre_4": 0.3 743 | "plaits_morph_4": 0.3 744 | "plaits_amp_4": 0.2 745 | "plaits_aux_4": 0 746 | "plaits_fm_mod_4": 0 747 | "plaits_timb_mod_4": 0 748 | "plaits_morph_mod_4": 0 749 | "plaits_lpg_color_4": 0.5 750 | "plaits_gain_4": 1.0 751 | "plaits_pan_4": 0.0 752 | "plaits_slew_4": 0 753 | "nb_jf_n_1": 1 754 | "nb_jf_slew_1": 0 755 | "nb_jf_n_2": 1 756 | "nb_jf_slew_2": 0 757 | "nb_jf_n_3": 1 758 | "nb_jf_slew_3": 0 759 | "nb_jf_n_4": 1 760 | "nb_jf_slew_4": 0 761 | "nb_jf_n_5": 1 762 | "nb_jf_slew_5": 0 763 | "nb_jf_n_6": 1 764 | "nb_jf_slew_6": 0 765 | "nb_jf_unison": 1 766 | "nb_jf_unison_detune": 0 767 | "midi_voice_1_1": 2 768 | "midi_chan_1_1": 1 769 | "midi_modulation_cc_1_1": 72 770 | "midi_voice_2_1": 2 771 | "midi_chan_2_1": 1 772 | "midi_modulation_cc_2_1": 72 773 | "midi_voice_17_1": 2 774 | "midi_chan_17_1": 1 775 | "midi_modulation_cc_17_1": 72 776 | "nb_passencore": 4 777 | "nb_passencore_root": 12 778 | "nb_passencore_scale": 1 779 | "nb_passencore_voice": 1 780 | "nb_passencore_voice_hidden_string": 781 | "nb_w_syn": 11 782 | "nb_w/style": 1 783 | "nb_w/curve": 5.0 784 | "nb_w/ramp": 0.0 785 | "nb_w/fm_index": 1.0 786 | "nb_w/fm_env": 1.0 787 | "nb_w/fm_num": 1 788 | "nb_w/fm_denom": 1 789 | "nb_w/lpg_time": 0.0 790 | "nb_w/lpg_symmetry": -5.0 791 | "nb_sentinel_param": 0 792 | "doubledecker_grid": 4 793 | "doubledecker_grid_mode": 1 794 | "doubledecker_dx": 1 795 | "doubledecker_dy": 5 796 | "doubledecker_grid_lowest": 24 797 | "nbout_chan_1": 1 798 | "nbout_chan_1_hidden_string": 799 | "mod depths": 65 800 | "matrix_depth_1": 0.0 801 | "matrix_depth_1_cell": 802 | "matrix_depth_2": 0.0 803 | "matrix_depth_2_cell": 804 | "matrix_depth_3": 0.0 805 | "matrix_depth_3_cell": 806 | "matrix_depth_4": 0.0 807 | "matrix_depth_4_cell": 808 | "matrix_depth_5": 0.0 809 | "matrix_depth_5_cell": 810 | "matrix_depth_6": 0.0 811 | "matrix_depth_6_cell": 812 | "matrix_depth_7": 0.0 813 | "matrix_depth_7_cell": 814 | "matrix_depth_8": 0.0 815 | "matrix_depth_8_cell": 816 | "matrix_depth_9": 0.0 817 | "matrix_depth_9_cell": 818 | "matrix_depth_10": 0.0 819 | "matrix_depth_10_cell": 820 | "matrix_depth_11": 0.0 821 | "matrix_depth_11_cell": 822 | "matrix_depth_12": 0.0 823 | "matrix_depth_12_cell": 824 | "matrix_depth_13": 0.0 825 | "matrix_depth_13_cell": 826 | "matrix_depth_14": 0.0 827 | "matrix_depth_14_cell": 828 | "matrix_depth_15": 0.0 829 | "matrix_depth_15_cell": 830 | "matrix_depth_16": 0.0 831 | "matrix_depth_16_cell": 832 | "matrix_connect_1": 0 833 | "matrix_connect_1_cell": 834 | "matrix_connect_2": 0 835 | "matrix_connect_2_cell": 836 | "matrix_connect_3": 0 837 | "matrix_connect_3_cell": 838 | "matrix_connect_4": 0 839 | "matrix_connect_4_cell": 840 | "matrix_connect_5": 0 841 | "matrix_connect_5_cell": 842 | "matrix_connect_6": 0 843 | "matrix_connect_6_cell": 844 | "matrix_connect_7": 0 845 | "matrix_connect_7_cell": 846 | "matrix_connect_8": 0 847 | "matrix_connect_8_cell": 848 | "matrix_connect_9": 0 849 | "matrix_connect_9_cell": 850 | "matrix_connect_10": 0 851 | "matrix_connect_10_cell": 852 | "matrix_connect_11": 0 853 | "matrix_connect_11_cell": 854 | "matrix_connect_12": 0 855 | "matrix_connect_12_cell": 856 | "matrix_connect_13": 0 857 | "matrix_connect_13_cell": 858 | "matrix_connect_14": 0 859 | "matrix_connect_14_cell": 860 | "matrix_connect_15": 0 861 | "matrix_connect_15_cell": 862 | "matrix_connect_16": 0 863 | "matrix_connect_16_cell": 864 | "crow out 1": 9 865 | "ck_1_mode": 1 866 | "ck_1_pulse_len": 0.01 867 | "ck_1_gate": 0 868 | "ck_1_voltage": 0.0 869 | "ck_1_resolution": 0.1 870 | "ck_1_note": 48 871 | "ck_1_tuning": 440.0 872 | "ck_1_scale": 1 873 | "crow out 2": 9 874 | "ck_2_mode": 1 875 | "ck_2_pulse_len": 0.01 876 | "ck_2_gate": 0 877 | "ck_2_voltage": 0.0 878 | "ck_2_resolution": 0.1 879 | "ck_2_note": 48 880 | "ck_2_tuning": 440.0 881 | "ck_2_scale": 1 882 | "crow out 3": 9 883 | "ck_3_mode": 1 884 | "ck_3_pulse_len": 0.01 885 | "ck_3_gate": 0 886 | "ck_3_voltage": 0.0 887 | "ck_3_resolution": 0.1 888 | "ck_3_note": 48 889 | "ck_3_tuning": 440.0 890 | "ck_3_scale": 1 891 | "crow out 4": 9 892 | "ck_4_mode": 1 893 | "ck_4_pulse_len": 0.01 894 | "ck_4_gate": 0 895 | "ck_4_voltage": 0.0 896 | "ck_4_resolution": 0.1 897 | "ck_4_note": 48 898 | "ck_4_tuning": 440.0 899 | "ck_4_scale": 1 900 | "cyrene_version": 901 | "cy_play": 0 902 | "cy_pattern_length": 16 903 | "cy_grid_resolution": 3 904 | "cy_shuffle_basis": 1 905 | "cy_shuffle_feel": 1 906 | "cy_swing_amount": 0 907 | "cy_grids_pattern_x": 128 908 | "cy_grids_pattern_y": 128 909 | "cy_pattern_chaos": 10 910 | "Kick": 5 911 | "cy_1_density": 50 912 | "cy_1_euclidean_enabled": 1 913 | "cy_1_euclidean_length": 8 914 | "cy_1_euclidean_trigs": 0 915 | "cy_1_euclidean_rotation": 0 916 | "Snare": 5 917 | "cy_2_density": 50 918 | "cy_2_euclidean_enabled": 1 919 | "cy_2_euclidean_length": 8 920 | "cy_2_euclidean_trigs": 0 921 | "cy_2_euclidean_rotation": 0 922 | "Hi-Hat": 5 923 | "cy_3_density": 50 924 | "cy_3_euclidean_enabled": 1 925 | "cy_3_euclidean_length": 8 926 | "cy_3_euclidean_trigs": 0 927 | "cy_3_euclidean_rotation": 0 928 | "Track 4": 5 929 | "cy_4_density": 50 930 | "cy_4_euclidean_enabled": 1 931 | "cy_4_euclidean_length": 8 932 | "cy_4_euclidean_trigs": 0 933 | "cy_4_euclidean_rotation": 0 934 | "Track 5": 5 935 | "cy_5_density": 50 936 | "cy_5_euclidean_enabled": 1 937 | "cy_5_euclidean_length": 8 938 | "cy_5_euclidean_trigs": 0 939 | "cy_5_euclidean_rotation": 0 940 | "Track 6": 5 941 | "cy_6_density": 50 942 | "cy_6_euclidean_enabled": 1 943 | "cy_6_euclidean_length": 8 944 | "cy_6_euclidean_trigs": 0 945 | "cy_6_euclidean_rotation": 0 946 | "Track 7": 5 947 | "cy_7_density": 50 948 | "cy_7_euclidean_enabled": 1 949 | "cy_7_euclidean_length": 8 950 | "cy_7_euclidean_trigs": 0 951 | "cy_7_euclidean_rotation": 0 952 | "MIDI": 15 953 | "cy_midi_out": 1 954 | "cy_1_midi_note": 36 955 | "cy_1_midi_chan": 1 956 | "cy_2_midi_note": 38 957 | "cy_2_midi_chan": 1 958 | "cy_3_midi_note": 42 959 | "cy_3_midi_chan": 1 960 | "cy_4_midi_note": 46 961 | "cy_4_midi_chan": 1 962 | "cy_5_midi_note": 70 963 | "cy_5_midi_chan": 1 964 | "cy_6_midi_note": 37 965 | "cy_6_midi_chan": 1 966 | "cy_7_midi_note": 63 967 | "cy_7_midi_chan": 1 968 | "Crow": 20 969 | "cy_crow_out": 1 970 | "cy_crow_in": 1 971 | "cy_crow_out_1_track": 1 972 | "cy_crow_out_1_mode": 3 973 | "cy_crow_out_1_attack": 0.03 974 | "cy_crow_out_1_release": 0.3 975 | "cy_crow_out_2_track": 2 976 | "cy_crow_out_2_mode": 3 977 | "cy_crow_out_2_attack": 0.03 978 | "cy_crow_out_2_release": 0.3 979 | "cy_crow_out_3_track": 3 980 | "cy_crow_out_3_mode": 3 981 | "cy_crow_out_3_attack": 0.03 982 | "cy_crow_out_3_release": 0.3 983 | "cy_crow_out_4_track": 4 984 | "cy_crow_out_4_mode": 3 985 | "cy_crow_out_4_attack": 0.03 986 | "cy_crow_out_4_release": 0.3 987 | "cy_crow_in_1_param": 1 988 | "cy_crow_in_2_param": 1 989 | "rhythm 1": 6 990 | "tk_1_rhythm_active": 1 991 | "tk_1_div": 7 992 | "tk_1_swing": 50 993 | "tk_1_rhythm_length": 8 994 | "tk_1_rhythm_fill": 1 995 | "tk_1_rhythm_offset": 0 996 | "rhythm 2": 6 997 | "tk_2_rhythm_active": 1 998 | "tk_2_div": 7 999 | "tk_2_swing": 50 1000 | "tk_2_rhythm_length": 8 1001 | "tk_2_rhythm_fill": 1 1002 | "tk_2_rhythm_offset": 0 1003 | "rhythm 3": 6 1004 | "tk_3_rhythm_active": 1 1005 | "tk_3_div": 7 1006 | "tk_3_swing": 50 1007 | "tk_3_rhythm_length": 8 1008 | "tk_3_rhythm_fill": 1 1009 | "tk_3_rhythm_offset": 0 1010 | "rhythm 4": 6 1011 | "tk_4_rhythm_active": 1 1012 | "tk_4_div": 7 1013 | "tk_4_swing": 50 1014 | "tk_4_rhythm_length": 8 1015 | "tk_4_rhythm_fill": 1 1016 | "tk_4_rhythm_offset": 0 1017 | "lfo 1": 6 1018 | "tk_1_clocked": 0 1019 | "tk_1_clocked_period": 7 1020 | "tk_1_unclocked_period": 1.0 1021 | "tk_1_lfo_bipolar": 0 1022 | "tk_1_shape": 1 1023 | "tk_1_lfo_width": 0.5 1024 | "lfo 2": 6 1025 | "tk_2_clocked": 0 1026 | "tk_2_clocked_period": 7 1027 | "tk_2_unclocked_period": 1.0 1028 | "tk_2_lfo_bipolar": 0 1029 | "tk_2_shape": 1 1030 | "tk_2_lfo_width": 0.5 1031 | "lfo 3": 6 1032 | "tk_3_clocked": 0 1033 | "tk_3_clocked_period": 7 1034 | "tk_3_unclocked_period": 1.0 1035 | "tk_3_lfo_bipolar": 0 1036 | "tk_3_shape": 1 1037 | "tk_3_lfo_width": 0.5 1038 | "lfo 4": 6 1039 | "tk_4_clocked": 0 1040 | "tk_4_clocked_period": 7 1041 | "tk_4_unclocked_period": 1.0 1042 | "tk_4_lfo_bipolar": 0 1043 | "tk_4_shape": 1 1044 | "tk_4_lfo_width": 0.5 1045 | "sequence 1": 23 1046 | "tk_1_seq_pos": 1 1047 | "tk_1_seq_active": 1 1048 | "tk_1_seq_length": 4 1049 | "tk_1_seq_shred": 0 1050 | "tk_1_seq_zero": 0 1051 | "tk_1_val_1": 0 1052 | "tk_1_val_2": 0 1053 | "tk_1_val_3": 0 1054 | "tk_1_val_4": 0 1055 | "tk_1_val_5": 0 1056 | "tk_1_val_6": 0 1057 | "tk_1_val_7": 0 1058 | "tk_1_val_8": 0 1059 | "tk_1_val_9": 0 1060 | "tk_1_val_10": 0 1061 | "tk_1_val_11": 0 1062 | "tk_1_val_12": 0 1063 | "tk_1_val_13": 0 1064 | "tk_1_val_14": 0 1065 | "tk_1_val_15": 0 1066 | "tk_1_val_16": 0 1067 | "sequence 2": 23 1068 | "tk_2_seq_pos": 1 1069 | "tk_2_seq_active": 1 1070 | "tk_2_seq_length": 4 1071 | "tk_2_seq_shred": 0 1072 | "tk_2_seq_zero": 0 1073 | "tk_2_val_1": 0 1074 | "tk_2_val_2": 0 1075 | "tk_2_val_3": 0 1076 | "tk_2_val_4": 0 1077 | "tk_2_val_5": 0 1078 | "tk_2_val_6": 0 1079 | "tk_2_val_7": 0 1080 | "tk_2_val_8": 0 1081 | "tk_2_val_9": 0 1082 | "tk_2_val_10": 0 1083 | "tk_2_val_11": 0 1084 | "tk_2_val_12": 0 1085 | "tk_2_val_13": 0 1086 | "tk_2_val_14": 0 1087 | "tk_2_val_15": 0 1088 | "tk_2_val_16": 0 1089 | "sequence 3": 23 1090 | "tk_3_seq_pos": 1 1091 | "tk_3_seq_active": 1 1092 | "tk_3_seq_length": 4 1093 | "tk_3_seq_shred": 0 1094 | "tk_3_seq_zero": 0 1095 | "tk_3_val_1": 0 1096 | "tk_3_val_2": 0 1097 | "tk_3_val_3": 0 1098 | "tk_3_val_4": 0 1099 | "tk_3_val_5": 0 1100 | "tk_3_val_6": 0 1101 | "tk_3_val_7": 0 1102 | "tk_3_val_8": 0 1103 | "tk_3_val_9": 0 1104 | "tk_3_val_10": 0 1105 | "tk_3_val_11": 0 1106 | "tk_3_val_12": 0 1107 | "tk_3_val_13": 0 1108 | "tk_3_val_14": 0 1109 | "tk_3_val_15": 0 1110 | "tk_3_val_16": 0 1111 | "sequence 4": 23 1112 | "tk_4_seq_pos": 1 1113 | "tk_4_seq_active": 1 1114 | "tk_4_seq_length": 4 1115 | "tk_4_seq_shred": 0 1116 | "tk_4_seq_zero": 0 1117 | "tk_4_val_1": 0 1118 | "tk_4_val_2": 0 1119 | "tk_4_val_3": 0 1120 | "tk_4_val_4": 0 1121 | "tk_4_val_5": 0 1122 | "tk_4_val_6": 0 1123 | "tk_4_val_7": 0 1124 | "tk_4_val_8": 0 1125 | "tk_4_val_9": 0 1126 | "tk_4_val_10": 0 1127 | "tk_4_val_11": 0 1128 | "tk_4_val_12": 0 1129 | "tk_4_val_13": 0 1130 | "tk_4_val_14": 0 1131 | "tk_4_val_15": 0 1132 | "tk_4_val_16": 0 1133 | "macro 1": 2 1134 | "tk_1_macro_active": 1 1135 | "tk_1_macro_value": 0 1136 | "macro 2": 2 1137 | "tk_2_macro_active": 1 1138 | "tk_2_macro_value": 0 1139 | "macro 3": 2 1140 | "tk_3_macro_active": 1 1141 | "tk_3_macro_value": 0 1142 | "macro 4": 2 1143 | "tk_4_macro_active": 1 1144 | "tk_4_macro_value": 0 1145 | "tg_root": 12 1146 | "tg_scale": 1 1147 | "tg_voicegroup_1": 6 1148 | "tg_voice_1": 1 1149 | "tg_voice_1_hidden_string": 1150 | "tg_note_1": 36 1151 | "tg_gate_1": 0 1152 | "tg_length_1": 0.3 1153 | "tg_voicegroup_2": 6 1154 | "tg_voice_2": 1 1155 | "tg_voice_2_hidden_string": 1156 | "tg_note_2": 36 1157 | "tg_gate_2": 0 1158 | "tg_length_2": 0.3 1159 | "tg_voicegroup_3": 6 1160 | "tg_voice_3": 1 1161 | "tg_voice_3_hidden_string": 1162 | "tg_note_3": 36 1163 | "tg_gate_3": 0 1164 | "tg_length_3": 0.3 1165 | "tg_voicegroup_4": 6 1166 | "tg_voice_4": 1 1167 | "tg_voice_4_hidden_string": 1168 | "tg_note_4": 36 1169 | "tg_gate_4": 0 1170 | "tg_length_4": 0.3 1171 | "nb in midi source": 1 1172 | "nb in pitch bend range": 12 1173 | "nb_in_voice": 1 1174 | "nb_in_voice_hidden_string": 1175 | "nb_in_pressure_1": 1 1176 | "nb_in_pressure_2": 1 1177 | "nb_in_pressure_2_sens": 0.0 1178 | --------------------------------------------------------------------------------