Compare commits
77 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9778dc47c3 | ||
|
|
71c3a1e66f | ||
|
|
bdb35ddf54 | ||
|
|
4ca140ab48 | ||
|
|
d2f821eee1 | ||
|
|
e607c6cf37 | ||
|
|
dc66db841a | ||
|
|
e80683aea2 | ||
|
|
b7d2d7d1c5 | ||
|
|
cd5d7387f3 | ||
|
|
8a39a178c6 | ||
|
|
40ebcfaf16 | ||
|
|
de68d0449f | ||
|
|
d280bf1ca6 | ||
|
|
b245e1bac6 | ||
|
|
8d7fffb6d1 | ||
|
|
f8e35ff685 | ||
|
|
3f717a51cd | ||
|
|
90df427200 | ||
|
|
322c59032e | ||
|
|
1b1919649e | ||
|
|
e7c7efe857 | ||
|
|
17b067f853 | ||
|
|
8ec3d6579c | ||
|
|
5bd6f8fc2c | ||
|
|
c61c2372ae | ||
|
|
49b7f42012 | ||
|
|
157fba0380 | ||
|
|
904a30bb38 | ||
|
|
8e445bb408 | ||
|
|
eb48d0b9d2 | ||
|
|
baa3829263 | ||
|
|
79554a99ce | ||
|
|
4740bef10f | ||
|
|
968d2947a7 | ||
|
|
e2cb03ab32 | ||
|
|
ce5fe3fe0c | ||
|
|
966fc748af | ||
|
|
709406f3ef | ||
|
|
ce522227c7 | ||
|
|
7d13b2a7ea | ||
|
|
d4c86b3a60 | ||
|
|
ca23f2c94c | ||
|
|
bfc285ad0f | ||
|
|
4e5f2438d3 | ||
|
|
10aac46dde | ||
|
|
e802d05ad3 | ||
|
|
95f4ad698a | ||
|
|
9f3bdd002d | ||
|
|
0cfcd806b1 | ||
|
|
c0ac97d4e2 | ||
|
|
84e9ab0e01 | ||
|
|
2c6afe730d | ||
|
|
79912510b4 | ||
|
|
8bdeea7728 | ||
|
|
22de8a00ab | ||
|
|
5cf9c021d8 | ||
|
|
2d4798abf7 | ||
|
|
e427e6f4d3 | ||
|
|
886f01c1e4 | ||
|
|
1c4ff62baa | ||
|
|
edbea6ff43 | ||
|
|
c4b1fbff77 | ||
|
|
68d05bd1db | ||
|
|
73f9a21a02 | ||
|
|
66c5a966a6 | ||
|
|
e7ce11164b | ||
|
|
f95804026c | ||
|
|
5c5d0b3709 | ||
|
|
146745829f | ||
|
|
a207b8ec62 | ||
|
|
a38ab64870 | ||
|
|
93ebb6b65c | ||
|
|
87908f7c9f | ||
|
|
f9d24bc6b9 | ||
|
|
48100b42e1 | ||
|
|
0816a4d0ce |
68
HACKING
Normal file
68
HACKING
Normal file
@@ -0,0 +1,68 @@
|
||||
In general everything brings down to figure out:
|
||||
-ID
|
||||
-Position
|
||||
-Possible value range
|
||||
|
||||
There seems to be two possible ways to figure that out.
|
||||
1) Use USB sniffer together with X-Edit
|
||||
Once you set up X-Edit and usb sniffer, set some option.
|
||||
USB sniffer should report something like this being sent to device:
|
||||
(all numbers here are hex)
|
||||
04 F0 00 00 04 10 00 5E 04 02 41 00 04 30 09 00 07 00 34 F7
|
||||
|
||||
To get SysEx command out of it, remove every 4th byte, so we have:
|
||||
F0 00 00 10 00 5E 02 41 00 30 09 00 00 34 F7
|
||||
|
||||
SysEx message format seems to be formed like this:
|
||||
magic bytes - F0 00 00 10 00 5E 02 41
|
||||
status byte - in this example 00
|
||||
ID - in this example 30 09
|
||||
Position - in this example 00
|
||||
Value - in this example 00 (can be more bytes long, see below)
|
||||
Checksum - to calculate it, XOR all bytes, and then XOR it with 07
|
||||
Every message ends with F7
|
||||
|
||||
Status byte bits explained:
|
||||
7th - ???
|
||||
6th - if active add 80 to ID
|
||||
5th - ???
|
||||
4th - is active when value will start with length
|
||||
In such case value can be something like:
|
||||
01 12 or 02 12 34 or 03 12 34 56
|
||||
and proper values are:
|
||||
01 - 12
|
||||
02 - 1234
|
||||
03 - 123456
|
||||
3rd - when 4th bit is also active, and first value byte is 01
|
||||
then add 80 to value
|
||||
2nd - when 4th bit is also active, and first value byte is 02
|
||||
then add 80 to value
|
||||
1st - when 4th bit is also active, and first value byte is 03
|
||||
then add 80 to value
|
||||
|
||||
So for above example:
|
||||
ID = 3009 (hex) = 12297 (decimal)
|
||||
Position = 0
|
||||
One of possible values is 0. Usually value range is 0 to 99,
|
||||
albeit in some cases it's different - you have to check what values can
|
||||
X-Edit assign (there doesn't seem to be any sanity check in firmware)
|
||||
This is especially needed for IDs that set some effect type.
|
||||
|
||||
2) Save preset patch
|
||||
Patches seem to be simple XML files.
|
||||
Every parameter is written like this:
|
||||
<Param>
|
||||
<ID>65</ID>
|
||||
<Position>2</Position>
|
||||
<Value>0</Value>
|
||||
<Name>Pickup Enable</Name>
|
||||
<Text>Off</Text>
|
||||
</Param>
|
||||
ID is ID, Position is Position and Value is one of possible values.
|
||||
To get all possible values you can:
|
||||
do
|
||||
change value to next one possible in X-Edit
|
||||
(for example next effect type)
|
||||
save new patch
|
||||
check patch file and note the change
|
||||
while you don't have all possible values
|
||||
19
Makefile
19
Makefile
@@ -1,7 +1,7 @@
|
||||
CC = gcc
|
||||
CFLAGS = `pkg-config --cflags glib-2.0 gtk+-2.0` -Wall -g
|
||||
CFLAGS = `pkg-config --cflags glib-2.0 gio-2.0 gtk+-2.0` -Wall -g -ansi -std=c99
|
||||
OFLAG = -o
|
||||
LIBS = `pkg-config --libs glib-2.0 gtk+-2.0 libusb`
|
||||
LIBS = `pkg-config --libs glib-2.0 gio-2.0 gtk+-2.0 alsa` -lexpat
|
||||
|
||||
.SUFFIXES : .o .c
|
||||
.c.o :
|
||||
@@ -9,8 +9,8 @@ LIBS = `pkg-config --libs glib-2.0 gtk+-2.0 libusb`
|
||||
|
||||
all: gdigi
|
||||
|
||||
gdigi: gdigi.o tests.o gui.o
|
||||
$(CC) $(LIBS) $(OFLAG) gdigi gdigi.o tests.o gui.o
|
||||
gdigi: knob.h gdigi.o tests.o gui.o effects.o preset.o gtkknob.o
|
||||
$(CC) $(LIBS) $(OFLAG) gdigi gdigi.o tests.o gui.o effects.o preset.o gtkknob.o
|
||||
|
||||
gdigi.o: gdigi.c
|
||||
|
||||
@@ -18,6 +18,17 @@ tests.o: tests.c
|
||||
|
||||
gui.o: gui.c
|
||||
|
||||
effects.o: effects.c
|
||||
|
||||
preset.o: preset.c
|
||||
|
||||
gtkknob.o: gtkknob.c
|
||||
|
||||
gtkknob.o: gtkknob.c
|
||||
|
||||
knob.h:
|
||||
gdk-pixbuf-csource --name=knob_pixbuf knob.png > $@
|
||||
|
||||
clean:
|
||||
rm *.o
|
||||
|
||||
|
||||
13
README
13
README
@@ -1,5 +1,12 @@
|
||||
Requirments: libusb, gtk+, glib
|
||||
Requirments: alsa, gtk+, glib, expat
|
||||
|
||||
Getting started guide:
|
||||
-disable snd_usb_audio (when it's loaded gdigi can't claim interface)
|
||||
-make && ./gdigi
|
||||
-to compile: make
|
||||
-to run: ./gdigi
|
||||
|
||||
Commandline options:
|
||||
--device (-d)
|
||||
|
||||
Example:
|
||||
gdigi -d hw:1,0,0
|
||||
gdigi --device=hw:1,0,0
|
||||
|
||||
14
TODO
14
TODO
@@ -1,12 +1,6 @@
|
||||
-figure out all magic commands
|
||||
-fix usb handling code
|
||||
-make complete gui
|
||||
-amp/cabinet models
|
||||
-expression pedal options
|
||||
-audio setup options
|
||||
-tone library
|
||||
-effects library
|
||||
-effects level
|
||||
-handling presets (loading, saving, exporting/importing to/from xml patches)
|
||||
-buildsystem
|
||||
-figure out how to get current device settings, start gui with proper values
|
||||
-handling presets (saving, exporting to xml patches)
|
||||
-buildsystem (install knob.png to share dir, don't use inline knob pixbuf)
|
||||
-add expression pedal settings to gui
|
||||
-read asynchronously from MIDI IN
|
||||
|
||||
65
effects.h
Normal file
65
effects.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Tomasz Moń <desowin@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; under version 3 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses>.
|
||||
*/
|
||||
|
||||
#ifndef GDIGI_EFFECTS_H
|
||||
#define GDIGI_EFFECTS_H
|
||||
|
||||
#include <glib/gtypes.h>
|
||||
|
||||
typedef struct {
|
||||
gdouble min; /* Minumum value */
|
||||
gdouble max; /* Maximum value */
|
||||
GStrv labels; /* value labels */
|
||||
} EffectValues;
|
||||
|
||||
typedef struct {
|
||||
gchar *label; /* Parameter name */
|
||||
guint id; /* ID (to set parameter) */
|
||||
guint position; /* position */
|
||||
EffectValues *values; /* valid parameter values */
|
||||
} EffectSettings;
|
||||
|
||||
typedef struct {
|
||||
guint type; /* value (type) */
|
||||
gchar *label; /* Effect name */
|
||||
guint id; /* ID (to set effect type) */
|
||||
guint position; /* position */
|
||||
EffectSettings *settings; /* possible parameters */
|
||||
gint settings_amt; /* possible parameters length */
|
||||
} EffectGroup;
|
||||
|
||||
typedef struct {
|
||||
gchar *label; /* Base effect name */
|
||||
guint id; /* ID (to set effect on/off) */
|
||||
guint position; /* position */
|
||||
EffectGroup *group; /* possible effect types */
|
||||
gint group_amt; /* possible effect types length */
|
||||
} Effect;
|
||||
|
||||
typedef struct {
|
||||
Effect *effect; /* list of supported effects */
|
||||
gint amt; /* list of supported effects length */
|
||||
} EffectList;
|
||||
|
||||
typedef struct {
|
||||
EffectGroup *group;
|
||||
gint group_amt;
|
||||
} ModifierGroup;
|
||||
|
||||
ModifierGroup *modifier_linkable_list();
|
||||
void modifier_group_free(ModifierGroup *modifier_group);
|
||||
|
||||
#endif /* GDIGI_EFFECTS_H */
|
||||
752
gdigi.h
752
gdigi.h
@@ -14,207 +14,309 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses>.
|
||||
*/
|
||||
|
||||
#include <usb.h>
|
||||
#ifndef GDIGI_H
|
||||
#define GDIGI_H
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
extern struct usb_dev_handle *handle;
|
||||
#include <glib-object.h>
|
||||
|
||||
enum {
|
||||
WAH_TYPE_CRY = 0,
|
||||
WAH_TYPE_FULLRANGE,
|
||||
WAH_TYPE_CLYDE
|
||||
WAH_TYPE_CRY = 132,
|
||||
WAH_TYPE_FULLRANGE = 133,
|
||||
WAH_TYPE_CLYDE = 134
|
||||
};
|
||||
|
||||
#define WAH_POSITION_MIN_MAX 20
|
||||
|
||||
#define WAH_MIN 8195
|
||||
#define WAH_MAX 8196
|
||||
|
||||
#define WAH_TYPE 128
|
||||
#define WAH_ON_OFF 129
|
||||
#define WAH_POSITION 3
|
||||
|
||||
#define WAH_LEVEL 133
|
||||
|
||||
enum {
|
||||
COMP_TYPE_DIGI = 195,
|
||||
COMP_TYPE_CS = 196
|
||||
};
|
||||
|
||||
#define COMP_TYPE 207
|
||||
#define COMP_ON_OFF 193
|
||||
#define COMP_POSITION 4
|
||||
|
||||
#define COMP_SUSTAIN 208
|
||||
#define COMP_TONE 209
|
||||
#define COMP_ATTACK 211
|
||||
#define COMP_LEVEL 210
|
||||
|
||||
enum {
|
||||
PICKUP_TYPE_HB_SC = 66,
|
||||
PICKUP_TYPE_SC_HB = 65
|
||||
};
|
||||
|
||||
#define PICKUP_TYPE 64
|
||||
#define PICKUP_ON_OFF 65
|
||||
#define PICKUP_POSITION 2
|
||||
|
||||
enum {
|
||||
DIST_TYPE_SCREAMER = 1280,
|
||||
DIST_TYPE_808 = 1292,
|
||||
DIST_TYPE_GUYOD = 1285,
|
||||
DIST_TYPE_DOD250 = 1283,
|
||||
DIST_TYPE_RODENT = 1281,
|
||||
DIST_TYPE_MX = 1291,
|
||||
DIST_TYPE_DS = 1282,
|
||||
DIST_TYPE_GRUNGE = 1287,
|
||||
DIST_TYPE_ZONE = 1289,
|
||||
DIST_TYPE_DEATH = 1294,
|
||||
DIST_TYPE_GONK = 1293,
|
||||
DIST_TYPE_FUZZY = 1288,
|
||||
DIST_TYPE_MP = 1284
|
||||
};
|
||||
|
||||
#define DIST_TYPE 2432
|
||||
#define DIST_ON_OFF 2433
|
||||
#define DIST_POSITION 6
|
||||
|
||||
#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_GUYOD_DRIVE 2448
|
||||
#define DIST_GUYOD_LVL 2449
|
||||
#define DIST_DOD250_GAIN 2443
|
||||
#define DIST_DOD250_LVL 2444
|
||||
#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_FUZZY_FUZZ 2458
|
||||
#define DIST_FUZZY_VOLUME 2459
|
||||
#define DIST_MP_SUSTAIN 2445
|
||||
#define DIST_MP_TONE 2446
|
||||
#define DIST_MP_VOLUME 2447
|
||||
|
||||
#define PRESET_POSITION 18
|
||||
#define PRESET_LEVEL 2626
|
||||
|
||||
enum {
|
||||
AMP_TYPE_TWEED_CHAMP = 307,
|
||||
AMP_TYPE_TWEED_DELUXE = 308,
|
||||
AMP_TYPE_TWEED_BASSMAN = 309,
|
||||
AMP_TYPE_BLACKFACE_TWIN = 311,
|
||||
AMP_TYPE_BLACKFACE_DELUXE = 312,
|
||||
AMP_TYPE_SUPER_LEAD_PLEXI = 314,
|
||||
AMP_TYPE_MASTER_VOLUME = 316,
|
||||
AMP_TYPE_JCM800 = 317,
|
||||
AMP_TYPE_JCM900 = 318,
|
||||
AMP_TYPE_AC15 = 322,
|
||||
AMP_TYPE_AC30TB = 323,
|
||||
AMP_TYPE_HIWATT_100 = 324,
|
||||
AMP_TYPE_BOOGIE_MARK_II = 320,
|
||||
AMP_TYPE_DUAL_RECTIFIER = 321,
|
||||
AMP_TYPE_MATCHLESS_HC30 = 326,
|
||||
AMP_TYPE_SOLO = 331,
|
||||
AMP_TYPE_METAL = 332,
|
||||
AMP_TYPE_BRIGHT = 333,
|
||||
AMP_TYPE_CLEAN = 335,
|
||||
AMP_TYPE_HIGH_GAIN = 337,
|
||||
AMP_TYPE_ACOUSTIC = 341,
|
||||
AMP_TYPE_DIRECT = 306
|
||||
};
|
||||
|
||||
enum {
|
||||
COMP_TYPE_DIGI = 0,
|
||||
COMP_TYPE_CS
|
||||
EQ_TYPE_BRIGHT = 1474,
|
||||
EQ_TYPE_MIDBOOST = 1472,
|
||||
EQ_TYPE_SCOOP = 1473,
|
||||
EQ_TYPE_WARM = 1475
|
||||
};
|
||||
|
||||
#define AMP_TYPE 2496
|
||||
#define AMP_ON_OFF 265
|
||||
#define AMP_POSITION 8
|
||||
|
||||
#define AMP_GAIN 2497
|
||||
#define AMP_LEVEL 2498
|
||||
|
||||
#define AMP_CAB_TYPE 2560
|
||||
#define AMP_CAB_POSITION 9
|
||||
|
||||
/* valid AMP_CAB_TYPE values */
|
||||
#define AMP_CAB_DIRECT 570
|
||||
#define AMP_CAB_CHAMP 571
|
||||
#define AMP_CAB_DELUXE 572
|
||||
#define AMP_CAB_TWIN 576
|
||||
#define AMP_CAB_BRITISH2_12 613
|
||||
#define AMP_CAB_BASSMAN 579
|
||||
#define AMP_CAB_BRITISH4_12 614
|
||||
#define AMP_CAB_BRITISH_GREEN 616
|
||||
#define AMP_CAB_VINTAGE 622
|
||||
#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 EQ_TYPE 3202
|
||||
#define EQ_ON_OFF 3212
|
||||
#define EQ_POSITION 24
|
||||
|
||||
#define EQ_BASS 3203
|
||||
#define EQ_MID 3204
|
||||
#define EQ_MID_HZ 3206
|
||||
#define EQ_TREBLE 3205
|
||||
#define EQ_TREBLE_HZ 3211
|
||||
|
||||
enum {
|
||||
PICKUP_TYPE_HB_SC = 0,
|
||||
PICKUP_TYPE_SC_HB
|
||||
NOISEGATE_GATE = 768,
|
||||
NOISEGATE_SWELL = 769
|
||||
};
|
||||
|
||||
enum {
|
||||
DIST_TYPE_SCREAMER = 0,
|
||||
DIST_TYPE_808,
|
||||
DIST_TYPE_GUYOD,
|
||||
DIST_TYPE_DOD250,
|
||||
DIST_TYPE_RODENT,
|
||||
DIST_TYPE_MX,
|
||||
DIST_TYPE_DS,
|
||||
DIST_TYPE_GRUNGE,
|
||||
DIST_TYPE_ZONE,
|
||||
DIST_TYPE_DEATH,
|
||||
DIST_TYPE_GONK,
|
||||
DIST_TYPE_FUZZY,
|
||||
DIST_TYPE_MP
|
||||
};
|
||||
|
||||
#define DIST_SCREAMER_DRIVE 0x02
|
||||
#define DIST_SCREAMER_TONE 0x03
|
||||
#define DIST_SCREAMER_LVL 0x04
|
||||
#define DIST_808_OVERDRIVE 0x29
|
||||
#define DIST_808_TONE 0x2A
|
||||
#define DIST_808_LVL 0x2B
|
||||
#define DIST_GUYOD_DRIVE 0x10
|
||||
#define DIST_GUYOD_LVL 0x11
|
||||
#define DIST_DOD250_GAIN 0x0B
|
||||
#define DIST_DOD250_LVL 0x0C
|
||||
#define DIST_RODENT_DIST 0x05
|
||||
#define DIST_RODENT_FILTER 0x06
|
||||
#define DIST_RODENT_LVL 0x07
|
||||
#define DIST_MX_DIST 0x24
|
||||
#define DIST_MX_OUTPUT 0x25
|
||||
#define DIST_DS_GAIN 0x08
|
||||
#define DIST_DS_TONE 0x09
|
||||
#define DIST_DS_LVL 0x0A
|
||||
#define DIST_GRUNGE_GRUNGE 0x16
|
||||
#define DIST_GRUNGE_FACE 0x18
|
||||
#define DIST_GRUNGE_LOUD 0x19
|
||||
#define DIST_GRUNGE_BUTT 0x17
|
||||
#define DIST_ZONE_GAIN 0x1C
|
||||
#define DIST_ZONE_LOW 0x1F
|
||||
#define DIST_ZONE_MID_LVL 0x1E
|
||||
#define DIST_ZONE_MID_FREQ 0x1D
|
||||
#define DIST_ZONE_HIGH 0x20
|
||||
#define DIST_ZONE_LEVEL 0x21
|
||||
#define DIST_DEATH_LOW 0x2D
|
||||
#define DIST_DEATH_MID 0x2C
|
||||
#define DIST_DEATH_HIGH 0x2F
|
||||
#define DIST_DEATH_LVL 0x2E
|
||||
#define DIST_GONK_GONK 0x30
|
||||
#define DIST_GONK_SMEAR 0x27
|
||||
#define DIST_GONK_SUCK 0x26
|
||||
#define DIST_GONK_HEAVE 0x28
|
||||
#define DIST_FUZZY_FUZZ 0x1A
|
||||
#define DIST_FUZZY_VOLUME 0x1B
|
||||
#define DIST_MP_SUSTAIN 0x0D
|
||||
#define DIST_MP_TONE 0x0E
|
||||
#define DIST_MP_VOLUME 0x0F
|
||||
|
||||
enum {
|
||||
EQ_TYPE_BRIGHT = 0,
|
||||
EQ_TYPE_MIDBOOST,
|
||||
EQ_TYPE_SCOOP,
|
||||
EQ_TYPE_WARM
|
||||
};
|
||||
|
||||
enum {
|
||||
NOISEGATE_GATE = 0,
|
||||
NOISEGATE_SWELL
|
||||
};
|
||||
#define NOISEGATE_TYPE 704
|
||||
#define NOISEGATE_ON_OFF 705
|
||||
#define NOISEGATE_POSITION 12
|
||||
|
||||
/* available only in Gate mode */
|
||||
#define NOISEGATE_GATE_TRESHOLD 0x46
|
||||
#define NOISEGATE_GATE_TRESHOLD 710
|
||||
/* available only in Swell mode */
|
||||
#define NOISEGATE_SWELL_SENS 0x47
|
||||
#define NOISEGATE_SWELL_SENS 711
|
||||
/* available in both Gate and Swell modes */
|
||||
#define NOISEGATE_ATTACK 0x48
|
||||
#define NOISEGATE_RELEASE 0x49
|
||||
#define NOISEGATE_ATTN 0x4A
|
||||
#define NOISEGATE_ATTACK 712
|
||||
#define NOISEGATE_RELEASE 713
|
||||
#define NOISEGATE_ATTN 714
|
||||
|
||||
enum {
|
||||
CHORUS_TYPE_CE = 0,
|
||||
CHORUS_TYPE_DUAL,
|
||||
CHORUS_TYPE_MULTI,
|
||||
CHORUS_TYPE_FLANGER,
|
||||
CHORUS_TYPE_MXR_FLANGER,
|
||||
CHORUS_TYPE_PHASER,
|
||||
CHORUS_TYPE_VIBRATO,
|
||||
CHORUS_TYPE_ROTARY,
|
||||
CHORUS_TYPE_VIBROPAN,
|
||||
CHORUS_TYPE_TREMOLO,
|
||||
CHORUS_TYPE_PANNER,
|
||||
CHORUS_TYPE_ENVELOPE,
|
||||
CHORUS_TYPE_AUTOYA,
|
||||
CHORUS_TYPE_YAYA,
|
||||
CHORUS_TYPE_STEP_FILTER,
|
||||
CHORUS_TYPE_WHAMMY,
|
||||
CHORUS_TYPE_PITCH_SHIFT,
|
||||
CHORUS_TYPE_DETUNE,
|
||||
CHORUS_TYPE_IPS
|
||||
CHORUS_TYPE_CE = 0x37B,
|
||||
CHORUS_TYPE_DUAL = 0x379,
|
||||
CHORUS_TYPE_MULTI = 0x37a,
|
||||
CHORUS_TYPE_FLANGER = 0x37d,
|
||||
CHORUS_TYPE_MXR_FLANGER = 0x37f,
|
||||
CHORUS_TYPE_PHASER = 0x381,
|
||||
CHORUS_TYPE_VIBRATO = 0x360,
|
||||
CHORUS_TYPE_ROTARY = 0x361,
|
||||
CHORUS_TYPE_VIBROPAN = 0x38f,
|
||||
CHORUS_TYPE_TREMOLO = 0x35e,
|
||||
CHORUS_TYPE_PANNER = 0x35f,
|
||||
CHORUS_TYPE_ENVELOPE = 0x38a,
|
||||
CHORUS_TYPE_AUTOYA = 0x38b,
|
||||
CHORUS_TYPE_YAYA = 0x38c,
|
||||
CHORUS_TYPE_STEP_FILTER = 0x38d,
|
||||
CHORUS_TYPE_WHAMMY = 0x540,
|
||||
CHORUS_TYPE_PITCH_SHIFT = 0x543,
|
||||
CHORUS_TYPE_DETUNE = 0x542,
|
||||
CHORUS_TYPE_IPS = 0x541
|
||||
};
|
||||
|
||||
#define CE_CHORUS_SPEED 0x45
|
||||
#define CE_CHORUS_DEPTH 0x46
|
||||
#define CHORUSFX_TYPE 768
|
||||
#define CHORUSFX_ON_OFF 769
|
||||
#define CHORUSFX_POSITION 14
|
||||
|
||||
#define DUAL_CHORUS_SPEED 0x45
|
||||
#define DUAL_CHORUS_DEPTH 0x46
|
||||
#define DUAL_CHORUS_LEVEL 0x44
|
||||
#define DUAL_CHORUS_WAVE 0x48
|
||||
#define CE_CHORUS_SPEED 837
|
||||
#define CE_CHORUS_DEPTH 838
|
||||
|
||||
#define MULTI_CHORUS_SPEED 0x45
|
||||
#define MULTI_CHORUS_DEPTH 0x46
|
||||
#define MULTI_CHORUS_WAVE 0x48
|
||||
#define MULTI_CHORUS_LEVEL 0x44
|
||||
#define DUAL_CHORUS_SPEED 837
|
||||
#define DUAL_CHORUS_DEPTH 838
|
||||
#define DUAL_CHORUS_LEVEL 836
|
||||
#define DUAL_CHORUS_WAVE 840
|
||||
|
||||
#define FLANGER_SPEED 0x06
|
||||
#define FLANGER_DEPTH 0x07
|
||||
#define FLANGER_REGEN 0x08
|
||||
#define FLANGER_LEVEL 0x05
|
||||
#define FLANGER_WAVE 0x09
|
||||
#define MULTI_CHORUS_SPEED 837
|
||||
#define MULTI_CHORUS_DEPTH 838
|
||||
#define MULTI_CHORUS_WAVE 840
|
||||
#define MULTI_CHORUS_LEVEL 836
|
||||
|
||||
#define MXR_FLANGER_SPEED 0x06
|
||||
#define MXR_FLANGER_WIDTH 0x12
|
||||
#define MXR_FLANGER_REGEN 0x08
|
||||
#define MXR_FLANGER_MANUAL 0x15
|
||||
#define FLANGER_SPEED 902
|
||||
#define FLANGER_DEPTH 903
|
||||
#define FLANGER_REGEN 904
|
||||
#define FLANGER_LEVEL 901
|
||||
#define FLANGER_WAVE 905
|
||||
|
||||
#define PHASER_SPEED 0x42
|
||||
#define PHASER_DEPTH 0x43
|
||||
#define PHASER_REGEN 0x46
|
||||
#define PHASER_LEVEL 0x45
|
||||
#define PHASER_WAVE 0x47
|
||||
#define MXR_FLANGER_SPEED 902
|
||||
#define MXR_FLANGER_WIDTH 914
|
||||
#define MXR_FLANGER_REGEN 904
|
||||
#define MXR_FLANGER_MANUAL 917
|
||||
|
||||
#define VIBRATO_SPEED 0x04
|
||||
#define VIBRATO_DEPTH 0x05
|
||||
#define PHASER_SPEED 962
|
||||
#define PHASER_DEPTH 963
|
||||
#define PHASER_REGEN 966
|
||||
#define PHASER_LEVEL 965
|
||||
#define PHASER_WAVE 967
|
||||
|
||||
#define ROTARY_SPEED 0x42
|
||||
#define ROTARY_INTENSITY 0x44
|
||||
#define ROTARY_DOPPLER 0x46
|
||||
#define ROTARY_CROSSOVER 0x47
|
||||
#define VIBRATO_SPEED 1284
|
||||
#define VIBRATO_DEPTH 1285
|
||||
|
||||
#define VIBROPAN_SPEED 0x22
|
||||
#define VIBROPAN_DEPTH 0x23
|
||||
#define VIBROPAN_VIBRA 0x24
|
||||
#define VIBROPAN_WAVE 0x25
|
||||
#define ROTARY_SPEED 1346
|
||||
#define ROTARY_INTENSITY 1348
|
||||
#define ROTARY_DOPPLER 1350
|
||||
#define ROTARY_CROSSOVER 1351
|
||||
|
||||
#define TREMOLO_SPEED 0x04
|
||||
#define TREMOLO_DEPTH 0x03
|
||||
#define TREMOLO_WAVE 0x05
|
||||
#define VIBROPAN_SPEED 1314
|
||||
#define VIBROPAN_DEPTH 1315
|
||||
#define VIBROPAN_VIBRA 1316
|
||||
#define VIBROPAN_WAVE 1317
|
||||
|
||||
#define PANNER_SPEED 0x44
|
||||
#define PANNER_DEPTH 0x43
|
||||
#define PANNER_WAVE 0x45
|
||||
#define TREMOLO_SPEED 1156
|
||||
#define TREMOLO_DEPTH 1155
|
||||
#define TREMOLO_WAVE 1157
|
||||
|
||||
#define ENVELOPE_SENSITIVITY 0x46
|
||||
#define ENVELOPE_RANGE 0x45
|
||||
#define PANNER_SPEED 1220
|
||||
#define PANNER_DEPTH 1219
|
||||
#define PANNER_WAVE 1221
|
||||
|
||||
#define AUTOYA_SPEED 0x46
|
||||
#define AUTOYA_INTENSITY 0x4A
|
||||
#define AUTOYA_RANGE 0x4B
|
||||
#define ENVELOPE_SENSITIVITY 1606
|
||||
#define ENVELOPE_RANGE 1605
|
||||
|
||||
#define YAYA_PEDAL 0x02
|
||||
#define YAYA_INTENSITY 0x09
|
||||
#define YAYA_RANGE 0x0A
|
||||
#define AUTOYA_SPEED 1478
|
||||
#define AUTOYA_INTENSITY 1482
|
||||
#define AUTOYA_RANGE 1483
|
||||
|
||||
#define STEP_FILTER_SPEED 0x42
|
||||
#define STEP_FILTER_INTENSITY 0x43
|
||||
#define YAYA_PEDAL 1410
|
||||
#define YAYA_INTENSITY 1417
|
||||
#define YAYA_RANGE 1418
|
||||
|
||||
#define WHAMMY_AMOUNT 0x05
|
||||
#define WHAMMY_PEDAL 0x03
|
||||
#define WHAMMY_MIX 0x04
|
||||
#define STEP_FILTER_SPEED 3010
|
||||
#define STEP_FILTER_INTENSITY 3011
|
||||
|
||||
#define PITCH_AMOUNT 0x42
|
||||
#define PITCH_MIX 0x51
|
||||
#define WHAMMY_AMOUNT 1797
|
||||
#define WHAMMY_PEDAL 1795
|
||||
#define WHAMMY_MIX 1796
|
||||
|
||||
#define DETUNE_AMOUNT 0x04
|
||||
#define DETUNE_LEVEL 0x03
|
||||
#define PITCH_AMOUNT 1730
|
||||
#define PITCH_MIX 1745
|
||||
|
||||
#define IPS_SHIFT_AMOUNT 0x42
|
||||
#define IPS_KEY 0x44
|
||||
#define IPS_SCALE 0x43
|
||||
#define IPS_LEVEL 0x45
|
||||
#define DETUNE_AMOUNT 1668
|
||||
#define DETUNE_LEVEL 1667
|
||||
|
||||
#define IPS_SHIFT_AMOUNT 2754
|
||||
#define IPS_KEY 2756
|
||||
#define IPS_SCALE 2755
|
||||
#define IPS_LEVEL 2757
|
||||
|
||||
/* DUAL_CHORUS_WAVE, MULTI_CHORUS_WAVE, FLANGER_WAVE, PHASER_WAVE,
|
||||
VIBROPAN_WAVE, TREMOLO_WAVE, PANNER_WAVE valid values */
|
||||
@@ -266,7 +368,7 @@ enum {
|
||||
#define IPS_BB 0x06
|
||||
#define IPS_B 0x07
|
||||
#define IPS_C 0x08
|
||||
#define IPS_DD 0x09
|
||||
#define IPS_DB 0x09
|
||||
#define IPS_D 0x0A
|
||||
#define IPS_EB 0x0B
|
||||
|
||||
@@ -279,118 +381,240 @@ enum {
|
||||
#define IPS_HMINO 0x05
|
||||
|
||||
enum {
|
||||
DELAY_TYPE_ANALOG = 0,
|
||||
DELAY_TYPE_DIGITAL,
|
||||
DELAY_TYPE_MODULATED,
|
||||
DELAY_TYPE_PONG,
|
||||
DELAY_TYPE_TAPE
|
||||
DELAY_TYPE_ANALOG = 1046,
|
||||
DELAY_TYPE_DIGITAL = 1045,
|
||||
DELAY_TYPE_MODULATED = 1047,
|
||||
DELAY_TYPE_PONG = 1048,
|
||||
DELAY_TYPE_TAPE = 1049
|
||||
};
|
||||
|
||||
#define ANALOG_LEVEL 0x44
|
||||
#define ANALOG_REPEATS 0x47
|
||||
#define DELAY_TYPE 1856
|
||||
#define DELAY_ON_OFF 1857
|
||||
#define DELAY_POSITION 15
|
||||
|
||||
#define DIGITAL_LEVEL 0x44
|
||||
#define DIGITAL_REPEATS 0x47
|
||||
#define DIGITAL_DUCKER_THRESH 0x61
|
||||
#define DIGITAL_DUCKER_LEVEL 0x62
|
||||
#define DELAY_TIME 1888
|
||||
|
||||
#define MODULATED_LEVEL 0x44
|
||||
#define MODULATED_REPEATS 0x47
|
||||
#define MODULATED_DEPTH 0x51
|
||||
#define ANALOG_LEVEL 1860
|
||||
#define ANALOG_REPEATS 1863
|
||||
|
||||
#define PONG_LEVEL 0x44
|
||||
#define PONG_REPEATS 0x47
|
||||
#define PONG_DUCKER_THRESH 0x61
|
||||
#define PONG_DUCKER_LEVEL 0x62
|
||||
#define DIGITAL_LEVEL 1860
|
||||
#define DIGITAL_REPEATS 1863
|
||||
#define DIGITAL_DUCKER_THRESH 1889
|
||||
#define DIGITAL_DUCKER_LEVEL 1890
|
||||
|
||||
#define TAPE_LEVEL 0x44
|
||||
#define TAPE_REPEATS 0x47
|
||||
#define TAPE_WOW 0x63
|
||||
#define TAPE_FLUTTER 0x64
|
||||
#define MODULATED_LEVEL 1860
|
||||
#define MODULATED_REPEATS 1863
|
||||
#define MODULATED_DEPTH 1873
|
||||
|
||||
#define PONG_LEVEL 1860
|
||||
#define PONG_REPEATS 1863
|
||||
#define PONG_DUCKER_THRESH 1889
|
||||
#define PONG_DUCKER_LEVEL 1890
|
||||
|
||||
#define TAPE_LEVEL 1860
|
||||
#define TAPE_REPEATS 1863
|
||||
#define TAPE_WOW 1891
|
||||
#define TAPE_FLUTTER 1892
|
||||
|
||||
enum {
|
||||
REVERB_TYPE_TWIN = 0,
|
||||
REVERB_TYPE_LEX_AMBIENCE,
|
||||
REVERB_TYPE_LEX_STUDIO,
|
||||
REVERB_TYPE_LEX_ROOM,
|
||||
REVERB_TYPE_LEX_HALL,
|
||||
REVERB_TYPE_EMT240_PLATE
|
||||
REVERB_TYPE_TWIN = 1146,
|
||||
REVERB_TYPE_LEX_AMBIENCE = 1150,
|
||||
REVERB_TYPE_LEX_STUDIO = 1149,
|
||||
REVERB_TYPE_LEX_ROOM = 1148,
|
||||
REVERB_TYPE_LEX_HALL = 1147,
|
||||
REVERB_TYPE_EMT240_PLATE = 1151
|
||||
};
|
||||
|
||||
#define TWIN_REVERB 0x05
|
||||
#define REVERB_TYPE 1920
|
||||
#define REVERB_ON_OFF 1921
|
||||
#define REVERB_POSITION 16
|
||||
|
||||
#define LEX_AMBIENCE_PREDELAY 0x02
|
||||
#define LEX_AMBIENCE_DECAY 0x07
|
||||
#define LEX_AMBIENCE_LIVELINESS 0x0D
|
||||
#define LEX_AMBIENCE_LEVEL 0x05
|
||||
#define TWIN_REVERB 1925
|
||||
|
||||
#define LEX_STUDIO_PREDELAY 0x02
|
||||
#define LEX_STUDIO_DECAY 0x07
|
||||
#define LEX_STUDIO_LIVELINESS 0x0D
|
||||
#define LEX_STUDIO_LEVEL 0x05
|
||||
#define LEX_AMBIENCE_PREDELAY 1922
|
||||
#define LEX_AMBIENCE_DECAY 1927
|
||||
#define LEX_AMBIENCE_LIVELINESS 1933
|
||||
#define LEX_AMBIENCE_LEVEL 1925
|
||||
|
||||
#define LEX_ROOM_PREDELAY 0x02
|
||||
#define LEX_ROOM_DECAY 0x07
|
||||
#define LEX_ROOM_LIVELINESS 0x0D
|
||||
#define LEX_ROOM_LEVEL 0x05
|
||||
#define LEX_STUDIO_PREDELAY 1922
|
||||
#define LEX_STUDIO_DECAY 1927
|
||||
#define LEX_STUDIO_LIVELINESS 1933
|
||||
#define LEX_STUDIO_LEVEL 1925
|
||||
|
||||
#define LEX_HALL_PREDELAY 0x02
|
||||
#define LEX_HALL_DECAY 0x07
|
||||
#define LEX_HALL_LIVELINESS 0x0D
|
||||
#define LEX_HALL_LEVEL 0x05
|
||||
#define LEX_ROOM_PREDELAY 1922
|
||||
#define LEX_ROOM_DECAY 1927
|
||||
#define LEX_ROOM_LIVELINESS 1933
|
||||
#define LEX_ROOM_LEVEL 1925
|
||||
|
||||
#define EMT240_PLATE_PREDELAY 0x02
|
||||
#define EMT240_PLATE_DECAY 0x07
|
||||
#define EMT240_PLATE_LIVELINESS 0x0D
|
||||
#define EMT240_PLATE_LEVEL 0x05
|
||||
#define LEX_HALL_PREDELAY 1922
|
||||
#define LEX_HALL_DECAY 1927
|
||||
#define LEX_HALL_LIVELINESS 1933
|
||||
#define LEX_HALL_LEVEL 1925
|
||||
|
||||
void set_wah_min(struct usb_dev_handle *handle, int level);
|
||||
void set_wah_max(struct usb_dev_handle *handle, int level);
|
||||
void set_wah_level(struct usb_dev_handle *handle, int level);
|
||||
void set_wah_type(struct usb_dev_handle *handle, int type);
|
||||
void set_wah_on_off(struct usb_dev_handle *handle, gboolean val);
|
||||
void set_comp_sustain(struct usb_dev_handle *handle, int level);
|
||||
void set_comp_tone(struct usb_dev_handle *handle, int level);
|
||||
void set_comp_attack(struct usb_dev_handle *handle, int level);
|
||||
void set_comp_level(struct usb_dev_handle *handle, int level);
|
||||
void set_comp_type(struct usb_dev_handle *handle, int type);
|
||||
void set_comp_on_off(struct usb_dev_handle *handle, gboolean val);
|
||||
void switch_user_preset(struct usb_dev_handle *handle, int x);
|
||||
void switch_system_preset(struct usb_dev_handle *handle, int x);
|
||||
void set_pickup_type(struct usb_dev_handle *handle, int type);
|
||||
void set_pickup_on_off(struct usb_dev_handle *handle, gboolean val);
|
||||
void set_dist_type(struct usb_dev_handle *handle, int type);
|
||||
void set_dist_option(struct usb_dev_handle *handle, char option, int value);
|
||||
void set_dist_on_off(struct usb_dev_handle *handle, gboolean val);
|
||||
void set_preset_level(struct usb_dev_handle *handle, int level);
|
||||
void set_eq_type(struct usb_dev_handle *handle, int type);
|
||||
void set_eq_gain(struct usb_dev_handle *handle, int x);
|
||||
void set_eq_level(struct usb_dev_handle *handle, int x);
|
||||
void set_eq_bass(struct usb_dev_handle *handle, int x);
|
||||
void set_eq_mid(struct usb_dev_handle *handle, int x);
|
||||
void set_eq_mid_hz(struct usb_dev_handle *handle, int x);
|
||||
void set_eq_treble(struct usb_dev_handle *handle, int x);
|
||||
void set_eq_treb_hz(struct usb_dev_handle *handle, int x);
|
||||
void set_eq_on_off(struct usb_dev_handle *handle, gboolean val);
|
||||
void set_noisegate_type(struct usb_dev_handle *handle, int type);
|
||||
void set_gate_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_noisegate_on_off(struct usb_dev_handle *handle, gboolean val);
|
||||
void set_chorusfx_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_flanger_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_vibrato_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_tremolo_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_envelope_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_ya_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_filter_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_whammy_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_pitch_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_ips_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_chorusfx_type(struct usb_dev_handle *handle, int type);
|
||||
void set_chorusfx_on_off(struct usb_dev_handle *handle, gboolean val);
|
||||
void set_delay_time(struct usb_dev_handle *handle, int x);
|
||||
void set_delay_type(struct usb_dev_handle *handle, int type);
|
||||
void set_delay_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_delay_on_off(struct usb_dev_handle *handle, gboolean val);
|
||||
void set_reverb_option(struct usb_dev_handle *handle, char option, int x);
|
||||
void set_reverb_type(struct usb_dev_handle *handle, int type);
|
||||
void set_reverb_on_off(struct usb_dev_handle *handle, gboolean val);
|
||||
#define EMT240_PLATE_PREDELAY 1922
|
||||
#define EMT240_PLATE_DECAY 1927
|
||||
#define EMT240_PLATE_LIVELINESS 1933
|
||||
#define EMT240_PLATE_LEVEL 1925
|
||||
|
||||
#define EXP_TYPE 8194
|
||||
#define EXP_POSITION 19
|
||||
|
||||
#define EXP_MIN 8195
|
||||
#define EXP_MAX 8196
|
||||
|
||||
#define LIBRARY_TONE 8704
|
||||
#define LIBRARY_EFFECTS 8705
|
||||
|
||||
#define LIBRARY_POSITION 25
|
||||
|
||||
/* LIBRARY_TONE valid options */
|
||||
#define TONE_LIB_OVERDRIVE 1793
|
||||
#define TONE_LIB_ROCK1 1794
|
||||
#define TONE_LIB_ROCK2 1795
|
||||
#define TONE_LIB_BLUES1 1796
|
||||
#define TONE_LIB_BLUES2 1797
|
||||
#define TONE_LIB_METAL1 1798
|
||||
#define TONE_LIB_METAL2 1799
|
||||
#define TONE_LIB_COUNTRY1 1800
|
||||
#define TONE_LIB_COUNTRY2 1801
|
||||
#define TONE_LIB_WARM_DRIVE 1802
|
||||
#define TONE_LIB_CRUNCH 1803
|
||||
#define TONE_LIB_TEXAS_TONE 1804
|
||||
#define TONE_LIB_ROCKABILLY 1805
|
||||
#define TONE_LIB_SOLO1 1806
|
||||
#define TONE_LIB_SOLO2 1807
|
||||
#define TONE_LIB_ROCKWAH 1808
|
||||
#define TONE_LIB_CHUNKY 1809
|
||||
#define TONE_LIB_SMOOTH 1810
|
||||
#define TONE_LIB_HEAVY 1811
|
||||
#define TONE_LIB_CLEAN1 1812
|
||||
#define TONE_LIB_CLEAN2 1813
|
||||
#define TONE_LIB_BRITISH1 1814
|
||||
#define TONE_LIB_BRITISH2 1815
|
||||
#define TONE_LIB_AMERICAN1 1816
|
||||
#define TONE_LIB_AMERICAN2 1817
|
||||
#define TONE_LIB_TUBE_DRIVE 1818
|
||||
#define TONE_LIB_DISTORTION 1819
|
||||
#define TONE_LIB_SCOOPED 1820
|
||||
#define TONE_LIB_PUNCHY 1821
|
||||
#define TONE_LIB_BRIGHT_CLEAN 1822
|
||||
/* setting LIBRARY_TONE to this option seems to crash device */
|
||||
#define TONE_LIB_CUSTOM 1792
|
||||
|
||||
/* LIBRARY_EFFECTS valid options */
|
||||
#define EFFECTS_LIB_CHORUS 1857
|
||||
#define EFFECTS_LIB_PHASER 1858
|
||||
#define EFFECTS_LIB_FLANGER 1859
|
||||
#define EFFECTS_LIB_PITCH 1860
|
||||
#define EFFECTS_LIB_TREMOLO 1861
|
||||
#define EFFECTS_LIB_ROTARY 1862
|
||||
#define EFFECTS_LIB_ENVELOPE 1863
|
||||
#define EFFECTS_LIB_DIGITAL 1864
|
||||
#define EFFECTS_LIB_ANALOG 1865
|
||||
#define EFFECTS_LIB_PONG 1866
|
||||
#define EFFECTS_LIB_MOD 1867
|
||||
#define EFFECTS_LIB_TAPE 1868
|
||||
#define EFFECTS_LIB_HALL 1869
|
||||
#define EFFECTS_LIB_PLATE 1870
|
||||
#define EFFECTS_LIB_SPRING 1871
|
||||
#define EFFECTS_LIB_CHORUS_DIGITAL 1872
|
||||
#define EFFECTS_LIB_CHORUS_DELAY_REVERB 1873
|
||||
#define EFFECTS_LIB_FLANGER_ANALOG 1874
|
||||
#define EFFECTS_LIB_PHASER_TAPE 1875
|
||||
#define EFFECTS_LIB_PHASER_MOD 1876
|
||||
#define EFFECTS_LIB_PHASER_ROOM 1877
|
||||
#define EFFECTS_LIB_DIGITAL_HALL 1878
|
||||
#define EFFECTS_LIB_ANALOG_SPRING 1879
|
||||
#define EFFECTS_LIB_CHORUS_HALL 1880
|
||||
#define EFFECTS_LIB_PONG_HALL 1881
|
||||
#define EFFECTS_LIB_TAPE_SPRING 1882
|
||||
#define EFFECTS_LIB_TREMOLO_TAPE 1883
|
||||
#define EFFECTS_LIB_PITCH_DIGITAL 1884
|
||||
#define EFFECTS_LIB_MOD_PLATE 1885
|
||||
#define EFFECTS_LIB_ROTARY_TAPE 1886
|
||||
/* setting EFFECTS_LIBRARY to this option seems to crash device */
|
||||
#define EFFECTS_LIB_CUSTOM 1856
|
||||
|
||||
#define USB_POSITION 0
|
||||
#define USB_AUDIO_PLAYBACK_MIX 12297
|
||||
#define USB_AUDIO_LEVEL 12307
|
||||
|
||||
typedef enum {
|
||||
PRESETS_SYSTEM = 0,
|
||||
PRESETS_USER = 1,
|
||||
PRESETS_ARTIST = 2,
|
||||
|
||||
/* Version 1 and later */
|
||||
PRESETS_MEDIA_CARD = 3,
|
||||
PRESETS_EDIT_BUFFER = 4, /* Current preset edit buffer, index must be 0 */
|
||||
PRESETS_FACTORY2 = 5,
|
||||
|
||||
/* Version 2 and later */
|
||||
PRESETS_EXTERNAL = 6
|
||||
} PresetBank;
|
||||
|
||||
typedef enum {
|
||||
REQUEST_WHO_AM_I = 0x01,
|
||||
RECEIVE_WHO_AM_I = 0x02,
|
||||
|
||||
REQUEST_DEVICE_CONFIGURATION = 0x08,
|
||||
RECEIVE_DEVICE_CONFIGURATION = 0x09,
|
||||
|
||||
REQUEST_GLOBAL_PARAMETERS = 0x10,
|
||||
RECEIVE_GLOBAL_PARAMETERS = 0x11,
|
||||
|
||||
REQUEST_BULK_DUMP = 0x18,
|
||||
RECEIVE_BULK_DUMP_START = 0x19,
|
||||
RECEIVE_BULK_DUMP_END = 0x1B,
|
||||
|
||||
REQUEST_PRESET_NAMES = 0x21,
|
||||
RECEIVE_PRESET_NAMES = 0x22,
|
||||
|
||||
REQUEST_PRESET_NAME = 0x28,
|
||||
RECEIVE_PRESET_NAME = 0x29,
|
||||
|
||||
REQUEST_PRESET = 0x2A,
|
||||
RECEIVE_PRESET_START = 0x2B,
|
||||
RECEIVE_PRESET_END = 0x2C,
|
||||
RECEIVE_PRESET_PARAMETERS = 0x2D,
|
||||
|
||||
LOAD_EDIT_BUFFER_PRESET = 0x38, /* version 0 only
|
||||
use move preset in later versions */
|
||||
|
||||
MOVE_PRESET = 0x39,
|
||||
|
||||
REQUEST_MODIFIER_LINKABLE_LIST = 0x3A,
|
||||
RECEIVE_MODIFIER_LINKABLE_LIST = 0x3B,
|
||||
|
||||
REQUEST_PARAMETER_VALUE = 0x40,
|
||||
RECEIVE_PARAMETER_VALUE = 0x41,
|
||||
|
||||
/* version 1 and later */
|
||||
REQUEST_OBJECT_NAMES = 0x50,
|
||||
RECEIVE_OBJECT_NAMES = 0x51,
|
||||
REQUEST_OBJECT_NAME = 0x52,
|
||||
RECEIVE_OBJECT_NAME = 0x53,
|
||||
REQUEST_OBJECT = 0x54,
|
||||
RECEIVE_OBJECT = 0x55,
|
||||
MOVE_OBJECT = 0x56,
|
||||
DELETE_OBJECT = 0x57,
|
||||
REQUEST_TABLE = 0x5A,
|
||||
RECEIVE_TABLE = 0x5B,
|
||||
|
||||
RECEIVE_DEVICE_NOTIFICATION = 0x70,
|
||||
|
||||
ACK = 0x7E,
|
||||
NACK = 0x7F
|
||||
} MessageID;
|
||||
|
||||
void send_message(gint procedure, gchar *data, gint len);
|
||||
void append_value(GString *msg, guint value);
|
||||
GString *get_message_by_id(MessageID id);
|
||||
void set_option(guint id, guint position, guint value);
|
||||
void switch_preset(guint bank, guint x);
|
||||
void store_preset_name(int x, const gchar *name);
|
||||
void set_preset_level(int level);
|
||||
GStrv query_preset_names(gchar bank);
|
||||
GString *get_current_preset();
|
||||
|
||||
#endif /* GDIGI_H */
|
||||
|
||||
918
gtkknob.c
Normal file
918
gtkknob.c
Normal file
@@ -0,0 +1,918 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Most of this code comes from gAlan 0.2.0, copyright (C) 1999
|
||||
* Tony Garnock-Jones, with modifications from Sean Bolton,
|
||||
* copyright (C) 2004, William Weston copyright (C) 2007,
|
||||
* Pete Shorthose copyright (C) 2007, and 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
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* 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 "gtkknob.h"
|
||||
|
||||
|
||||
#ifndef M_PI
|
||||
# define M_PI 3.14159265358979323846 /* pi */
|
||||
#endif
|
||||
#ifndef M_1_PI
|
||||
# define M_1_PI 0.31830988618379067154 /* 1/pi */
|
||||
#endif
|
||||
|
||||
|
||||
#define SCROLL_DELAY_LENGTH 250
|
||||
#define KNOB_SIZE 32 /* this should really be read from the knob image */
|
||||
|
||||
#define STATE_IDLE 0
|
||||
#define STATE_PRESSED 1
|
||||
#define STATE_DRAGGING 2
|
||||
|
||||
static void gtk_knob_class_init(GtkKnobClass *klass);
|
||||
static void gtk_knob_init(GtkKnob *knob);
|
||||
static void gtk_knob_destroy(GtkObject *object);
|
||||
static void gtk_knob_realize(GtkWidget *widget);
|
||||
static void gtk_knob_size_request(GtkWidget *widget, GtkRequisition *requisition);
|
||||
static void gtk_knob_size_allocate(GtkWidget *widget, GtkAllocation *allocation);
|
||||
static gint gtk_knob_expose(GtkWidget *widget, GdkEventExpose *event);
|
||||
static gint gtk_knob_scroll(GtkWidget *widget, GdkEventScroll *event);
|
||||
static gint gtk_knob_button_press(GtkWidget *widget, GdkEventButton *event);
|
||||
static gint gtk_knob_button_release(GtkWidget *widget, GdkEventButton *event);
|
||||
static gint gtk_knob_key_press(GtkWidget *widget, GdkEventKey *event);
|
||||
static gint gtk_knob_motion_notify(GtkWidget *widget, GdkEventMotion *event);
|
||||
static gint gtk_knob_timer(GtkKnob *knob);
|
||||
|
||||
static void gtk_knob_update_mouse_update(GtkKnob *knob);
|
||||
static void gtk_knob_update_mouse(GtkKnob *knob, gint x, gint y, gboolean step);
|
||||
static void gtk_knob_update(GtkKnob *knob);
|
||||
static void gtk_knob_adjustment_changed(GtkAdjustment *adjustment, gpointer data);
|
||||
static void gtk_knob_adjustment_value_changed(GtkAdjustment *adjustment, gpointer data);
|
||||
|
||||
/* Local data */
|
||||
|
||||
static GtkWidgetClass *parent_class = NULL;
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_get_type()
|
||||
*
|
||||
*****************************************************************************/
|
||||
guint
|
||||
gtk_knob_get_type(void) {
|
||||
static guint knob_type = 0;
|
||||
|
||||
if (!knob_type) {
|
||||
GtkTypeInfo knob_info = {
|
||||
"GtkKnob",
|
||||
sizeof (GtkKnob),
|
||||
sizeof (GtkKnobClass),
|
||||
(GtkClassInitFunc) gtk_knob_class_init,
|
||||
(GtkObjectInitFunc) gtk_knob_init,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
knob_type = gtk_type_unique (gtk_widget_get_type (), &knob_info);
|
||||
}
|
||||
|
||||
return knob_type;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_class_init()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_class_init (GtkKnobClass *class) {
|
||||
GtkObjectClass *object_class;
|
||||
GtkWidgetClass *widget_class;
|
||||
|
||||
object_class = (GtkObjectClass*) class;
|
||||
widget_class = (GtkWidgetClass*) class;
|
||||
|
||||
parent_class = gtk_type_class (gtk_widget_get_type ());
|
||||
|
||||
object_class->destroy = gtk_knob_destroy;
|
||||
|
||||
widget_class->realize = gtk_knob_realize;
|
||||
widget_class->expose_event = gtk_knob_expose;
|
||||
widget_class->size_request = gtk_knob_size_request;
|
||||
widget_class->size_allocate = gtk_knob_size_allocate;
|
||||
widget_class->scroll_event = gtk_knob_scroll;
|
||||
widget_class->button_press_event = gtk_knob_button_press;
|
||||
widget_class->button_release_event = gtk_knob_button_release;
|
||||
widget_class->key_press_event = gtk_knob_key_press;
|
||||
widget_class->motion_notify_event = gtk_knob_motion_notify;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_init()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_init (GtkKnob *knob) {
|
||||
knob->policy = GTK_UPDATE_CONTINUOUS;
|
||||
knob->state = STATE_IDLE;
|
||||
knob->saved_x = 0;
|
||||
knob->saved_y = 0;
|
||||
knob->timer = 0;
|
||||
knob->anim = NULL;
|
||||
knob->mask = NULL;
|
||||
knob->mask_gc = NULL;
|
||||
knob->red_gc = NULL;
|
||||
knob->old_value = 0.0;
|
||||
knob->old_lower = 0.0;
|
||||
knob->old_upper = 0.0;
|
||||
knob->adjustment = NULL;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_new()
|
||||
*
|
||||
*****************************************************************************/
|
||||
GtkWidget *
|
||||
gtk_knob_new(GtkAdjustment *adjustment, GtkKnobAnim *anim) {
|
||||
GtkKnob *knob;
|
||||
|
||||
g_return_val_if_fail (anim != NULL, NULL);
|
||||
g_return_val_if_fail (GDK_IS_PIXBUF (anim->pixbuf), NULL);
|
||||
|
||||
knob = gtk_type_new (gtk_knob_get_type ());
|
||||
|
||||
gtk_knob_set_animation (knob, anim);
|
||||
|
||||
if (!adjustment) {
|
||||
adjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0,
|
||||
0.0, 0.0, 0.0);
|
||||
}
|
||||
|
||||
gtk_knob_set_adjustment (knob, adjustment);
|
||||
|
||||
return GTK_WIDGET (knob);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_destroy()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_destroy(GtkObject *object) {
|
||||
GtkKnob *knob;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (object));
|
||||
|
||||
knob = GTK_KNOB (object);
|
||||
|
||||
if (knob->adjustment) {
|
||||
gtk_object_unref (GTK_OBJECT (knob->adjustment));
|
||||
knob->adjustment = NULL;
|
||||
}
|
||||
/* FIXME: needs ref counting for automatic GtkKnobAnim cleanup
|
||||
if (knob->anim) {
|
||||
gtk_knob_anim_unref (knob->anim);
|
||||
knob->anim = NULL;
|
||||
}
|
||||
*/
|
||||
|
||||
if (knob->mask) {
|
||||
gdk_bitmap_unref (knob->mask);
|
||||
knob->mask = NULL;
|
||||
}
|
||||
|
||||
if (knob->mask_gc) {
|
||||
gdk_gc_unref (knob->mask_gc);
|
||||
knob->mask_gc = NULL;
|
||||
}
|
||||
if (knob->red_gc) {
|
||||
gdk_gc_unref (knob->red_gc);
|
||||
knob->red_gc = NULL;
|
||||
}
|
||||
|
||||
if (GTK_OBJECT_CLASS (parent_class)->destroy) {
|
||||
(*GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_get_adjustment()
|
||||
*
|
||||
*****************************************************************************/
|
||||
GtkAdjustment*
|
||||
gtk_knob_get_adjustment(GtkKnob *knob) {
|
||||
|
||||
g_return_val_if_fail (knob != NULL, NULL);
|
||||
g_return_val_if_fail (GTK_IS_KNOB (knob), NULL);
|
||||
|
||||
return knob->adjustment;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_set_update_policy()
|
||||
*
|
||||
*****************************************************************************/
|
||||
void
|
||||
gtk_knob_set_update_policy(GtkKnob *knob, GtkUpdateType policy) {
|
||||
|
||||
g_return_if_fail (knob != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (knob));
|
||||
|
||||
knob->policy = policy;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_set_adjustment()
|
||||
*
|
||||
*****************************************************************************/
|
||||
void
|
||||
gtk_knob_set_adjustment(GtkKnob *knob, GtkAdjustment *adjustment) {
|
||||
|
||||
g_return_if_fail (knob != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (knob));
|
||||
|
||||
if (knob->adjustment) {
|
||||
gtk_signal_disconnect_by_data (GTK_OBJECT (knob->adjustment),
|
||||
(gpointer)knob);
|
||||
gtk_object_unref (GTK_OBJECT (knob->adjustment));
|
||||
}
|
||||
|
||||
knob->adjustment = adjustment;
|
||||
gtk_object_ref (GTK_OBJECT (knob->adjustment));
|
||||
gtk_object_sink (GTK_OBJECT (knob->adjustment));
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (adjustment), "changed",
|
||||
GTK_SIGNAL_FUNC (gtk_knob_adjustment_changed),
|
||||
(gpointer)knob);
|
||||
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
|
||||
GTK_SIGNAL_FUNC (gtk_knob_adjustment_value_changed),
|
||||
(gpointer)knob);
|
||||
|
||||
knob->old_value = adjustment->value;
|
||||
knob->old_lower = adjustment->lower;
|
||||
knob->old_upper = adjustment->upper;
|
||||
|
||||
gtk_knob_update (knob);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_realize()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_realize(GtkWidget *widget) {
|
||||
GtkKnob *knob;
|
||||
GdkWindowAttr attributes;
|
||||
gint attributes_mask;
|
||||
GdkColor color = { 0, 0xffff, 0, 0 };
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (widget));
|
||||
|
||||
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
|
||||
GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
attributes.x = widget->allocation.x;
|
||||
attributes.y = widget->allocation.y;
|
||||
attributes.width = widget->allocation.width;
|
||||
attributes.height = widget->allocation.height;
|
||||
attributes.wclass = GDK_INPUT_OUTPUT;
|
||||
attributes.window_type = GDK_WINDOW_CHILD;
|
||||
attributes.event_mask =
|
||||
gtk_widget_get_events (widget) |
|
||||
GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
|
||||
GDK_POINTER_MOTION_HINT_MASK;
|
||||
attributes.visual = gtk_widget_get_visual (widget);
|
||||
attributes.colormap = gtk_widget_get_colormap (widget);
|
||||
|
||||
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
|
||||
|
||||
widget->window = gdk_window_new (widget->parent->window,
|
||||
&attributes, attributes_mask);
|
||||
|
||||
widget->style = gtk_style_attach (widget->style, widget->window);
|
||||
|
||||
gdk_window_set_user_data (widget->window, widget);
|
||||
|
||||
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
|
||||
|
||||
knob->mask_gc = gdk_gc_new (widget->window);
|
||||
gdk_gc_copy (knob->mask_gc, widget->style->bg_gc[GTK_STATE_NORMAL]);
|
||||
gdk_gc_set_clip_mask (knob->mask_gc, knob->mask);
|
||||
|
||||
knob->red_gc = gdk_gc_new (widget->window);
|
||||
gdk_gc_copy (knob->red_gc, widget->style->bg_gc[GTK_STATE_NORMAL]);
|
||||
gdk_colormap_alloc_color (attributes.colormap, &color, FALSE, TRUE);
|
||||
gdk_gc_set_foreground (knob->red_gc, &color);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_size_request()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_size_request (GtkWidget *widget, GtkRequisition *requisition) {
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (widget));
|
||||
|
||||
requisition->width = GTK_KNOB (widget)->width;
|
||||
requisition->height = GTK_KNOB (widget)->height;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_size_allocate()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_size_allocate (GtkWidget *widget, GtkAllocation *allocation) {
|
||||
GtkKnob *knob;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (widget));
|
||||
g_return_if_fail (allocation != NULL);
|
||||
|
||||
widget->allocation = *allocation;
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
if (GTK_WIDGET_REALIZED (widget)) {
|
||||
gdk_window_move_resize (widget->window,
|
||||
allocation->x, allocation->y,
|
||||
allocation->width, allocation->height);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_expose()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static gint
|
||||
gtk_knob_expose(GtkWidget *widget, GdkEventExpose *event) {
|
||||
GtkKnob *knob;
|
||||
gfloat dx, dy;
|
||||
gint frames;
|
||||
|
||||
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);
|
||||
|
||||
if (event->count > 0)
|
||||
return FALSE;
|
||||
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
frames = ((knob->anim->width / knob->anim->frame_width) - 1);
|
||||
dx = knob->adjustment->value - knob->adjustment->lower; /* value, from 0 */
|
||||
dy = knob->adjustment->upper - knob->adjustment->lower; /* range */
|
||||
|
||||
dx = (int)(frames * dx / dy) * knob->width; /* check this for height != width */
|
||||
|
||||
gdk_draw_pixbuf (widget->window, knob->mask_gc, knob->anim->pixbuf,
|
||||
dx, 0, 0, 0, knob->width, knob->height,
|
||||
GDK_RGB_DITHER_NONE, 0, 0);
|
||||
|
||||
if (GTK_WIDGET_HAS_FOCUS(widget)) {
|
||||
gtk_paint_focus (widget->style, widget->window, widget->state,
|
||||
NULL, widget, NULL, 0, 0,
|
||||
widget->allocation.width, widget->allocation.height);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_scroll()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static gint
|
||||
gtk_knob_scroll(GtkWidget *widget, GdkEventScroll *event) {
|
||||
GtkKnob *knob;
|
||||
|
||||
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);
|
||||
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
switch (event->direction) {
|
||||
case GDK_SCROLL_UP:
|
||||
knob->adjustment->value += knob->adjustment->step_increment;
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (knob->adjustment),
|
||||
"value_changed");
|
||||
break;
|
||||
case GDK_SCROLL_DOWN:
|
||||
knob->adjustment->value -= knob->adjustment->step_increment;
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (knob->adjustment),
|
||||
"value_changed");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_button_press()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static gint
|
||||
gtk_knob_button_press(GtkWidget *widget, GdkEventButton *event) {
|
||||
GtkKnob *knob;
|
||||
|
||||
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);
|
||||
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
switch (knob->state) {
|
||||
case STATE_IDLE:
|
||||
switch (event->button) {
|
||||
case 1:
|
||||
case 3:
|
||||
if (!GTK_WIDGET_HAS_FOCUS(widget))
|
||||
gtk_widget_grab_focus(widget);
|
||||
knob->state = STATE_PRESSED;
|
||||
knob->saved_x = event->x;
|
||||
knob->saved_y = event->y;
|
||||
break;
|
||||
case 2:
|
||||
knob->adjustment->value = floor ((knob->adjustment->lower +
|
||||
knob->adjustment->upper + 1.0)
|
||||
* 0.5);
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (knob->adjustment),
|
||||
"value_changed");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_button_release()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static gint
|
||||
gtk_knob_button_release(GtkWidget *widget, GdkEventButton *event) {
|
||||
GtkKnob *knob;
|
||||
|
||||
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);
|
||||
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
switch (knob->state) {
|
||||
|
||||
case STATE_PRESSED:
|
||||
knob->state = STATE_IDLE;
|
||||
break;
|
||||
|
||||
case STATE_DRAGGING:
|
||||
knob->state = STATE_IDLE;
|
||||
|
||||
switch (event->button) {
|
||||
case 1:
|
||||
case 3:
|
||||
if (knob->policy != GTK_UPDATE_CONTINUOUS
|
||||
&& knob->old_value != knob->adjustment->value)
|
||||
{
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (knob->adjustment),
|
||||
"value_changed");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gint gtk_knob_key_press(GtkWidget *widget, GdkEventKey *event)
|
||||
{
|
||||
GtkKnob *knob;
|
||||
|
||||
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);
|
||||
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
switch (event->keyval) {
|
||||
|
||||
case GDK_Up:
|
||||
if (GTK_WIDGET_HAS_FOCUS (widget))
|
||||
{
|
||||
gtk_adjustment_set_value (knob->adjustment,
|
||||
knob->old_value + knob->adjustment->step_increment);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
||||
case GDK_Down:
|
||||
if (GTK_WIDGET_HAS_FOCUS (widget))
|
||||
{
|
||||
gtk_adjustment_set_value (knob->adjustment,
|
||||
knob->old_value - knob->adjustment->step_increment);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_motion_notify()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static gint
|
||||
gtk_knob_motion_notify(GtkWidget *widget, GdkEventMotion *event) {
|
||||
GtkKnob *knob;
|
||||
GdkModifierType mods;
|
||||
gint x, y;
|
||||
|
||||
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);
|
||||
|
||||
knob = GTK_KNOB (widget);
|
||||
|
||||
x = event->x;
|
||||
y = event->y;
|
||||
|
||||
if (event->is_hint || (event->window != widget->window)) {
|
||||
gdk_window_get_pointer (widget->window, &x, &y, &mods);
|
||||
}
|
||||
|
||||
switch (knob->state) {
|
||||
|
||||
case STATE_PRESSED:
|
||||
knob->state = STATE_DRAGGING;
|
||||
/* fall through */
|
||||
|
||||
case STATE_DRAGGING:
|
||||
if (mods & GDK_BUTTON1_MASK) {
|
||||
gtk_knob_update_mouse (knob, x, y, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
else if (mods & GDK_BUTTON3_MASK) {
|
||||
gtk_knob_update_mouse (knob, x, y, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_timer()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static gint
|
||||
gtk_knob_timer(GtkKnob *knob) {
|
||||
|
||||
g_return_val_if_fail (knob != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_KNOB (knob), FALSE);
|
||||
|
||||
if (knob->policy == GTK_UPDATE_DELAYED) {
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (knob->adjustment),
|
||||
"value_changed");
|
||||
}
|
||||
|
||||
/* don't keep running this timer */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_update_mouse_update()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_update_mouse_update(GtkKnob *knob) {
|
||||
|
||||
if (knob->policy == GTK_UPDATE_CONTINUOUS) {
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (knob->adjustment),
|
||||
"value_changed");
|
||||
}
|
||||
else {
|
||||
gtk_widget_draw (GTK_WIDGET (knob), NULL);
|
||||
|
||||
if (knob->policy == GTK_UPDATE_DELAYED) {
|
||||
if (knob->timer) {
|
||||
gtk_timeout_remove (knob->timer);
|
||||
}
|
||||
knob->timer = gtk_timeout_add (SCROLL_DELAY_LENGTH,
|
||||
(GtkFunction) gtk_knob_timer,
|
||||
(gpointer) knob);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_update_mouse()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_update_mouse(GtkKnob *knob, gint x, gint y, gboolean step) {
|
||||
gfloat old_value, new_value, dv, dh;
|
||||
gfloat angle;
|
||||
|
||||
g_return_if_fail (knob != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (knob));
|
||||
|
||||
old_value = knob->adjustment->value;
|
||||
|
||||
angle = atan2f (-y + (knob->height >> 1), x - (knob->width >> 1));
|
||||
|
||||
/* inverted cartesian graphics coordinate system */
|
||||
dv = knob->saved_y - y;
|
||||
dh = x - knob->saved_x;
|
||||
knob->saved_x = x;
|
||||
knob->saved_y = y;
|
||||
|
||||
if ((x >= 0) && (x <= knob->width)) {
|
||||
dh = 0; /* dead zone */
|
||||
} else {
|
||||
angle = cosf (angle);
|
||||
dh *= angle * angle;
|
||||
}
|
||||
|
||||
new_value = knob->adjustment->value +
|
||||
dv * (step ? knob->adjustment->step_increment : knob->adjustment->page_increment) +
|
||||
dh * (knob->adjustment->upper -
|
||||
knob->adjustment->lower) * 0.005; /* 0.005 == (1 / 200) */
|
||||
|
||||
new_value = MAX (MIN (new_value, knob->adjustment->upper),
|
||||
knob->adjustment->lower);
|
||||
|
||||
knob->adjustment->value = new_value;
|
||||
|
||||
if (knob->adjustment->value != old_value) {
|
||||
gtk_knob_update_mouse_update (knob);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_update()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_update(GtkKnob *knob) {
|
||||
gfloat new_value;
|
||||
|
||||
g_return_if_fail (knob != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (knob));
|
||||
|
||||
if (knob->adjustment->step_increment == 1) {
|
||||
new_value = floor (knob->adjustment->value + 0.5);
|
||||
}
|
||||
else {
|
||||
new_value = knob->adjustment->value;
|
||||
}
|
||||
|
||||
if (new_value < knob->adjustment->lower) {
|
||||
new_value = knob->adjustment->lower;
|
||||
}
|
||||
|
||||
if (new_value > knob->adjustment->upper) {
|
||||
new_value = knob->adjustment->upper;
|
||||
}
|
||||
|
||||
if (new_value != knob->adjustment->value) {
|
||||
knob->adjustment->value = new_value;
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (knob->adjustment),
|
||||
"value_changed");
|
||||
}
|
||||
|
||||
gtk_widget_draw (GTK_WIDGET (knob), NULL);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_adjustment_changed()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_adjustment_changed(GtkAdjustment *adjustment, gpointer data) {
|
||||
GtkKnob *knob;
|
||||
|
||||
g_return_if_fail (adjustment != NULL);
|
||||
g_return_if_fail (data != NULL);
|
||||
|
||||
knob = GTK_KNOB (data);
|
||||
|
||||
if ((knob->old_value != adjustment->value) ||
|
||||
(knob->old_lower != adjustment->lower) ||
|
||||
(knob->old_upper != adjustment->upper))
|
||||
{
|
||||
gtk_knob_update (knob);
|
||||
|
||||
knob->old_value = adjustment->value;
|
||||
knob->old_lower = adjustment->lower;
|
||||
knob->old_upper = adjustment->upper;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_adjustment_value_changed()
|
||||
*
|
||||
*****************************************************************************/
|
||||
static void
|
||||
gtk_knob_adjustment_value_changed (GtkAdjustment *adjustment, gpointer data) {
|
||||
GtkKnob *knob;
|
||||
|
||||
g_return_if_fail (adjustment != NULL);
|
||||
g_return_if_fail (data != NULL);
|
||||
|
||||
knob = GTK_KNOB (data);
|
||||
|
||||
if (knob->old_value != adjustment->value) {
|
||||
gtk_knob_update (knob);
|
||||
knob->old_value = adjustment->value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_set_animation()
|
||||
*
|
||||
*****************************************************************************/
|
||||
void
|
||||
gtk_knob_set_animation (GtkKnob *knob, GtkKnobAnim *anim) {
|
||||
g_return_if_fail (knob != NULL);
|
||||
g_return_if_fail (anim != NULL);
|
||||
g_return_if_fail (GTK_IS_KNOB (knob));
|
||||
g_return_if_fail (GDK_IS_PIXBUF (anim->pixbuf));
|
||||
|
||||
knob->anim = (GtkKnobAnim *)anim;
|
||||
knob->width = anim->frame_width;
|
||||
knob->height = anim->height;
|
||||
|
||||
if (GTK_WIDGET_REALIZED (knob)) {
|
||||
gtk_widget_queue_resize (GTK_WIDGET (knob));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_animation_new_from_file()
|
||||
*
|
||||
*****************************************************************************/
|
||||
GtkKnobAnim *
|
||||
gtk_knob_animation_new_from_file(gchar *filename) {
|
||||
GtkKnobAnim *anim;
|
||||
|
||||
anim = gtk_knob_animation_new_from_file_full (filename, -1, -1, KNOB_SIZE);
|
||||
return anim;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_animation_new_from_inline()
|
||||
*
|
||||
*****************************************************************************/
|
||||
GtkKnobAnim *
|
||||
gtk_knob_animation_new_from_inline(const guint8 *pixbuf) {
|
||||
GtkKnobAnim *anim = g_new0 (GtkKnobAnim, 1);
|
||||
|
||||
g_return_val_if_fail((pixbuf != NULL), NULL);
|
||||
|
||||
anim->pixbuf = gdk_pixbuf_new_from_inline(-1, pixbuf, FALSE, NULL);
|
||||
if (anim->pixbuf == NULL) {
|
||||
g_free(anim);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
anim->height = gdk_pixbuf_get_height (anim->pixbuf);
|
||||
anim->width = gdk_pixbuf_get_width (anim->pixbuf);
|
||||
anim->frame_width = anim->height;
|
||||
|
||||
return anim;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_new_from_file_full()
|
||||
*
|
||||
* frame_width: overrides the frame width (to make rectangular frames)
|
||||
* but doesn't affect the image size width and height cause optional
|
||||
* scaling if not set to -1 when they are derived from the native
|
||||
* image size.
|
||||
*
|
||||
* FIXME: account for any problems where (width % frame_width != 0)
|
||||
*
|
||||
*****************************************************************************/
|
||||
GtkKnobAnim *
|
||||
gtk_knob_animation_new_from_file_full(gchar *filename, gint frame_width,
|
||||
gint width, gint height) {
|
||||
GtkKnobAnim *anim = g_new0 (GtkKnobAnim, 1);
|
||||
|
||||
g_return_val_if_fail ((filename != NULL), NULL);
|
||||
|
||||
GError *gerror = NULL;
|
||||
|
||||
#if GTK_MINOR_VERSION < 10
|
||||
if (!(anim->pixbuf = gdk_pixbuf_new_from_file (filename, &gerror))) {
|
||||
g_error_free(gerror);
|
||||
gerror = NULL;
|
||||
return NULL;
|
||||
}
|
||||
#else /* GTK_MINOR_VERSION >= 10 */
|
||||
if (!(anim->pixbuf = gdk_pixbuf_new_from_file_at_size (filename, width,
|
||||
height, &gerror))) {
|
||||
g_error_free(gerror);
|
||||
gerror = NULL;
|
||||
return NULL;
|
||||
}
|
||||
#endif /* GTK_MINOR_VERSION < 10 */
|
||||
else {
|
||||
anim->height = gdk_pixbuf_get_height (anim->pixbuf);
|
||||
anim->width = gdk_pixbuf_get_width (anim->pixbuf);
|
||||
anim->frame_width = (frame_width != -1) ? frame_width : anim->height;
|
||||
}
|
||||
|
||||
return anim;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* gtk_knob_animation_free()
|
||||
*
|
||||
*****************************************************************************/
|
||||
void
|
||||
gtk_knob_animation_free(GtkKnobAnim *anim) {
|
||||
g_return_if_fail (anim != NULL);
|
||||
|
||||
if (anim->pixbuf)
|
||||
g_object_unref (anim->pixbuf);
|
||||
|
||||
g_free (anim);
|
||||
}
|
||||
104
gtkknob.h
Normal file
104
gtkknob.h
Normal file
@@ -0,0 +1,104 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*****************************************************************************/
|
||||
#ifndef __GTK_KNOB_H__
|
||||
#define __GTK_KNOB_H__
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <gtk/gtkadjustment.h>
|
||||
#include <gtk/gtkwidget.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define GTK_KNOB(obj) GTK_CHECK_CAST(obj, gtk_knob_get_type(), GtkKnob)
|
||||
#define GTK_KNOB_CLASS(klass) GTK_CHECK_CLASS_CAST(klass, gtk_knob_get_type(), GtkKnobClass)
|
||||
#define GTK_IS_KNOB(obj) GTK_CHECK_TYPE(obj, gtk_knob_get_type())
|
||||
|
||||
typedef struct _GtkKnob GtkKnob;
|
||||
typedef struct _GtkKnobClass GtkKnobClass;
|
||||
typedef struct _GtkKnobAnim GtkKnobAnim;
|
||||
|
||||
/* better to make this an object and let widgets ref/deref it perhaps */
|
||||
struct _GtkKnobAnim {
|
||||
GdkPixbuf *pixbuf;
|
||||
gint width; /* derived from image width */
|
||||
gint height; /* derived from image height. */
|
||||
gint frame_width; /* derived from pixbuf (width / height) or provided override for rectangular frames */
|
||||
};
|
||||
|
||||
struct _GtkKnob {
|
||||
GtkWidget widget;
|
||||
|
||||
/* update policy (GTK_UPDATE_[CONTINUOUS/DELAYED/DISCONTINUOUS]) */
|
||||
guint policy : 2;
|
||||
|
||||
/* State of widget (to do with user interaction) */
|
||||
guint8 state;
|
||||
gint saved_x, saved_y;
|
||||
|
||||
/* ID of update timer, or 0 if none */
|
||||
guint32 timer;
|
||||
|
||||
/* knob animation */
|
||||
GtkKnobAnim *anim;
|
||||
gint width, height;
|
||||
|
||||
GdkBitmap *mask;
|
||||
GdkGC *mask_gc;
|
||||
GdkGC *red_gc;
|
||||
|
||||
/* Old values from adjustment stored so we know when something changes */
|
||||
gfloat old_value;
|
||||
gfloat old_lower;
|
||||
gfloat old_upper;
|
||||
|
||||
/* The adjustment object that stores the data for this knob */
|
||||
GtkAdjustment *adjustment;
|
||||
};
|
||||
|
||||
struct _GtkKnobClass {
|
||||
GtkWidgetClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
extern GtkWidget *gtk_knob_new(GtkAdjustment *adjustment, GtkKnobAnim *anim);
|
||||
extern guint gtk_knob_get_type(void);
|
||||
extern GtkAdjustment *gtk_knob_get_adjustment(GtkKnob *knob);
|
||||
extern void gtk_knob_set_update_policy(GtkKnob *knob, GtkUpdateType policy);
|
||||
extern void gtk_knob_set_adjustment(GtkKnob *knob, GtkAdjustment *adjustment);
|
||||
|
||||
GtkKnobAnim *gtk_knob_animation_new_from_inline(const guint8 *pixbuf);
|
||||
GtkKnobAnim *gtk_knob_animation_new_from_file_full(gchar *filename,
|
||||
gint frame_width,
|
||||
gint width,
|
||||
gint height);
|
||||
|
||||
GtkKnobAnim *gtk_knob_animation_new_from_file(gchar *filename);
|
||||
void gtk_knob_set_animation (GtkKnob *knob, GtkKnobAnim *anim);
|
||||
void gtk_knob_animation_free(GtkKnobAnim *anim);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
9
gui.h
9
gui.h
@@ -14,4 +14,11 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses>.
|
||||
*/
|
||||
|
||||
void create_window();
|
||||
#ifndef GDIGI_GUI_H
|
||||
#define GDIGI_GUI_H
|
||||
|
||||
void show_error_message(GtkWidget *parent, gchar *message);
|
||||
void gui_create();
|
||||
void gui_free();
|
||||
|
||||
#endif /* GDIGI_GUI_H */
|
||||
|
||||
250
preset.c
Normal file
250
preset.c
Normal file
@@ -0,0 +1,250 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Tomasz Moń <desowin@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; under version 3 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses>.
|
||||
*/
|
||||
|
||||
#include <gio/gio.h>
|
||||
#include <expat.h>
|
||||
#include <string.h>
|
||||
#include "preset.h"
|
||||
|
||||
enum {
|
||||
PARSER_TYPE_NOT_SET = -1,
|
||||
PARSER_TYPE_PRESET_NAME = 0,
|
||||
PARSER_TYPE_PARAM_ID,
|
||||
PARSER_TYPE_PARAM_POSITION,
|
||||
PARSER_TYPE_PARAM_VALUE,
|
||||
PARSER_TYPE_PARAM_NAME,
|
||||
PARSER_TYPE_PARAM_TEXT
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
int depth;
|
||||
int id;
|
||||
Preset *preset;
|
||||
} AppData;
|
||||
|
||||
static void XMLCALL start(void *data, const char *el, const char **attr) {
|
||||
AppData *ad = (AppData *) data;
|
||||
|
||||
ad->id = PARSER_TYPE_NOT_SET;
|
||||
if (g_strcmp0(el, "Name") == 0) {
|
||||
if (ad->depth == 1) {
|
||||
ad->id = PARSER_TYPE_PRESET_NAME;
|
||||
} else if (ad->depth == 3) {
|
||||
ad->id = PARSER_TYPE_PARAM_NAME;
|
||||
}
|
||||
}
|
||||
|
||||
if (g_strcmp0(el, "Params") == 0) {
|
||||
if (ad->preset->params != NULL)
|
||||
g_message("Params aleady exists!");
|
||||
} else if (g_strcmp0(el, "Param") == 0) {
|
||||
SettingParam *param = g_slice_new(SettingParam);
|
||||
param->id = -1;
|
||||
param->position = -1;
|
||||
param->value = -1;
|
||||
ad->preset->params = g_list_prepend(ad->preset->params, param);
|
||||
} else if (g_strcmp0(el, "ID") == 0) {
|
||||
ad->id = PARSER_TYPE_PARAM_ID;
|
||||
} else if (g_strcmp0(el, "Position") == 0) {
|
||||
ad->id = PARSER_TYPE_PARAM_POSITION;
|
||||
} else if (g_strcmp0(el, "Value") == 0) {
|
||||
ad->id = PARSER_TYPE_PARAM_VALUE;
|
||||
} else if (g_strcmp0(el, "Text") == 0) {
|
||||
ad->id = PARSER_TYPE_PARAM_TEXT;
|
||||
}
|
||||
|
||||
ad->depth++;
|
||||
}
|
||||
|
||||
static void XMLCALL end(void *data, const char *el) {
|
||||
AppData *ad = (AppData *) data;
|
||||
ad->depth--;
|
||||
ad->id = PARSER_TYPE_NOT_SET;
|
||||
}
|
||||
|
||||
static void XMLCALL text_cb(void *data, const char* text, int len)
|
||||
{
|
||||
AppData *ad = (AppData *) data;
|
||||
|
||||
if ((ad == NULL) || (ad->preset == NULL))
|
||||
return;
|
||||
|
||||
if (ad->id == PARSER_TYPE_PRESET_NAME) {
|
||||
if (ad->preset->name != NULL)
|
||||
g_free(ad->preset->name);
|
||||
ad->preset->name = g_strndup(text, len);
|
||||
}
|
||||
|
||||
if (ad->preset->params == NULL)
|
||||
return;
|
||||
|
||||
SettingParam *param = (SettingParam *) ad->preset->params->data;
|
||||
if (param == NULL)
|
||||
return;
|
||||
|
||||
gchar *value = g_strndup(text, len);
|
||||
|
||||
switch (ad->id) {
|
||||
case PARSER_TYPE_PARAM_ID:
|
||||
param->id = atoi(value);
|
||||
break;
|
||||
case PARSER_TYPE_PARAM_POSITION:
|
||||
param->position = atoi(value);
|
||||
break;
|
||||
case PARSER_TYPE_PARAM_VALUE:
|
||||
param->value = atoi(value);
|
||||
break;
|
||||
}
|
||||
|
||||
g_free(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* create_preset_from_xml_file:
|
||||
* @filename: valid path to file
|
||||
*
|
||||
* Tries to open file pointed by path, then parses it.
|
||||
*
|
||||
* Return value: Preset which must be freed using preset_free, or NULL on error.
|
||||
**/
|
||||
Preset *create_preset_from_xml_file(gchar *filename)
|
||||
{
|
||||
GFile *file;
|
||||
GError *error = NULL;
|
||||
gchar *contents;
|
||||
|
||||
file = g_file_new_for_path(filename);
|
||||
if (g_file_get_contents(filename, &contents, NULL, &error) == FALSE) {
|
||||
g_message("Failed to get %s contents: %s", filename, error->message);
|
||||
g_error_free(error);
|
||||
g_object_unref(file);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
AppData *ad = g_slice_new(AppData);
|
||||
ad->depth = 0;
|
||||
ad->preset = g_slice_new(Preset);
|
||||
ad->preset->name = NULL;
|
||||
ad->preset->params = NULL;
|
||||
ad->id = PARSER_TYPE_NOT_SET;
|
||||
|
||||
XML_Parser p;
|
||||
p = XML_ParserCreate(NULL);
|
||||
XML_SetUserData(p, (void *) ad);
|
||||
XML_SetElementHandler(p, start, end);
|
||||
XML_SetCharacterDataHandler(p, text_cb);
|
||||
|
||||
if (XML_Parse(p, contents, strlen(contents), XML_TRUE) != XML_STATUS_OK) {
|
||||
g_warning("Parse error at line %d:\n%s",
|
||||
(int)XML_GetCurrentLineNumber(p),
|
||||
XML_ErrorString(XML_GetErrorCode(p)));
|
||||
preset_free(ad->preset);
|
||||
g_slice_free(AppData, ad);
|
||||
g_free(contents);
|
||||
g_object_unref(file);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Preset *preset = ad->preset;
|
||||
preset->params = g_list_reverse(preset->params);
|
||||
|
||||
XML_ParserFree(p);
|
||||
g_slice_free(AppData, ad);
|
||||
|
||||
g_free(contents);
|
||||
g_object_unref(file);
|
||||
return preset;
|
||||
}
|
||||
|
||||
/**
|
||||
* create_preset_from_data:
|
||||
* @data: unpacked RECEIVE_PRESET_PARAMETERS message
|
||||
*
|
||||
* Parses message
|
||||
*
|
||||
* Return value: Preset which must be freed using preset_free, or NULL on error.
|
||||
**/
|
||||
Preset *create_preset_from_data(GString *data)
|
||||
{
|
||||
gint total;
|
||||
gint n;
|
||||
gint id;
|
||||
gint position;
|
||||
guint value;
|
||||
gint x;
|
||||
gint tmp;
|
||||
|
||||
x = 0x09;
|
||||
n = 0;
|
||||
total = (unsigned char)data->str[x];
|
||||
x++;
|
||||
|
||||
Preset *preset = g_slice_new(Preset);
|
||||
preset->name = NULL; /* TODO */
|
||||
preset->params = NULL;
|
||||
|
||||
do {
|
||||
id = ((unsigned char)data->str[x] << 8) | (unsigned char)data->str[x+1];
|
||||
position = (unsigned char)data->str[x+2];
|
||||
x+=3;
|
||||
value = data->str[x];
|
||||
x++;
|
||||
if (value > 0x80) {
|
||||
tmp = value & 0x7F;
|
||||
value = 0;
|
||||
gint i;
|
||||
for (i=0; i<tmp; i++) {
|
||||
value |= ((unsigned char)data->str[x+i] << (8*(tmp-i-1)));
|
||||
}
|
||||
x+=tmp;
|
||||
}
|
||||
n++;
|
||||
SettingParam *param = g_slice_new(SettingParam);
|
||||
param->id = id;
|
||||
param->position = position;
|
||||
param->value = value;
|
||||
preset->params = g_list_prepend(preset->params, param);
|
||||
g_message("%d ID %d Position %d Value %d", n, id, position, value);
|
||||
} while ((x < data->len) && n<total);
|
||||
g_message("TOTAL %d", total);
|
||||
preset->params = g_list_reverse(preset->params);
|
||||
|
||||
return preset;
|
||||
}
|
||||
|
||||
/**
|
||||
* preset_free:
|
||||
* @preset: preset to be freed
|
||||
*
|
||||
* Frees all memory used by preset.
|
||||
**/
|
||||
void preset_free(Preset *preset)
|
||||
{
|
||||
g_return_if_fail(preset != NULL);
|
||||
|
||||
if (preset->params != NULL) {
|
||||
GList *iter;
|
||||
for (iter = preset->params; iter; iter = iter->next) {
|
||||
g_slice_free(SettingParam, iter->data);
|
||||
}
|
||||
g_list_free(preset->params);
|
||||
}
|
||||
|
||||
if (preset->name != NULL)
|
||||
g_free(preset->name);
|
||||
|
||||
g_slice_free(Preset, preset);
|
||||
}
|
||||
37
preset.h
Normal file
37
preset.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Tomasz Moń <desowin@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; under version 3 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses>.
|
||||
*/
|
||||
|
||||
#ifndef GDIGI_PRESET_H
|
||||
#define GDIGI_PRESET_H
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
typedef struct {
|
||||
int id;
|
||||
int position;
|
||||
int value;
|
||||
} SettingParam;
|
||||
|
||||
typedef struct {
|
||||
gchar *name;
|
||||
GList *params;
|
||||
} Preset;
|
||||
|
||||
Preset *create_preset_from_xml_file(gchar *filename);
|
||||
Preset *create_preset_from_data(GString *data);
|
||||
void preset_free(Preset *preset);
|
||||
|
||||
#endif /* GDIGI_PRESET_H */
|
||||
677
tests.c
677
tests.c
@@ -16,620 +16,629 @@
|
||||
|
||||
#include "gdigi.h"
|
||||
|
||||
void test_wah(struct usb_dev_handle *handle)
|
||||
void test_wah()
|
||||
{
|
||||
int x;
|
||||
|
||||
set_wah_type(handle, WAH_TYPE_CRY);
|
||||
set_option(WAH_TYPE, WAH_POSITION, WAH_TYPE_CRY);
|
||||
for (x=0; x<=99; x++)
|
||||
set_wah_min(handle, x);
|
||||
set_option(WAH_MIN, WAH_POSITION_MIN_MAX, x);
|
||||
|
||||
for (x=0; x<=99; x++)
|
||||
set_wah_max(handle, x);
|
||||
set_option(WAH_MAX, WAH_POSITION_MIN_MAX, x);
|
||||
|
||||
for (x=0; x<=12; x++)
|
||||
set_wah_level(handle, x);
|
||||
set_option(WAH_LEVEL, WAH_POSITION, x);
|
||||
|
||||
set_wah_type(handle, WAH_TYPE_FULLRANGE);
|
||||
set_option(WAH_TYPE, WAH_POSITION, WAH_TYPE_FULLRANGE);
|
||||
for (x=0; x<=99; x++)
|
||||
set_wah_min(handle, x);
|
||||
set_option(WAH_MIN, WAH_POSITION_MIN_MAX, x);
|
||||
|
||||
for (x=0; x<=99; x++)
|
||||
set_wah_max(handle, x);
|
||||
set_option(WAH_MAX, WAH_POSITION_MIN_MAX, x);
|
||||
|
||||
for (x=0; x<=12; x++)
|
||||
set_wah_level(handle, x);
|
||||
set_option(WAH_LEVEL, WAH_POSITION, x);
|
||||
|
||||
set_wah_type(handle, WAH_TYPE_CLYDE);
|
||||
set_option(WAH_TYPE, WAH_POSITION, WAH_TYPE_CLYDE);
|
||||
for (x=0; x<=99; x++)
|
||||
set_wah_min(handle, x);
|
||||
set_option(WAH_MIN, WAH_POSITION_MIN_MAX, x);
|
||||
|
||||
for (x=0; x<=99; x++)
|
||||
set_wah_max(handle, x);
|
||||
set_option(WAH_MAX, WAH_POSITION_MIN_MAX, x);
|
||||
|
||||
for (x=0; x<=12; x++)
|
||||
set_wah_level(handle, x);
|
||||
set_option(WAH_LEVEL, WAH_POSITION, x);
|
||||
|
||||
set_wah_on_off(handle, TRUE);
|
||||
set_wah_on_off(handle, FALSE);
|
||||
set_option(WAH_ON_OFF, WAH_POSITION, 1);
|
||||
set_option(WAH_ON_OFF, WAH_POSITION, 0);
|
||||
}
|
||||
|
||||
void test_compressor(struct usb_dev_handle *handle)
|
||||
void test_compressor()
|
||||
{
|
||||
int x;
|
||||
|
||||
set_comp_type(handle, COMP_TYPE_DIGI);
|
||||
set_option(COMP_TYPE, COMP_POSITION, COMP_TYPE_DIGI);
|
||||
for (x=0; x<=99; x++)
|
||||
set_comp_sustain(handle, x);
|
||||
set_option(COMP_SUSTAIN, COMP_POSITION, x);
|
||||
|
||||
for (x=0; x<=99; x++)
|
||||
set_comp_tone(handle, x);
|
||||
set_option(COMP_TONE, COMP_POSITION, x);
|
||||
|
||||
for (x=0; x<=99; x++)
|
||||
set_comp_attack(handle, x);
|
||||
set_option(COMP_ATTACK, COMP_POSITION, x);
|
||||
|
||||
for (x=0; x<=99; x++)
|
||||
set_comp_level(handle, x);
|
||||
set_option(COMP_LEVEL, COMP_POSITION, x);
|
||||
|
||||
set_comp_type(handle, COMP_TYPE_CS);
|
||||
set_option(COMP_TYPE, COMP_POSITION, COMP_TYPE_CS);
|
||||
for (x=0; x<=99; x++)
|
||||
set_comp_sustain(handle, x);
|
||||
set_option(COMP_SUSTAIN, COMP_POSITION, x);
|
||||
|
||||
for (x=0; x<=99; x++)
|
||||
set_comp_attack(handle, x);
|
||||
set_option(COMP_ATTACK, COMP_POSITION, x);
|
||||
|
||||
for (x=0; x<=99; x++)
|
||||
set_comp_level(handle, x);
|
||||
set_option(COMP_LEVEL, COMP_POSITION, x);
|
||||
|
||||
set_comp_on_off(handle, TRUE);
|
||||
set_comp_on_off(handle, FALSE);
|
||||
set_option(COMP_ON_OFF, COMP_POSITION, 1);
|
||||
set_option(COMP_ON_OFF, COMP_POSITION, 0);
|
||||
}
|
||||
|
||||
void test_dist(struct usb_dev_handle *handle)
|
||||
void test_dist()
|
||||
{
|
||||
int x;
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_SCREAMER);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_SCREAMER);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_SCREAMER_DRIVE, x);
|
||||
set_option(DIST_SCREAMER_DRIVE, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_SCREAMER_TONE, x);
|
||||
set_option(DIST_SCREAMER_TONE, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_SCREAMER_LVL, x);
|
||||
set_option(DIST_SCREAMER_LVL, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_808);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_808);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_808_OVERDRIVE, x);
|
||||
set_option(DIST_808_OVERDRIVE, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_808_TONE, x);
|
||||
set_option(DIST_808_TONE, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_808_LVL, x);
|
||||
set_option(DIST_808_LVL, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_GUYOD);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_GUYOD);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_GUYOD_DRIVE, x);
|
||||
set_option(DIST_GUYOD_DRIVE, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_GUYOD_LVL, x);
|
||||
set_option(DIST_GUYOD_LVL, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_DOD250);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_DOD250);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_DOD250_GAIN, x);
|
||||
set_option(DIST_DOD250_GAIN, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_DOD250_LVL, x);
|
||||
set_option(DIST_DOD250_LVL, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_RODENT);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_RODENT);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_RODENT_DIST, x);
|
||||
set_option(DIST_RODENT_DIST, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_RODENT_FILTER, x);
|
||||
set_option(DIST_RODENT_FILTER, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_RODENT_LVL, x);
|
||||
set_option(DIST_RODENT_LVL, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_MX);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_MX);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_MX_DIST, x);
|
||||
set_option(DIST_MX_DIST, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_MX_OUTPUT, x);
|
||||
set_option(DIST_MX_OUTPUT, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_DS);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_DS);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_DS_GAIN, x);
|
||||
set_option(DIST_DS_GAIN, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_DS_TONE, x);
|
||||
set_option(DIST_DS_TONE, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_DS_LVL, x);
|
||||
set_option(DIST_DS_LVL, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_GRUNGE);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_GRUNGE);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_GRUNGE_GRUNGE, x);
|
||||
set_option(DIST_GRUNGE_GRUNGE, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_GRUNGE_FACE, x);
|
||||
set_option(DIST_GRUNGE_FACE, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_GRUNGE_LOUD, x);
|
||||
set_option(DIST_GRUNGE_LOUD, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_GRUNGE_BUTT, x);
|
||||
set_option(DIST_GRUNGE_BUTT, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_ZONE);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_ZONE);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_ZONE_GAIN, x);
|
||||
set_option(DIST_ZONE_GAIN, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_ZONE_LOW, x);
|
||||
set_option(DIST_ZONE_LOW, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_ZONE_MID_LVL, x);
|
||||
set_option(DIST_ZONE_MID_LVL, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_ZONE_MID_FREQ, x);
|
||||
set_option(DIST_ZONE_MID_FREQ, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_ZONE_HIGH, x);
|
||||
set_option(DIST_ZONE_HIGH, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_ZONE_LEVEL, x);
|
||||
set_option(DIST_ZONE_LEVEL, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_DEATH);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_DEATH);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_DEATH_LOW, x);
|
||||
set_option(DIST_DEATH_LOW, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_DEATH_MID, x);
|
||||
set_option(DIST_DEATH_MID, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_DEATH_HIGH, x);
|
||||
set_option(DIST_DEATH_HIGH, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_DEATH_LVL, x);
|
||||
set_option(DIST_DEATH_LVL, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_GONK);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_GONK);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_GONK_GONK, x);
|
||||
set_option(DIST_GONK_GONK, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_GONK_SMEAR, x);
|
||||
set_option(DIST_GONK_SMEAR, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_GONK_SUCK, x);
|
||||
set_option(DIST_GONK_SUCK, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_GONK_HEAVE, x);
|
||||
set_option(DIST_GONK_HEAVE, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_FUZZY);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_FUZZY);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_FUZZY_FUZZ, x);
|
||||
set_option(DIST_FUZZY_FUZZ, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_FUZZY_VOLUME, x);
|
||||
set_option(DIST_FUZZY_VOLUME, DIST_POSITION, x);
|
||||
|
||||
set_dist_type(handle, DIST_TYPE_MP);
|
||||
set_option(DIST_TYPE, DIST_POSITION, DIST_TYPE_MP);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_MP_SUSTAIN, x);
|
||||
set_option(DIST_MP_SUSTAIN, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_MP_TONE, x);
|
||||
set_option(DIST_MP_TONE, DIST_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_dist_option(handle, DIST_MP_VOLUME, x);
|
||||
set_option(DIST_MP_VOLUME, DIST_POSITION, x);
|
||||
|
||||
set_dist_on_off(handle, TRUE);
|
||||
set_dist_on_off(handle, FALSE);
|
||||
set_option(DIST_ON_OFF, DIST_POSITION, 1);
|
||||
set_option(DIST_ON_OFF, DIST_POSITION, 0);
|
||||
}
|
||||
|
||||
void test_presets(struct usb_dev_handle *handle)
|
||||
void test_presets()
|
||||
{
|
||||
int x;
|
||||
|
||||
for (x=0; x<=60; x++)
|
||||
switch_user_preset(handle, x);
|
||||
switch_preset(PRESETS_USER, x);
|
||||
|
||||
for (x=0; x<=60; x++)
|
||||
switch_system_preset(handle, x);
|
||||
|
||||
for (x=0; x<=99; x++)
|
||||
set_preset_level(handle, x);
|
||||
switch_preset(PRESETS_SYSTEM, x);
|
||||
}
|
||||
|
||||
void test_pickups(struct usb_dev_handle *handle)
|
||||
void test_pickups()
|
||||
{
|
||||
set_pickup_type(handle, PICKUP_TYPE_HB_SC);
|
||||
set_pickup_type(handle, PICKUP_TYPE_SC_HB);
|
||||
set_option(PICKUP_TYPE, PICKUP_POSITION, PICKUP_TYPE_HB_SC);
|
||||
set_option(PICKUP_TYPE, PICKUP_POSITION, PICKUP_TYPE_SC_HB);
|
||||
|
||||
set_pickup_on_off(handle, TRUE);
|
||||
set_pickup_on_off(handle, FALSE);
|
||||
set_option(PICKUP_ON_OFF, PICKUP_POSITION, 1);
|
||||
set_option(PICKUP_ON_OFF, PICKUP_POSITION, 0);
|
||||
}
|
||||
|
||||
void test_eq(struct usb_dev_handle *handle)
|
||||
void test_eq()
|
||||
{
|
||||
int x;
|
||||
|
||||
set_eq_type(handle, EQ_TYPE_BRIGHT);
|
||||
set_eq_type(handle, EQ_TYPE_MIDBOOST);
|
||||
set_eq_type(handle, EQ_TYPE_SCOOP);
|
||||
set_eq_type(handle, EQ_TYPE_WARM);
|
||||
set_option(EQ_TYPE, EQ_POSITION, EQ_TYPE_BRIGHT);
|
||||
set_option(EQ_TYPE, EQ_POSITION, EQ_TYPE_MIDBOOST);
|
||||
set_option(EQ_TYPE, EQ_POSITION, EQ_TYPE_SCOOP);
|
||||
set_option(EQ_TYPE, EQ_POSITION, EQ_TYPE_WARM);
|
||||
|
||||
for (x=0; x<=99; x++)
|
||||
set_eq_gain(handle, x);
|
||||
set_option(AMP_GAIN, AMP_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_eq_level(handle, x);
|
||||
set_option(AMP_LEVEL, AMP_POSITION, x);
|
||||
|
||||
for (x=0; x<=0x18; x++)
|
||||
set_eq_bass(handle, x);
|
||||
set_option(EQ_BASS, EQ_POSITION, x);
|
||||
for (x=0; x<=0x18; x++)
|
||||
set_eq_mid(handle, x);
|
||||
set_option(EQ_MID, EQ_POSITION, x);
|
||||
for (x=0; x<=4700; x++)
|
||||
set_eq_mid_hz(handle, x);
|
||||
set_option(EQ_MID_HZ, EQ_POSITION, x);
|
||||
for (x=0; x<=0x18; x++)
|
||||
set_eq_treble(handle, x);
|
||||
set_option(EQ_TREBLE, EQ_POSITION, x);
|
||||
for (x=0; x<=7500; x++)
|
||||
set_eq_treb_hz(handle, x);
|
||||
set_option(EQ_TREBLE_HZ, EQ_POSITION, x);
|
||||
|
||||
set_eq_on_off(handle, TRUE);
|
||||
set_eq_on_off(handle, FALSE);
|
||||
set_option(EQ_ON_OFF, EQ_POSITION, 1);
|
||||
set_option(EQ_ON_OFF, EQ_POSITION, 0);
|
||||
}
|
||||
|
||||
void test_noisegate(struct usb_dev_handle *handle)
|
||||
void test_noisegate()
|
||||
{
|
||||
int x;
|
||||
|
||||
set_noisegate_type(handle, NOISEGATE_GATE);
|
||||
set_option(NOISEGATE_TYPE, NOISEGATE_POSITION, NOISEGATE_GATE);
|
||||
for (x=0; x<=99; x++)
|
||||
set_gate_option(handle, NOISEGATE_GATE_TRESHOLD, x);
|
||||
set_option(NOISEGATE_GATE_TRESHOLD, NOISEGATE_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_gate_option(handle, NOISEGATE_ATTACK, x);
|
||||
set_option(NOISEGATE_ATTACK, NOISEGATE_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_gate_option(handle, NOISEGATE_RELEASE, x);
|
||||
set_option(NOISEGATE_RELEASE, NOISEGATE_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_gate_option(handle, NOISEGATE_ATTN, x);
|
||||
set_option(NOISEGATE_ATTN, NOISEGATE_POSITION, x);
|
||||
|
||||
set_noisegate_type(handle, NOISEGATE_SWELL);
|
||||
set_option(NOISEGATE_TYPE, NOISEGATE_POSITION, NOISEGATE_SWELL);
|
||||
for (x=0; x<=99; x++)
|
||||
set_gate_option(handle, NOISEGATE_SWELL_SENS, x);
|
||||
set_option(NOISEGATE_SWELL_SENS, NOISEGATE_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_gate_option(handle, NOISEGATE_ATTACK, x);
|
||||
set_option(NOISEGATE_ATTACK, NOISEGATE_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_gate_option(handle, NOISEGATE_RELEASE, x);
|
||||
set_option(NOISEGATE_RELEASE, NOISEGATE_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_gate_option(handle, NOISEGATE_ATTN, x);
|
||||
set_option(NOISEGATE_ATTN, NOISEGATE_POSITION, x);
|
||||
|
||||
set_noisegate_on_off(handle, TRUE);
|
||||
set_noisegate_on_off(handle, FALSE);
|
||||
set_option(NOISEGATE_ON_OFF, NOISEGATE_POSITION, 1);
|
||||
set_option(NOISEGATE_ON_OFF, NOISEGATE_POSITION, 0);
|
||||
}
|
||||
|
||||
void test_chorusfx(struct usb_dev_handle *handle)
|
||||
void test_chorusfx()
|
||||
{
|
||||
int x;
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_CE);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_CE);
|
||||
for (x=0; x<=99; x++)
|
||||
set_chorusfx_option(handle, CE_CHORUS_SPEED, x);
|
||||
set_option(CE_CHORUS_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_chorusfx_option(handle, CE_CHORUS_DEPTH, x);
|
||||
set_option(CE_CHORUS_DEPTH, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_DUAL);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_DUAL);
|
||||
for (x=0; x<=99; x++)
|
||||
set_chorusfx_option(handle, DUAL_CHORUS_SPEED, x);
|
||||
set_option(DUAL_CHORUS_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_chorusfx_option(handle, DUAL_CHORUS_DEPTH, x);
|
||||
set_option(DUAL_CHORUS_DEPTH, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_chorusfx_option(handle, DUAL_CHORUS_LEVEL, x);
|
||||
set_chorusfx_option(handle, DUAL_CHORUS_WAVE, WAVE_TRI);
|
||||
set_chorusfx_option(handle, DUAL_CHORUS_WAVE, WAVE_SINE);
|
||||
set_chorusfx_option(handle, DUAL_CHORUS_WAVE, WAVE_SQUARE);
|
||||
set_option(DUAL_CHORUS_LEVEL, CHORUSFX_POSITION, x);
|
||||
set_option(DUAL_CHORUS_WAVE, CHORUSFX_POSITION, WAVE_TRI);
|
||||
set_option(DUAL_CHORUS_WAVE, CHORUSFX_POSITION, WAVE_SINE);
|
||||
set_option(DUAL_CHORUS_WAVE, CHORUSFX_POSITION, WAVE_SQUARE);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_MULTI);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_MULTI);
|
||||
for (x=0; x<=99; x++)
|
||||
set_chorusfx_option(handle, MULTI_CHORUS_SPEED, x);
|
||||
set_option(MULTI_CHORUS_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_chorusfx_option(handle, MULTI_CHORUS_DEPTH, x);
|
||||
set_option(MULTI_CHORUS_DEPTH, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_chorusfx_option(handle, MULTI_CHORUS_LEVEL, x);
|
||||
set_chorusfx_option(handle, MULTI_CHORUS_WAVE, WAVE_TRI);
|
||||
set_chorusfx_option(handle, MULTI_CHORUS_WAVE, WAVE_SINE);
|
||||
set_chorusfx_option(handle, MULTI_CHORUS_WAVE, WAVE_SQUARE);
|
||||
set_option(MULTI_CHORUS_LEVEL, CHORUSFX_POSITION, x);
|
||||
set_option(MULTI_CHORUS_WAVE, CHORUSFX_POSITION, WAVE_TRI);
|
||||
set_option(MULTI_CHORUS_WAVE, CHORUSFX_POSITION, WAVE_SINE);
|
||||
set_option(MULTI_CHORUS_WAVE, CHORUSFX_POSITION, WAVE_SQUARE);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_FLANGER);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_FLANGER);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, FLANGER_SPEED, x);
|
||||
set_option(FLANGER_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, FLANGER_DEPTH, x);
|
||||
set_option(FLANGER_DEPTH, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, FLANGER_REGEN, x);
|
||||
set_option(FLANGER_REGEN, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, FLANGER_LEVEL, x);
|
||||
set_flanger_option(handle, FLANGER_WAVE, WAVE_TRI);
|
||||
set_flanger_option(handle, FLANGER_WAVE, WAVE_SINE);
|
||||
set_flanger_option(handle, FLANGER_WAVE, WAVE_SQUARE);
|
||||
set_option(FLANGER_LEVEL, CHORUSFX_POSITION, x);
|
||||
set_option(FLANGER_WAVE, CHORUSFX_POSITION, WAVE_TRI);
|
||||
set_option(FLANGER_WAVE, CHORUSFX_POSITION, WAVE_SINE);
|
||||
set_option(FLANGER_WAVE, CHORUSFX_POSITION, WAVE_SQUARE);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_MXR_FLANGER);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_MXR_FLANGER);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, MXR_FLANGER_SPEED, x);
|
||||
set_option(MXR_FLANGER_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, MXR_FLANGER_WIDTH, x);
|
||||
set_option(MXR_FLANGER_WIDTH, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, MXR_FLANGER_REGEN, x);
|
||||
set_option(MXR_FLANGER_REGEN, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, MXR_FLANGER_MANUAL, x);
|
||||
set_option(MXR_FLANGER_MANUAL, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_PHASER);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_PHASER);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, PHASER_SPEED, x);
|
||||
set_option(PHASER_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, PHASER_DEPTH, x);
|
||||
set_option(PHASER_DEPTH, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, PHASER_REGEN, x);
|
||||
set_option(PHASER_REGEN, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_flanger_option(handle, PHASER_LEVEL, x);
|
||||
set_flanger_option(handle, PHASER_WAVE, WAVE_TRI);
|
||||
set_flanger_option(handle, PHASER_WAVE, WAVE_SINE);
|
||||
set_flanger_option(handle, PHASER_WAVE, WAVE_SQUARE);
|
||||
set_option(PHASER_LEVEL, CHORUSFX_POSITION, x);
|
||||
set_option(PHASER_WAVE, CHORUSFX_POSITION, WAVE_TRI);
|
||||
set_option(PHASER_WAVE, CHORUSFX_POSITION, WAVE_SINE);
|
||||
set_option(PHASER_WAVE, CHORUSFX_POSITION, WAVE_SQUARE);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_VIBRATO);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_VIBRATO);
|
||||
for (x=0; x<=99; x++)
|
||||
set_vibrato_option(handle, VIBRATO_SPEED, x);
|
||||
set_option(VIBRATO_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_vibrato_option(handle, VIBRATO_DEPTH, x);
|
||||
set_option(VIBRATO_DEPTH, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_ROTARY);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_ROTARY);
|
||||
for (x=0; x<=99; x++)
|
||||
set_vibrato_option(handle, ROTARY_SPEED, x);
|
||||
set_option(ROTARY_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_vibrato_option(handle, ROTARY_INTENSITY, x);
|
||||
set_option(ROTARY_INTENSITY, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_vibrato_option(handle, ROTARY_DOPPLER, x);
|
||||
set_option(ROTARY_DOPPLER, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_vibrato_option(handle, ROTARY_CROSSOVER, x);
|
||||
set_option(ROTARY_CROSSOVER, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_VIBROPAN);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_VIBROPAN);
|
||||
for (x=0; x<=99; x++)
|
||||
set_vibrato_option(handle, VIBROPAN_SPEED, x);
|
||||
set_option(VIBROPAN_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_vibrato_option(handle, VIBROPAN_DEPTH, x);
|
||||
set_option(VIBROPAN_DEPTH, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_vibrato_option(handle, VIBROPAN_VIBRA, x);
|
||||
set_vibrato_option(handle, VIBROPAN_WAVE, WAVE_TRI);
|
||||
set_vibrato_option(handle, VIBROPAN_WAVE, WAVE_SINE);
|
||||
set_vibrato_option(handle, VIBROPAN_WAVE, WAVE_SQUARE);
|
||||
set_option(VIBROPAN_VIBRA, CHORUSFX_POSITION, x);
|
||||
set_option(VIBROPAN_WAVE, CHORUSFX_POSITION, WAVE_TRI);
|
||||
set_option(VIBROPAN_WAVE, CHORUSFX_POSITION, WAVE_SINE);
|
||||
set_option(VIBROPAN_WAVE, CHORUSFX_POSITION, WAVE_SQUARE);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_TREMOLO);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_TREMOLO);
|
||||
for (x=0; x<=99; x++)
|
||||
set_tremolo_option(handle, TREMOLO_SPEED, x);
|
||||
set_option(TREMOLO_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_tremolo_option(handle, TREMOLO_DEPTH, x);
|
||||
set_tremolo_option(handle, TREMOLO_WAVE, WAVE_TRI);
|
||||
set_tremolo_option(handle, TREMOLO_WAVE, WAVE_SINE);
|
||||
set_tremolo_option(handle, TREMOLO_WAVE, WAVE_SQUARE);
|
||||
set_option(TREMOLO_DEPTH, CHORUSFX_POSITION, x);
|
||||
set_option(TREMOLO_WAVE, CHORUSFX_POSITION, WAVE_TRI);
|
||||
set_option(TREMOLO_WAVE, CHORUSFX_POSITION, WAVE_SINE);
|
||||
set_option(TREMOLO_WAVE, CHORUSFX_POSITION, WAVE_SQUARE);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_PANNER);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_PANNER);
|
||||
for (x=0; x<=99; x++)
|
||||
set_tremolo_option(handle, PANNER_SPEED, x);
|
||||
set_option(PANNER_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_tremolo_option(handle, PANNER_DEPTH, x);
|
||||
set_tremolo_option(handle, PANNER_WAVE, WAVE_TRI);
|
||||
set_tremolo_option(handle, PANNER_WAVE, WAVE_SINE);
|
||||
set_tremolo_option(handle, PANNER_WAVE, WAVE_SQUARE);
|
||||
set_option(PANNER_DEPTH, CHORUSFX_POSITION, x);
|
||||
set_option(PANNER_WAVE, CHORUSFX_POSITION, WAVE_TRI);
|
||||
set_option(PANNER_WAVE, CHORUSFX_POSITION, WAVE_SINE);
|
||||
set_option(PANNER_WAVE, CHORUSFX_POSITION, WAVE_SQUARE);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_ENVELOPE);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_ENVELOPE);
|
||||
for (x=0; x<=99; x++)
|
||||
set_envelope_option(handle, ENVELOPE_SENSITIVITY, x);
|
||||
set_option(ENVELOPE_SENSITIVITY, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_envelope_option(handle, ENVELOPE_RANGE, x);
|
||||
set_option(ENVELOPE_RANGE, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_AUTOYA);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_AUTOYA);
|
||||
for (x=0; x<=99; x++)
|
||||
set_ya_option(handle, AUTOYA_SPEED, x);
|
||||
set_option(AUTOYA_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_ya_option(handle, AUTOYA_INTENSITY, x);
|
||||
set_option(AUTOYA_INTENSITY, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=0x31; x++)
|
||||
set_ya_option(handle, AUTOYA_RANGE, x);
|
||||
set_option(AUTOYA_RANGE, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_YAYA);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_YAYA);
|
||||
for (x=0; x<=99; x++)
|
||||
set_ya_option(handle, YAYA_PEDAL, x);
|
||||
set_option(YAYA_PEDAL, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_ya_option(handle, YAYA_INTENSITY, x);
|
||||
set_option(YAYA_INTENSITY, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=0x31; x++)
|
||||
set_ya_option(handle, YAYA_RANGE, x);
|
||||
set_option(YAYA_RANGE, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_STEP_FILTER);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_STEP_FILTER);
|
||||
for (x=0; x<=99; x++)
|
||||
set_filter_option(handle, STEP_FILTER_SPEED, x);
|
||||
set_option(STEP_FILTER_SPEED, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_filter_option(handle, STEP_FILTER_INTENSITY, x);
|
||||
set_option(STEP_FILTER_INTENSITY, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_WHAMMY);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_OCT_UP);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_2OCT_UP);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_2ND_DN);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_RV_2ND);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_4TH_DN);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_OCT_DN);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_2OCT_DN);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_DIV_BMB);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_M3_MA);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_2ND_MA3);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_3RD_4TH);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_4TH_5TH);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_5TH_OCT);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_HOCT_UP);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_HOCT_DN);
|
||||
set_whammy_option(handle, WHAMMY_AMOUNT, WHAMMY_OCT_UD);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_WHAMMY);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_OCT_UP);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_2OCT_UP);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_2ND_DN);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_RV_2ND);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_4TH_DN);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_OCT_DN);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_2OCT_DN);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_DIV_BMB);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_M3_MA);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_2ND_MA3);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_3RD_4TH);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_4TH_5TH);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_5TH_OCT);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_HOCT_UP);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_HOCT_DN);
|
||||
set_option(WHAMMY_AMOUNT, CHORUSFX_POSITION, WHAMMY_OCT_UD);
|
||||
for (x=0; x<=99; x++)
|
||||
set_whammy_option(handle, WHAMMY_PEDAL, x);
|
||||
set_option(WHAMMY_PEDAL, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_whammy_option(handle, WHAMMY_MIX, x);
|
||||
set_option(WHAMMY_MIX, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_PITCH_SHIFT);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_PITCH_SHIFT);
|
||||
for (x=0; x<=0x30; x++)
|
||||
set_pitch_option(handle, PITCH_AMOUNT, x);
|
||||
set_option(PITCH_AMOUNT, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_pitch_option(handle, PITCH_MIX, x);
|
||||
set_option(PITCH_MIX, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_DETUNE);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_DETUNE);
|
||||
for (x=0; x<=0x30; x++)
|
||||
set_pitch_option(handle, DETUNE_AMOUNT, x);
|
||||
set_option(DETUNE_AMOUNT, CHORUSFX_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_pitch_option(handle, DETUNE_LEVEL, x);
|
||||
set_option(DETUNE_LEVEL, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_type(handle, CHORUS_TYPE_IPS);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_OCT_D);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_7TH_DN);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_6TH_DN);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_5TH_DN);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_4TH_DN);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_3RD_DN);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_2ND_DN);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_2ND_UP);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_3RD_UP);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_4TH_UP);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_5TH_UP);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_6TH_UP);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_7TH_UP);
|
||||
set_ips_option(handle, IPS_SHIFT_AMOUNT, IPS_OCT_U);
|
||||
set_ips_option(handle, IPS_KEY, IPS_E);
|
||||
set_ips_option(handle, IPS_KEY, IPS_F);
|
||||
set_ips_option(handle, IPS_KEY, IPS_GB);
|
||||
set_ips_option(handle, IPS_KEY, IPS_G);
|
||||
set_ips_option(handle, IPS_KEY, IPS_AB);
|
||||
set_ips_option(handle, IPS_KEY, IPS_A);
|
||||
set_ips_option(handle, IPS_KEY, IPS_BB);
|
||||
set_ips_option(handle, IPS_KEY, IPS_B);
|
||||
set_ips_option(handle, IPS_KEY, IPS_C);
|
||||
set_ips_option(handle, IPS_KEY, IPS_DD);
|
||||
set_ips_option(handle, IPS_KEY, IPS_D);
|
||||
set_ips_option(handle, IPS_KEY, IPS_EB);
|
||||
set_ips_option(handle, IPS_SCALE, IPS_MAJOR);
|
||||
set_ips_option(handle, IPS_SCALE, IPS_MINOR);
|
||||
set_ips_option(handle, IPS_SCALE, IPS_DORIA);
|
||||
set_ips_option(handle, IPS_SCALE, IPS_MIXLYD);
|
||||
set_ips_option(handle, IPS_SCALE, IPS_LYDIAN);
|
||||
set_ips_option(handle, IPS_SCALE, IPS_HMINO);
|
||||
set_option(CHORUSFX_TYPE, CHORUSFX_POSITION, CHORUS_TYPE_IPS);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_OCT_D);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_7TH_DN);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_6TH_DN);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_5TH_DN);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_4TH_DN);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_3RD_DN);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_2ND_DN);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_2ND_UP);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_3RD_UP);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_4TH_UP);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_5TH_UP);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_6TH_UP);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_7TH_UP);
|
||||
set_option(IPS_SHIFT_AMOUNT, CHORUSFX_POSITION, IPS_OCT_U);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_E);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_F);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_GB);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_G);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_AB);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_A);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_BB);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_B);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_C);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_DB);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_D);
|
||||
set_option(IPS_KEY, CHORUSFX_POSITION, IPS_EB);
|
||||
set_option(IPS_SCALE, CHORUSFX_POSITION, IPS_MAJOR);
|
||||
set_option(IPS_SCALE, CHORUSFX_POSITION, IPS_MINOR);
|
||||
set_option(IPS_SCALE, CHORUSFX_POSITION, IPS_DORIA);
|
||||
set_option(IPS_SCALE, CHORUSFX_POSITION, IPS_MIXLYD);
|
||||
set_option(IPS_SCALE, CHORUSFX_POSITION, IPS_LYDIAN);
|
||||
set_option(IPS_SCALE, CHORUSFX_POSITION, IPS_HMINO);
|
||||
for (x=0; x<=99; x++)
|
||||
set_ips_option(handle, IPS_LEVEL, x);
|
||||
set_option(IPS_LEVEL, CHORUSFX_POSITION, x);
|
||||
|
||||
set_chorusfx_on_off(handle, TRUE);
|
||||
set_chorusfx_on_off(handle, FALSE);
|
||||
set_option(CHORUSFX_ON_OFF, CHORUSFX_POSITION, 1);
|
||||
set_option(CHORUSFX_ON_OFF, CHORUSFX_POSITION, 0);
|
||||
}
|
||||
|
||||
void test_delay(struct usb_dev_handle *handle)
|
||||
void test_delay()
|
||||
{
|
||||
int x;
|
||||
|
||||
set_delay_type(handle, DELAY_TYPE_ANALOG);
|
||||
set_option(DELAY_TYPE, DELAY_POSITION, DELAY_TYPE_ANALOG);
|
||||
for (x=0; x<=139; x++)
|
||||
set_delay_time(handle, x);
|
||||
set_option(DELAY_TIME, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, ANALOG_LEVEL, x);
|
||||
set_option(ANALOG_LEVEL, DELAY_POSITION, x);
|
||||
for (x=0; x<=100; x++)
|
||||
set_delay_option(handle, ANALOG_REPEATS, x);
|
||||
set_option(ANALOG_REPEATS, DELAY_POSITION, x);
|
||||
|
||||
set_delay_type(handle, DELAY_TYPE_DIGITAL);
|
||||
set_option(DELAY_TYPE, DELAY_POSITION, DELAY_TYPE_DIGITAL);
|
||||
for (x=0; x<=139; x++)
|
||||
set_delay_time(handle, x);
|
||||
set_option(DELAY_TIME, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, DIGITAL_LEVEL, x);
|
||||
set_option(DIGITAL_LEVEL, DELAY_POSITION, x);
|
||||
for (x=0; x<=100; x++)
|
||||
set_delay_option(handle, DIGITAL_REPEATS, x);
|
||||
set_option(DIGITAL_REPEATS, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, DIGITAL_DUCKER_THRESH, x);
|
||||
set_option(DIGITAL_DUCKER_THRESH, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, DIGITAL_DUCKER_LEVEL, x);
|
||||
set_option(DIGITAL_DUCKER_LEVEL, DELAY_POSITION, x);
|
||||
|
||||
set_delay_type(handle, DELAY_TYPE_MODULATED);
|
||||
set_option(DELAY_TYPE, DELAY_POSITION, DELAY_TYPE_MODULATED);
|
||||
for (x=0; x<=139; x++)
|
||||
set_delay_time(handle, x);
|
||||
set_option(DELAY_TIME, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, MODULATED_LEVEL, x);
|
||||
set_option(MODULATED_LEVEL, DELAY_POSITION, x);
|
||||
for (x=0; x<=100; x++)
|
||||
set_delay_option(handle, MODULATED_REPEATS, x);
|
||||
set_option(MODULATED_REPEATS, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, MODULATED_DEPTH, x);
|
||||
set_option(MODULATED_DEPTH, DELAY_POSITION, x);
|
||||
|
||||
set_delay_type(handle, DELAY_TYPE_PONG);
|
||||
set_option(DELAY_TYPE, DELAY_POSITION, DELAY_TYPE_PONG);
|
||||
for (x=0; x<=139; x++)
|
||||
set_delay_time(handle, x);
|
||||
set_option(DELAY_TIME, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, PONG_LEVEL, x);
|
||||
set_option(PONG_LEVEL, DELAY_POSITION, x);
|
||||
for (x=0; x<=100; x++)
|
||||
set_delay_option(handle, PONG_REPEATS, x);
|
||||
set_option(PONG_REPEATS, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, PONG_DUCKER_THRESH, x);
|
||||
set_option(PONG_DUCKER_THRESH, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, PONG_DUCKER_LEVEL, x);
|
||||
set_option(PONG_DUCKER_LEVEL, DELAY_POSITION, x);
|
||||
|
||||
set_delay_type(handle, DELAY_TYPE_TAPE);
|
||||
set_option(DELAY_TYPE, DELAY_POSITION, DELAY_TYPE_TAPE);
|
||||
for (x=0; x<=139; x++)
|
||||
set_delay_time(handle, x);
|
||||
set_option(DELAY_TIME, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, TAPE_LEVEL, x);
|
||||
set_option(TAPE_LEVEL, DELAY_POSITION, x);
|
||||
for (x=0; x<=100; x++)
|
||||
set_delay_option(handle, TAPE_REPEATS, x);
|
||||
set_option(TAPE_REPEATS, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, TAPE_WOW, x);
|
||||
set_option(TAPE_WOW, DELAY_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_delay_option(handle, TAPE_FLUTTER, x);
|
||||
set_option(TAPE_FLUTTER, DELAY_POSITION, x);
|
||||
|
||||
set_delay_on_off(handle, TRUE);
|
||||
set_delay_on_off(handle, FALSE);
|
||||
set_option(DELAY_ON_OFF, DELAY_POSITION, 1);
|
||||
set_option(DELAY_ON_OFF, DELAY_POSITION, 0);
|
||||
}
|
||||
|
||||
void test_reverb(struct usb_dev_handle *handle)
|
||||
void test_reverb()
|
||||
{
|
||||
int x;
|
||||
|
||||
set_reverb_type(handle, REVERB_TYPE_TWIN);
|
||||
set_option(REVERB_TYPE, REVERB_POSITION, REVERB_TYPE_TWIN);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, TWIN_REVERB, x);
|
||||
set_option(TWIN_REVERB, REVERB_POSITION, x);
|
||||
|
||||
set_reverb_type(handle, REVERB_TYPE_LEX_AMBIENCE);
|
||||
set_option(REVERB_TYPE, REVERB_POSITION, REVERB_TYPE_LEX_AMBIENCE);
|
||||
for (x=0; x<=15; x++)
|
||||
set_reverb_option(handle, LEX_AMBIENCE_PREDELAY, x);
|
||||
set_option(LEX_AMBIENCE_PREDELAY, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_AMBIENCE_DECAY, x);
|
||||
set_option(LEX_AMBIENCE_DECAY, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_AMBIENCE_LIVELINESS, x);
|
||||
set_option(LEX_AMBIENCE_LIVELINESS, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_AMBIENCE_LEVEL, x);
|
||||
set_option(LEX_AMBIENCE_LEVEL, REVERB_POSITION, x);
|
||||
|
||||
set_reverb_type(handle, REVERB_TYPE_LEX_STUDIO);
|
||||
set_option(REVERB_TYPE, REVERB_POSITION, REVERB_TYPE_LEX_STUDIO);
|
||||
for (x=0; x<=15; x++)
|
||||
set_reverb_option(handle, LEX_STUDIO_PREDELAY, x);
|
||||
set_option(LEX_STUDIO_PREDELAY, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_STUDIO_DECAY, x);
|
||||
set_option(LEX_STUDIO_DECAY, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_STUDIO_LIVELINESS, x);
|
||||
set_option(LEX_STUDIO_LIVELINESS, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_STUDIO_LEVEL, x);
|
||||
set_option(LEX_STUDIO_LEVEL, REVERB_POSITION, x);
|
||||
|
||||
set_reverb_type(handle, REVERB_TYPE_LEX_ROOM);
|
||||
set_option(REVERB_TYPE, REVERB_POSITION, REVERB_TYPE_LEX_ROOM);
|
||||
for (x=0; x<=15; x++)
|
||||
set_reverb_option(handle, LEX_ROOM_PREDELAY, x);
|
||||
set_option(LEX_ROOM_PREDELAY, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_ROOM_DECAY, x);
|
||||
set_option(LEX_ROOM_DECAY, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_ROOM_LIVELINESS, x);
|
||||
set_option(LEX_ROOM_LIVELINESS, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_ROOM_LEVEL, x);
|
||||
set_option(LEX_ROOM_LEVEL, REVERB_POSITION, x);
|
||||
|
||||
set_reverb_type(handle, REVERB_TYPE_LEX_HALL);
|
||||
set_option(REVERB_TYPE, REVERB_POSITION, REVERB_TYPE_LEX_HALL);
|
||||
for (x=0; x<=15; x++)
|
||||
set_reverb_option(handle, LEX_HALL_PREDELAY, x);
|
||||
set_option(LEX_HALL_PREDELAY, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_HALL_DECAY, x);
|
||||
set_option(LEX_HALL_DECAY, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_HALL_LIVELINESS, x);
|
||||
set_option(LEX_HALL_LIVELINESS, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, LEX_HALL_LEVEL, x);
|
||||
set_option(LEX_HALL_LEVEL, REVERB_POSITION, x);
|
||||
|
||||
set_reverb_type(handle, REVERB_TYPE_EMT240_PLATE);
|
||||
set_option(REVERB_TYPE, REVERB_POSITION, REVERB_TYPE_EMT240_PLATE);
|
||||
for (x=0; x<=15; x++)
|
||||
set_reverb_option(handle, EMT240_PLATE_PREDELAY, x);
|
||||
set_option(EMT240_PLATE_PREDELAY, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, EMT240_PLATE_DECAY, x);
|
||||
set_option(EMT240_PLATE_DECAY, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, EMT240_PLATE_LIVELINESS, x);
|
||||
set_option(EMT240_PLATE_LIVELINESS, REVERB_POSITION, x);
|
||||
for (x=0; x<=99; x++)
|
||||
set_reverb_option(handle, EMT240_PLATE_LEVEL, x);
|
||||
set_option(EMT240_PLATE_LEVEL, REVERB_POSITION, x);
|
||||
|
||||
set_reverb_on_off(handle, TRUE);
|
||||
set_reverb_on_off(handle, FALSE);
|
||||
set_option(REVERB_ON_OFF, REVERB_POSITION, 1);
|
||||
set_option(REVERB_ON_OFF, REVERB_POSITION, 0);
|
||||
}
|
||||
|
||||
void test_all(struct usb_dev_handle *handle)
|
||||
void test_usb()
|
||||
{
|
||||
test_wah(handle);
|
||||
test_compressor(handle);
|
||||
test_dist(handle);
|
||||
test_presets(handle);
|
||||
test_pickups(handle);
|
||||
test_eq(handle);
|
||||
test_noisegate(handle);
|
||||
test_chorusfx(handle);
|
||||
test_delay(handle);
|
||||
test_reverb(handle);
|
||||
int x;
|
||||
|
||||
for (x=0; x<=100; x++)
|
||||
set_option(USB_AUDIO_PLAYBACK_MIX, USB_POSITION, x);
|
||||
|
||||
for (x=0; x<=36; x++)
|
||||
set_option(USB_AUDIO_LEVEL, USB_POSITION, x);
|
||||
}
|
||||
|
||||
void test_all()
|
||||
{
|
||||
test_wah();
|
||||
test_compressor();
|
||||
test_dist();
|
||||
test_presets();
|
||||
test_pickups();
|
||||
test_eq();
|
||||
test_noisegate();
|
||||
test_chorusfx();
|
||||
test_delay();
|
||||
test_reverb();
|
||||
test_usb();
|
||||
}
|
||||
|
||||
28
tests.h
28
tests.h
@@ -14,16 +14,22 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses>.
|
||||
*/
|
||||
|
||||
#ifndef GDIGI_TESTS_H
|
||||
#define GDIGI_TESTS_H
|
||||
|
||||
#include "gdigi.h"
|
||||
|
||||
void test_wah(struct usb_dev_handle *handle);
|
||||
void test_compressor(struct usb_dev_handle *handle);
|
||||
void test_dist(struct usb_dev_handle *handle);
|
||||
void test_presets(struct usb_dev_handle *handle);
|
||||
void test_pickups(struct usb_dev_handle *handle);
|
||||
void test_eq(struct usb_dev_handle *handle);
|
||||
void test_noisegate(struct usb_dev_handle *handle);
|
||||
void test_chorusfx(struct usb_dev_handle *handle);
|
||||
void test_delay(struct usb_dev_handle *handle);
|
||||
void test_reverb(struct usb_dev_handle *handle);
|
||||
void test_all(struct usb_dev_handle *handle);
|
||||
void test_wah();
|
||||
void test_compressor();
|
||||
void test_dist();
|
||||
void test_presets();
|
||||
void test_pickups();
|
||||
void test_eq();
|
||||
void test_noisegate();
|
||||
void test_chorusfx();
|
||||
void test_delay();
|
||||
void test_reverb();
|
||||
void test_usb();
|
||||
void test_all();
|
||||
|
||||
#endif /* GDIGI_TESTS_H */
|
||||
|
||||
Reference in New Issue
Block a user