![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
You need to have Rust installed, see https://www.rust-lang.org/tools/install for installation instructions.
shell
cargo install vsrs
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
all_sample_empty.alldata
before loading new samples, otherwise there's a higher risk of getting a
memory full error.Check out the contrib directory for configuration file examples.
Supported configuration formats: * RON (See https://github.com/ron-rs/ron) * JSON * YAML
```rust // example.ron
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], ), ), }, ), }, ) ```
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 ]
}
}
}
}
}
}
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 ]