Skip to content

Commit 3c71b1a

Browse files
authored
Fix synth MIDI CC configs and add Roland S-1 definition (#5)
Rewrote moog_minitaur.yaml with correct CC numbers sourced from midi.guide (filter_cutoff=19, filter_resonance=21, etc.). Created roland_s1.yaml with ~35 parameters. Updated test assertions to match corrected channel numbers and CC values.
1 parent 4a4dcbd commit 3c71b1a

4 files changed

Lines changed: 200 additions & 23 deletions

File tree

synths/moog_minitaur.yaml

Lines changed: 93 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,104 @@
11
name: Minitaur
22
manufacturer: Moog
3-
midi_channel: 2
3+
midi_channel: 16
44
cc_map:
5+
# Oscillators
6+
vco1_level:
7+
cc: 15
8+
vco2_level:
9+
cc: 16
10+
vco2_frequency:
11+
cc: 17
12+
notes: "64=center/unison"
13+
vco2_beat:
14+
cc: 18
15+
notes: "64=center, fine detune"
16+
vco1_wave:
17+
cc: 70
18+
notes: "0-63=saw, 64-127=square"
19+
vco2_wave:
20+
cc: 71
21+
notes: "0-63=saw, 64-127=square"
22+
hard_sync:
23+
cc: 80
24+
notes: "0-63=off, 64-127=on"
25+
26+
# Filter
527
filter_cutoff:
6-
cc: 22
28+
cc: 19
729
filter_resonance:
8-
cc: 23
30+
cc: 21
931
filter_eg_amount:
32+
cc: 22
33+
filter_kb_tracking:
34+
cc: 20
35+
notes: "default 32 (~50%)"
36+
37+
# Filter envelope
38+
vcf_attack:
39+
cc: 23
40+
vcf_decay:
1041
cc: 24
11-
osc2_frequency:
12-
cc: 18
13-
osc_mix:
14-
cc: 15
42+
notes: "shared decay/release"
43+
vcf_sustain:
44+
cc: 25
45+
46+
# Amp envelope
47+
vca_attack:
48+
cc: 28
49+
vca_decay:
50+
cc: 29
51+
notes: "shared decay/release"
52+
vca_sustain:
53+
cc: 30
54+
55+
# Amp
1556
vca_volume:
1657
cc: 7
17-
eg_attack:
18-
cc: 105
19-
eg_decay:
20-
cc: 106
21-
eg_sustain:
22-
cc: 107
23-
eg_release:
24-
cc: 108
58+
59+
# LFO
60+
lfo_rate:
61+
cc: 3
62+
lfo_vcf_amount:
63+
cc: 12
64+
lfo_vco_amount:
65+
cc: 13
66+
lfo_shape:
67+
cc: 85
68+
notes: "0-25=tri, 26-51=sq, 52-76=saw, 77-101=s&h, 102-127=filter_eg"
69+
lfo_midi_sync:
70+
cc: 87
71+
notes: "0-63=internal, 64-127=midi clock"
72+
lfo_key_trigger:
73+
cc: 82
74+
notes: "0-63=off, 64-127=on"
75+
lfo_vco2_only:
76+
cc: 112
77+
notes: "0-63=off, 64-127=on"
78+
79+
# Performance
2580
glide_rate:
2681
cc: 5
27-
legato_mode:
28-
cc: 114
29-
value_range: [0, 127]
30-
notes: "0=off, 127=on"
82+
glide_switch:
83+
cc: 65
84+
notes: "0-63=off, 64-127=on"
85+
glide_type:
86+
cc: 92
87+
notes: "0-42=linear, 43-85=time, 86-127=exponential"
88+
glide_legato:
89+
cc: 83
90+
notes: "0-63=always, 64-127=legato only"
91+
eg_trigger_mode:
92+
cc: 73
93+
notes: "0-42=legato, 43-85=off, 86-127=reset"
94+
release_switch:
95+
cc: 72
96+
notes: "0-63=off, 64-127=on"
97+
98+
# Velocity
99+
filter_vel_sens:
100+
cc: 89
101+
notes: "default 64 (~50%)"
102+
vca_vel_sens:
103+
cc: 90
104+
notes: "default 64 (~50%)"

synths/roland_s1.yaml

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
name: S-1
2+
manufacturer: Roland
3+
midi_channel: 1
4+
cc_map:
5+
# Oscillator
6+
osc_range:
7+
cc: 14
8+
osc_range_fine_tune:
9+
cc: 76
10+
osc_square_level:
11+
cc: 19
12+
osc_saw_level:
13+
cc: 20
14+
osc_sub_level:
15+
cc: 21
16+
osc_sub_octave_type:
17+
cc: 22
18+
osc_noise_level:
19+
cc: 23
20+
osc_square_pw:
21+
cc: 15
22+
osc_pwm_source:
23+
cc: 16
24+
osc_pitch_bend_sens:
25+
cc: 18
26+
noise_mode:
27+
cc: 78
28+
29+
# Filter
30+
filter_cutoff:
31+
cc: 74
32+
filter_resonance:
33+
cc: 71
34+
filter_env_depth:
35+
cc: 24
36+
filter_lfo_depth:
37+
cc: 25
38+
filter_kb_follow:
39+
cc: 26
40+
filter_bend_sens:
41+
cc: 27
42+
43+
# Envelope
44+
env_attack:
45+
cc: 73
46+
env_decay:
47+
cc: 75
48+
env_sustain:
49+
cc: 30
50+
env_release:
51+
cc: 72
52+
env_mode:
53+
cc: 28
54+
env_trigger_mode:
55+
cc: 29
56+
57+
# LFO
58+
lfo_rate:
59+
cc: 3
60+
lfo_waveform:
61+
cc: 12
62+
lfo_pitch_depth:
63+
cc: 13
64+
lfo_mod_depth:
65+
cc: 17
66+
lfo_key_trigger:
67+
cc: 105
68+
lfo_sync_mode:
69+
cc: 106
70+
71+
# Performance
72+
portamento_time:
73+
cc: 5
74+
portamento_mode:
75+
cc: 31
76+
portamento_switch:
77+
cc: 65
78+
polyphony_mode:
79+
cc: 80
80+
keyboard_transpose:
81+
cc: 77
82+
83+
# Effects
84+
reverb_time:
85+
cc: 89
86+
reverb_level:
87+
cc: 91
88+
delay_time:
89+
cc: 90
90+
delay_level:
91+
cc: 92
92+
chorus_type:
93+
cc: 93

synths/roland_tb03.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: TB-03
22
manufacturer: Roland
3-
midi_channel: 3
3+
midi_channel: 14
44
cc_map:
55
tuning:
66
cc: 104

tests/test_synth_yamls.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,31 @@ def test_minitaur_yaml_loads():
1212
synth = SynthDefinition(**data)
1313
assert synth.name == "Minitaur"
1414
assert synth.manufacturer == "Moog"
15-
assert synth.midi_channel == 2
15+
assert synth.midi_channel == 16
1616
assert "filter_cutoff" in synth.cc_map
17-
assert synth.cc_map["filter_cutoff"].cc == 22
17+
assert synth.cc_map["filter_cutoff"].cc == 19
1818

1919

2020
def test_tb03_yaml_loads():
2121
data = yaml.safe_load((SYNTHS_DIR / "roland_tb03.yaml").read_text())
2222
synth = SynthDefinition(**data)
2323
assert synth.name == "TB-03"
2424
assert synth.manufacturer == "Roland"
25-
assert synth.midi_channel == 3
25+
assert synth.midi_channel == 14
2626
assert "cutoff" in synth.cc_map
2727
assert synth.cc_map["cutoff"].cc == 74
2828

2929

30+
def test_s1_yaml_loads():
31+
data = yaml.safe_load((SYNTHS_DIR / "roland_s1.yaml").read_text())
32+
synth = SynthDefinition(**data)
33+
assert synth.name == "S-1"
34+
assert synth.manufacturer == "Roland"
35+
assert synth.midi_channel == 1
36+
assert "filter_cutoff" in synth.cc_map
37+
assert synth.cc_map["filter_cutoff"].cc == 74
38+
39+
3040
def test_all_synth_yamls_valid():
3141
yaml_files = list(SYNTHS_DIR.glob("*.yaml")) + list(SYNTHS_DIR.glob("*.yml"))
3242
assert len(yaml_files) > 0, "No synth YAML files found"

0 commit comments

Comments
 (0)