vsrs

![Latest Version] ![Documentation]

Command line utility for generating sample streams for the Volca Sample

Using a configuration file you configure which samples to use, which indexes to put them in, and whether samples should be compressed. You can also generate a stream with the factory preset samples by using a .alldata file.

The tool outputs a .wav file which is ready to be used for transferring the data to the Volca Sample. For details on the transfer process refer to transferring syrostream to your volca sample

Installing

You need to have Rust installed, see https://www.rust-lang.org/tools/install for installation instructions.

shell cargo install vsrs

Running

Loading a configuration file

shell vsrs load example.ron

Restoring factory settings using a .alldata file. Files can be found at https://github.com/korginc/volcasample/tree/master/alldata

shell vsrs reset all_sample_preset.alldata

Gotchas

Practical Examples

Check out the contrib directory for configuration file examples.

Configuration format

Supported configuration formats: * RON (See https://github.com/ron-rs/ron) * JSON * YAML

RON

```rust // example.ron

![enable(implicit_some)]

VolcaSample( // optional, valid values are 8-16 defaultcompression: 16, // map which supports keys in the range 0-99 samples: { // Put kick.wav at sample index 0, and compress it to a bit depth of 8 0: Sample(( // the file path is relative to the location of the configuration file file: "kick.wav", // optional, valid values are 8-16 compression: 8, )), // Erase the sample at index 1 1: Erase, }, // sets the default part setting for the reverb function // optional, on or off (off if not specified) defaultpartreverb: on, // map of sequence patterns, valid keys are 0-9 patterns: { 0: ( // map of pattern parts, valid keys are 0-9 parts: { 0: ( // the sample to use for this part, valid values are 0-99 sample: 0, // sequence steps, 1 = on, 0 = off steps: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], // part toggle options, all optional loop: on, reverb: off, reverse: on, motion: on, mute: off, // part parameters, all optional level: 127, // 0-127 (127) pan: 64, // 1-127 (64=center) (64) speed: 64, // semitone = 40-88 (64=center) (64), continuous = 129-255 (192=center) ampegattack: 64, // 0-127 (0) ampegdecay: 64, // 0-127 (127) pitchegint: 64, // 1-127 (64=center) (64) pitchegattack: 64, // 0-127 (0) pitchegdecay: 64, // 0-127 (127) startingpoint: 64, // 0-127 (0) length: 64, // 0-127 (127) hicut: 64, // 0-127 (127) // motion sequences for the part, optional motionsequences: ( // valid values: 0-127 levelstart: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], levelend: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], // valid values: 1-127 panstart: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], panend: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], // valid values: semitone = 40-88, continuous = 129-255 speedstart: [40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, 85], speedend: [129, 137, 145, 153, 161, 169, 177, 185, 193, 201, 209, 217, 225, 233, 241, 249], // valid values: 0-127 ampegattack: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], ampegdecay: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], // valid values: 1-127 pitchegint: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], // valid values: 0-127 pitchegattack: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], pitchegdecay: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], startpoint: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], length: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], hicut: [1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120], ), ), }, ), }, ) ```

JSON

See the RON section for more details about the values

json { "default_compression": 16, "samples": { "0": { "Sample": { "file": "kick.wav", "compression": 8 } }, "1": "Erase" }, "default_part_reverb": "on", "patterns": { "0": { "parts": { "0": { "sample": 0, "steps": [ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 ], "motion": "off", "loop": "on", "reverb": "off", "reverse": "on", "mute": "off", "level": 127, "pan": 64, "speed": 64, "amp_eg_attack": 64, "amp_eg_decay": 64, "pitch_eg_int": 64, "pitch_eg_attack": 64, "pitch_eg_decay": 64, "starting_point": 64, "length": 64, "hi_cut": 64, "motion_sequences": { "level_start": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "level_end": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "pan_start": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "pan_end": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "speed_start": [ 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, 85 ], "speed_end": [ 129, 137, 145, 153, 161, 169, 177, 185, 193, 201, 209, 217, 225, 233, 241, 249 ], "amp_eg_attack": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "amp_eg_decay": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "pitch_eg_int": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "pitch_eg_attack": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "pitch_eg_decay": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "start_point": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "length": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ], "hi_cut": [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] } } } } } }

YAML

See the RON section for more details about the values

yaml default_compression: 16 samples: 0: Sample: file: kick.wav compression: 8 1: Erase default_part_reverb: on patterns: 0: parts: 0: sample: 0 steps: [ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 ] motion: off loop: on reverb: off reverse: on mute: off level: 127 pan: 64 speed: 64 amp_eg_attack: 64 amp_eg_decay: 64 pitch_eg_int: 64 pitch_eg_attack: 64 pitch_eg_decay: 64 starting_point: 64 length: 64 hi_cut: 64 motion_sequences: level_start: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] level_end: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] pan_start: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] pan_end: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] speed_start: [ 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, 85 ] speed_end: [ 129, 137, 145, 153, 161, 169, 177, 185, 193, 201, 209, 217, 225, 233, 241, 249 ] amp_eg_attack: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] amp_eg_decay: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] pitch_eg_int: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] pitch_eg_attack: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] pitch_eg_decay: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] start_point: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] length: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ] hi_cut: [ 1, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120 ]