From d87ba4dde5378b4c6267565b47ab549c9647a548 Mon Sep 17 00:00:00 2001 From: Aoife Date: Tue, 13 Apr 2021 02:07:22 -0400 Subject: [PATCH] Update parsing and serialising --- src/features/io/convert/parse.js | 2 +- src/features/io/convert/serialise.js | 113 ++++++++++++++++++++++++++- 2 files changed, 111 insertions(+), 4 deletions(-) diff --git a/src/features/io/convert/parse.js b/src/features/io/convert/parse.js index 63c7626..2877587 100644 --- a/src/features/io/convert/parse.js +++ b/src/features/io/convert/parse.js @@ -56,7 +56,7 @@ function build_patch(patch) { arp_on_off: patch[32] & 0x80, arp_latch: patch[32] & 0x40, arp_target: getBits(patch[32], 4, 5), - arp_key_sync: patch[32] & 0x00, + arp_key_sync: patch[32] & 0x01, arp_type: getBits(patch[33], 0, 3), arp_range: getBits(patch[33], 4, 7), arp_gate_time: patch[34], diff --git a/src/features/io/convert/serialise.js b/src/features/io/convert/serialise.js index 2e0c83d..1f74f1d 100644 --- a/src/features/io/convert/serialise.js +++ b/src/features/io/convert/serialise.js @@ -1,7 +1,20 @@ import { fromBitArray, buildByte } from '../utils/functions'; export default function serialise(patch) { - serialise_patch(patch[0]); + const data = new Array.from(serialise_patch(patch[0])); + switch (patch[0].voice_mode) { + default: + case 'Single': + data.append(serialise_timbre(1, patch[1])); + break; + case 'Multiple': + data.append(serialise_timbre(1, patch[1]), serialise_timbre(2, patch[2])); + break; + case 'Vocoder': + data.append(serialise_vocoder(patch[1])); + break; + } + console.log(data); } function serialise_patch(patch) { @@ -48,7 +61,101 @@ function serialise_patch(patch) { patch.arp_swing, patch.keyboard_octave ); - console.log(patch_array); + return patch_array; } -function serialise_timbre(timbre) {} +function serialise_timbre(num, timbre) { + const array = [ + timbre[`t${num}_midi_channel`], + buildByte( + { value: timbre[`t${num}_assign_mode`], start: 6 }, + { value: timbre[`t${num}_eg_2_reset`], start: 5 }, + { value: timbre[`t${num}_eg_1_reset`], start: 4 }, + { value: timbre[`t${num}_trigger_mode`], start: 3 }, + { value: timbre[`t${num}_key_priority`], start: 0 } + ), + timbre[`t${num}_unison_detune`], + timbre[`t${num}_tune`], + timbre[`t${num}_bend_range`], + timbre[`t${num}_transpose`], + timbre[`t${num}_vibrato_int`], + timbre[`t${num}_osc_1_wave`], + timbre[`t${num}_osc_1_ctrl_1`], + timbre[`t${num}_osc_1_ctrl_2`], + timbre[`t${num}_osc_1_dgws`], + 0, + buildByte( + { value: timbre[`t${num}_osc_2_mod_select`], start: 4 }, + { value: timbre[`t${num}_osc_2_wave`], start: 0 } + ), + timbre[`t${num}_osc_2_semitone`], + timbre[`t${num}_osc_2_tune`], + timbre[`t${num}_portamento`], + timbre[`t${num}_osc_1_level`], + timbre[`t${num}_osc_2_level`], + timbre[`t${num}_noise_level`], + timbre[`t${num}_filter_type`], + timbre[`t${num}_filter_cutoff`], + timbre[`t${num}_filter_resonance`], + timbre[`t${num}_filter_eg_intensity`], + timbre[`t${num}_filter_vel_sense`], + timbre[`t${num}_filter_key_track`], + timbre[`t${num}_amp_level`], + timbre[`t${num}_amp_panpot`], + buildByte( + { value: timbre[`t${num}_amp_switch`], start: 6 }, + { value: timbre[`t${num}_amp_distortion`], start: 0 } + ), + timbre[`t${num}_amp_vel_sense`], + timbre[`t${num}_amp_key_track`], + timbre[`t${num}_eg_1_attack`], + timbre[`t${num}_eg_1_decay`], + timbre[`t${num}_eg_1_sustain`], + timbre[`t${num}_eg_1_release`], + timbre[`t${num}_eg_2_attack`], + timbre[`t${num}_eg_2_decay`], + timbre[`t${num}_eg_2_sustain`], + timbre[`t${num}_eg_2_release`], + buildByte( + { value: timbre[`t${num}_lfo_1_key_sync`], start: 4 }, + { value: timbre[`t${num}_lfo_1_wave`], start: 0 } + ), + timbre[`t${num}_lfo_1_frequency`], + buildByte( + { value: timbre[`t${num}_lfo_1_tempo_sync`], start: 7 }, + { value: timbre[`t${num}_lfo_1_sync_note`], start: 0 } + ), + buildByte( + { value: timbre[`t${num}_lfo_2_key_sync`], start: 4 }, + { value: timbre[`t${num}_lfo_2_wave`], start: 0 } + ), + timbre[`t${num}_lfo_2_frequency`], + buildByte( + { value: timbre[`t${num}_lfo_2_tempo_sync`], start: 7 }, + { value: timbre[`t${num}_lfo_2_sync_note`], start: 0 } + ), + buildByte( + { value: timbre[`t${num}_patch_1_dest`], start: 4 }, + { value: timbre[`t${num}_patch_1_src`], start: 0 } + ), + timbre[`t${num}_patch_1_intensity`], + buildByte( + { value: timbre[`t${num}_patch_2_dest`], start: 4 }, + { value: timbre[`t${num}_patch_2_src`], start: 0 } + ), + timbre[`t${num}_patch_2_intensity`], + buildByte( + { value: timbre[`t${num}_patch_3_dest`], start: 4 }, + { value: timbre[`t${num}_patch_3_src`], start: 0 } + ), + timbre[`t${num}_patch_3_intensity`], + buildByte( + { value: timbre[`t${num}_patch_4_dest`], start: 4 }, + { value: timbre[`t${num}_patch_4_src`], start: 0 } + ), + timbre[`t${num}_patch_4_intensity`], + ]; + return array; +} + +function serialise_vocoder(vocoder) {}