use std::path::PathBuf;
use crate::sfz::opcodes::defaults::OPCODE_DEFAULT;
use crate::sfz::types::{
fil_type, loop_mode, trigger, OpcodeType, UndefinedInteger, UndefinedUnsignedInteger,
UnknownType,
};
#[allow(non_camel_case_types)]
#[derive(Clone, Debug, PartialEq)]
pub enum Opcode {
count(u32),
delay(f32),
delay_ccN(f32),
delay_random(f32),
end(u32),
loop_mode(loop_mode),
loop_start(u32),
loop_end(u32),
offset(u32),
offset_ccN(u32),
offset_random(u32),
sample(PathBuf),
sync_beats(f32),
sync_offset(f32),
group(u32),
off_by(u32),
off_mode(String),
output(u16),
key(u8),
lokey(u8),
hikey(u8),
lovel(u8),
hivel(u8),
lochan(u8),
hichan(u8),
loccN(u8),
hiccN(u8),
lobend(i16),
hibend(i16),
sw_lokey(u8),
sw_hikey(u8),
sw_last(u8),
sw_down(u8),
sw_up(u8),
sw_previous(u8),
sw_vel(String),
lobpm(f32),
hibpm(f32),
lochanaft(u8),
hichanaft(u8),
lopolyaft(u8),
hipolyaft(u8),
lorand(f32),
hirand(f32),
seq_length(u8),
seq_position(u8),
trigger(trigger),
on_loccN(i8),
on_hiccN(i8),
pan(f32),
position(f32),
volume(f32),
gain_ccN(f32),
width(f32),
amp_keycenter(u8),
amp_keytrack(f32),
amp_veltrack(f32),
amp_velcurve_N(f32),
amp_random(f32),
rt_decay(f32),
xf_cccurve(String),
xf_keycurve(String),
xf_velcurve(String),
xfin_loccN(u8),
xfin_hiccN(u8),
xfout_loccN(u8),
xfout_hiccN(u8),
xfin_lokey(u8),
xfin_hikey(u8),
xfout_lokey(u8),
xfout_hikey(u8),
xfin_lovel(u8),
xfin_hivel(u8),
xfout_lovel(u8),
xfout_hivel(u8),
eqN_bw(f32),
eqN_bwccX(f32),
eqN_freq(f32),
eqN_freqccX(f32),
eqN_vel2freq(f32),
eqN_gain(f32),
eqN_gainccX(f32),
eqN_vel2gain(f32),
cutoff(f32),
cutoff_ccN(i16),
cutoff_chanaft(i16),
cutoff_polyaft(i16),
fil_keytrack(i16),
fil_keycenter(u8),
fil_random(u16),
fil_type(fil_type),
fil_veltrack(i16),
resonance(f32),
bend_up(i16),
bend_down(i16),
bend_step(u16),
pitch_keycenter(u8),
pitch_keytrack(i16),
pitch_random(u16),
pitch_veltrack(i16),
transpose(i8),
tune(i8),
ampeg_attack(f32),
ampeg_attackccN(f32),
ampeg_vel2attack(f32),
ampeg_decay(f32),
ampeg_decayccN(f32),
ampeg_vel2decay(f32),
ampeg_delay(f32),
ampeg_delayccN(f32),
ampeg_vel2delay(f32),
ampeg_hold(f32),
ampeg_holdccN(f32),
ampeg_vel2hold(f32),
ampeg_release(f32),
ampeg_releaseccN(f32),
ampeg_vel2release(f32),
ampeg_sustain(f32),
ampeg_sustainccN(f32),
ampeg_vel2sustain(f32),
ampeg_start(f32),
ampeg_startccN(f32),
fileg_attack(f32),
fileg_vel2attack(f32),
fileg_decay(f32),
fileg_vel2decay(f32),
fileg_delay(f32),
fileg_vel2delay(f32),
fileg_depth(i16),
fileg_vel2depth(i16),
fileg_hold(f32),
fileg_vel2hold(f32),
fileg_release(f32),
fileg_vel2release(f32),
fileg_start(f32),
fileg_sustain(f32),
fileg_vel2sustain(f32),
pitcheg_attack(f32),
pitcheg_vel2attack(f32),
pitcheg_decay(f32),
pitcheg_vel2decay(f32),
pitcheg_delay(f32),
pitcheg_vel2delay(f32),
pitcheg_depth(i16),
pitcheg_vel2depth(i16),
pitcheg_hold(f32),
pitcheg_vel2hold(f32),
pitcheg_release(f32),
pitcheg_vel2release(f32),
pitcheg_start(f32),
pitcheg_sustain(f32),
pitcheg_vel2sustain(f32),
amplfo_delay(f32),
amplfo_depth(f32),
amplfo_depthccN(f32),
amplfo_depthchanaft(f32),
amplfo_depthpolyaft(f32),
amplfo_fade(f32),
amplfo_freq(f32),
amplfo_freqccN(f32),
amplfo_freqchanaft(f32),
amplfo_freqpolyaft(f32),
fillfo_delay(f32),
fillfo_depth(f32),
fillfo_depthccN(f32),
fillfo_depthchanaft(f32),
fillfo_depthpolyaft(f32),
fillfo_fade(f32),
fillfo_freq(f32),
fillfo_freqccN(f32),
fillfo_freqchanaft(f32),
fillfo_freqpolyaft(f32),
pitchlfo_delay(f32),
pitchlfo_depth(f32),
pitchlfo_depthccN(f32),
pitchlfo_depthchanaft(f32),
pitchlfo_depthpolyaft(f32),
pitchlfo_fade(f32),
pitchlfo_freq(f32),
pitchlfo_freqccN(f32),
pitchlfo_freqchanaft(f32),
pitchlfo_freqpolyaft(f32),
effect1(f32),
effect2(f32),
delay_samples(u32),
delay_samples_onccN(u32),
delay_beats(f32),
stop_beats(f32),
direction(String),
loop_count(UndefinedUnsignedInteger),
loop_crossfade(f32),
loop_type(String),
md5(String),
reverse_loccN(u8),
reverse_hiccN(u8),
waveguide(String),
define(String),
default_path(PathBuf),
note_offset(UndefinedInteger),
octave_offset(UndefinedInteger),
set_ccN(u8),
polyphony(UndefinedInteger),
note_polyphony(UndefinedInteger),
note_selfmask(String),
rt_dead(String),
sostenuto_sw(String),
sustain_sw(String),
loprog(u8),
hiprog(u8),
sw_default(u8),
lotimer(f32),
hitimer(f32),
start_loccN(i8),
start_hiccN(i8),
stop_loccN(i8),
stop_hiccN(i8),
phase(String),
pan_keycenter(u8),
pan_keytrack(f32),
pan_veltrack(f32),
eqN_type(String),
cutoff2(f32),
cutoff2_onccN(i16),
cutoff2_curveccN(u8),
cutoff2_smoothccN(f32),
cutoff2_stepccN(UndefinedUnsignedInteger),
fil2_keycenter(u8),
fil2_keytrack(u16),
fil2_type(String),
fil2_veltrack(i16),
resonance2(f32),
resonance2_onccN(f32),
resonance2_curveccN(u8),
resonance2_smoothccN(f32),
resonance2_stepccN(UndefinedUnsignedInteger),
bend_smooth(f32),
bend_stepup(u16),
bend_stepdown(u16),
egN_points(UnknownType),
egN_timeX(f32),
egN_timeX_onccY(f32),
egN_levelX(f32),
egN_levelX_onccY(f32),
egN_shapeX(f32),
egN_curveX(UnknownType),
egN_sustain(UnknownType),
egN_loop(UnknownType),
egN_loop_count(UnknownType),
egN_volume(UnknownType),
egN_volume_onccX(UnknownType),
egN_amplitude(UnknownType),
egN_amplitude_onccX(UnknownType),
egN_pan(UnknownType),
egN_pan_onccX(UnknownType),
egN_width(UnknownType),
egN_width_onccX(UnknownType),
egN_pan_curve(UnknownType),
egN_pan_curveccX(UnknownType),
egN_freq_lfoX(UnknownType),
egN_depth_lfoX(UnknownType),
egN_depthadd_lfoX(UnknownType),
egN_pitch(UnknownType),
egN_pitch_onccX(UnknownType),
egN_cutoff(UnknownType),
egN_cutoff_onccX(UnknownType),
egN_cutoff2(UnknownType),
egN_cutoff2_onccX(UnknownType),
egN_resonance(UnknownType),
egN_resonance_onccX(UnknownType),
egN_resonance2(UnknownType),
egN_resonance2_onccX(UnknownType),
egN_eqXfreq(UnknownType),
egN_eqXfreq_onccY(UnknownType),
egN_eqXbw(UnknownType),
egN_eqXbw_onccY(UnknownType),
egN_eqXgain(UnknownType),
egN_eqXgain_onccY(UnknownType),
lfoN_freq(f32),
lfoN_freq_onccX(UnknownType),
lfoN_freq_smoothccX(UnknownType),
lfoN_freq_stepccX(UnknownType),
lfoN_delay(f32),
lfoN_delay_onccX(UnknownType),
lfoN_fade(f32),
lfoN_fade_onccX(f32),
lfoN_phase(f32),
lfoN_phase_onccX(UnknownType),
lfoN_count(UndefinedInteger),
lfoN_wave(UndefinedInteger),
lfoN_steps(UndefinedInteger),
lfoN_stepX(f32),
lfoN_stepX_onccY(UnknownType),
lfoN_smooth(UnknownType),
lfoN_smooth_onccX(UnknownType),
lfoN_volume(UnknownType),
lfoN_volume_onccX(UnknownType),
lfoN_volume_smoothccX(UnknownType),
lfoN_volume_stepccX(UnknownType),
lfoN_amplitude(UnknownType),
lfoN_amplitude_onccX(UnknownType),
lfoN_amplitude_smoothccX(UnknownType),
lfoN_amplitude_stepccX(UnknownType),
lfoN_pan(UnknownType),
lfoN_pan_onccX(UnknownType),
lfoN_pan_smoothccX(UnknownType),
lfoN_pan_stepccX(UnknownType),
lfoN_width(UnknownType),
lfoN_width_onccX(UnknownType),
lfoN_width_smoothccX(UnknownType),
lfoN_width_stepccX(UnknownType),
lfoN_freq_lfoX(UnknownType),
lfoN_depth_lfoX(UnknownType),
lfoN_depthadd_lfoX(UnknownType),
lfoN_pitch(UnknownType),
lfoN_pitch_onccX(UnknownType),
lfoN_pitch_smoothccX(UnknownType),
lfoN_pitch_stepccX(UnknownType),
lfoN_cutoff(UnknownType),
lfoN_cutoff_onccX(UnknownType),
lfoN_cutoff_smoothccX(UnknownType),
lfoN_cutoff_stepccX(UnknownType),
lfoN_cutoff2(UnknownType),
lfoN_cutoff2_onccX(UnknownType),
lfoN_cutoff2_smoothccX(UnknownType),
lfoN_cutoff2_stepccX(UnknownType),
lfoN_resonance(UnknownType),
lfoN_resonance_onccX(UnknownType),
lfoN_resonance_smoothccX(UnknownType),
lfoN_resonance_stepccX(UnknownType),
lfoN_resonance2(UnknownType),
lfoN_resonance2_onccX(UnknownType),
lfoN_resonance2_smoothccX(UnknownType),
lfoN_resonance2_stepccX(UnknownType),
lfoN_eqXfreq(UnknownType),
lfoN_eqXfreq_onccY(UnknownType),
lfoN_eqXfreq_smoothccY(UnknownType),
lfoN_eqXfreq_stepccY(UnknownType),
lfoN_eqXbw(UnknownType),
lfoN_eqXbw_onccY(UnknownType),
lfoN_eqXbw_smoothccY(UnknownType),
lfoN_eqXbw_stepccY(UnknownType),
lfoN_eqXgain(UnknownType),
lfoN_eqXgain_onccY(UnknownType),
lfoN_eqXgain_smoothccY(UnknownType),
lfoN_eqXgain_stepccY(UnknownType),
vN(f32),
bus(String),
effect3(f32),
effect4(f32),
r#type(String),
label_ccN(String),
include(String),
hint_(),
_mod(String),
set_hdccN(f32),
sw_note_offset(UndefinedInteger),
sw_octave_offset(UndefinedInteger),
global_label(String),
master_label(String),
group_label(String),
region_label(String),
polyphony_stealing(UndefinedInteger),
off_curve(i8),
off_shape(f32),
off_time(f32),
polyphony_group(u32),
sostenuto_cc(f32),
sostenuto_lo(f32),
sustain_cc(f32),
sustain_lo(f32),
lohdccN(f32),
hihdccN(f32),
sw_label(String),
sw_lolast(u8),
sw_hilast(u8),
varNN_mod(String),
varNN_onccX(f32),
varNN_curveccX(u8),
varNN_target(),
on_lohdccN(f32),
on_hihdccN(f32),
start_lohdccN(f32),
start_hihdccN(f32),
stop_lohdccN(f32),
stop_hihdccN(f32),
position_veltrack(),
amp_veltrack_random(),
amplitude(f32),
amplitude_onccN(f32),
amplitude_curveccN(u8),
amplitude_smoothccN(),
global_amplitude(f32),
master_amplitude(f32),
group_amplitude(f32),
pan_law(String),
global_volume(f32),
master_volume(f32),
group_volume(f32),
eqN_dynamic(u8),
fil_gain(f32),
fil2_gain(f32),
pitch(i8),
ampeg_attack_shape(f32),
ampeg_decay_shape(f32),
ampeg_decay_zero(u8),
ampeg_dynamic(u8),
ampeg_release_shape(f32),
ampeg_release_zero(u8),
fileg_attack_shape(f32),
fileg_decay_shape(f32),
fileg_decay_zero(u8),
fileg_release_shape(f32),
fileg_release_zero(u8),
fileg_dynamic(u8),
pitcheg_attack_shape(f32),
pitcheg_decay_shape(f32),
pitcheg_decay_zero(u8),
pitcheg_release_shape(f32),
pitcheg_release_zero(u8),
pitcheg_dynamic(u8),
egN_ampeg(UnknownType),
lfoN_waveX(UndefinedInteger),
lfoN_offset(f32),
lfoN_ratio(f32),
lfoN_scale(f32),
curve_index(u8),
param_offset(UndefinedInteger),
vendor_specific(String),
noise_filter(String),
noise_stereo(String),
noise_level(f32),
noise_level_onccN(f32),
noise_level_smoothccN(f32),
noise_step(u8),
noise_step_onccN(u8),
noise_tone(u8),
noise_tone_onccN(u8),
egN_decim(UnknownType),
egN_decim_onccX(UnknownType),
egN_bitred(UnknownType),
egN_bitred_onccX(UnknownType),
egN_rectify(UnknownType),
egN_rectify_onccX(UnknownType),
egN_ringmod(UnknownType),
egN_ringmod_onccX(UnknownType),
egN_noiselevel(UnknownType),
egN_noiselevel_onccX(UnknownType),
egN_noisestep(UnknownType),
egN_noisestep_onccX(UnknownType),
egN_noisetone(UnknownType),
egN_noisetone_onccX(UnknownType),
egN_driveshape(UnknownType),
egN_driveshape_onccX(UnknownType),
lfoN_decim(UnknownType),
lfoN_decim_onccX(UnknownType),
lfoN_decim_smoothccX(UnknownType),
lfoN_decim_stepccX(UnknownType),
lfoN_bitred(UnknownType),
lfoN_bitred_onccX(UnknownType),
lfoN_bitred_smoothccX(UnknownType),
lfoN_bitred_stepccX(UnknownType),
lfoN_noiselevel(UnknownType),
lfoN_noiselevel_onccX(UnknownType),
lfoN_noiselevel_smoothccX(UnknownType),
lfoN_noiselevel_stepccX(UnknownType),
lfoN_noisestep(UnknownType),
lfoN_noisestep_onccX(UnknownType),
lfoN_noisestep_smoothccX(UnknownType),
lfoN_noisestep_stepccX(UnknownType),
lfoN_noisetone(UnknownType),
lfoN_noisetone_onccX(UnknownType),
lfoN_noisetone_smoothccX(UnknownType),
lfoN_noisetone_stepccX(UnknownType),
lfoN_drive(UnknownType),
lfoN_drive_onccX(UnknownType),
lfoN_drive_smoothccX(UnknownType),
lfoN_drive_stepccX(UnknownType),
apan_depth(UnknownType),
apan_dry(UnknownType),
apan_freq(f32),
apan_phase(f32),
apan_waveform(UnknownType),
apan_wet(UnknownType),
bitred(UnknownType),
bitred_onccN(UnknownType),
bitred_curveccN(UnknownType),
bitred_smoothccN(UnknownType),
bitred_stepccN(UnknownType),
comp_attack(f32),
comp_gain(UnknownType),
comp_ratio(UnknownType),
comp_release(f32),
comp_stlink(String),
comp_threshold(f32),
decim(UnknownType),
decim_onccN(UnknownType),
decim_curveccN(UnknownType),
decim_smoothccN(UnknownType),
decim_stepccN(UnknownType),
delay_cutoff(f32),
delay_damphi(UnknownType),
delay_damplo(UnknownType),
delay_dry(UnknownType),
delay_feedback(UnknownType),
delay_filter(String),
delay_input(UnknownType),
delay_levelc(UnknownType),
delay_levell(UnknownType),
delay_levelr(UnknownType),
delay_lfofreq(f32),
delay_moddepth(UnknownType),
delay_mode(String),
delay_panc(UnknownType),
delay_panl(UnknownType),
delay_panr(UnknownType),
delay_resonance(UnknownType),
delay_spread(UnknownType),
delay_syncc_onccN(UnknownType),
delay_syncl_onccN(UnknownType),
delay_syncr_onccN(UnknownType),
delay_time_tap(UnknownType),
delay_timec(UnknownType),
delay_timel(UnknownType),
delay_timer(UnknownType),
delay_wet(UnknownType),
directtomain(f32),
disto_depth(UnknownType),
disto_dry(UnknownType),
disto_stages(UnknownType),
disto_tone(UnknownType),
disto_wet(UnknownType),
eq_bw(UnknownType),
eq_freq(UnknownType),
eq_gain(UnknownType),
eq_type(UnknownType),
filter_cutoff(UnknownType),
filter_resonance(UnknownType),
filter_type(String),
fxNtomain(f32),
gate_onccN(UnknownType),
gate_attack(UnknownType),
gate_release(UnknownType),
gate_stlink(String),
gate_threshold(UnknownType),
phaser_depth(UnknownType),
phaser_feedback(UnknownType),
phaser_freq(f32),
phaser_phase_onccN(UnknownType),
phaser_stages(UnknownType),
phaser_waveform(UnknownType),
phaser_wet(UnknownType),
reverb_damp(UnknownType),
reverb_dry(UnknownType),
reverb_input(UnknownType),
reverb_predelay(f32),
reverb_size(UnknownType),
reverb_tone(UnknownType),
reverb_type(String),
reverb_wet(UnknownType),
static_cyclic_level(UnknownType),
static_cyclic_time(f32),
static_filter(String),
static_level(UnknownType),
static_random_level(UnknownType),
static_random_maxtime(f32),
static_random_mintime(f32),
static_stereo(UnknownType),
static_tone(UnknownType),
strings_number(UnknownType),
strings_wet_onccN(UnknownType),
tdfir_dry(UnknownType),
tdfir_gain(UnknownType),
tdfir_impulse(UnknownType),
tdfir_wet(UnknownType),
load_mode(u8),
load_start(UndefinedInteger),
load_end(UndefinedInteger),
sample_quality(u8),
image(String),
oscillator(String),
oscillator_detune(UnknownType),
oscillator_detune_onccN(UnknownType),
oscillator_mode(u8),
oscillator_mod_depth(UnknownType),
oscillator_mod_depth_onccN(UnknownType),
oscillator_mod_smoothccN(UnknownType),
oscillator_multi(u8),
oscillator_phase(f32),
oscillator_quality(u8),
oscillator_table_size(UnknownType),
}
impl Opcode {
pub fn default_value(&self) -> Option<OpcodeType> {
OPCODE_DEFAULT.get::<str>(&self.str_name()).cloned()
}
pub fn str_name(&self) -> String {
format!("{:?}", &self).split('(').collect::<Vec<&str>>()[0].to_string()
}
}