Merge branch 'global'
Conflicts:
.gitignore
effects.c
gdigi.c
gdigi.h
gdigi_xml.h
gui.c
gui.h
preset.c
preset_xml.c
effects.c: More effect_values_0_to_* arrays for various effects.
VALUE_TYPE_POSID for linkable effects.
Add the rest of the global settings (need to change USB_POSITION
to GLOBAL_POSITION throughout).
A few label typos.
New settings, groups, and effects for linkables.
Make the display three rows instead of two.
Add missing modifiers.
Add missing xml settings.
Code for handling/updating the global modifier linkable list.
effects.h Add VALUE_TYPE_POSID.
gdigi.c Tweaks for value formatting.
Use NOTIFY_MODIFIER_GROUP_CHANGED to drive the update of the combo
boxes for linkable effects.
Use RECEIVE_MODIFIER_LINKABLE_LIST to handle the update of the
combo boxes for linkable effects.
gdigi.h Minor changes.
gui.c Deprecate gtk_vbox_new().
Use simpler API gtk_combo_box_text_append_text().
Minor reformatting/whitespace changes.
Code to update combo boxes for linkable effects.
Code to retrieve global parameters from device at startup.
preset_xml.c
Some tweaks to map_xml_value() so that it's passed resolved
EffectValues for settings of type EXTRA.
This commit is contained in:
197
effects.c
197
effects.c
@@ -305,6 +305,14 @@ static EffectValues values_0_to_99 = {
|
|||||||
.min = 0.0, .max = 99.0, .type = VALUE_TYPE_PLAIN,
|
.min = 0.0, .max = 99.0, .type = VALUE_TYPE_PLAIN,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static EffectValues values_0_to_255 = {
|
||||||
|
.min = 0.0, .max = 255.0, .type = VALUE_TYPE_PLAIN,
|
||||||
|
};
|
||||||
|
|
||||||
|
static EffectValues values_0_to_29 = {
|
||||||
|
.min = 0.0, .max = 29.0, .type = VALUE_TYPE_PLAIN,
|
||||||
|
};
|
||||||
|
|
||||||
static EffectValues values_1_to_4 = {
|
static EffectValues values_1_to_4 = {
|
||||||
.min = 0.0, .max = 3.0,
|
.min = 0.0, .max = 3.0,
|
||||||
.type = VALUE_TYPE_OFFSET,
|
.type = VALUE_TYPE_OFFSET,
|
||||||
@@ -554,6 +562,10 @@ EffectValues values_on_off = {
|
|||||||
.labels = on_off_labels,
|
.labels = on_off_labels,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EffectValues values_posid = {
|
||||||
|
.type = VALUE_TYPE_POSID,
|
||||||
|
};
|
||||||
|
|
||||||
static EffectValues values_odd_even = {
|
static EffectValues values_odd_even = {
|
||||||
.min = 0.0, .max = 1.0,
|
.min = 0.0, .max = 1.0,
|
||||||
.type = VALUE_TYPE_LABEL,
|
.type = VALUE_TYPE_LABEL,
|
||||||
@@ -634,20 +646,19 @@ static EffectValues values_wah_type = {
|
|||||||
.type = VALUE_TYPE_LABEL,
|
.type = VALUE_TYPE_LABEL,
|
||||||
};
|
};
|
||||||
|
|
||||||
// 4259839 is 0x40 FFFF, i.e. 0x<pos> <val>.
|
|
||||||
static EffectValues values_exp_assign = {
|
static EffectValues values_exp_assign = {
|
||||||
.min = 0.0, .max = 4259839.0,
|
.min = 0.0, .max = 0x7fffffff,
|
||||||
.type = VALUE_TYPE_LABEL,
|
.type = VALUE_TYPE_POSID,
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectValues values_vswitch_pedal_assign = {
|
static EffectValues values_vswitch_pedal_assign = {
|
||||||
.min = 0.0, .max = 4259839.0,
|
.min = 0.0, .max = 0x7fffffff,
|
||||||
.type = VALUE_TYPE_LABEL,
|
.type = VALUE_TYPE_POSID,
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectValues values_vswitch_assign = {
|
static EffectValues values_vswitch_assign = {
|
||||||
.min = 0.0, .max = 4259839.0,
|
.min = 0.0, .max = 0x7fffffff,
|
||||||
.type = VALUE_TYPE_LABEL,
|
.type = VALUE_TYPE_POSID,
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectValues values_vswitch_type = {
|
static EffectValues values_vswitch_type = {
|
||||||
@@ -656,8 +667,8 @@ static EffectValues values_vswitch_type = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static EffectValues values_lfo_assign = {
|
static EffectValues values_lfo_assign = {
|
||||||
.min = 0.0, .max = 1.0,
|
.min = 0.0, .max = 0x7fffffff,
|
||||||
.type = VALUE_TYPE_LABEL,
|
.type = VALUE_TYPE_POSID,
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectValues values_lfo_none = {
|
static EffectValues values_lfo_none = {
|
||||||
@@ -668,13 +679,13 @@ static EffectValues values_lfo_none = {
|
|||||||
static EffectValues values_lfo_speed_extra = {
|
static EffectValues values_lfo_speed_extra = {
|
||||||
.min = 95.0, .max = 185.0,
|
.min = 95.0, .max = 185.0,
|
||||||
.type = VALUE_TYPE_PLAIN | VALUE_TYPE_OFFSET | VALUE_TYPE_STEP | VALUE_TYPE_DECIMAL,
|
.type = VALUE_TYPE_PLAIN | VALUE_TYPE_OFFSET | VALUE_TYPE_STEP | VALUE_TYPE_DECIMAL,
|
||||||
.offset = 5.0, .step = 0.1, .decimal = 1, .suffix = "Hz",
|
.offset = -85.0, .step = 0.1, .decimal = 1, .suffix = "Hz",
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectValues values_lfo_speed = {
|
static EffectValues values_lfo_speed = {
|
||||||
.min = 0.0, .max = 94.0,
|
.min = 0.0, .max = 94.0,
|
||||||
.type = VALUE_TYPE_PLAIN | VALUE_TYPE_OFFSET | VALUE_TYPE_STEP | VALUE_TYPE_DECIMAL | VALUE_TYPE_EXTRA | VALUE_TYPE_SUFFIX,
|
.type = VALUE_TYPE_PLAIN | VALUE_TYPE_OFFSET | VALUE_TYPE_STEP | VALUE_TYPE_DECIMAL | VALUE_TYPE_EXTRA | VALUE_TYPE_SUFFIX,
|
||||||
.offset = 5, .step = 0.01, .decimal = 1, .suffix = "Hz",
|
.offset = 5, .step = 0.01, .decimal = 2, .suffix = "Hz",
|
||||||
.extra = &values_lfo_speed_extra,
|
.extra = &values_lfo_speed_extra,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -709,9 +720,14 @@ static EffectValues values_rp_mix = {
|
|||||||
.min = 0.0, .max = 100.0, .type = VALUE_TYPE_PLAIN,
|
.min = 0.0, .max = 100.0, .type = VALUE_TYPE_PLAIN,
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectSettings usb_settings[] = {
|
static EffectSettings global_settings[] = {
|
||||||
{"USB/RP Mix", USB_AUDIO_PLAYBACK_MIX, GLOBAL_POSITION, &values_rp_mix},
|
{"USB/RP Mix", USB_AUDIO_PLAYBACK_MIX, GLOBAL_POSITION, &values_rp_mix},
|
||||||
{"USB Level", USB_AUDIO_LEVEL, GLOBAL_POSITION, &values_m12_to_24},
|
{"USB Level", USB_AUDIO_LEVEL, GLOBAL_POSITION, &values_m12_to_24},
|
||||||
|
{"GUI Mode", GUI_MODE_ON_OFF, GLOBAL_POSITION, &values_on_off},
|
||||||
|
{"Tuning Reference", TUNING_REFERENCE, GLOBAL_POSITION, &values_0_to_29},
|
||||||
|
{"Pedal Position", EXP_PEDAL_LEVEL, USB_POSITION, &values_0_to_255},
|
||||||
|
{"Stomp", STOMP_MODE, GLOBAL_POSITION, &values_on_off},
|
||||||
|
{"Wah Pedal Position", WAH_PEDAL_POSITION, WAH_POSITION, &values_0_to_99},
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectSettings misc_settings[] = {
|
static EffectSettings misc_settings[] = {
|
||||||
@@ -1467,7 +1483,7 @@ static EffectSettings delay_tape_settings[] = {
|
|||||||
{"Time", DELAY_TIME, DELAY_POSITION, &values_delay_time},
|
{"Time", DELAY_TIME, DELAY_POSITION, &values_delay_time},
|
||||||
{"Level", DELAY_LEVEL, DELAY_POSITION, &values_0_to_99},
|
{"Level", DELAY_LEVEL, DELAY_POSITION, &values_0_to_99},
|
||||||
{"Repeats", DELAY_REPEATS, DELAY_POSITION, &values_delay_repeats},
|
{"Repeats", DELAY_REPEATS, DELAY_POSITION, &values_delay_repeats},
|
||||||
{"Wow", DELAY_TAPE_WOW, DELAY_POSITION, &values_0_to_99},
|
{"Delay Tape Wow", DELAY_TAPE_WOW, DELAY_POSITION, &values_0_to_99},
|
||||||
{"Flutter", DELAY_TAPE_FLUTTER, DELAY_POSITION, &values_0_to_99},
|
{"Flutter", DELAY_TAPE_FLUTTER, DELAY_POSITION, &values_0_to_99},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1528,8 +1544,8 @@ static EffectSettings rp500_delay_tape_settings[] = {
|
|||||||
{"Tap Time", DELAY_TAP_TIME_0_4990, DELAY_POSITION, &values_delay_time_0_4990},
|
{"Tap Time", DELAY_TAP_TIME_0_4990, DELAY_POSITION, &values_delay_time_0_4990},
|
||||||
{"Repeats", DELAY_REPEATS, DELAY_POSITION, &values_delay_repeats},
|
{"Repeats", DELAY_REPEATS, DELAY_POSITION, &values_delay_repeats},
|
||||||
{"Level", DELAY_LEVEL, DELAY_POSITION, &values_0_to_99},
|
{"Level", DELAY_LEVEL, DELAY_POSITION, &values_0_to_99},
|
||||||
{"Tape Wow", DELAY_TAPE_WOW, DELAY_POSITION, &values_0_to_99},
|
{"Delay Tape Wow", DELAY_TAPE_WOW, DELAY_POSITION, &values_0_to_99},
|
||||||
{"Tape Flutter", DELAY_TAPE_FLUTTER, DELAY_POSITION, &values_0_to_99},
|
{"Delay Tape Flutter", DELAY_TAPE_FLUTTER, DELAY_POSITION, &values_0_to_99},
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectSettings rp1000_delay_lo_fi_settings[] = {
|
static EffectSettings rp1000_delay_lo_fi_settings[] = {
|
||||||
@@ -1557,6 +1573,25 @@ static EffectSettings gnx3k_reverb_settings[] = {
|
|||||||
{"Level", REVERB_LEVEL, REVERB_POSITION, &values_0_to_99},
|
{"Level", REVERB_LEVEL, REVERB_POSITION, &values_0_to_99},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static EffectSettings pedal1_assign_settings[] = {
|
||||||
|
{"Pedal Min 1", EXP_MIN, EXP_POSITION, &values_0_to_99,},
|
||||||
|
{"Pedal Max 1", EXP_MAX, EXP_POSITION, &values_0_to_99,},
|
||||||
|
};
|
||||||
|
|
||||||
|
static EffectSettings lfo1_settings[] = {
|
||||||
|
{"Heel", LFO_MIN, LFO1_POSITION, &values_0_to_99},
|
||||||
|
{"Toe", LFO_MAX, LFO1_POSITION, &values_0_to_99},
|
||||||
|
{"Waveform", LFO_WAVEFORM, LFO1_POSITION, &values_waveform},
|
||||||
|
{"Speed(HZ)", LFO_SPEED, LFO1_POSITION, &values_lfo_speed},
|
||||||
|
};
|
||||||
|
|
||||||
|
static EffectSettings lfo2_settings[] = {
|
||||||
|
{"Heel", LFO_MIN, LFO2_POSITION, &values_0_to_99},
|
||||||
|
{"Toe", LFO_MAX, LFO2_POSITION, &values_0_to_99},
|
||||||
|
{"Waveform", LFO_WAVEFORM, LFO2_POSITION, &values_waveform},
|
||||||
|
{"Speed(HZ)", LFO_SPEED, LFO2_POSITION, &values_lfo_speed},
|
||||||
|
};
|
||||||
|
|
||||||
static EffectSettings reverb_lex_settings[] = {
|
static EffectSettings reverb_lex_settings[] = {
|
||||||
{"Predelay", REVERB_PREDELAY, REVERB_POSITION, &values_0_to_15},
|
{"Predelay", REVERB_PREDELAY, REVERB_POSITION, &values_0_to_15},
|
||||||
{"Decay", REVERB_DECAY, REVERB_POSITION, &values_0_to_99},
|
{"Decay", REVERB_DECAY, REVERB_POSITION, &values_0_to_99},
|
||||||
@@ -1600,8 +1635,8 @@ static EffectGroup gnx3k_amp_channel_group[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** \todo it's not part of Preset, but should appear in GUI */
|
/** \todo it's not part of Preset, but should appear in GUI */
|
||||||
static EffectGroup usb_group[] = {
|
static EffectGroup global_group[] = {
|
||||||
{-1, NULL, usb_settings, G_N_ELEMENTS(usb_settings)},
|
{-1, NULL, global_settings, G_N_ELEMENTS(global_settings)},
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectGroup misc_group[] = {
|
static EffectGroup misc_group[] = {
|
||||||
@@ -1923,6 +1958,21 @@ static EffectGroup rp355_chorusfx_group[] = {
|
|||||||
{CHORUS_TYPE_OCTAVER, "Octaver", chorusfx_octaver_settings, G_N_ELEMENTS(chorusfx_octaver_settings)},
|
{CHORUS_TYPE_OCTAVER, "Octaver", chorusfx_octaver_settings, G_N_ELEMENTS(chorusfx_octaver_settings)},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static EffectGroup rp355_pedal1_assign_group[] = {
|
||||||
|
{ 0, NULL, pedal1_assign_settings, G_N_ELEMENTS(pedal1_assign_settings)},
|
||||||
|
{ 0, "None", NULL, 0},
|
||||||
|
};
|
||||||
|
|
||||||
|
static EffectGroup rp355_lfo2_group[] = {
|
||||||
|
{ 0, NULL, lfo2_settings, G_N_ELEMENTS(lfo2_settings)},
|
||||||
|
{ 0, "None", NULL, 0},
|
||||||
|
};
|
||||||
|
|
||||||
|
static EffectGroup rp355_lfo1_group[] = {
|
||||||
|
{ 0, NULL, lfo1_settings, G_N_ELEMENTS(lfo1_settings)},
|
||||||
|
{ 0, "None", NULL, 0},
|
||||||
|
};
|
||||||
|
|
||||||
static EffectGroup rp500_chorusfx_group[] = {
|
static EffectGroup rp500_chorusfx_group[] = {
|
||||||
{CHORUS_TYPE_CE, "CE Chorus", chorusfx_ce_settings, G_N_ELEMENTS(chorusfx_ce_settings)},
|
{CHORUS_TYPE_CE, "CE Chorus", chorusfx_ce_settings, G_N_ELEMENTS(chorusfx_ce_settings)},
|
||||||
{CHORUS_TYPE_TC, "TC Chorus", chorusfx_tc_settings, G_N_ELEMENTS(chorusfx_tc_settings)},
|
{CHORUS_TYPE_TC, "TC Chorus", chorusfx_tc_settings, G_N_ELEMENTS(chorusfx_tc_settings)},
|
||||||
@@ -2793,8 +2843,24 @@ static Effect rp255_chorusfx_effect[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static Effect rp355_chorusfx_effect[] = {
|
static Effect rp355_chorusfx_effect[] = {
|
||||||
{"Position",-1, CHORUSFX_PRE_POST,CHORUSFX_POSITION, pre_post_group,G_N_ELEMENTS(pre_post_group)},
|
|
||||||
{NULL, CHORUSFX_ON_OFF,CHORUSFX_TYPE, CHORUSFX_POSITION, rp355_chorusfx_group, G_N_ELEMENTS(rp355_chorusfx_group)},
|
{NULL, CHORUSFX_ON_OFF,CHORUSFX_TYPE, CHORUSFX_POSITION, rp355_chorusfx_group, G_N_ELEMENTS(rp355_chorusfx_group)},
|
||||||
|
{"Position",-1, CHORUSFX_PRE_POST,CHORUSFX_POSITION, pre_post_group,G_N_ELEMENTS(pre_post_group)},
|
||||||
|
};
|
||||||
|
|
||||||
|
static Effect rp355_lfo1_effect[] = {
|
||||||
|
{NULL, -1, LFO_TYPE, LFO1_POSITION, rp355_lfo1_group, G_N_ELEMENTS(rp355_lfo1_group)},
|
||||||
|
};
|
||||||
|
|
||||||
|
static Effect rp355_lfo2_effect[] = {
|
||||||
|
{NULL, -1, LFO_TYPE, LFO2_POSITION, rp355_lfo2_group, G_N_ELEMENTS(rp355_lfo2_group)},
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The elements of this group are discovered dynamically from the
|
||||||
|
* MODIFIER_LINKABLE_LIST message.
|
||||||
|
*/
|
||||||
|
static Effect rp355_pedal1_assign_effect[] = {
|
||||||
|
{NULL, -1, EXP_TYPE, EXP_POSITION, rp355_pedal1_assign_group, G_N_ELEMENTS(rp355_pedal1_assign_group)},
|
||||||
};
|
};
|
||||||
|
|
||||||
static Effect rp500_chorusfx_effect[] = {
|
static Effect rp500_chorusfx_effect[] = {
|
||||||
@@ -2912,6 +2978,10 @@ static Effect rp500_eq_effect[] = {
|
|||||||
{"Enable Equalizer", EQ_ENABLE, -1, EQ_A_POSITION, rp500_eq_group, G_N_ELEMENTS(rp500_eq_group)},
|
{"Enable Equalizer", EQ_ENABLE, -1, EQ_A_POSITION, rp500_eq_group, G_N_ELEMENTS(rp500_eq_group)},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static Effect global_effect[] = {
|
||||||
|
{NULL, -1, USB_AUDIO_LEVEL, USB_POSITION, global_group, G_N_ELEMENTS(global_group)},
|
||||||
|
};
|
||||||
|
|
||||||
static Effect pickup_misc_effect[] = {
|
static Effect pickup_misc_effect[] = {
|
||||||
{NULL, PICKUP_ON_OFF, PICKUP_TYPE, PICKUP_POSITION, pickup_group, G_N_ELEMENTS(pickup_group)},
|
{NULL, PICKUP_ON_OFF, PICKUP_TYPE, PICKUP_POSITION, pickup_group, G_N_ELEMENTS(pickup_group)},
|
||||||
{NULL, -1, PRESET_LEVEL, PRESET_POSITION, misc_group, G_N_ELEMENTS(misc_group)},
|
{NULL, -1, PRESET_LEVEL, PRESET_POSITION, misc_group, G_N_ELEMENTS(misc_group)},
|
||||||
@@ -3002,6 +3072,10 @@ static EffectList rp355_effects[] = {
|
|||||||
{"Chorus/FX", rp355_chorusfx_effect, G_N_ELEMENTS(rp355_chorusfx_effect)},
|
{"Chorus/FX", rp355_chorusfx_effect, G_N_ELEMENTS(rp355_chorusfx_effect)},
|
||||||
{"Delay", rp355_delay_effect, G_N_ELEMENTS(rp355_delay_effect)},
|
{"Delay", rp355_delay_effect, G_N_ELEMENTS(rp355_delay_effect)},
|
||||||
{"Reverb", reverb_effect, G_N_ELEMENTS(reverb_effect)},
|
{"Reverb", reverb_effect, G_N_ELEMENTS(reverb_effect)},
|
||||||
|
{"Pedal1 Assign", rp355_pedal1_assign_effect, G_N_ELEMENTS(rp355_pedal1_assign_effect)},
|
||||||
|
{"LFO1", rp355_lfo1_effect, G_N_ELEMENTS(rp355_lfo1_effect)},
|
||||||
|
{"LFO2", rp355_lfo2_effect, G_N_ELEMENTS(rp355_lfo2_effect)},
|
||||||
|
{"Global Settings", global_effect, G_N_ELEMENTS(global_effect)},
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectList rp500_effects[] = {
|
static EffectList rp500_effects[] = {
|
||||||
@@ -3093,7 +3167,7 @@ static EffectPage rp255_pages[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static EffectPage rp355_pages[] = {
|
static EffectPage rp355_pages[] = {
|
||||||
{"Effects", rp355_effects, G_N_ELEMENTS(rp355_effects), 2},
|
{"Effects", rp355_effects, G_N_ELEMENTS(rp355_effects), 3},
|
||||||
};
|
};
|
||||||
|
|
||||||
static EffectPage rp500_pages[] = {
|
static EffectPage rp500_pages[] = {
|
||||||
@@ -3237,6 +3311,8 @@ static Modifier modifiers[] = {
|
|||||||
{"Compressor Tone", COMP_TONE, COMP_POSITION, &values_0_to_99},
|
{"Compressor Tone", COMP_TONE, COMP_POSITION, &values_0_to_99},
|
||||||
{"Compressor Level", COMP_LEVEL, COMP_POSITION, &values_0_to_99},
|
{"Compressor Level", COMP_LEVEL, COMP_POSITION, &values_0_to_99},
|
||||||
{"Compressor Attack", COMP_ATTACK, COMP_POSITION, &values_0_to_99},
|
{"Compressor Attack", COMP_ATTACK, COMP_POSITION, &values_0_to_99},
|
||||||
|
{"Compressor Sensitivity", COMP_SENSITIVITY, COMP_POSITION, &values_0_to_99},
|
||||||
|
{"Compressor Output", COMP_OUTPUT, COMP_POSITION, &values_0_to_99},
|
||||||
{"Dist Enable", DIST_ON_OFF, DIST_POSITION, &values_on_off},
|
{"Dist Enable", DIST_ON_OFF, DIST_POSITION, &values_on_off},
|
||||||
{"Dist Drive", DIST_SCREAMER_DRIVE, DIST_POSITION, &values_0_to_99},
|
{"Dist Drive", DIST_SCREAMER_DRIVE, DIST_POSITION, &values_0_to_99},
|
||||||
{"Dist Tone", DIST_SCREAMER_TONE, DIST_POSITION, &values_0_to_99},
|
{"Dist Tone", DIST_SCREAMER_TONE, DIST_POSITION, &values_0_to_99},
|
||||||
@@ -3279,22 +3355,22 @@ static Modifier modifiers[] = {
|
|||||||
{"Dist Sustain", DIST_MP_SUSTAIN, DIST_POSITION, &values_0_to_99},
|
{"Dist Sustain", DIST_MP_SUSTAIN, DIST_POSITION, &values_0_to_99},
|
||||||
{"Dist Tone", DIST_MP_TONE, DIST_POSITION, &values_0_to_99},
|
{"Dist Tone", DIST_MP_TONE, DIST_POSITION, &values_0_to_99},
|
||||||
{"Dist Volume", DIST_MP_VOLUME, DIST_POSITION, &values_0_to_99},
|
{"Dist Volume", DIST_MP_VOLUME, DIST_POSITION, &values_0_to_99},
|
||||||
{"Amp Channel Enable", AMP_ON_OFF, AMP_A_POSITION, &values_on_off},
|
{"Amp Enable", AMP_ON_OFF, AMP_A_POSITION, &values_on_off},
|
||||||
{"Amp Gain", AMP_GAIN, AMP_A_POSITION, &values_0_to_99},
|
{"Amp Gain", AMP_GAIN, AMP_A_POSITION, &values_0_to_99},
|
||||||
{"Amp Level", AMP_LEVEL, AMP_A_POSITION, &values_0_to_99},
|
{"Amp Level", AMP_LEVEL, AMP_A_POSITION, &values_0_to_99},
|
||||||
{"Amp Channel Enable", AMP_ON_OFF, AMP_B_POSITION, &values_on_off},
|
{"Amp B Enable", AMP_ON_OFF, AMP_B_POSITION, &values_on_off},
|
||||||
{"Amp Gain", AMP_GAIN, AMP_B_POSITION, &values_0_to_99},
|
{"Amp B Gain", AMP_GAIN, AMP_B_POSITION, &values_0_to_99},
|
||||||
{"Amp Level", AMP_LEVEL, AMP_B_POSITION, &values_0_to_99},
|
{"Amp B Level", AMP_LEVEL, AMP_B_POSITION, &values_0_to_99},
|
||||||
{"EQ Enable", EQ_ENABLE, EQ_A_POSITION, &values_on_off},
|
{"EQ Enable", EQ_ENABLE, EQ_A_POSITION, &values_on_off},
|
||||||
{"EQ Bass", EQ_BASS, EQ_A_POSITION, &values_eq_db},
|
{"EQ Bass", EQ_BASS, EQ_A_POSITION, &values_eq_db},
|
||||||
{"EQ Mid", EQ_MID, EQ_A_POSITION, &values_eq_db},
|
{"EQ Mid", EQ_MID, EQ_A_POSITION, &values_eq_db},
|
||||||
{"EQ Treb", EQ_TREB, EQ_A_POSITION, &values_eq_db},
|
{"EQ Treb", EQ_TREB, EQ_A_POSITION, &values_eq_db},
|
||||||
{"EQ Treb", EQ_PRESENCE, EQ_A_POSITION, &values_eq_db},
|
{"EQ Treb", EQ_PRESENCE, EQ_A_POSITION, &values_eq_db},
|
||||||
{"EQ Enable", EQ_ENABLE, EQ_B_POSITION, &values_on_off},
|
{"EQ B Enable", EQ_ENABLE, EQ_B_POSITION, &values_on_off},
|
||||||
{"EQ Bass", EQ_BASS, EQ_B_POSITION, &values_eq_db},
|
{"EQ B Bass", EQ_BASS, EQ_B_POSITION, &values_eq_db},
|
||||||
{"EQ Mid", EQ_MID, EQ_B_POSITION, &values_eq_db},
|
{"EQ B Mid", EQ_MID, EQ_B_POSITION, &values_eq_db},
|
||||||
{"EQ Treb", EQ_TREB, EQ_B_POSITION, &values_eq_db},
|
{"EQ B Treb", EQ_TREB, EQ_B_POSITION, &values_eq_db},
|
||||||
{"EQ Treb", EQ_PRESENCE, EQ_B_POSITION, &values_eq_db},
|
{"EQ B Treb", EQ_PRESENCE, EQ_B_POSITION, &values_eq_db},
|
||||||
{"Gate Enable", NOISEGATE_ON_OFF, NOISEGATE_POSITION, &values_on_off},
|
{"Gate Enable", NOISEGATE_ON_OFF, NOISEGATE_POSITION, &values_on_off},
|
||||||
{"Gate Pluck Sens", NOISEGATE_SWELL_SENS, NOISEGATE_POSITION, &values_0_to_99},
|
{"Gate Pluck Sens", NOISEGATE_SWELL_SENS, NOISEGATE_POSITION, &values_0_to_99},
|
||||||
{"Gate Threshold", NOISEGATE_GATE_TRESHOLD, NOISEGATE_POSITION, &values_0_to_99},
|
{"Gate Threshold", NOISEGATE_GATE_TRESHOLD, NOISEGATE_POSITION, &values_0_to_99},
|
||||||
@@ -3307,10 +3383,19 @@ static Modifier modifiers[] = {
|
|||||||
{"Phaser Regen", PHASER_REGEN, CHORUSFX_POSITION, &values_0_to_99},
|
{"Phaser Regen", PHASER_REGEN, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Phaser Waveform", PHASER_WAVE, CHORUSFX_POSITION, &values_waveform},
|
{"Phaser Waveform", PHASER_WAVE, CHORUSFX_POSITION, &values_waveform},
|
||||||
{"Phaser Level", PHASER_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
{"Phaser Level", PHASER_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Phaser Intensity", MX_PHASER_INTENSITY, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Trig Phaser Speed", TRIG_PHASER_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Trig Phaser Sens", TRIG_PHASER_SENS, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Trig Phaser LFO", TRIG_PHASER_LFO_START, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Trig Phaser Level", TRIG_PHASER_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"EH Phaser Rate", EH_PHASER_RATE, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"EH Phaser Color", EH_PHASER_COLOR, CHORUSFX_POSITION, &values_on_off},
|
||||||
{"Chorus Speed", CHORUS_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
{"Chorus Speed", CHORUS_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Chorus Depth", CHORUS_DEPTH, CHORUSFX_POSITION, &values_0_to_99},
|
{"Chorus Depth", CHORUS_DEPTH, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Chorus Level", CHORUS_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
{"Chorus Level", CHORUS_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Chorus Waveform", CHORUS_WAVE, CHORUSFX_POSITION, &values_waveform},
|
{"Chorus Waveform", CHORUS_WAVE, CHORUSFX_POSITION, &values_waveform},
|
||||||
|
{"Chorus Width", CHORUS_WIDTH, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Chorus Intensity", CHORUS_INTENSITY, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Flanger Speed", FLANGER_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
{"Flanger Speed", FLANGER_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Flanger Depth", FLANGER_DEPTH, CHORUSFX_POSITION, &values_0_to_99},
|
{"Flanger Depth", FLANGER_DEPTH, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Flanger Regen", FLANGER_REGEN, CHORUSFX_POSITION, &values_0_to_99},
|
{"Flanger Regen", FLANGER_REGEN, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
@@ -3318,6 +3403,13 @@ static Modifier modifiers[] = {
|
|||||||
{"Flanger Level", FLANGER_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
{"Flanger Level", FLANGER_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Flanger Width", MXR_FLANGER_WIDTH, CHORUSFX_POSITION, &values_0_to_99},
|
{"Flanger Width", MXR_FLANGER_WIDTH, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Flanger Manual", MXR_FLANGER_MANUAL, CHORUSFX_POSITION, &values_0_to_99},
|
{"Flanger Manual", MXR_FLANGER_MANUAL, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Flanger Level", TRIG_FLANGER_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Flanger Sens", TRIG_FLANGER_SENS, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Flanger LFO Start", TRIG_FLANGER_LFO_START, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Flanger Speed", TRIG_FLANGER_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Flanger Range", EH_FLANGER_RANGE, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Flanger Rate", EH_FLANGER_RATE, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Flanger Color", EH_FLANGER_COLOR, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Vibrato Speed", VIBRATO_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
{"Vibrato Speed", VIBRATO_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Vibrato Depth", VIBRATO_DEPTH, CHORUSFX_POSITION, &values_0_to_99},
|
{"Vibrato Depth", VIBRATO_DEPTH, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Rotary Speed", ROTARY_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
{"Rotary Speed", ROTARY_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
@@ -3328,6 +3420,10 @@ static Modifier modifiers[] = {
|
|||||||
{"VibroPan Depth", VIBROPAN_DEPTH, CHORUSFX_POSITION, &values_0_to_99},
|
{"VibroPan Depth", VIBROPAN_DEPTH, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"VibroPan VibratoPan", VIBROPAN_VIBRA, CHORUSFX_POSITION, &values_0_to_99},
|
{"VibroPan VibratoPan", VIBROPAN_VIBRA, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"VibroPan Waveform", VIBROPAN_WAVE, CHORUSFX_POSITION, &values_waveform},
|
{"VibroPan Waveform", VIBROPAN_WAVE, CHORUSFX_POSITION, &values_waveform},
|
||||||
|
{"Unovibe Speed", UNOVIBE_PEDAL_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Unovibe Intensity", UNOVIBE_INTENSITY, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Unovibe Volume", UNOVIBE_VOLUME, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Unovibe Chorus/Vibrato", UNOVIBE_CHORUS_VIBRATO, CHORUSFX_POSITION, &values_chorus_vibrato},
|
||||||
{"Tremolo Speed", TREMOLO_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
{"Tremolo Speed", TREMOLO_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Tremolo Depth", TREMOLO_DEPTH, CHORUSFX_POSITION, &values_0_to_99},
|
{"Tremolo Depth", TREMOLO_DEPTH, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Tremolo Waveform", TREMOLO_WAVE, CHORUSFX_POSITION, &values_waveform},
|
{"Tremolo Waveform", TREMOLO_WAVE, CHORUSFX_POSITION, &values_waveform},
|
||||||
@@ -3336,6 +3432,7 @@ static Modifier modifiers[] = {
|
|||||||
{"Panner Waveform", PANNER_WAVE, CHORUSFX_POSITION, &values_waveform},
|
{"Panner Waveform", PANNER_WAVE, CHORUSFX_POSITION, &values_waveform},
|
||||||
{"Envelope Sens.", ENVELOPE_SENSITIVITY, CHORUSFX_POSITION, &values_0_to_99},
|
{"Envelope Sens.", ENVELOPE_SENSITIVITY, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Envelope Range", ENVELOPE_RANGE, CHORUSFX_POSITION, &values_0_to_99},
|
{"Envelope Range", ENVELOPE_RANGE, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Envelope Blend", ENVELOPE_BLEND, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"AutoYa Speed", AUTOYA_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
{"AutoYa Speed", AUTOYA_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"AutoYa Intensity", AUTOYA_INTENSITY, CHORUSFX_POSITION, &values_0_to_99},
|
{"AutoYa Intensity", AUTOYA_INTENSITY, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"AutoYa Range", AUTOYA_RANGE, CHORUSFX_POSITION, &values_0_to_49},
|
{"AutoYa Range", AUTOYA_RANGE, CHORUSFX_POSITION, &values_0_to_49},
|
||||||
@@ -3344,6 +3441,11 @@ static Modifier modifiers[] = {
|
|||||||
{"YaYa Range", YAYA_RANGE, CHORUSFX_POSITION, &values_0_to_49},
|
{"YaYa Range", YAYA_RANGE, CHORUSFX_POSITION, &values_0_to_49},
|
||||||
{"Step Filter Speed", STEP_FILTER_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
{"Step Filter Speed", STEP_FILTER_SPEED, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Step Filter Intensity", STEP_FILTER_INTENSITY, CHORUSFX_POSITION, &values_0_to_99},
|
{"Step Filter Intensity", STEP_FILTER_INTENSITY, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Synth Talk Attack", SYNTH_TALK_ATTACK, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Synth Talk Release", SYNTH_TALK_RELEASE, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Synth Talk Sens", SYNTH_TALK_SENS, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Synth Talk Vox", SYNTH_TALK_VOX, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Synth Talk Balance", SYNTH_TALK_BALANCE, CHORUSFX_POSITION, &values_balance},
|
||||||
{"Whammy Amount", WHAMMY_AMOUNT, CHORUSFX_POSITION, &values_whammy_amount},
|
{"Whammy Amount", WHAMMY_AMOUNT, CHORUSFX_POSITION, &values_whammy_amount},
|
||||||
{"Whammy Pedal", WHAMMY_PEDAL, CHORUSFX_POSITION, &values_0_to_99},
|
{"Whammy Pedal", WHAMMY_PEDAL, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
{"Whammy Mix", WHAMMY_MIX, CHORUSFX_POSITION, &values_0_to_99},
|
{"Whammy Mix", WHAMMY_MIX, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
@@ -3355,6 +3457,10 @@ static Modifier modifiers[] = {
|
|||||||
{"IPS Key", IPS_KEY, CHORUSFX_POSITION, &values_ips_key},
|
{"IPS Key", IPS_KEY, CHORUSFX_POSITION, &values_ips_key},
|
||||||
{"IPS Scale", IPS_SCALE, CHORUSFX_POSITION, &values_ips_scale},
|
{"IPS Scale", IPS_SCALE, CHORUSFX_POSITION, &values_ips_scale},
|
||||||
{"IPS Level", IPS_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
{"IPS Level", IPS_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Octaver Octave 1", OCTAVER_OCTAVE1, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Octaver Octave 2", OCTAVER_OCTAVE2, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
{"Octaver Dry Level", OCTAVER_DRY_LEVEL, CHORUSFX_POSITION, &values_0_to_99},
|
||||||
|
|
||||||
{"Delay Enable", DELAY_ON_OFF, DELAY_POSITION, &values_on_off},
|
{"Delay Enable", DELAY_ON_OFF, DELAY_POSITION, &values_on_off},
|
||||||
{"Delay Time", DELAY_TIME, DELAY_POSITION, &values_delay_time},
|
{"Delay Time", DELAY_TIME, DELAY_POSITION, &values_delay_time},
|
||||||
{"Delay Repeats", DELAY_REPEATS, DELAY_POSITION, &values_delay_repeats},
|
{"Delay Repeats", DELAY_REPEATS, DELAY_POSITION, &values_delay_repeats},
|
||||||
@@ -3369,8 +3475,8 @@ static Modifier modifiers[] = {
|
|||||||
{"Reverb Liveliness", REVERB_LIVELINESS, REVERB_POSITION, &values_0_to_99},
|
{"Reverb Liveliness", REVERB_LIVELINESS, REVERB_POSITION, &values_0_to_99},
|
||||||
{"Reverb Level", REVERB_LEVEL, REVERB_POSITION, &values_0_to_99},
|
{"Reverb Level", REVERB_LEVEL, REVERB_POSITION, &values_0_to_99},
|
||||||
{"Reverb Predelay", REVERB_PREDELAY, REVERB_POSITION, &values_0_to_15},
|
{"Reverb Predelay", REVERB_PREDELAY, REVERB_POSITION, &values_0_to_15},
|
||||||
{"Volume Pre FX", 2626, 13, &values_0_to_99},
|
{"Volume Pre FX", PRESET_LEVEL, VOLUME_PRE_FX_POSITION, &values_0_to_99},
|
||||||
{"Volume Post FX", 2626, 17, &values_0_to_99},
|
{"Volume Post FX", PRESET_LEVEL, VOLUME_POST_FX_POSITION, &values_0_to_99},
|
||||||
};
|
};
|
||||||
|
|
||||||
int n_modifiers = G_N_ELEMENTS(modifiers);
|
int n_modifiers = G_N_ELEMENTS(modifiers);
|
||||||
@@ -3820,6 +3926,9 @@ static XmlLabel xml_fx_lib_labels[] = {
|
|||||||
{EFFECTS_LIB_ROTARY_TAPE, "Rotary + Tape Delay"},
|
{EFFECTS_LIB_ROTARY_TAPE, "Rotary + Tape Delay"},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static XmlLabel xml_rhold_labels[] = {
|
||||||
|
{100, "RHold"},
|
||||||
|
};
|
||||||
/* Array to map id/position pairs to labels and settings. */
|
/* Array to map id/position pairs to labels and settings. */
|
||||||
XmlSettings xml_settings[] = {
|
XmlSettings xml_settings[] = {
|
||||||
{0, 0, "None", NULL,},
|
{0, 0, "None", NULL,},
|
||||||
@@ -3914,6 +4023,9 @@ XmlSettings xml_settings[] = {
|
|||||||
{PHASER_REGEN, CHORUSFX_POSITION, "Phaser Regen", &values_0_to_99,},
|
{PHASER_REGEN, CHORUSFX_POSITION, "Phaser Regen", &values_0_to_99,},
|
||||||
{PHASER_WAVE, CHORUSFX_POSITION, "Phaser Waveform", &values_waveform, xml_waveform_labels, G_N_ELEMENTS(xml_waveform_labels)},
|
{PHASER_WAVE, CHORUSFX_POSITION, "Phaser Waveform", &values_waveform, xml_waveform_labels, G_N_ELEMENTS(xml_waveform_labels)},
|
||||||
{PHASER_LEVEL, CHORUSFX_POSITION, "Phaser Level", &values_0_to_99,},
|
{PHASER_LEVEL, CHORUSFX_POSITION, "Phaser Level", &values_0_to_99,},
|
||||||
|
{EH_PHASER_RATE, CHORUSFX_POSITION, "Phaser Rate", &values_0_to_99,},
|
||||||
|
{EH_PHASER_COLOR, CHORUSFX_POSITION, "Phaser xml Color", &values_on_off, xml_on_off_labels,G_N_ELEMENTS(xml_on_off_labels)},
|
||||||
|
{MX_PHASER_INTENSITY, CHORUSFX_POSITION, "Intensity", &values_1_to_4,},
|
||||||
{CHORUS_SPEED, CHORUSFX_POSITION, "Chorus Speed", &values_0_to_99,},
|
{CHORUS_SPEED, CHORUSFX_POSITION, "Chorus Speed", &values_0_to_99,},
|
||||||
{CHORUS_DEPTH, CHORUSFX_POSITION, "Chorus Depth", &values_0_to_99,},
|
{CHORUS_DEPTH, CHORUSFX_POSITION, "Chorus Depth", &values_0_to_99,},
|
||||||
{CHORUS_LEVEL, CHORUSFX_POSITION, "Chorus Level", &values_0_to_99,},
|
{CHORUS_LEVEL, CHORUSFX_POSITION, "Chorus Level", &values_0_to_99,},
|
||||||
@@ -3975,7 +4087,7 @@ XmlSettings xml_settings[] = {
|
|||||||
{DELAY_TYPE, DELAY_POSITION, "Delay Type", &values_delay_type, xml_delay_labels, G_N_ELEMENTS(xml_delay_labels)},
|
{DELAY_TYPE, DELAY_POSITION, "Delay Type", &values_delay_type, xml_delay_labels, G_N_ELEMENTS(xml_delay_labels)},
|
||||||
{DELAY_ON_OFF, DELAY_POSITION, "Delay Enable", &values_on_off, xml_on_off_labels, G_N_ELEMENTS(xml_on_off_labels)},
|
{DELAY_ON_OFF, DELAY_POSITION, "Delay Enable", &values_on_off, xml_on_off_labels, G_N_ELEMENTS(xml_on_off_labels)},
|
||||||
{DELAY_TIME, DELAY_POSITION, "Delay Time", &values_delay_time,},
|
{DELAY_TIME, DELAY_POSITION, "Delay Time", &values_delay_time,},
|
||||||
{DELAY_REPEATS, DELAY_POSITION, "Delay Repeats", &values_delay_repeats,},
|
{DELAY_REPEATS, DELAY_POSITION, "Delay Repeats", &values_delay_repeats, xml_rhold_labels, G_N_ELEMENTS(xml_rhold_labels)},
|
||||||
{DELAY_LEVEL, DELAY_POSITION, "Delay Level", &values_0_to_99,},
|
{DELAY_LEVEL, DELAY_POSITION, "Delay Level", &values_0_to_99,},
|
||||||
{DELAY_DUCK_THRESH, DELAY_POSITION, "Delay Duck Thresh", &values_0_to_99,},
|
{DELAY_DUCK_THRESH, DELAY_POSITION, "Delay Duck Thresh", &values_0_to_99,},
|
||||||
{DELAY_DUCK_LEVEL, DELAY_POSITION, "Delay Duck Level", &values_0_to_99,},
|
{DELAY_DUCK_LEVEL, DELAY_POSITION, "Delay Duck Level", &values_0_to_99,},
|
||||||
@@ -3991,7 +4103,7 @@ XmlSettings xml_settings[] = {
|
|||||||
{REVERB_PREDELAY, REVERB_POSITION, "Reverb Predelay", &values_0_to_15,},
|
{REVERB_PREDELAY, REVERB_POSITION, "Reverb Predelay", &values_0_to_15,},
|
||||||
|
|
||||||
{PRESET_LEVEL, VOLUME_PRE_FX_POSITION, "Volume Pre FX", &values_0_to_99,},
|
{PRESET_LEVEL, VOLUME_PRE_FX_POSITION, "Volume Pre FX", &values_0_to_99,},
|
||||||
{PRESET_LEVEL, VOLUME_POST_FX_POSITION, "Volume Post FX", &values_0_to_99,},
|
{PRESET_LEVEL, VOLUME_POST_FX_POSITION, "Volume Post FX", &values_0_to_99,},
|
||||||
|
|
||||||
{WAH_TYPE, WAH_POSITION, "Wah Type", &values_wah_type, xml_wah_labels, G_N_ELEMENTS(xml_wah_labels)},
|
{WAH_TYPE, WAH_POSITION, "Wah Type", &values_wah_type, xml_wah_labels, G_N_ELEMENTS(xml_wah_labels)},
|
||||||
{WAH_ON_OFF, WAH_POSITION, "Wah Enable", &values_on_off, xml_on_off_labels, G_N_ELEMENTS(xml_on_off_labels)},
|
{WAH_ON_OFF, WAH_POSITION, "Wah Enable", &values_on_off, xml_on_off_labels, G_N_ELEMENTS(xml_on_off_labels)},
|
||||||
@@ -4171,22 +4283,26 @@ static void effect_settings_free(EffectSettings *settings)
|
|||||||
g_slice_free1(2 * sizeof(EffectSettings), settings);
|
g_slice_free1(2 * sizeof(EffectSettings), settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Global holding the list of linkable parameters.
|
||||||
|
*
|
||||||
|
* Used for Pedal Assignment and the LFO's.
|
||||||
|
*/
|
||||||
|
ModifierGroup *ModifierLinkableList;
|
||||||
/**
|
/**
|
||||||
* Retrieves modifier linkable group from device.
|
* Retrieves modifier linkable group from device.
|
||||||
*
|
*
|
||||||
* \return ModifierGroup which must be freed using modifier_group_free.
|
* \return ModifierGroup which must be freed using modifier_group_free.
|
||||||
**/
|
**/
|
||||||
ModifierGroup *modifier_linkable_list()
|
ModifierGroup *modifier_linkable_list(GString *msg)
|
||||||
{
|
{
|
||||||
guint group_id;
|
guint group_id;
|
||||||
guint count;
|
guint count;
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
send_message(REQUEST_MODIFIER_LINKABLE_LIST, "\x00\x01", 2);
|
//send_message(REQUEST_MODIFIER_LINKABLE_LIST, "\x00\x01", 2);
|
||||||
|
|
||||||
GString *data = get_message_by_id(RECEIVE_MODIFIER_LINKABLE_LIST);
|
unsigned char *str = (unsigned char*)msg->str;
|
||||||
|
|
||||||
unsigned char *str = (unsigned char*)data->str;
|
|
||||||
|
|
||||||
group_id = (str[8] << 8) | str[9];
|
group_id = (str[8] << 8) | str[9];
|
||||||
count = (str[10] << 8) | str[11];
|
count = (str[10] << 8) | str[11];
|
||||||
@@ -4222,13 +4338,15 @@ ModifierGroup *modifier_linkable_list()
|
|||||||
group[i].settings_amt = 0;
|
group[i].settings_amt = 0;
|
||||||
|
|
||||||
debug_msg(DEBUG_MSG2HOST|DEBUG_GROUP,
|
debug_msg(DEBUG_MSG2HOST|DEBUG_GROUP,
|
||||||
"ID: %4d Position: %2d: %s",
|
"Position : %d\nID : %d\nName : %s\n",
|
||||||
id, position, modifier ? modifier->label : NULL);
|
position, id, modifier ? modifier->label : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
modifier_group->group = group;
|
modifier_group->group = group;
|
||||||
modifier_group->group_amt = count;
|
modifier_group->group_amt = count;
|
||||||
|
|
||||||
|
ModifierLinkableList = modifier_group;
|
||||||
|
|
||||||
return modifier_group;
|
return modifier_group;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4291,7 +4409,6 @@ gboolean get_device_info(unsigned char device_id, unsigned char family_id,
|
|||||||
for (x = 0; x < G_N_ELEMENTS(supported_devices); x++) {
|
for (x = 0; x < G_N_ELEMENTS(supported_devices); x++) {
|
||||||
if (supported_devices[x]->product_id == product_id && supported_devices[x]->family_id == family_id) {
|
if (supported_devices[x]->product_id == product_id && supported_devices[x]->family_id == family_id) {
|
||||||
*device = supported_devices[x];
|
*device = supported_devices[x];
|
||||||
debug_msg(DEBUG_STARTUP, "Device name %s.", (*device)->name);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ typedef enum {
|
|||||||
VALUE_TYPE_LABEL = 1 << 3, /**< use value labels (overrides any other option) */
|
VALUE_TYPE_LABEL = 1 << 3, /**< use value labels (overrides any other option) */
|
||||||
VALUE_TYPE_EXTRA = 1 << 4, /**< use extra values */
|
VALUE_TYPE_EXTRA = 1 << 4, /**< use extra values */
|
||||||
VALUE_TYPE_DECIMAL= 1 << 5, /**< display decimal places */
|
VALUE_TYPE_DECIMAL= 1 << 5, /**< display decimal places */
|
||||||
VALUE_TYPE_NONE = 1 << 6, /**< no value displayed */
|
VALUE_TYPE_POSID = 1 << 6, /**< Packed Position/ID: (pos << 16) | id */
|
||||||
|
VALUE_TYPE_NONE = 1 << 7, /**< no value displayed */
|
||||||
} ValueType;
|
} ValueType;
|
||||||
|
|
||||||
typedef struct _EffectValues {
|
typedef struct _EffectValues {
|
||||||
@@ -118,6 +119,7 @@ typedef struct {
|
|||||||
|
|
||||||
gchar *get_position(guint position);
|
gchar *get_position(guint position);
|
||||||
ModifierGroup *modifier_linkable_list();
|
ModifierGroup *modifier_linkable_list();
|
||||||
|
extern ModifierGroup *ModifierLinkableList;
|
||||||
void modifier_group_free(ModifierGroup *modifier_group);
|
void modifier_group_free(ModifierGroup *modifier_group);
|
||||||
void get_values_info(EffectValues *values,
|
void get_values_info(EffectValues *values,
|
||||||
gdouble *min, gdouble *max, gboolean *custom);
|
gdouble *min, gdouble *max, gboolean *custom);
|
||||||
@@ -125,4 +127,5 @@ gboolean get_device_info(unsigned char device_id, unsigned char family_id,
|
|||||||
unsigned char product_id,
|
unsigned char product_id,
|
||||||
Device **device);
|
Device **device);
|
||||||
|
|
||||||
|
|
||||||
#endif /* GDIGI_EFFECTS_H */
|
#endif /* GDIGI_EFFECTS_H */
|
||||||
|
|||||||
99
gdigi.c
99
gdigi.c
@@ -52,7 +52,7 @@ gboolean set_debug_flags (const gchar *option_name, const gchar *value,
|
|||||||
{
|
{
|
||||||
if (strchr(value, 'd')) {
|
if (strchr(value, 'd')) {
|
||||||
DebugFlags |= DEBUG_MSG2DEV;
|
DebugFlags |= DEBUG_MSG2DEV;
|
||||||
}
|
}
|
||||||
if (strchr(value, 'h')) {
|
if (strchr(value, 'h')) {
|
||||||
DebugFlags |= DEBUG_MSG2HOST;
|
DebugFlags |= DEBUG_MSG2HOST;
|
||||||
}
|
}
|
||||||
@@ -91,7 +91,7 @@ debug_msg (debug_flags_t flags, char *fmt, ...)
|
|||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
vsnprintf(buf, 1024, fmt, ap);
|
vsnprintf(buf, 1024, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
fprintf(stderr, "%s\n", buf);
|
fprintf(stderr, "%s\n", buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ debug_msg (debug_flags_t flags, char *fmt, ...)
|
|||||||
* Returns an allocated buffer that must be freed by the caller.
|
* Returns an allocated buffer that must be freed by the caller.
|
||||||
*/
|
*/
|
||||||
GString *
|
GString *
|
||||||
format_value (XmlSettings *xml, gint value)
|
format_value (XmlSettings *xml, guint value)
|
||||||
{
|
{
|
||||||
GString *buf = g_string_sized_new(1);
|
GString *buf = g_string_sized_new(1);
|
||||||
EffectValues *values = NULL;
|
EffectValues *values = NULL;
|
||||||
@@ -142,10 +142,10 @@ format_value (XmlSettings *xml, gint value)
|
|||||||
switch (vtype) {
|
switch (vtype) {
|
||||||
case VALUE_TYPE_LABEL:
|
case VALUE_TYPE_LABEL:
|
||||||
{
|
{
|
||||||
char *textp = map_xml_value(xml, value);
|
char *textp = map_xml_value(xml, values, value);
|
||||||
if (!textp) {
|
if (!textp) {
|
||||||
g_warning("Unable to map %s value %d for id %d position %d",
|
g_warning("%s: Unable to map %s value %d for id %d position %d",
|
||||||
xml->label, value, xml->id, xml->position);
|
__FUNCTION__, xml->label, value, xml->id, xml->position);
|
||||||
textp = "";
|
textp = "";
|
||||||
}
|
}
|
||||||
g_string_printf(buf, "%s", textp);
|
g_string_printf(buf, "%s", textp);
|
||||||
@@ -166,6 +166,10 @@ format_value (XmlSettings *xml, gint value)
|
|||||||
g_string_printf(buf, "%s", "");
|
g_string_printf(buf, "%s", "");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VALUE_TYPE_POSID:
|
||||||
|
g_string_printf(buf, "%d", value);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_warning("Unhandled value type %d", vtype);
|
g_warning("Unhandled value type %d", vtype);
|
||||||
break;
|
break;
|
||||||
@@ -190,7 +194,7 @@ format_ipv (guint id, guint pos, guint val)
|
|||||||
}
|
}
|
||||||
val_buf = format_value(xml, val);
|
val_buf = format_value(xml, val);
|
||||||
|
|
||||||
g_string_printf(vec_buf, "(%2d, %4d, %d)", pos, id, val);
|
g_string_printf(vec_buf, "(%d, %d, %d)", pos, id, val);
|
||||||
g_string_printf(buf, "%-16s %s: %s: %s",
|
g_string_printf(buf, "%-16s %s: %s: %s",
|
||||||
vec_buf->str,
|
vec_buf->str,
|
||||||
get_position(pos), xml->label, val_buf->str);
|
get_position(pos), xml->label, val_buf->str);
|
||||||
@@ -427,7 +431,7 @@ void push_message(GString *msg)
|
|||||||
GString *ipv = format_ipv(param->id,
|
GString *ipv = format_ipv(param->id,
|
||||||
param->position,
|
param->position,
|
||||||
param->value);
|
param->value);
|
||||||
debug_msg(DEBUG_MSG2HOST, "Receive RECEIVE_PARAMETER_VALUE: %s",
|
debug_msg(DEBUG_MSG2HOST, "RECEIVE_PARAMETER_VALUE\n%s",
|
||||||
ipv->str);
|
ipv->str);
|
||||||
g_string_free(ipv, TRUE);
|
g_string_free(ipv, TRUE);
|
||||||
}
|
}
|
||||||
@@ -442,10 +446,8 @@ void push_message(GString *msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case RECEIVE_DEVICE_NOTIFICATION:
|
case RECEIVE_DEVICE_NOTIFICATION:
|
||||||
{
|
|
||||||
unsigned char *str = (unsigned char*)msg->str;
|
|
||||||
|
|
||||||
unpack_message(msg);
|
unpack_message(msg);
|
||||||
|
unsigned char *str = (unsigned char*)msg->str;
|
||||||
switch (str[8]) {
|
switch (str[8]) {
|
||||||
case NOTIFY_PRESET_MOVED:
|
case NOTIFY_PRESET_MOVED:
|
||||||
if (str[11] == PRESETS_EDIT_BUFFER && str[12] == 0) {
|
if (str[11] == PRESETS_EDIT_BUFFER && str[12] == 0) {
|
||||||
@@ -454,12 +456,12 @@ void push_message(GString *msg)
|
|||||||
g_timeout_add(0, apply_current_preset_to_gui, NULL);
|
g_timeout_add(0, apply_current_preset_to_gui, NULL);
|
||||||
GDK_THREADS_LEAVE();
|
GDK_THREADS_LEAVE();
|
||||||
debug_msg(DEBUG_MSG2HOST,
|
debug_msg(DEBUG_MSG2HOST,
|
||||||
"Receive RECEIVE_DEVICE_NOTIFICATION: Loaded preset "
|
"RECEIVE_DEVICE_NOTIFICATION: Loaded preset "
|
||||||
"%d from bank %d",
|
"%d from bank %d",
|
||||||
str[10], str[9]);
|
str[10], str[9]);
|
||||||
} else {
|
} else {
|
||||||
debug_msg(DEBUG_MSG2HOST,
|
debug_msg(DEBUG_MSG2HOST,
|
||||||
"Receive RECEIVE_DEVICE_NOTIFICATION: %d %d moved to "
|
"RECEIVE_DEVICE_NOTIFICATION: %d %d moved to "
|
||||||
"%d %d",
|
"%d %d",
|
||||||
str[9], str[10],
|
str[9], str[10],
|
||||||
str[11], str[12]);
|
str[11], str[12]);
|
||||||
@@ -476,26 +478,29 @@ void push_message(GString *msg)
|
|||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
debug_msg(DEBUG_MSG2HOST,
|
|
||||||
"Receive NOTIFY_MODIFIER_GROUP_CHANGED: Modifier group "
|
debug_msg(DEBUG_MSG2HOST,
|
||||||
|
"NOTIFY_MODIFIER_GROUP_CHANGED: Modifier group "
|
||||||
"id %d changed",
|
"id %d changed",
|
||||||
(str[9] << 8) | (str[10]));
|
(str[9] << 8) | (str[10]));
|
||||||
|
|
||||||
|
if (ModifierLinkableList) {
|
||||||
|
modifier_group_free(ModifierLinkableList);
|
||||||
|
ModifierLinkableList = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
send_message(REQUEST_MODIFIER_LINKABLE_LIST, "\x00\x01", 2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_warning("Received unhandled device notification 0x%x", str[11]);
|
g_warning("Received unhandled device notification 0x%x",
|
||||||
break;
|
str[11]);
|
||||||
}
|
}
|
||||||
g_string_free(msg, TRUE);
|
g_string_free(msg, TRUE);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
case RECEIVE_GLOBAL_PARAMETERS:
|
case RECEIVE_GLOBAL_PARAMETERS:
|
||||||
{
|
|
||||||
gint tot, n, x;
|
|
||||||
|
|
||||||
unpack_message(msg);
|
unpack_message(msg);
|
||||||
|
gint tot, n, x;
|
||||||
tot = (unsigned char)msg->str[9];
|
tot = (unsigned char)msg->str[9];
|
||||||
if (debug_flag_is_set(DEBUG_HEX)) {
|
if (debug_flag_is_set(DEBUG_HEX)) {
|
||||||
for (n = 0; n < msg->len; n++) {
|
for (n = 0; n < msg->len; n++) {
|
||||||
@@ -509,21 +514,18 @@ void push_message(GString *msg)
|
|||||||
do {
|
do {
|
||||||
param = setting_param_new_from_data(&msg->str[x], &x);
|
param = setting_param_new_from_data(&msg->str[x], &x);
|
||||||
debug_msg(DEBUG_MSG2HOST,
|
debug_msg(DEBUG_MSG2HOST,
|
||||||
"Receive RECEIVE_GLOBAL_PARAMETERS ID: %5d "
|
"RECEIVE_GLOBAL_PARAMETERS ID: %5d "
|
||||||
"Position: %2.1d Value: %6.1d: %s",
|
"Position: %2.1d Value: %6.1d: %s",
|
||||||
param->id,
|
param->id,
|
||||||
param->position, param->value, "XXX");
|
param->position, param->value, "XXX");
|
||||||
setting_param_free(param);
|
setting_param_free(param);
|
||||||
} while ( (x < msg->len) && n < tot);
|
} while ( (x < msg->len) && n < tot);
|
||||||
|
|
||||||
g_string_free(msg, TRUE);
|
g_string_free(msg, TRUE);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
case RECEIVE_MODIFIER_LINKABLE_LIST:
|
case RECEIVE_MODIFIER_LINKABLE_LIST:
|
||||||
{
|
|
||||||
gint tot, n;
|
|
||||||
|
|
||||||
unpack_message(msg);
|
unpack_message(msg);
|
||||||
tot = (unsigned char)msg->str[9];
|
tot = (unsigned char)msg->str[9];
|
||||||
|
|
||||||
@@ -535,10 +537,19 @@ void push_message(GString *msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
modifier_linkable_list(msg);
|
modifier_linkable_list(msg);
|
||||||
|
|
||||||
g_string_free(msg, TRUE);
|
g_string_free(msg, TRUE);
|
||||||
|
|
||||||
|
GDK_THREADS_ENTER();
|
||||||
|
|
||||||
|
create_modifier_group(EXP_POSITION, EXP_ASSIGN1);
|
||||||
|
create_modifier_group(LFO1_POSITION, LFO_TYPE);
|
||||||
|
create_modifier_group(LFO2_POSITION, LFO_TYPE);
|
||||||
|
|
||||||
|
GDK_THREADS_LEAVE();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_mutex_lock(message_queue_mutex);
|
g_mutex_lock(message_queue_mutex);
|
||||||
@@ -931,7 +942,7 @@ void set_option(guint id, guint position, guint value)
|
|||||||
append_value(msg, value);
|
append_value(msg, value);
|
||||||
if (debug_flag_is_set(DEBUG_MSG2DEV)) {
|
if (debug_flag_is_set(DEBUG_MSG2DEV)) {
|
||||||
GString *ipv = format_ipv(id, position, value);
|
GString *ipv = format_ipv(id, position, value);
|
||||||
debug_msg(DEBUG_MSG2DEV, "Send RECEIVE_PARAMETER_VALUE: %s", ipv->str);
|
debug_msg(DEBUG_MSG2DEV, "RECEIVE_PARAMETER_VALUE\n%s", ipv->str);
|
||||||
g_string_free(ipv, TRUE);
|
g_string_free(ipv, TRUE);
|
||||||
}
|
}
|
||||||
send_message(RECEIVE_PARAMETER_VALUE, msg->str, msg->len);
|
send_message(RECEIVE_PARAMETER_VALUE, msg->str, msg->len);
|
||||||
@@ -1140,6 +1151,7 @@ GList *get_message_list(MessageID id)
|
|||||||
g_error("get_message_list() doesn't support followning id: %d", id);
|
g_error("get_message_list() doesn't support followning id: %d", id);
|
||||||
g_string_free(data, TRUE);
|
g_string_free(data, TRUE);
|
||||||
g_list_free(list);
|
g_list_free(list);
|
||||||
|
g_assert(!"BUG");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1352,10 +1364,6 @@ static gboolean request_who_am_i(unsigned char *device_id, unsigned char *family
|
|||||||
*device_id = data->str[8];
|
*device_id = data->str[8];
|
||||||
*family_id = data->str[9];
|
*family_id = data->str[9];
|
||||||
*product_id = data->str[10];
|
*product_id = data->str[10];
|
||||||
debug_msg(DEBUG_STARTUP, "Found device id %d family %d product id %d.",
|
|
||||||
*device_id,
|
|
||||||
*family_id,
|
|
||||||
*product_id);
|
|
||||||
g_string_free(data, TRUE);
|
g_string_free(data, TRUE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -1447,6 +1455,7 @@ static gint get_digitech_devices(GList **devices)
|
|||||||
number++;
|
number++;
|
||||||
*devices = g_list_append(*devices, GINT_TO_POINTER(card_num));
|
*devices = g_list_append(*devices, GINT_TO_POINTER(card_num));
|
||||||
}
|
}
|
||||||
|
free(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return number;
|
return number;
|
||||||
@@ -1474,12 +1483,12 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
if (device_port == NULL) {
|
if (device_port == NULL) {
|
||||||
/* port not given explicitly in commandline - search for devices */
|
/* port not given explicitly in commandline - search for devices */
|
||||||
GList *devices = NULL;
|
GList *devices = NULL;
|
||||||
GList *device = NULL;
|
GList *device = NULL;
|
||||||
int num_devices = 0;
|
int num_devices = 0;
|
||||||
int chosen_device = 0;
|
int chosen_device = 0;
|
||||||
if ((num_devices = get_digitech_devices(&devices)) <= 0) {
|
if (get_digitech_devices(&devices) <= 0) {
|
||||||
g_message("Couldn't find any DigiTech devices!");
|
g_warning("Couldn't find DigiTech devices!");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (num_devices > 1) {
|
if (num_devices > 1) {
|
||||||
@@ -1544,7 +1553,7 @@ int main(int argc, char *argv[]) {
|
|||||||
g_mutex_free(message_queue_mutex);
|
g_mutex_free(message_queue_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message_queue != NULL) {
|
if (message_queue != NULL && g_queue_get_length(message_queue)) {
|
||||||
g_warning("%d unread messages in queue",
|
g_warning("%d unread messages in queue",
|
||||||
g_queue_get_length(message_queue));
|
g_queue_get_length(message_queue));
|
||||||
g_queue_foreach(message_queue, (GFunc) message_free_func, NULL);
|
g_queue_foreach(message_queue, (GFunc) message_free_func, NULL);
|
||||||
|
|||||||
4
gdigi.h
4
gdigi.h
@@ -976,10 +976,10 @@ enum {
|
|||||||
EFFECTS_LIB_CUSTOM = 1856
|
EFFECTS_LIB_CUSTOM = 1856
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GLOBAL_POSITION 0
|
#define USB_POSITION 0
|
||||||
|
#define GLOBAL_POSITION 0
|
||||||
|
|
||||||
#define TUNING_REFERENCE 12288
|
#define TUNING_REFERENCE 12288
|
||||||
|
|
||||||
#define USB_AUDIO_PLAYBACK_MIX 12297
|
#define USB_AUDIO_PLAYBACK_MIX 12297
|
||||||
#define USB_AUDIO_LEVEL 12307
|
#define USB_AUDIO_LEVEL 12307
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ typedef struct {
|
|||||||
|
|
||||||
XmlSettings *get_xml_settings(guint id, guint position);
|
XmlSettings *get_xml_settings(guint id, guint position);
|
||||||
gboolean value_is_extra(EffectValues *val, int value);
|
gboolean value_is_extra(EffectValues *val, int value);
|
||||||
gchar * map_xml_value(XmlSettings *xml, gint value);
|
gchar * map_xml_value(XmlSettings *xml, EffectValues *values, gint value);
|
||||||
|
// gchar *get_xml_label(guint id, guint position, gint type);
|
||||||
|
|
||||||
#endif /* GDIGI_XML_H */
|
#endif /* GDIGI_XML_H */
|
||||||
|
|||||||
183
gui.c
183
gui.c
@@ -24,6 +24,7 @@
|
|||||||
#include "preset.h"
|
#include "preset.h"
|
||||||
#include "gtkknob.h"
|
#include "gtkknob.h"
|
||||||
#include "images/gdigi_icon.h"
|
#include "images/gdigi_icon.h"
|
||||||
|
#include "gdigi_xml.h"
|
||||||
|
|
||||||
|
|
||||||
static gchar* MessageID_names[] = {
|
static gchar* MessageID_names[] = {
|
||||||
@@ -372,8 +373,9 @@ static void apply_widget_setting(WidgetTreeElem *el, SettingParam *param)
|
|||||||
else if (GTK_IS_ADJUSTMENT(el->widget))
|
else if (GTK_IS_ADJUSTMENT(el->widget))
|
||||||
gtk_adjustment_set_value(GTK_ADJUSTMENT(el->widget), (gdouble)param->value);
|
gtk_adjustment_set_value(GTK_ADJUSTMENT(el->widget), (gdouble)param->value);
|
||||||
} else { /* combo box */
|
} else { /* combo box */
|
||||||
if (el->value == param->value)
|
if (el->value == param->value) {
|
||||||
gtk_combo_box_set_active(GTK_COMBO_BOX(el->widget), el->x);
|
gtk_combo_box_set_active(GTK_COMBO_BOX(el->widget), el->x);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -540,8 +542,9 @@ void effect_settings_group_free(EffectSettingsGroup *group)
|
|||||||
{
|
{
|
||||||
if (group->child != NULL) {
|
if (group->child != NULL) {
|
||||||
/* destroy widget without parent */
|
/* destroy widget without parent */
|
||||||
if (gtk_widget_get_parent(group->child) == NULL)
|
if (gtk_widget_get_parent(group->child) == NULL) {
|
||||||
gtk_widget_destroy(group->child);
|
gtk_widget_destroy(group->child);
|
||||||
|
}
|
||||||
|
|
||||||
g_object_unref(group->child);
|
g_object_unref(group->child);
|
||||||
}
|
}
|
||||||
@@ -562,6 +565,7 @@ void combo_box_changed_cb(GtkComboBox *widget, gpointer data)
|
|||||||
EffectSettingsGroup *settings = NULL;
|
EffectSettingsGroup *settings = NULL;
|
||||||
gchar *name = NULL;
|
gchar *name = NULL;
|
||||||
gint x;
|
gint x;
|
||||||
|
|
||||||
g_object_get(G_OBJECT(widget), "active", &x, NULL);
|
g_object_get(G_OBJECT(widget), "active", &x, NULL);
|
||||||
|
|
||||||
vbox = g_object_get_data(G_OBJECT(widget), "vbox");
|
vbox = g_object_get_data(G_OBJECT(widget), "vbox");
|
||||||
@@ -619,7 +623,7 @@ GtkWidget *create_widget_container(EffectGroup *group, gint amt, gint id, gint p
|
|||||||
gint x;
|
gint x;
|
||||||
gint cmbox_no = -1;
|
gint cmbox_no = -1;
|
||||||
|
|
||||||
vbox = gtk_vbox_new(FALSE, 0);
|
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
|
||||||
|
|
||||||
widget_table = g_hash_table_new(g_direct_hash, g_direct_equal);
|
widget_table = g_hash_table_new(g_direct_hash, g_direct_equal);
|
||||||
|
|
||||||
@@ -631,15 +635,22 @@ GtkWidget *create_widget_container(EffectGroup *group, gint amt, gint id, gint p
|
|||||||
g_signal_connect(G_OBJECT(combo_box), "changed", G_CALLBACK(combo_box_changed_cb), group);
|
g_signal_connect(G_OBJECT(combo_box), "changed", G_CALLBACK(combo_box_changed_cb), group);
|
||||||
g_object_set_data(G_OBJECT(combo_box), "vbox", vbox);
|
g_object_set_data(G_OBJECT(combo_box), "vbox", vbox);
|
||||||
}
|
}
|
||||||
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combo_box),
|
|
||||||
NULL, group[x].label);
|
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), group[x].label);
|
||||||
cmbox_no++;
|
cmbox_no++;
|
||||||
|
|
||||||
if ((group[x].settings != NULL) && (group[x].settings_amt > 0)) {
|
if ((group[x].settings != NULL) && (group[x].settings_amt > 0)) {
|
||||||
widget = create_grid(group[x].settings, group[x].settings_amt, widget_table);
|
/*
|
||||||
|
* Create a grid for each combo box entry to contain per
|
||||||
|
* combo box entry settings.
|
||||||
|
*/
|
||||||
|
widget = create_grid(group[x].settings,
|
||||||
|
group[x].settings_amt,
|
||||||
|
widget_table);
|
||||||
g_object_ref_sink(widget);
|
g_object_ref_sink(widget);
|
||||||
} else
|
} else {
|
||||||
widget = NULL;
|
widget = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
settings = g_slice_new(EffectSettingsGroup);
|
settings = g_slice_new(EffectSettingsGroup);
|
||||||
settings->id = id;
|
settings->id = id;
|
||||||
@@ -650,11 +661,15 @@ GtkWidget *create_widget_container(EffectGroup *group, gint amt, gint id, gint p
|
|||||||
widget_tree_add(G_OBJECT(combo_box), id, position, group[x].type, x);
|
widget_tree_add(G_OBJECT(combo_box), id, position, group[x].type, x);
|
||||||
|
|
||||||
name = g_strdup_printf("SettingsGroup%d", cmbox_no);
|
name = g_strdup_printf("SettingsGroup%d", cmbox_no);
|
||||||
g_object_set_data_full(G_OBJECT(combo_box), name, settings, ((GDestroyNotify)effect_settings_group_free));
|
g_object_set_data_full(G_OBJECT(combo_box),
|
||||||
|
name, settings,
|
||||||
|
((GDestroyNotify)effect_settings_group_free));
|
||||||
g_free(name);
|
g_free(name);
|
||||||
} else {
|
} else {
|
||||||
if ((group[x].settings != NULL) && (group[x].settings_amt > 0)) {
|
if ((group[x].settings != NULL) && (group[x].settings_amt > 0)) {
|
||||||
widget = create_grid(group[x].settings, group[x].settings_amt, widget_table);
|
widget = create_grid(group[x].settings,
|
||||||
|
group[x].settings_amt,
|
||||||
|
widget_table);
|
||||||
gtk_box_pack_end(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_end(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -665,6 +680,123 @@ GtkWidget *create_widget_container(EffectGroup *group, gint amt, gint id, gint p
|
|||||||
return vbox;
|
return vbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate a combo box with text entries from the modifier group.
|
||||||
|
*/
|
||||||
|
void update_modifier_combo_box(GObject *combo_box, EffectGroup *group, gint amt, gint id, gint position)
|
||||||
|
{
|
||||||
|
gint x;
|
||||||
|
EffectSettingsGroup *settings = NULL;
|
||||||
|
|
||||||
|
for (x = 0; x<amt; x++) {
|
||||||
|
gchar *name;
|
||||||
|
g_assert(group[x].label);
|
||||||
|
|
||||||
|
settings = g_slice_new(EffectSettingsGroup);
|
||||||
|
settings->id = id;
|
||||||
|
settings->type = group[x].type;
|
||||||
|
settings->position = position;
|
||||||
|
settings->child = NULL;
|
||||||
|
|
||||||
|
name = g_strdup_printf("SettingsGroup%d", x);
|
||||||
|
g_object_set_data(G_OBJECT(combo_box), name, settings);
|
||||||
|
g_free(name);
|
||||||
|
|
||||||
|
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), group[x].label);
|
||||||
|
widget_tree_add(combo_box, id, position, group[x].type, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void widget_tree_elem_free(GList *);
|
||||||
|
|
||||||
|
static void clean_modifier_combo_box (GObject *ComboBox, GList *list)
|
||||||
|
{
|
||||||
|
EffectSettingsGroup *settings = NULL;
|
||||||
|
WidgetTreeElem *el;
|
||||||
|
gchar *name;
|
||||||
|
GList *link, *next;
|
||||||
|
|
||||||
|
link = g_list_first(list);
|
||||||
|
|
||||||
|
while (link != NULL) {
|
||||||
|
next = link->next;
|
||||||
|
el = link->data;
|
||||||
|
if (el->value != -1) {
|
||||||
|
/* Useless assignment, but silences compiler warning. */
|
||||||
|
link = g_list_remove_link(list, link);
|
||||||
|
|
||||||
|
g_assert(ComboBox == el->widget);
|
||||||
|
name = g_strdup_printf("SettingsGroup%d", el->x);
|
||||||
|
settings = g_object_steal_data(G_OBJECT(ComboBox), name);
|
||||||
|
|
||||||
|
g_free(name);
|
||||||
|
g_slice_free(EffectSettingsGroup, settings);
|
||||||
|
g_slice_free(WidgetTreeElem, el);
|
||||||
|
}
|
||||||
|
link = next;
|
||||||
|
}
|
||||||
|
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(ComboBox));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a linkable effect, update the combo box for the linkable parameters.
|
||||||
|
*
|
||||||
|
* @param[in] pos Position
|
||||||
|
* @param[in] id Id
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
create_modifier_group (guint pos, guint id)
|
||||||
|
{
|
||||||
|
|
||||||
|
GtkWidget *vbox;
|
||||||
|
gpointer key;
|
||||||
|
WidgetTreeElem *el;
|
||||||
|
GList *list;
|
||||||
|
GObject *AssignComboBox;
|
||||||
|
|
||||||
|
debug_msg(DEBUG_GROUP, "Building modifier group for position %d id %d \"%s\"",
|
||||||
|
pos, id, get_xml_settings(id, pos)->label);
|
||||||
|
|
||||||
|
key = GINT_TO_POINTER((pos << 16) | id);
|
||||||
|
list = g_tree_lookup(widget_tree, key);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The list will be destroyed and recreated, but we don't want to
|
||||||
|
* handle the teardown ourselves. So steal it from the tree.
|
||||||
|
*/
|
||||||
|
g_tree_steal(widget_tree, key);
|
||||||
|
if (!list) {
|
||||||
|
g_warning("No widget tree entry for position %d id %d!\n",
|
||||||
|
pos, id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
el = g_list_nth_data(list, 0);
|
||||||
|
if (!el) {
|
||||||
|
g_warning("No effect settings group for position %d id %d!\n",
|
||||||
|
pos, id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AssignComboBox = el->widget;
|
||||||
|
g_assert(AssignComboBox != NULL);
|
||||||
|
|
||||||
|
vbox = g_object_get_data(AssignComboBox, "vbox");
|
||||||
|
g_assert(vbox != NULL);
|
||||||
|
|
||||||
|
clean_modifier_combo_box(AssignComboBox, list);
|
||||||
|
|
||||||
|
update_modifier_combo_box(AssignComboBox,
|
||||||
|
ModifierLinkableList->group,
|
||||||
|
ModifierLinkableList->group_amt,
|
||||||
|
id, pos);
|
||||||
|
|
||||||
|
get_option(id, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \param widgets Effect descriptions
|
* \param widgets Effect descriptions
|
||||||
* \param amt amount of effect descriptions
|
* \param amt amount of effect descriptions
|
||||||
@@ -686,13 +818,14 @@ GtkWidget *create_vbox(Effect *widgets, gint amt, gchar *label)
|
|||||||
|
|
||||||
frame = gtk_frame_new(label);
|
frame = gtk_frame_new(label);
|
||||||
|
|
||||||
vbox = gtk_vbox_new(FALSE, 0);
|
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
|
||||||
|
|
||||||
grid = gtk_grid_new();
|
grid = gtk_grid_new();
|
||||||
gtk_grid_set_column_spacing(GTK_GRID(grid), 2);
|
gtk_grid_set_column_spacing(GTK_GRID(grid), 2);
|
||||||
|
|
||||||
for (x = 0; x<amt; x++) {
|
for (x = 0; x<amt; x++) {
|
||||||
if ((widgets[x].id != -1) && (widgets[x].position != -1)) {
|
if ((widgets[x].id != -1) && (widgets[x].position != -1)) {
|
||||||
|
|
||||||
widget = create_on_off_button(&widgets[x]);
|
widget = create_on_off_button(&widgets[x]);
|
||||||
gtk_grid_attach(GTK_GRID(grid), widget, 0, x, 1, 1);
|
gtk_grid_attach(GTK_GRID(grid), widget, 0, x, 1, 1);
|
||||||
|
|
||||||
@@ -702,21 +835,29 @@ GtkWidget *create_vbox(Effect *widgets, gint amt, gchar *label)
|
|||||||
y = 0;
|
y = 0;
|
||||||
|
|
||||||
} else if (widgets[x].label) {
|
} else if (widgets[x].label) {
|
||||||
|
|
||||||
widget = gtk_label_new(widgets[x].label);
|
widget = gtk_label_new(widgets[x].label);
|
||||||
gtk_grid_attach(GTK_GRID(grid), widget, 0, x, 1, 1);
|
gtk_grid_attach(GTK_GRID(grid), widget, 0, x, 1, 1);
|
||||||
y = 0;
|
y = 0;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/* Default to 1 */
|
/* Default to 1 */
|
||||||
if (x == 0)
|
if (x == 0)
|
||||||
y = 1;
|
y = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
container = create_widget_container(widgets[x].group, widgets[x].group_amt, widgets[x].type, widgets[x].position);
|
container = create_widget_container(widgets[x].group,
|
||||||
|
widgets[x].group_amt,
|
||||||
|
widgets[x].type,
|
||||||
|
widgets[x].position);
|
||||||
|
|
||||||
gtk_grid_attach(GTK_GRID(grid), container, 1-y, x+y, 1, 1);
|
gtk_grid_attach(GTK_GRID(grid), container, 1-y, x+y, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), grid, FALSE, FALSE, 2);
|
gtk_box_pack_start(GTK_BOX(vbox), grid, FALSE, FALSE, 2);
|
||||||
|
|
||||||
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
||||||
|
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1318,12 +1459,12 @@ void gui_create(Device *device)
|
|||||||
icon = gdk_pixbuf_new_from_inline(-1, gdigi_icon, FALSE, NULL);
|
icon = gdk_pixbuf_new_from_inline(-1, gdigi_icon, FALSE, NULL);
|
||||||
gtk_window_set_icon(GTK_WINDOW(window), icon);
|
gtk_window_set_icon(GTK_WINDOW(window), icon);
|
||||||
|
|
||||||
vbox = gtk_vbox_new(FALSE, 0);
|
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
|
||||||
gtk_container_add(GTK_CONTAINER(window), vbox);
|
gtk_container_add(GTK_CONTAINER(window), vbox);
|
||||||
|
|
||||||
add_menubar(window, vbox);
|
add_menubar(window, vbox);
|
||||||
|
|
||||||
hbox = gtk_hbox_new(FALSE, 0);
|
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
gtk_container_add(GTK_CONTAINER(vbox), hbox);
|
gtk_container_add(GTK_CONTAINER(vbox), hbox);
|
||||||
|
|
||||||
sw = gtk_scrolled_window_new(NULL, NULL);
|
sw = gtk_scrolled_window_new(NULL, NULL);
|
||||||
@@ -1347,14 +1488,14 @@ void gui_create(Device *device)
|
|||||||
|
|
||||||
for (i = 0; i<device->n_pages; i++) {
|
for (i = 0; i<device->n_pages; i++) {
|
||||||
GtkWidget *label = NULL;
|
GtkWidget *label = NULL;
|
||||||
vbox = gtk_vbox_new(FALSE, 0);
|
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
|
||||||
label = gtk_label_new(device->pages[i].name);
|
label = gtk_label_new(device->pages[i].name);
|
||||||
|
|
||||||
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label);
|
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, label);
|
||||||
|
|
||||||
for (x = 0; x<device->pages[i].n_effects; x++) {
|
for (x = 0; x<device->pages[i].n_effects; x++) {
|
||||||
if ((x % ((device->pages[i].n_effects+1)/device->pages[i].n_rows)) == 0) {
|
if ((x % ((device->pages[i].n_effects+1)/device->pages[i].n_rows)) == 0) {
|
||||||
hbox = gtk_hbox_new(FALSE, 0);
|
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 2);
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 2);
|
||||||
}
|
}
|
||||||
widget = create_vbox(device->pages[i].effects[x].effect, device->pages[i].effects[x].amt, device->pages[i].effects[x].label);
|
widget = create_vbox(device->pages[i].effects[x].effect, device->pages[i].effects[x].amt, device->pages[i].effects[x].label);
|
||||||
@@ -1366,6 +1507,16 @@ void gui_create(Device *device)
|
|||||||
gtk_widget_show_all(window);
|
gtk_widget_show_all(window);
|
||||||
|
|
||||||
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
|
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
|
||||||
|
|
||||||
|
/* Not part of the preset, but update from the device. */
|
||||||
|
get_option(TUNING_REFERENCE, GLOBAL_POSITION);
|
||||||
|
get_option(USB_AUDIO_PLAYBACK_MIX, GLOBAL_POSITION);
|
||||||
|
get_option(GUI_MODE_ON_OFF, GLOBAL_POSITION);
|
||||||
|
get_option(USB_AUDIO_LEVEL, GLOBAL_POSITION);
|
||||||
|
get_option(EXP_PEDAL_LEVEL, GLOBAL_POSITION);
|
||||||
|
get_option(STOMP_MODE, GLOBAL_POSITION);
|
||||||
|
|
||||||
|
send_message(REQUEST_MODIFIER_LINKABLE_LIST, "\x00\x01", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
1
gui.h
1
gui.h
@@ -30,5 +30,6 @@ void gui_free();
|
|||||||
gboolean unsupported_device_dialog(Device **device);
|
gboolean unsupported_device_dialog(Device **device);
|
||||||
gint select_device_dialog (GList *devices);
|
gint select_device_dialog (GList *devices);
|
||||||
const gchar* get_message_name(MessageID msgid);
|
const gchar* get_message_name(MessageID msgid);
|
||||||
|
void create_modifier_group (guint pos, guint id);
|
||||||
|
|
||||||
#endif /* GDIGI_GUI_H */
|
#endif /* GDIGI_GUI_H */
|
||||||
|
|||||||
17
preset_xml.c
17
preset_xml.c
@@ -30,6 +30,7 @@
|
|||||||
extern XmlSettings xml_settings[];
|
extern XmlSettings xml_settings[];
|
||||||
extern guint n_xml_settings;
|
extern guint n_xml_settings;
|
||||||
extern EffectValues values_on_off;
|
extern EffectValues values_on_off;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \param id modifier ID
|
* \param id modifier ID
|
||||||
* \param position modifier position
|
* \param position modifier position
|
||||||
@@ -52,18 +53,19 @@ XmlSettings *get_xml_settings (guint id, guint position)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gchar *
|
gchar *
|
||||||
map_xml_value (XmlSettings *xml, gint value)
|
map_xml_value (XmlSettings *xml, EffectValues *values, gint value)
|
||||||
{
|
{
|
||||||
switch (xml->values->type) {
|
switch (values->type) {
|
||||||
case VALUE_TYPE_LABEL:
|
case VALUE_TYPE_LABEL:
|
||||||
if ((xml->values == &values_on_off) && (value > 1)) {
|
if ((values == &values_on_off) && (value > 1)) {
|
||||||
g_warning("Skipping modifier->label %s\n", xml->label);
|
g_warning("Skipping modifier->label %s\n", xml->label);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (value > xml->values->max || value < xml->values->min) {
|
|
||||||
|
if (value > values->max || value < values->min) {
|
||||||
g_warning("%s value %d out of range %0.1f %0.1f",
|
g_warning("%s value %d out of range %0.1f %0.1f",
|
||||||
xml->label, value, xml->values->min, xml->values->max);
|
xml->label, value, xml->values->min, xml->values->max);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
XmlLabel *labels = xml->xml_labels;
|
XmlLabel *labels = xml->xml_labels;
|
||||||
guint labels_amt = xml->xml_labels_amt;
|
guint labels_amt = xml->xml_labels_amt;
|
||||||
@@ -96,6 +98,7 @@ gboolean value_is_extra (EffectValues *val, int value)
|
|||||||
void
|
void
|
||||||
write_preset_to_xml(Preset *preset, gchar *filename)
|
write_preset_to_xml(Preset *preset, gchar *filename)
|
||||||
{
|
{
|
||||||
|
|
||||||
int rc;
|
int rc;
|
||||||
xmlTextWriterPtr writer;
|
xmlTextWriterPtr writer;
|
||||||
GList *iter_params = preset->params;
|
GList *iter_params = preset->params;
|
||||||
@@ -205,7 +208,7 @@ write_preset_to_xml(Preset *preset, gchar *filename)
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case VALUE_TYPE_LABEL:
|
case VALUE_TYPE_LABEL:
|
||||||
{
|
{
|
||||||
char *textp = map_xml_value(xml, param->value);
|
char *textp = map_xml_value(xml, values, param->value);
|
||||||
if (!textp) {
|
if (!textp) {
|
||||||
g_warning("Unable to map %s value %d for id %d position %d",
|
g_warning("Unable to map %s value %d for id %d position %d",
|
||||||
xml->label, param->value, param->id,
|
xml->label, param->value, param->id,
|
||||||
|
|||||||
Reference in New Issue
Block a user