Skip to content

Commit 249fbc8

Browse files
authored
Merge pull request #56 from open-audio-stack/feature/effect-instrument-categories
Derive plugin categories from VST3 SDK
2 parents a8feca2 + f7b9180 commit 249fbc8

4 files changed

Lines changed: 135 additions & 56 deletions

File tree

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@open-audio-stack/core",
3-
"version": "0.1.47",
3+
"version": "0.1.48",
44
"description": "Open-source audio plugin management software",
55
"type": "module",
66
"main": "./build/index.js",

src/types/PluginCategory.ts

Lines changed: 130 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,44 @@
1+
/**
2+
* Plugin categories are derived from the official Steinberg VST3 Plug-in
3+
* Type definitions (plugType) provided by the VST3 SDK.
4+
*
5+
* The VST3 SDK defines a large set of hierarchical category strings
6+
* (e.g. "Fx|Dynamics", "Fx|EQ", "Instrument|Synth") which serve multiple
7+
* purposes including host routing, UI grouping, and capability flags.
8+
*
9+
* This project intentionally normalizes and consolidates those categories
10+
* into a smaller, format-agnostic set suitable for a plugin registry and
11+
* tagging system. Not all VST3 plugType values map 1:1 to public categories.
12+
*
13+
* Authoritative source (VST3 SDK):
14+
* https://steinbergmedia.github.io/vst3_doc/vstinterfaces/group__plugType.html
15+
*/
16+
117
export enum PluginCategoryEffect {
2-
Chorus = 'chorus',
3-
Compression = 'compression',
18+
Delay = 'delay',
19+
Distortion = 'distortion',
20+
Dynamics = 'dynamics',
421
Eq = 'eq',
522
Filter = 'filter',
23+
Modulation = 'modulation',
24+
Pitch = 'pitch',
625
Reverb = 'reverb',
26+
Spatial = 'spatial',
27+
Utility = 'utility',
728
}
829

930
export enum PluginCategoryInstrument {
10-
Drums = 'drums',
31+
Bass = 'bass',
32+
Brass = 'brass',
33+
Drum = 'drum',
34+
Fx = 'fx',
1135
Guitar = 'guitar',
12-
Keys = 'keys',
13-
Orchestral = 'orchestral',
14-
Samplers = 'samplers',
15-
Synths = 'synths',
16-
Vocals = 'vocals',
36+
Piano = 'piano',
37+
Sampler = 'sampler',
38+
Strings = 'strings',
39+
Synth = 'synth',
40+
Voice = 'voice',
41+
Woodwinds = 'woodwinds',
1742
}
1843

