@@ -171,7 +171,8 @@ void RackWidget::mergeJson(json_t* rootJ) { | |||
// modules | |||
json_t* modulesJ = json_object_get(rootJ, "modules"); | |||
assert(modulesJ); | |||
if (!modulesJ) | |||
return; | |||
size_t moduleIndex; | |||
json_t* moduleJ; | |||
json_array_foreach(modulesJ, moduleIndex, moduleJ) { | |||
@@ -182,7 +183,8 @@ void RackWidget::mergeJson(json_t* rootJ) { | |||
int id = json_integer_value(idJ); | |||
// TODO Legacy v0.6? | |||
ModuleWidget* moduleWidget = getModule(id); | |||
assert(moduleWidget); | |||
if (!moduleWidget) | |||
continue; | |||
// pos | |||
math::Vec pos = moduleWidget->box.pos.minus(moduleOffset); | |||
@@ -193,7 +195,8 @@ void RackWidget::mergeJson(json_t* rootJ) { | |||
// cables | |||
json_t* cablesJ = json_object_get(rootJ, "cables"); | |||
assert(cablesJ); | |||
if (!cablesJ) | |||
return; | |||
size_t cableIndex; | |||
json_t* cableJ; | |||
json_array_foreach(cablesJ, cableIndex, cableJ) { | |||
@@ -203,7 +206,8 @@ void RackWidget::mergeJson(json_t* rootJ) { | |||
continue; | |||
int id = json_integer_value(idJ); | |||
CableWidget* cw = getCable(id); | |||
assert(cw); | |||
if (!cw) | |||
continue; | |||
json_t* cwJ = cw->toJson(); | |||
// Merge cable JSON object | |||
@@ -215,8 +219,7 @@ void RackWidget::mergeJson(json_t* rootJ) { | |||
void RackWidget::fromJson(json_t* rootJ) { | |||
// modules | |||
json_t* modulesJ = json_object_get(rootJ, "modules"); | |||
if (!modulesJ) | |||
return; | |||
assert(modulesJ); | |||
size_t moduleIndex; | |||
json_t* moduleJ; | |||
json_array_foreach(modulesJ, moduleIndex, moduleJ) { | |||
@@ -1,11 +1,14 @@ | |||
{ | |||
"version": "1.dev.82b817e", | |||
"version": "2.dev.bfce9cc", | |||
"modules": [ | |||
{ | |||
"id": 1, | |||
"plugin": "Core", | |||
"version": "1.0.0", | |||
"version": "2.0.0", | |||
"model": "AudioInterface", | |||
"params": [], | |||
"leftModuleId": 2, | |||
"rightModuleId": 8, | |||
"data": { | |||
"audio": { | |||
"driver": 1, | |||
@@ -15,129 +18,128 @@ | |||
"blockSize": 256 | |||
} | |||
}, | |||
"leftModuleId": 2, | |||
"rightModuleId": 8, | |||
"id": 1, | |||
"pos": [ | |||
57, | |||
0 | |||
] | |||
}, | |||
{ | |||
"id": 2, | |||
"plugin": "Fundamental", | |||
"version": "1.0.0", | |||
"version": "2.0.0", | |||
"model": "VCMixer", | |||
"params": [ | |||
{ | |||
"id": 0, | |||
"value": 1.0 | |||
"value": 1.0, | |||
"id": 0 | |||
}, | |||
{ | |||
"id": 1, | |||
"value": 1.0 | |||
"value": 1.0, | |||
"id": 1 | |||
}, | |||
{ | |||
"id": 2, | |||
"value": 1.0 | |||
"value": 1.0, | |||
"id": 2 | |||
}, | |||
{ | |||
"id": 3, | |||
"value": 1.0 | |||
"value": 1.0, | |||
"id": 3 | |||
}, | |||
{ | |||
"id": 4, | |||
"value": 1.0 | |||
"value": 1.0, | |||
"id": 4 | |||
} | |||
], | |||
"leftModuleId": 7, | |||
"rightModuleId": 1, | |||
"id": 2, | |||
"pos": [ | |||
47, | |||
0 | |||
] | |||
}, | |||
{ | |||
"id": 3, | |||
"plugin": "Fundamental", | |||
"version": "1.0.0", | |||
"version": "2.0.0", | |||
"model": "VCO", | |||
"params": [ | |||
{ | |||
"id": 0, | |||
"value": 1.0 | |||
"value": 1.0, | |||
"id": 0 | |||
}, | |||
{ | |||
"id": 1, | |||
"value": 1.0 | |||
"value": 1.0, | |||
"id": 1 | |||
}, | |||
{ | |||
"id": 2, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 2 | |||
}, | |||
{ | |||
"id": 3, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 3 | |||
}, | |||
{ | |||
"id": 4, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 4 | |||
}, | |||
{ | |||
"id": 5, | |||
"value": 0.5 | |||
"value": 0.5, | |||
"id": 5 | |||
}, | |||
{ | |||
"id": 6, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 6 | |||
} | |||
], | |||
"leftModuleId": 5, | |||
"rightModuleId": 4, | |||
"id": 3, | |||
"pos": [ | |||
8, | |||
0 | |||
] | |||
}, | |||
{ | |||
"id": 4, | |||
"plugin": "Fundamental", | |||
"version": "1.0.0", | |||
"version": "2.0.0", | |||
"model": "VCF", | |||
"params": [ | |||
{ | |||
"id": 0, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 0 | |||
}, | |||
{ | |||
"id": 1, | |||
"value": 0.5 | |||
"value": 0.5, | |||
"id": 1 | |||
}, | |||
{ | |||
"id": 2, | |||
"value": 0.234000027 | |||
"value": 0.234000027, | |||
"id": 2 | |||
}, | |||
{ | |||
"id": 3, | |||
"value": 1.0 | |||
"value": 1.0, | |||
"id": 3 | |||
}, | |||
{ | |||
"id": 4, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 4 | |||
} | |||
], | |||
"leftModuleId": 3, | |||
"rightModuleId": 6, | |||
"id": 4, | |||
"pos": [ | |||
18, | |||
0 | |||
] | |||
}, | |||
{ | |||
"id": 5, | |||
"plugin": "Core", | |||
"version": "1.0.0", | |||
"version": "2.0.0", | |||
"model": "MIDIToCVInterface", | |||
"params": [], | |||
"rightModuleId": 3, | |||
"data": { | |||
"channels": 1, | |||
"polyMode": 0, | |||
@@ -150,117 +152,118 @@ | |||
"channel": -1 | |||
} | |||
}, | |||
"rightModuleId": 3, | |||
"id": 5, | |||
"pos": [ | |||
0, | |||
0 | |||
] | |||
}, | |||
{ | |||
"id": 6, | |||
"plugin": "Fundamental", | |||
"version": "1.0.0", | |||
"version": "2.0.0", | |||
"model": "ADSR", | |||
"params": [ | |||
{ | |||
"id": 0, | |||
"value": 0.258000046 | |||
"value": 0.258000046, | |||
"id": 0 | |||
}, | |||
{ | |||
"id": 1, | |||
"value": 0.743000448 | |||
"value": 0.743000448, | |||
"id": 1 | |||
}, | |||
{ | |||
"id": 2, | |||
"value": 0.5 | |||
"value": 0.5, | |||
"id": 2 | |||
}, | |||
{ | |||
"id": 3, | |||
"value": 0.576500058 | |||
"value": 0.576500058, | |||
"id": 3 | |||
} | |||
], | |||
"leftModuleId": 4, | |||
"rightModuleId": 7, | |||
"id": 6, | |||
"pos": [ | |||
26, | |||
0 | |||
] | |||
}, | |||
{ | |||
"id": 7, | |||
"plugin": "Fundamental", | |||
"version": "1.0.0", | |||
"version": "2.0.0", | |||
"model": "Scope", | |||
"params": [ | |||
{ | |||
"id": 0, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 0 | |||
}, | |||
{ | |||
"id": 1, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 1 | |||
}, | |||
{ | |||
"id": 2, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 2 | |||
}, | |||
{ | |||
"id": 3, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 3 | |||
}, | |||
{ | |||
"id": 4, | |||
"value": 14.0 | |||
"value": 14.0, | |||
"id": 4 | |||
}, | |||
{ | |||
"id": 5, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 5 | |||
}, | |||
{ | |||
"id": 6, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 6 | |||
}, | |||
{ | |||
"id": 7, | |||
"value": 0.0 | |||
"value": 0.0, | |||
"id": 7 | |||
} | |||
], | |||
"leftModuleId": 6, | |||
"rightModuleId": 2, | |||
"data": { | |||
"lissajous": 0, | |||
"external": 0 | |||
}, | |||
"leftModuleId": 6, | |||
"rightModuleId": 2, | |||
"id": 7, | |||
"pos": [ | |||
34, | |||
0 | |||
] | |||
}, | |||
{ | |||
"id": 8, | |||
"plugin": "Core", | |||
"version": "1.0.0", | |||
"version": "2.0.0", | |||
"model": "Notes", | |||
"params": [], | |||
"leftModuleId": 1, | |||
"text": "Demo patch instructions:\n\n1. Choose an audio driver and device in the AUDIO-8 module.\n\n2. Use the QWERTY and ZXCVB rows of your keyboard to generate MIDI notes, which are converted to 1V/oct and GATE signals.\n\n3. Drag knobs up/down. Hold Ctrl (Cmd on Mac) while dragging to fine-tune. Right-click knobs to edit, or double-click to initialize.\n\n4. Drag ports to create and move cables. Stack multiple cables on outputs by holding Ctrl (Cmd on Mac) and dragging from an output.\n\n5. Right-click on an empty rack space to add new modules.", | |||
"id": 8, | |||
"data": { | |||
"text": "Demo patch instructions:\n\n1. Choose an audio driver and device in the AUDIO-8 module.\n\n2. Use the QWERTY and ZXCVB rows of your keyboard to generate MIDI notes, which are converted to 1V/oct and GATE signals.\n\n3. Drag knobs up/down. Hold Ctrl (Cmd on Mac) while dragging to fine-tune. Right-click knobs to edit, or double-click to initialize.\n\n4. Drag ports to create and move cables. Stack multiple cables on outputs by holding Ctrl (Cmd on Mac) and dragging from an output.\n\n5. Right-click on an empty rack space to add new modules." | |||
}, | |||
"pos": [ | |||
67, | |||
0 | |||
] | |||
} | |||
], | |||
"id": 29, | |||
"cables": [ | |||
{ | |||
"id": 0, | |||
"outputModuleId": 5, | |||
"outputId": 0, | |||
"inputModuleId": 3, | |||
"inputId": 0, | |||
"color": "#c91847" | |||
"color": "#c9b70e" | |||
}, | |||
{ | |||
"id": 1, | |||
"outputModuleId": 3, | |||
"outputId": 2, | |||
"inputModuleId": 4, | |||
@@ -268,41 +271,47 @@ | |||
"color": "#0c8e15" | |||
}, | |||
{ | |||
"id": 2, | |||
"outputModuleId": 2, | |||
"outputId": 0, | |||
"inputModuleId": 1, | |||
"inputId": 0, | |||
"color": "#0986ad" | |||
"color": "#c91847" | |||
}, | |||
{ | |||
"id": 3, | |||
"outputModuleId": 2, | |||
"outputId": 0, | |||
"inputModuleId": 1, | |||
"inputId": 1, | |||
"color": "#c9b70e" | |||
"color": "#0986ad" | |||
}, | |||
{ | |||
"id": 4, | |||
"outputModuleId": 6, | |||
"outputId": 0, | |||
"inputModuleId": 4, | |||
"inputId": 0, | |||
"color": "#c91847" | |||
"color": "#c9b70e" | |||
}, | |||
{ | |||
"id": 5, | |||
"outputModuleId": 5, | |||
"outputId": 1, | |||
"inputModuleId": 6, | |||
"inputId": 4, | |||
"color": "#c9b70e" | |||
"color": "#0c8e15" | |||
}, | |||
{ | |||
"id": 6, | |||
"outputModuleId": 6, | |||
"outputId": 0, | |||
"inputModuleId": 2, | |||
"inputId": 5, | |||
"color": "#0c8e15" | |||
"color": "#c91847" | |||
}, | |||
{ | |||
"id": 7, | |||
"outputModuleId": 4, | |||
"outputId": 0, | |||
"inputModuleId": 2, | |||
@@ -310,6 +319,7 @@ | |||
"color": "#0986ad" | |||
}, | |||
{ | |||
"id": 8, | |||
"outputModuleId": 2, | |||
"outputId": 1, | |||
"inputModuleId": 7, | |||
@@ -317,11 +327,12 @@ | |||
"color": "#c9b70e" | |||
}, | |||
{ | |||
"id": 9, | |||
"outputModuleId": 5, | |||
"outputId": 6, | |||
"inputModuleId": 6, | |||
"inputId": 5, | |||
"color": "#c91847" | |||
"color": "#0c8e15" | |||
} | |||
] | |||
} |