diff --git a/src/Frames.cpp b/src/Frames.cpp index 68e02bc..ec45bd8 100644 --- a/src/Frames.cpp +++ b/src/Frames.cpp @@ -55,6 +55,21 @@ struct Frames : Module { json_t *toJson() { json_t *rootJ = json_object(); json_object_set_new(rootJ, "polyLfo", json_boolean(poly_lfo_mode)); + + json_t *keyframesJ = json_array(); + for (int i = 0; i < keyframer.num_keyframes(); i++) { + json_t *keyframeJ = json_array(); + frames::Keyframe *keyframe = keyframer.mutable_keyframe(i); + json_array_append_new(keyframeJ, json_integer(keyframe->timestamp)); + for (int k = 0; k < 4; k++) { + json_array_append_new(keyframeJ, json_integer(keyframe->values[k])); + } + json_array_append_new(keyframesJ, keyframeJ); + } + json_object_set_new(rootJ, "keyframes", keyframesJ); + + // TODO Channel settings + return rootJ; } @@ -62,6 +77,31 @@ struct Frames : Module { json_t *polyLfoJ = json_object_get(rootJ, "polyLfo"); if (polyLfoJ) poly_lfo_mode = json_boolean_value(polyLfoJ); + + json_t *keyframesJ = json_object_get(rootJ, "keyframes"); + if (keyframesJ) { + json_t *keyframeJ; + size_t i; + json_array_foreach(keyframesJ, i, keyframeJ) { + uint16_t timestamp = json_integer_value(json_array_get(keyframeJ, 0)); + uint16_t values[4]; + for (int k = 0; k < 4; k++) { + values[k] = json_integer_value(json_array_get(keyframeJ, k + 1)); + } + keyframer.AddKeyframe(timestamp, values); + } + } + + // TODO Channel settings + } + + void initialize() { + poly_lfo_mode = false; + keyframer.Clear(); + } + void randomize() { + // TODO + // Maybe something useful should go in here?? } };