Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
29124043ba | ||
|
|
e93e6bd16b | ||
|
|
f7ddd5e0d6 | ||
|
|
6a082acc53 | ||
|
|
1abcc82829 | ||
|
|
c964d38c17 | ||
|
|
12c2ccc87f | ||
|
|
a6d07fd802 | ||
|
|
215683b167 | ||
|
|
741482afd4 |
1
TODO
1
TODO
@@ -4,3 +4,4 @@
|
||||
-buildsystem (install knob.png to share dir, don't use inline knob pixbuf)
|
||||
-add expression pedal settings to gui
|
||||
-read asynchronously from MIDI IN
|
||||
-guess device port when user doesn't explicitly provide it (don't use hardcoded "hw:1,0,0")
|
||||
|
||||
11
effects.h
11
effects.h
@@ -17,7 +17,7 @@
|
||||
#ifndef GDIGI_EFFECTS_H
|
||||
#define GDIGI_EFFECTS_H
|
||||
|
||||
#include <glib/gtypes.h>
|
||||
#include <glib.h>
|
||||
|
||||
typedef struct {
|
||||
gdouble min; /**< Minumum value */
|
||||
@@ -60,7 +60,16 @@ typedef struct {
|
||||
gint group_amt;
|
||||
} ModifierGroup;
|
||||
|
||||
typedef struct {
|
||||
gchar *name;
|
||||
EffectList *list;
|
||||
int n_list;
|
||||
} SupportedDevices;
|
||||
|
||||
ModifierGroup *modifier_linkable_list();
|
||||
void modifier_group_free(ModifierGroup *modifier_group);
|
||||
gboolean get_effect_list(unsigned char device_id, unsigned char family_id,
|
||||
unsigned char product_id,
|
||||
EffectList **list, int *n_list);
|
||||
|
||||
#endif /* GDIGI_EFFECTS_H */
|
||||
|
||||
17
gdigi.c
17
gdigi.c
@@ -566,9 +566,20 @@ int main(int argc, char *argv[]) {
|
||||
if (request_who_am_i(&device_id, &family_id, &product_id) == FALSE) {
|
||||
show_error_message(NULL, "No suitable reply from device");
|
||||
} else {
|
||||
gui_create();
|
||||
gtk_main();
|
||||
gui_free();
|
||||
EffectList *list = NULL;
|
||||
int n_list = -1;
|
||||
|
||||
if (get_effect_list(device_id, family_id, product_id, &list, &n_list) == FALSE) {
|
||||
if (unsupported_device_dialog(&list, &n_list) == FALSE) {
|
||||
g_message("Shutting down");
|
||||
}
|
||||
}
|
||||
|
||||
if (list != NULL && n_list != -1) {
|
||||
gui_create(list, n_list);
|
||||
gtk_main();
|
||||
gui_free();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
186
gdigi.h
186
gdigi.h
@@ -41,7 +41,8 @@ enum {
|
||||
|
||||
enum {
|
||||
COMP_TYPE_DIGI = 195,
|
||||
COMP_TYPE_CS = 196
|
||||
COMP_TYPE_CS = 196,
|
||||
COMP_TYPE_DYNA = 197
|
||||
};
|
||||
|
||||
#define COMP_TYPE 207
|
||||
@@ -52,6 +53,8 @@ enum {
|
||||
#define COMP_TONE 209
|
||||
#define COMP_ATTACK 211
|
||||
#define COMP_LEVEL 210
|
||||
#define COMP_SENSITIVITY 213
|
||||
#define COMP_OUTPUT 212
|
||||
|
||||
enum {
|
||||
PICKUP_TYPE_HB_SC = 66,
|
||||
@@ -65,8 +68,10 @@ enum {
|
||||
enum {
|
||||
DIST_TYPE_SCREAMER = 1280,
|
||||
DIST_TYPE_808 = 1292,
|
||||
DIST_TYPE_SPARKDRIVE = 1286,
|
||||
DIST_TYPE_GUYOD = 1285,
|
||||
DIST_TYPE_DOD250 = 1283,
|
||||
DIST_TYPE_REDLINE = 1297,
|
||||
DIST_TYPE_RODENT = 1281,
|
||||
DIST_TYPE_MX = 1291,
|
||||
DIST_TYPE_DS = 1282,
|
||||
@@ -74,6 +79,9 @@ enum {
|
||||
DIST_TYPE_ZONE = 1289,
|
||||
DIST_TYPE_DEATH = 1294,
|
||||
DIST_TYPE_GONK = 1293,
|
||||
DIST_TYPE_8TAVIA = 1290,
|
||||
DIST_TYPE_FUZZLATOR = 1295,
|
||||
DIST_TYPE_CLASSIC_FUZZ = 1296,
|
||||
DIST_TYPE_FUZZY = 1288,
|
||||
DIST_TYPE_MP = 1284
|
||||
};
|
||||
@@ -85,41 +93,74 @@ enum {
|
||||
#define DIST_SCREAMER_DRIVE 2434
|
||||
#define DIST_SCREAMER_TONE 2435
|
||||
#define DIST_SCREAMER_LVL 2436
|
||||
|
||||
#define DIST_808_OVERDRIVE 2473
|
||||
#define DIST_808_TONE 2474
|
||||
#define DIST_808_LVL 2475
|
||||
|
||||
#define DIST_SPARKDRIVE_GAIN 2450
|
||||
#define DIST_SPARKDRIVE_TONE 2451
|
||||
#define DIST_SPARKDRIVE_CLEAN 2452
|
||||
#define DIST_SPARKDRIVE_VOLUME 2453
|
||||
|
||||
#define DIST_GUYOD_DRIVE 2448
|
||||
#define DIST_GUYOD_LVL 2449
|
||||
|
||||
#define DIST_DOD250_GAIN 2443
|
||||
#define DIST_DOD250_LVL 2444
|
||||
|
||||
#define DIST_REDLINE_GAIN 2488
|
||||
#define DIST_REDLINE_LOW 2489
|
||||
#define DIST_REDLINE_HIGH 2490
|
||||
#define DIST_REDLINE_LEVEL 2491
|
||||
|
||||
#define DIST_RODENT_DIST 2437
|
||||
#define DIST_RODENT_FILTER 2438
|
||||
#define DIST_RODENT_LVL 2439
|
||||
|
||||
#define DIST_MX_DIST 2468
|
||||
#define DIST_MX_OUTPUT 2469
|
||||
#define DIST_DS_GAIN 2440
|
||||
#define DIST_DS_TONE 2441
|
||||
#define DIST_DS_LVL 2442
|
||||
|
||||
#define DIST_GRUNGE_GRUNGE 2454
|
||||
#define DIST_GRUNGE_FACE 2456
|
||||
#define DIST_GRUNGE_LOUD 2457
|
||||
#define DIST_GRUNGE_BUTT 2455
|
||||
|
||||
#define DIST_ZONE_GAIN 2460
|
||||
#define DIST_ZONE_LOW 2463
|
||||
#define DIST_ZONE_MID_LVL 2462
|
||||
#define DIST_ZONE_MID_FREQ 2461
|
||||
#define DIST_ZONE_HIGH 2464
|
||||
#define DIST_ZONE_LEVEL 2465
|
||||
|
||||
#define DIST_DEATH_LOW 2477
|
||||
#define DIST_DEATH_MID 2476
|
||||
#define DIST_DEATH_HIGH 2479
|
||||
#define DIST_DEATH_LVL 2478
|
||||
|
||||
#define DIST_GONK_GONK 2480
|
||||
#define DIST_GONK_SMEAR 2471
|
||||
#define DIST_GONK_SUCK 2470
|
||||
#define DIST_GONK_HEAVE 2472
|
||||
|
||||
#define DIST_8TAVIA_DRIVE 2466
|
||||
#define DIST_8TAVIA_VOLUME 2467
|
||||
|
||||
#define DIST_FUZZLATOR_FUZZ 2481
|
||||
#define DIST_FUZZLATOR_TONE 2482
|
||||
#define DIST_FUZZLATOR_LOOSETIGHT 2483
|
||||
#define DIST_FUZZLATOR_VOLUME 2484
|
||||
|
||||
#define DIST_CLASSIC_FUZZ_FUZZ 2485
|
||||
#define DIST_CLASSIC_FUZZ_TONE 2486
|
||||
#define DIST_CLASSIC_FUZZ_VOLUME 2487
|
||||
|
||||
#define DIST_FUZZY_FUZZ 2458
|
||||
#define DIST_FUZZY_VOLUME 2459
|
||||
|
||||
#define DIST_MP_SUSTAIN 2445
|
||||
#define DIST_MP_TONE 2446
|
||||
#define DIST_MP_VOLUME 2447
|
||||
@@ -131,24 +172,55 @@ enum {
|
||||
AMP_TYPE_TWEED_CHAMP = 307,
|
||||
AMP_TYPE_TWEED_DELUXE = 308,
|
||||
AMP_TYPE_TWEED_BASSMAN = 309,
|
||||
AMP_TYPE_BROWN_BASSMAN = 310,
|
||||
AMP_TYPE_BLACKFACE_TWIN = 311,
|
||||
AMP_TYPE_BLACKFACE_DELUXE = 312,
|
||||
AMP_TYPE_PLEXI_JTM_45 = 313,
|
||||
AMP_TYPE_SUPER_LEAD_PLEXI = 314,
|
||||
AMP_TYPE_PLEXI_JUMP_PANEL = 315,
|
||||
AMP_TYPE_MASTER_VOLUME = 316,
|
||||
AMP_TYPE_JCM800 = 317,
|
||||
AMP_TYPE_JCM900 = 318,
|
||||
AMP_TYPE_JCM2000 = 319,
|
||||
AMP_TYPE_AC15 = 322,
|
||||
AMP_TYPE_AC30TB = 323,
|
||||
AMP_TYPE_HIWATT_100 = 324,
|
||||
AMP_TYPE_BOOGIE_MARK_II = 320,
|
||||
AMP_TYPE_BOOGIE_MARK_IV = 371,
|
||||
AMP_TYPE_DUAL_RECTIFIER = 321,
|
||||
AMP_TYPE_TRIPLE_RECTIFIER = 370,
|
||||
AMP_TYPE_LEGACY_VL100 = 327,
|
||||
AMP_TYPE_MATCHLESS_HC30 = 326,
|
||||
AMP_TYPE_SOLDANO_100 = 325,
|
||||
AMP_TYPE_SUPERGROUP = 381,
|
||||
AMP_TYPE_GA40 = 380,
|
||||
AMP_TYPE_OR120 = 372,
|
||||
AMP_TYPE_PV5150II = 373,
|
||||
AMP_TYPE_RG100 = 374,
|
||||
AMP_TYPE_JC120_JAZZ = 375,
|
||||
AMP_TYPE_SOLAR100 = 376,
|
||||
AMP_TYPE_SOLO = 331,
|
||||
AMP_TYPE_METAL = 332,
|
||||
AMP_TYPE_BRIGHT = 333,
|
||||
AMP_TYPE_CHUNK = 334,
|
||||
AMP_TYPE_CLEAN = 335,
|
||||
AMP_TYPE_HIGH_GAIN = 337,
|
||||
AMP_TYPE_BLUES = 338,
|
||||
AMP_TYPE_FUZZ = 339,
|
||||
AMP_TYPE_SPANK = 330,
|
||||
AMP_TYPE_GSP2101_CLEAN_TUBE = 328,
|
||||
AMP_TYPE_GSP2101_SAT_TUBE = 329,
|
||||
AMP_TYPE_CRUNCH = 336,
|
||||
AMP_TYPE_MONSTER = 377,
|
||||
AMP_TYPE_TWEEDFACE = 378,
|
||||
AMP_TYPE_BLACKBASS = 379,
|
||||
AMP_TYPE_STONER_ROCK = 368,
|
||||
AMP_TYPE_DARK_METAL = 369,
|
||||
AMP_TYPE_TRANSISTOR = 382,
|
||||
AMP_TYPE_BROWN_SOUND = 383,
|
||||
AMP_TYPE_MOSH = 384,
|
||||
AMP_TYPE_ACOUSTIC = 341,
|
||||
AMP_TYPE_JUMBO_ACOUSTIC = 340,
|
||||
AMP_TYPE_DIRECT = 306
|
||||
};
|
||||
|
||||
@@ -165,6 +237,9 @@ enum {
|
||||
|
||||
#define AMP_GAIN 2497
|
||||
#define AMP_LEVEL 2498
|
||||
#define AMP_BASS 2507
|
||||
#define AMP_MID 2508
|
||||
#define AMP_TREBLE 2509
|
||||
|
||||
#define AMP_CAB_TYPE 2560
|
||||
#define AMP_CAB_POSITION 9
|
||||
@@ -173,18 +248,29 @@ enum {
|
||||
#define AMP_CAB_DIRECT 570
|
||||
#define AMP_CAB_CHAMP 571
|
||||
#define AMP_CAB_DELUXE 572
|
||||
#define AMP_CAB_DELUXE_REVERB 573
|
||||
#define AMP_CAB_BRITISH1_12 623
|
||||
#define AMP_CAB_GA1_12 624
|
||||
#define AMP_CAB_BLONDE2_12 577
|
||||
#define AMP_CAB_TWIN 576
|
||||
#define AMP_CAB_BRITISH2_12 613
|
||||
#define AMP_CAB_JAZZ2_12 626
|
||||
#define AMP_CAB_BASSMAN 579
|
||||
#define AMP_CAB_BRITISH4_12 614
|
||||
#define AMP_CAB_BRITISH_GREEN 616
|
||||
#define AMP_CAB_FANE4_12 584
|
||||
#define AMP_CAB_BOUTIQUE4_12 583
|
||||
#define AMP_CAB_VINTAGE 622
|
||||
#define AMP_CAB_RECTO4_12 625
|
||||
#define AMP_CAB_DIGI_SOLO 609
|
||||
#define AMP_CAB_DIGI_BRIGHT 611
|
||||
#define AMP_CAB_DIGI_METAL 618
|
||||
#define AMP_CAB_DIGI_ROCK 619
|
||||
#define AMP_CAB_DIGI_ALT 620
|
||||
#define AMP_CAB_DIGI_VNTG 621
|
||||
#define AMP_CAB_DIGI_CHUNK 612
|
||||
#define AMP_CAB_DIGI_SPANK2_12 608
|
||||
#define AMP_CAB_DIGI_SPKR_COMP 585
|
||||
|
||||
#define EQ_TYPE 3202
|
||||
#define EQ_ON_OFF 3212
|
||||
@@ -195,6 +281,15 @@ enum {
|
||||
#define EQ_MID_HZ 3206
|
||||
#define EQ_TREBLE 3205
|
||||
#define EQ_TREBLE_HZ 3211
|
||||
#define EQ_LOW_LEVEL 3203
|
||||
#define EQ_MID_LEVEL 3204
|
||||
#define EQ_HIGH_LEVEL 3205
|
||||
#define EQ_LOW_FREQ 3213
|
||||
#define EQ_MID_FREQ 3214
|
||||
#define EQ_HIGH_FREQ 3215
|
||||
#define EQ_LOW_BANDWIDTH 3216
|
||||
#define EQ_MID_BANDWIDTH 3217
|
||||
#define EQ_HIGH_BANDWIDTH 3218
|
||||
|
||||
enum {
|
||||
NOISEGATE_GATE = 768,
|
||||
@@ -216,24 +311,40 @@ enum {
|
||||
|
||||
enum {
|
||||
CHORUS_TYPE_CE = 0x37B,
|
||||
CHORUS_TYPE_TC = 0x37C,
|
||||
CHORUS_TYPE_DUAL = 0x379,
|
||||
CHORUS_TYPE_GLISTEN = 0x392,
|
||||
CHORUS_TYPE_MULTI = 0x37a,
|
||||
CHORUS_TYPE_FLANGER = 0x37d,
|
||||
CHORUS_TYPE_TRIGGERED_FLANGER = 0x37e,
|
||||
CHORUS_TYPE_MXR_FLANGER = 0x37f,
|
||||
CHORUS_TYPE_EH_FLANGER = 0x380,
|
||||
CHORUS_TYPE_AD_FLANGER = 0x393,
|
||||
CHORUS_TYPE_PHASER = 0x381,
|
||||
CHORUS_TYPE_TRIGGERED_PHASER = 0x382,
|
||||
CHORUS_TYPE_MX_PHASER = 0x383,
|
||||
CHORUS_TYPE_EH_PHASER = 0x384,
|
||||
CHORUS_TYPE_VIBRATO = 0x360,
|
||||
CHORUS_TYPE_ROTARY = 0x361,
|
||||
CHORUS_TYPE_VIBROPAN = 0x38f,
|
||||
CHORUS_TYPE_UNOVIBE = 0x390,
|
||||
CHORUS_TYPE_TREMOLO = 0x35e,
|
||||
CHORUS_TYPE_SCATTER_TREM = 0x394,
|
||||
CHORUS_TYPE_OPTO_TREMOLO = 0x388,
|
||||
CHORUS_TYPE_BIAS_TREMOLO = 0x389,
|
||||
CHORUS_TYPE_PANNER = 0x35f,
|
||||
CHORUS_TYPE_ENVELOPE = 0x38a,
|
||||
CHORUS_TYPE_FX25 = 0x38e,
|
||||
CHORUS_TYPE_AUTOYA = 0x38b,
|
||||
CHORUS_TYPE_YAYA = 0x38c,
|
||||
CHORUS_TYPE_SYNTH_TALK = 0x391,
|
||||
CHORUS_TYPE_STEP_FILTER = 0x38d,
|
||||
CHORUS_TYPE_SAMPLE_HOLD = 0x395,
|
||||
CHORUS_TYPE_WHAMMY = 0x540,
|
||||
CHORUS_TYPE_PITCH_SHIFT = 0x543,
|
||||
CHORUS_TYPE_DETUNE = 0x542,
|
||||
CHORUS_TYPE_IPS = 0x541
|
||||
CHORUS_TYPE_IPS = 0x541,
|
||||
CHORUS_TYPE_OCTAVER = 0x385,
|
||||
};
|
||||
|
||||
#define CHORUSFX_TYPE 768
|
||||
@@ -243,6 +354,9 @@ enum {
|
||||
#define CE_CHORUS_SPEED 837
|
||||
#define CE_CHORUS_DEPTH 838
|
||||
|
||||
#define CHORUS_WIDTH 848
|
||||
#define CHORUS_INTENSITY 849
|
||||
|
||||
#define DUAL_CHORUS_SPEED 837
|
||||
#define DUAL_CHORUS_DEPTH 838
|
||||
#define DUAL_CHORUS_LEVEL 836
|
||||
@@ -259,17 +373,39 @@ enum {
|
||||
#define FLANGER_LEVEL 901
|
||||
#define FLANGER_WAVE 905
|
||||
|
||||
#define TRIG_FLANGER_SPEED 1030
|
||||
#define TRIG_FLANGER_SENS 1031
|
||||
#define TRIG_FLANGER_LFO_START 1028
|
||||
#define TRIG_FLANGER_LEVEL 1032
|
||||
|
||||
#define MXR_FLANGER_SPEED 902
|
||||
#define MXR_FLANGER_WIDTH 914
|
||||
#define MXR_FLANGER_REGEN 904
|
||||
#define MXR_FLANGER_MANUAL 917
|
||||
|
||||
#define EH_FLANGER_RATE 918
|
||||
#define EH_FLANGER_RANGE 919
|
||||
#define EH_FLANGER_COLOR 916
|
||||
|
||||
#define AD_FLANGER_ENHANCE 920
|
||||
#define AD_FLANGER_HARMONICS 921
|
||||
|
||||
#define PHASER_SPEED 962
|
||||
#define PHASER_DEPTH 963
|
||||
#define PHASER_REGEN 966
|
||||
#define PHASER_LEVEL 965
|
||||
#define PHASER_WAVE 967
|
||||
|
||||
#define TRIG_PHASER_SPEED 1094
|
||||
#define TRIG_PHASER_SENS 1095
|
||||
#define TRIG_PHASER_LFO_START 1092
|
||||
#define TRIG_PHASER_LEVEL 1096
|
||||
|
||||
#define MX_PHASER_INTENSITY 976
|
||||
|
||||
#define EH_PHASER_RATE 979
|
||||
#define EH_PHASER_COLOR 977
|
||||
|
||||
#define VIBRATO_SPEED 1284
|
||||
#define VIBRATO_DEPTH 1285
|
||||
|
||||
@@ -283,6 +419,11 @@ enum {
|
||||
#define VIBROPAN_VIBRA 1316
|
||||
#define VIBROPAN_WAVE 1317
|
||||
|
||||
#define UNOVIBE_PEDAL_SPEED 2884
|
||||
#define UNOVIBE_INTENSITY 2883
|
||||
#define UNOVIBE_CHORUS_VIBRATO 2882
|
||||
#define UNOVIBE_VOLUME 2885
|
||||
|
||||
#define TREMOLO_SPEED 1156
|
||||
#define TREMOLO_DEPTH 1155
|
||||
#define TREMOLO_WAVE 1157
|
||||
@@ -293,6 +434,7 @@ enum {
|
||||
|
||||
#define ENVELOPE_SENSITIVITY 1606
|
||||
#define ENVELOPE_RANGE 1605
|
||||
#define ENVELOPE_BLEND 1608
|
||||
|
||||
#define AUTOYA_SPEED 1478
|
||||
#define AUTOYA_INTENSITY 1482
|
||||
@@ -302,9 +444,18 @@ enum {
|
||||
#define YAYA_INTENSITY 1417
|
||||
#define YAYA_RANGE 1418
|
||||
|
||||
#define SYNTH_TALK_ATTACK 1542
|
||||
#define SYNTH_TALK_RELEASE 1547
|
||||
#define SYNTH_TALK_SENS 1544
|
||||
#define SYNTH_TALK_VOX 1540
|
||||
#define SYNTH_TALK_BALANCE 1545
|
||||
|
||||
#define STEP_FILTER_SPEED 3010
|
||||
#define STEP_FILTER_INTENSITY 3011
|
||||
|
||||
#define SAMPLE_HOLD_SPEED 3012
|
||||
#define SAMPLE_HOLD_INTENSITY 3013
|
||||
|
||||
#define WHAMMY_AMOUNT 1797
|
||||
#define WHAMMY_PEDAL 1795
|
||||
#define WHAMMY_MIX 1796
|
||||
@@ -320,6 +471,10 @@ enum {
|
||||
#define IPS_SCALE 2755
|
||||
#define IPS_LEVEL 2757
|
||||
|
||||
#define OCTAVER_OCTAVE1 1746
|
||||
#define OCTAVER_OCTAVE2 1747
|
||||
#define OCTAVER_DRY_LEVEL 1748
|
||||
|
||||
/* DUAL_CHORUS_WAVE, MULTI_CHORUS_WAVE, FLANGER_WAVE, PHASER_WAVE,
|
||||
VIBROPAN_WAVE, TREMOLO_WAVE, PANNER_WAVE valid values */
|
||||
#define WAVE_TRI 0x00
|
||||
@@ -387,7 +542,16 @@ enum {
|
||||
DELAY_TYPE_DIGITAL = 1045,
|
||||
DELAY_TYPE_MODULATED = 1047,
|
||||
DELAY_TYPE_PONG = 1048,
|
||||
DELAY_TYPE_TAPE = 1049
|
||||
DELAY_TYPE_TAPE = 1049,
|
||||
|
||||
DELAY_RP500_TYPE_DIGITAL = 1052,
|
||||
DELAY_RP500_TYPE_ANALOG = 1053,
|
||||
DELAY_RP500_TYPE_DM = 1058,
|
||||
DELAY_RP500_TYPE_ECHOPLEX = 1057,
|
||||
DELAY_RP500_TYPE_MODULATED = 1054,
|
||||
DELAY_RP500_TYPE_PONG = 1055,
|
||||
DELAY_RP500_TYPE_REVERSE = 1064,
|
||||
DELAY_RP500_TYPE_TAPE = 1056,
|
||||
};
|
||||
|
||||
#define DELAY_TYPE 1856
|
||||
@@ -418,6 +582,22 @@ enum {
|
||||
#define TAPE_WOW 1891
|
||||
#define TAPE_FLUTTER 1892
|
||||
|
||||
#define DELAY_LEVEL 1860
|
||||
#define DELAY_REPEATS 1863
|
||||
#define DELAY_TAP_TIME 1868
|
||||
#define DELAY_DUCK_THRESH 1889
|
||||
#define DELAY_DUCK_LEVEL 1890
|
||||
#define DELAY_REPEAT_RATE 1898
|
||||
#define DELAY_ECHO 1895
|
||||
#define DELAY_INTENSITY 1896
|
||||
#define DELAY_TIME_0_760 1899
|
||||
#define DELAY_VOLUME 1893
|
||||
#define DELAY_REPEATS_0_99 1874
|
||||
#define DELAY_DEPTH 1873
|
||||
#define DELAY_TAP_TIME_0_4990 1900
|
||||
#define DELAY_MIX 1902
|
||||
#define DELAY_TIME_0_4650 1901
|
||||
|
||||
enum {
|
||||
REVERB_TYPE_TWIN = 1146,
|
||||
REVERB_TYPE_LEX_AMBIENCE = 1150,
|
||||
|
||||
55
gtkknob.c
55
gtkknob.c
@@ -20,12 +20,10 @@
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*****************************************************************************/
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <gtk/gtkmain.h>
|
||||
#include <gtk/gtksignal.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
|
||||
#include <math.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include "gtkknob.h"
|
||||
|
||||
|
||||
@@ -103,14 +101,14 @@ gtk_knob_get_type(void) {
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_class_init (GtkKnobClass *class) {
|
||||
gtk_knob_class_init (GtkKnobClass *klass) {
|
||||
GtkObjectClass *object_class;
|
||||
GtkWidgetClass *widget_class;
|
||||
|
||||
object_class = (GtkObjectClass*) class;
|
||||
widget_class = (GtkWidgetClass*) class;
|
||||
object_class = (GtkObjectClass*) klass;
|
||||
widget_class = (GtkWidgetClass*) klass;
|
||||
|
||||
parent_class = g_type_class_ref (GTK_TYPE_WIDGET);
|
||||
parent_class = g_type_class_peek_parent(klass);
|
||||
|
||||
object_class->destroy = gtk_knob_destroy;
|
||||
|
||||
@@ -190,10 +188,7 @@ gtk_knob_destroy(GtkObject *object) {
|
||||
|
||||
knob = GTK_KNOB (object);
|
||||
|
||||
if (knob->adjustment) {
|
||||
g_object_unref (knob->adjustment);
|
||||
knob->adjustment = NULL;
|
||||
}
|
||||
gtk_knob_set_adjustment (knob, NULL);
|
||||
/* FIXME: needs ref counting for automatic GtkKnobAnim cleanup
|
||||
if (knob->anim) {
|
||||
gtk_knob_anim_unref (knob->anim);
|
||||
@@ -271,21 +266,22 @@ gtk_knob_set_adjustment(GtkKnob *knob, GtkAdjustment *adjustment) {
|
||||
}
|
||||
|
||||
knob->adjustment = adjustment;
|
||||
g_object_ref (GTK_OBJECT (knob->adjustment));
|
||||
g_object_ref_sink (GTK_OBJECT (knob->adjustment));
|
||||
if (adjustment) {
|
||||
g_object_ref_sink (adjustment);
|
||||
|
||||
g_signal_connect (adjustment, "changed",
|
||||
(GCallback) gtk_knob_adjustment_changed,
|
||||
knob);
|
||||
g_signal_connect (adjustment, "value_changed",
|
||||
(GCallback) gtk_knob_adjustment_value_changed,
|
||||
knob);
|
||||
g_signal_connect (adjustment, "changed",
|
||||
G_CALLBACK(gtk_knob_adjustment_changed),
|
||||
knob);
|
||||
g_signal_connect (adjustment, "value_changed",
|
||||
G_CALLBACK(gtk_knob_adjustment_value_changed),
|
||||
knob);
|
||||
|
||||
knob->old_value = adjustment->value;
|
||||
knob->old_lower = adjustment->lower;
|
||||
knob->old_upper = adjustment->upper;
|
||||
knob->old_value = adjustment->value;
|
||||
knob->old_lower = adjustment->lower;
|
||||
knob->old_upper = adjustment->upper;
|
||||
|
||||
gtk_knob_update (knob);
|
||||
gtk_knob_update (knob);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -398,6 +394,7 @@ gtk_knob_expose(GtkWidget *widget, GdkEventExpose *event) {
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_KNOB (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_ADJUSTMENT (GTK_KNOB (widget)->adjustment), FALSE);
|
||||
|
||||
if (event->count > 0)
|
||||
return FALSE;
|
||||
@@ -436,6 +433,7 @@ gtk_knob_scroll(GtkWidget *widget, GdkEventScroll *event) {
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_KNOB (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_ADJUSTMENT (GTK_KNOB (widget)->adjustment), FALSE);
|
||||
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
@@ -468,6 +466,7 @@ gtk_knob_button_press(GtkWidget *widget, GdkEventButton *event) {
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_KNOB (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_ADJUSTMENT (GTK_KNOB (widget)->adjustment), FALSE);
|
||||
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
@@ -508,6 +507,7 @@ gtk_knob_button_release(GtkWidget *widget, GdkEventButton *event) {
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_KNOB (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_ADJUSTMENT (GTK_KNOB (widget)->adjustment), FALSE);
|
||||
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
@@ -544,6 +544,7 @@ static gint gtk_knob_key_press(GtkWidget *widget, GdkEventKey *event)
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_KNOB (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_ADJUSTMENT (GTK_KNOB (widget)->adjustment), FALSE);
|
||||
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
@@ -629,6 +630,7 @@ gtk_knob_timer(GtkKnob *knob) {
|
||||
|
||||
g_return_val_if_fail (knob != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_KNOB (knob), FALSE);
|
||||
g_return_val_if_fail (GTK_IS_ADJUSTMENT (knob->adjustment), FALSE);
|
||||
|
||||
if (knob->policy == GTK_UPDATE_DELAYED) {
|
||||
g_signal_emit_by_name (knob->adjustment, "value_changed");
|
||||
@@ -646,6 +648,7 @@ gtk_knob_timer(GtkKnob *knob) {
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_update_mouse_update(GtkKnob *knob) {
|
||||
g_return_if_fail(GTK_IS_ADJUSTMENT (knob->adjustment));
|
||||
|
||||
if (knob->policy == GTK_UPDATE_CONTINUOUS) {
|
||||
g_signal_emit_by_name (knob->adjustment, "value_changed");
|
||||
@@ -677,6 +680,7 @@ gtk_knob_update_mouse(GtkKnob *knob, gint x, gint y, gboolean step) {
|
||||
|
||||
g_return_if_fail (knob != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (knob));
|
||||
g_return_if_fail (GTK_IS_ADJUSTMENT (knob->adjustment));
|
||||
|
||||
old_value = knob->adjustment->value;
|
||||
|
||||
@@ -722,6 +726,7 @@ gtk_knob_update(GtkKnob *knob) {
|
||||
|
||||
g_return_if_fail (knob != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (knob));
|
||||
g_return_if_fail (GTK_IS_ADJUSTMENT (knob->adjustment));
|
||||
|
||||
if (knob->adjustment->step_increment == 1) {
|
||||
new_value = floor (knob->adjustment->value + 0.5);
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Most of this code comes from gAlan 0.2.0, copyright (C) 1999
|
||||
* Tony Garnock-Jones, with modifications by Sean Bolton,
|
||||
* copyright (C) 2004, and minor modifications by William Weston,
|
||||
* copyright (C) 2007.
|
||||
* copyright (C) 2007, Tomasz Moń, copyright (C) 2009
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
@@ -22,9 +22,7 @@
|
||||
#ifndef __GTK_KNOB_H__
|
||||
#define __GTK_KNOB_H__
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <gtk/gtkadjustment.h>
|
||||
#include <gtk/gtkwidget.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
79
gui.c
79
gui.c
@@ -22,13 +22,6 @@
|
||||
#include "gtkknob.h"
|
||||
#include "knob.h"
|
||||
|
||||
#ifndef DOXYGEN_SHOULD_SKIP_THIS
|
||||
|
||||
extern EffectList effects[];
|
||||
extern int n_effects;
|
||||
|
||||
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
|
||||
|
||||
typedef struct {
|
||||
GtkObject *widget;
|
||||
gint id;
|
||||
@@ -245,7 +238,11 @@ GtkWidget *create_table(EffectSettings *settings, gint amt)
|
||||
**/
|
||||
GtkWidget *create_on_off_button(Effect *effect)
|
||||
{
|
||||
GtkWidget *button = gtk_check_button_new();
|
||||
GtkWidget *button;
|
||||
if (effect->label == NULL)
|
||||
button = gtk_check_button_new();
|
||||
else
|
||||
button = gtk_check_button_new_with_label(effect->label);
|
||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
|
||||
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(toggled_cb), effect);
|
||||
widget_list_add(GTK_OBJECT(button), effect->id, effect->position, -1, -1);
|
||||
@@ -389,6 +386,7 @@ GtkWidget *create_vbox(Effect *widgets, gint amt, gchar *label)
|
||||
GtkWidget *container;
|
||||
GtkWidget *frame;
|
||||
int x;
|
||||
int y;
|
||||
|
||||
frame = gtk_frame_new(label);
|
||||
|
||||
@@ -401,13 +399,19 @@ GtkWidget *create_vbox(Effect *widgets, gint amt, gchar *label)
|
||||
if ((widgets[x].id != -1) && (widgets[x].position != -1)) {
|
||||
widget = create_on_off_button(&widgets[x]);
|
||||
gtk_table_attach_defaults(GTK_TABLE(table), widget, 0, 1, x, x+1);
|
||||
|
||||
if (widgets[x].label)
|
||||
y = 1;
|
||||
else
|
||||
y = 0;
|
||||
|
||||
} else if (widgets[x].label) {
|
||||
widget = gtk_label_new(widgets[x].label);
|
||||
gtk_table_attach_defaults(GTK_TABLE(table), widget, 0, 1, x, x+1);
|
||||
}
|
||||
|
||||
container = create_widget_container(widgets[x].group, widgets[x].group_amt);
|
||||
gtk_table_attach_defaults(GTK_TABLE(table), container, 1, 2, x, x+1);
|
||||
gtk_table_attach_defaults(GTK_TABLE(table), container, 1-y, 2-y, x+y, x+y+1);
|
||||
}
|
||||
gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 2);
|
||||
|
||||
@@ -620,6 +624,7 @@ typedef struct {
|
||||
|
||||
static SupportedFileTypes file_types[] = {
|
||||
{"RP250Preset", "*.rp250p"},
|
||||
{"RP500Preset", "*.rp500p"},
|
||||
};
|
||||
|
||||
static guint n_file_types = G_N_ELEMENTS(file_types);
|
||||
@@ -838,7 +843,7 @@ static void add_menubar(GtkWidget *window, GtkWidget *vbox)
|
||||
/**
|
||||
* Creates main window.
|
||||
**/
|
||||
void gui_create()
|
||||
void gui_create(EffectList *effects, int n_effects)
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *vbox;
|
||||
@@ -896,3 +901,57 @@ void gui_free()
|
||||
gtk_knob_animation_free(knob_anim);
|
||||
knob_anim = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* \param list Variable to hold effect list
|
||||
* \param n_list Variable to hold length of effect list
|
||||
*
|
||||
* Displays dialogbox stating that device is unsupported.
|
||||
*
|
||||
* \return TRUE if user selects "compability mode", otherwise FALSE.
|
||||
**/
|
||||
gboolean unsupported_device_dialog(EffectList **list, int *n_list)
|
||||
{
|
||||
extern SupportedDevices supported_devices[];
|
||||
extern int n_supported_devices;
|
||||
|
||||
GtkWidget *dialog;
|
||||
GtkWidget *label;
|
||||
GtkWidget *combo_box;
|
||||
int x;
|
||||
|
||||
dialog = gtk_dialog_new_with_buttons("Unsupported device",
|
||||
NULL, GTK_DIALOG_MODAL,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
|
||||
|
||||
label = gtk_label_new("Your device appears to be unsupported by gdigi.\n"
|
||||
"As some of the settings may be common between different devices,\n"
|
||||
"you can now select compability mode with one of the supported devices.\n"
|
||||
"Please take a look at gdigi's HACKING file.");
|
||||
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label);
|
||||
|
||||
combo_box = gtk_combo_box_new_text();
|
||||
for (x=0; x<n_supported_devices; x++) {
|
||||
gtk_combo_box_append_text(GTK_COMBO_BOX(combo_box), supported_devices[x].name);
|
||||
}
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), combo_box);
|
||||
|
||||
gtk_widget_show_all(GTK_DIALOG(dialog)->vbox);
|
||||
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
|
||||
gint number = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_box));
|
||||
if (number != -1 && number <n_supported_devices) {
|
||||
g_message("Starting %s compability mode", supported_devices[number].name);
|
||||
*list = supported_devices[number].list;
|
||||
*n_list = supported_devices[number].n_list;
|
||||
gtk_widget_destroy(dialog);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
gtk_widget_destroy(dialog);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
6
gui.h
6
gui.h
@@ -17,8 +17,12 @@
|
||||
#ifndef GDIGI_GUI_H
|
||||
#define GDIGI_GUI_H
|
||||
|
||||
#include <glib.h>
|
||||
#include "effects.h"
|
||||
|
||||
void show_error_message(GtkWidget *parent, gchar *message);
|
||||
void gui_create();
|
||||
void gui_create(EffectList *list, int n_list);
|
||||
void gui_free();
|
||||
gboolean unsupported_device_dialog(EffectList **list, int *n_list);
|
||||
|
||||
#endif /* GDIGI_GUI_H */
|
||||
|
||||
Reference in New Issue
Block a user