| 163 | } |
| 164 | |
| 165 | json_t* dataToJson() override { |
| 166 | json_t* rootJ = json_object(); |
| 167 | |
| 168 | json_t* ccsJ = json_array(); |
| 169 | for (int i = 0; i < 16; i++) { |
| 170 | json_array_append_new(ccsJ, json_integer(learnedCcs[i])); |
| 171 | } |
| 172 | json_object_set_new(rootJ, "ccs", ccsJ); |
| 173 | |
| 174 | // Remember values so users don't have to touch MIDI controller knobs when restarting Rack |
| 175 | json_t* valuesJ = json_array(); |
| 176 | for (int i = 0; i < 128; i++) { |
| 177 | // Note: Only save channel 0. Since MPE mode won't be commonly used, it's pointless to save all 16 channels. |
| 178 | json_array_append_new(valuesJ, json_integer(ccValues[i][0])); |
| 179 | } |
| 180 | json_object_set_new(rootJ, "values", valuesJ); |
| 181 | |
| 182 | json_object_set_new(rootJ, "midi", midiInput.toJson()); |
| 183 | |
| 184 | json_object_set_new(rootJ, "smooth", json_boolean(smooth)); |
| 185 | json_object_set_new(rootJ, "mpeMode", json_boolean(mpeMode)); |
| 186 | json_object_set_new(rootJ, "lsbMode", json_boolean(lsbMode)); |
| 187 | return rootJ; |
| 188 | } |
| 189 | |
| 190 | void dataFromJson(json_t* rootJ) override { |
| 191 | json_t* ccsJ = json_object_get(rootJ, "ccs"); |