1944
export interface PluginCategoryOption {
@@ -25,78 +50,132 @@ export interface PluginCategoryOption {
2550

2651
export const pluginCategoryEffects: PluginCategoryOption[] = [
2752
{
28-
description: 'Spatial movement and modulation.',
29-
value: PluginCategoryEffect.Chorus,
30-
name: 'Chorus/Phaser',
31-
tags: ['Chorus', 'Phaser'],
53+
name: 'Delay',
54+
value: PluginCategoryEffect.Delay,
55+
description: 'Echoes and rhythmic repeats.',
56+
tags: ['Delay', 'Echo', 'Tape Delay', 'Ping Pong Delay', 'Multi-Tap Delay'],
57+
},
58+
{
59+
name: 'Distortion',
60+
value: PluginCategoryEffect.Distortion,
61+
description: 'Add saturation, grit, or harmonic color.',
62+
tags: ['Distortion', 'Saturation', 'Overdrive', 'Fuzz', 'Amp', 'Amplifier', 'Exciter', 'Waveshaper'],
3263
},
3364
{
34-
description: 'Shape dynamics, grit and amplification.',
35-
value: PluginCategoryEffect.Compression,
36-
name: 'Compression/Distortion',
37-
tags: ['Compression', 'Distortion', 'Amplifier', 'Amp'],
65+
name: 'Dynamics',
66+
value: PluginCategoryEffect.Dynamics,
67+
description: 'Control dynamics and signal level.',
68+
tags: ['Dynamics', 'Compressor', 'Limiter', 'Expander', 'Gate', 'Noise Gate'],
3869
},
3970
{
40-
description: 'Balance frequencies and position sounds in the stereo field.',
71+
name: 'EQ',
4172
value: PluginCategoryEffect.Eq,
42-
name: 'EQ/Pan',
43-
tags: ['EQ', 'Equalizer', 'Pan'],
73+
description: 'Shape and balance frequency content.',
74+
tags: ['EQ', 'Equalizer', 'Parametric EQ', 'Graphic EQ', 'Tone Control'],
4475
},
4576
{
46-
description: 'Adjust tone and sculpt frequencies.',
47-
value: PluginCategoryEffect.Filter,
4877
name: 'Filter',
49-
tags: ['Filter'],
78+
value: PluginCategoryEffect.Filter,
79+
description: 'Sculpt sound using frequency filtering.',
80+
tags: ['Filter', 'Lowpass', 'Highpass', 'Bandpass', 'Notch', 'Resonant', 'Auto Filter'],
81+
},
82+
{
83+
name: 'Modulation',
84+
value: PluginCategoryEffect.Modulation,
85+
description: 'Create motion, width, and modulation.',
86+
tags: ['Modulation', 'Chorus', 'Flanger', 'Phaser', 'Tremolo', 'Vibrato', 'Rotary', 'Ensemble'],
87+
},
88+
{
89+
name: 'Pitch',
90+
value: PluginCategoryEffect.Pitch,
91+
description: 'Pitch shifting and harmonic processing.',
92+
tags: ['Pitch', 'Pitch Shifter', 'Harmonizer', 'Vocoder', 'Octaver', 'Formant'],
5093
},
5194
{
52-
description: 'Create depth with echoes, ambience, and space.',
95+
name: 'Reverb',
5396
value: PluginCategoryEffect.Reverb,
54-
name: 'Reverb/Delay',
55-
tags: ['Reverb', 'Delay'],
97+
description: 'Simulate space, depth, and ambience.',
98+
tags: ['Reverb', 'Room', 'Hall', 'Plate', 'Spring', 'Convolution', 'Ambience'],
99+
},
100+
{
101+
name: 'Spatial',
102+
value: PluginCategoryEffect.Spatial,
103+
description: 'Stereo positioning and spatial control.',
104+
tags: ['Spatial', 'Stereo', 'Panner', 'Width', 'Imager', 'Mid/Side', 'Binaural'],
105+
},
106+
{
107+
name: 'Utility',
108+
value: PluginCategoryEffect.Utility,
109+
description: 'Analysis, routing, and signal tools.',
110+
tags: ['Utility', 'Gain', 'Trim', 'Analyzer', 'Meter', 'Phase', 'Mono', 'Polarity'],
56111
},
57112
];
58113

59114
export const pluginCategoryInstruments: PluginCategoryOption[] = [
60115
{
61-
description: '',
62-
value: PluginCategoryInstrument.Drums,
116+
name: 'Bass',
117+
value: PluginCategoryInstrument.Bass,
118+
description: 'Bass instruments.',
119+
tags: ['Bass'],
120+
},
121+
{
122+
name: 'Brass',
123+
value: PluginCategoryInstrument.Brass,
124+
description: 'Brass instruments.',
125+
tags: ['Brass'],
126+
},
127+
{
63128
name: 'Drums',
64-
tags: ['Drums', 'Percussion'],
129+
value: PluginCategoryInstrument.Drum,
130+
description: 'Drum and percussion instruments.',
131+
tags: ['Drums', 'Drum Kit', 'Percussion'],
132+
},
133+
{
134+
name: 'FX Instrument',
135+
value: PluginCategoryInstrument.Fx,
136+
description: 'Sound-effect or experimental instruments.',
137+
tags: ['FX', 'Sound Effects'],
65138
},
66139
{
67-
description: '',
68-
value: PluginCategoryInstrument.Guitar,
69140
name: 'Guitar',
70-
tags: ['Guitar', 'String'],
141+
value: PluginCategoryInstrument.Guitar,
142+
description: 'Guitar instruments.',
143+
tags: ['Guitar'],
144+
},
145+
{
146+
name: 'Piano / Keys',
147+
value: PluginCategoryInstrument.Piano,
148+
description: 'Piano and keyboard instruments.',
149+
tags: ['Piano', 'Keys', 'Keyboard'],
71150
},
72151
{
73-
description: '',
74-
value: PluginCategoryInstrument.Keys,
75-
name: 'Keys',
76-
tags: ['Keys', 'Piano'],
152+
name: 'Sampler',
153+
value: PluginCategoryInstrument.Sampler,
154+
description: 'Sample-based instruments.',
155+
tags: ['Sampler', 'Sample'],
77156
},
78157
{
79-
description: '',
80-
value: PluginCategoryInstrument.Orchestral,
81-
name: 'Orchestral',
82-
tags: ['Orchestral', 'Orchestra', 'Strings', 'Woodwind', 'Brass'],
158+
name: 'Strings',
159+
value: PluginCategoryInstrument.Strings,
160+
description: 'String instruments.',
161+
tags: ['Strings', 'String Ensemble'],
83162
},
84163
{
85-
description: '',
86-
value: PluginCategoryInstrument.Samplers,
87-
name: 'Samplers',
88-
tags: ['Samplers', 'Sampler', 'Sample'],
164+
name: 'Synth',
165+
value: PluginCategoryInstrument.Synth,
166+
description: 'Sound synthesis instruments.',
167+
tags: ['Synth', 'Synthesizer'],
89168
},
90169
{
91-
description: '',
92-
value: PluginCategoryInstrument.Synths,
93-
name: 'Synths',
94-
tags: ['Synths', 'Synth', 'Synthesizer'],
170+
name: 'Voice',
171+
value: PluginCategoryInstrument.Voice,
172+
description: 'Vocal and choir instruments.',
173+
tags: ['Voice', 'Vocal', 'Choir'],
95174
},
96175
{
97-
description: '',
98-
value: PluginCategoryInstrument.Vocals,
99-
name: 'Vocals',
100-
tags: ['Vocals'],
176+
name: 'Woodwinds',
177+
value: PluginCategoryInstrument.Woodwinds,
178+
description: 'Woodwind instruments.',
179+
tags: ['Woodwinds'],
101180
},
102181
];

tests/classes/Config.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ test('Get licenses', () => {
8383

8484
test('Get plugin category effect', () => {
8585
const config: Config = new Config();
86-
expect(config.pluginCategoryEffect(PluginCategoryEffect.Compression)).toEqual(pluginCategoryEffects[1]);
86+
expect(config.pluginCategoryEffect(PluginCategoryEffect.Distortion)).toEqual(pluginCategoryEffects[1]);
8787
});
8888

8989
test('Get plugin category effects', () => {
@@ -93,7 +93,7 @@ test('Get plugin category effects', () => {
9393

9494
test('Get plugin category instrument', () => {
9595
const config: Config = new Config();
96-
expect(config.pluginCategoryInstrument(PluginCategoryInstrument.Guitar)).toEqual(pluginCategoryInstruments[1]);
96+
expect(config.pluginCategoryInstrument(PluginCategoryInstrument.Brass)).toEqual(pluginCategoryInstruments[1]);
9797
});
9898

9999
test('Get plugin category instruments', () => {

0 commit comments

Comments
 (0)