viking-bloopsaphone 0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +27 -0
- data/README +172 -0
- data/c/bloopsaphone.c +596 -0
- data/c/bloopsaphone.h +154 -0
- data/c/notation.c +1656 -0
- data/c/threads.h +46 -0
- data/ext/ruby/extconf.rb +15 -0
- data/ext/ruby/rubyext.c +332 -0
- data/ext/ruby/test.rb +41 -0
- data/ext/ruby/test_load.rb +25 -0
- data/sounds/dart.blu +10 -0
- data/sounds/error.blu +13 -0
- data/sounds/ice.blu +5 -0
- data/sounds/jump.blu +8 -0
- data/sounds/pogo.blu +19 -0
- data/sounds/stun.blu +6 -0
- metadata +70 -0
data/c/bloopsaphone.h
ADDED
@@ -0,0 +1,154 @@
|
|
1
|
+
//
|
2
|
+
// bloopsaphone.h
|
3
|
+
// the chiptune maker for portaudio
|
4
|
+
//
|
5
|
+
#ifndef BLOOPSAPHONE_H
|
6
|
+
#define BLOOPSAPHONE_H
|
7
|
+
|
8
|
+
#define BLOOPSAPHONE_VERSION "1.0"
|
9
|
+
|
10
|
+
typedef enum {
|
11
|
+
BLOOPS_STOP = 0,
|
12
|
+
BLOOPS_PLAY = 1
|
13
|
+
} bloopsastate;
|
14
|
+
|
15
|
+
typedef enum {
|
16
|
+
BLOOPS_SQUARE = 0,
|
17
|
+
BLOOPS_SAWTOOTH = 1,
|
18
|
+
BLOOPS_SINE = 2,
|
19
|
+
BLOOPS_NOISE = 3
|
20
|
+
} bloopswaveform;
|
21
|
+
|
22
|
+
typedef enum {
|
23
|
+
BLOOPS_FX_VOLUME = 0,
|
24
|
+
BLOOPS_FX_PUNCH = 1,
|
25
|
+
BLOOPS_FX_ATTACK = 2,
|
26
|
+
BLOOPS_FX_SUSTAIN = 3,
|
27
|
+
BLOOPS_FX_DECAY = 4,
|
28
|
+
BLOOPS_FX_SWEEP = 5,
|
29
|
+
BLOOPS_FX_SQUARE = 6,
|
30
|
+
BLOOPS_FX_VIBE = 7,
|
31
|
+
BLOOPS_FX_VSPEED = 8,
|
32
|
+
BLOOPS_FX_VDELAY = 9,
|
33
|
+
BLOOPS_FX_LPF = 10,
|
34
|
+
BLOOPS_FX_LSWEEP = 11,
|
35
|
+
BLOOPS_FX_RESONANCE = 12,
|
36
|
+
BLOOPS_FX_HPF = 13,
|
37
|
+
BLOOPS_FX_HSWEEP = 14,
|
38
|
+
BLOOPS_FX_ARP = 15,
|
39
|
+
BLOOPS_FX_ASPEED = 16,
|
40
|
+
BLOOPS_FX_PHASE = 17,
|
41
|
+
BLOOPS_FX_PSWEEP = 18,
|
42
|
+
BLOOPS_FX_REPEAT = 19
|
43
|
+
} bloopsafxcmd;
|
44
|
+
|
45
|
+
typedef struct {
|
46
|
+
bloopswaveform type;
|
47
|
+
unsigned char pan;
|
48
|
+
float volume;
|
49
|
+
float punch;
|
50
|
+
float attack;
|
51
|
+
float sustain;
|
52
|
+
float decay;
|
53
|
+
float freq, limit, slide, dslide; // pitch
|
54
|
+
float square, sweep; // square wave
|
55
|
+
float vibe, vspeed, vdelay; // vibrato
|
56
|
+
float lpf, lsweep, resonance, hpf, hsweep;
|
57
|
+
// hi-pass, lo-pass
|
58
|
+
float arp, aspeed; // arpeggiator
|
59
|
+
float phase, psweep; // phaser
|
60
|
+
float repeat; // repeats?
|
61
|
+
} bloopsaparams;
|
62
|
+
|
63
|
+
typedef struct {
|
64
|
+
unsigned refcount;
|
65
|
+
bloopsaparams params;
|
66
|
+
} bloopsaphone;
|
67
|
+
|
68
|
+
#define BLOOPS_HI_OCTAVE 8
|
69
|
+
|
70
|
+
typedef struct bloopsafx_tag {
|
71
|
+
bloopsafxcmd cmd;
|
72
|
+
float val;
|
73
|
+
char mod;
|
74
|
+
struct bloopsafx_tag *next;
|
75
|
+
} bloopsafx;
|
76
|
+
|
77
|
+
typedef struct {
|
78
|
+
char tone, octave, duration;
|
79
|
+
bloopsafx *FX;
|
80
|
+
} bloopsanote;
|
81
|
+
|
82
|
+
typedef struct {
|
83
|
+
unsigned refcount;
|
84
|
+
int nlen, capa;
|
85
|
+
bloopsanote *notes;
|
86
|
+
bloopsaparams params;
|
87
|
+
} bloopsatrack;
|
88
|
+
|
89
|
+
typedef struct {
|
90
|
+
bloopsatrack *track;
|
91
|
+
bloopsaparams params;
|
92
|
+
int frames, nextnote[2];
|
93
|
+
float volume, freq;
|
94
|
+
bloopsastate state;
|
95
|
+
int stage, time, length[3];
|
96
|
+
double period, maxperiod, slide, dslide;
|
97
|
+
float square, sweep;
|
98
|
+
int phase, iphase, phasex;
|
99
|
+
float fphase, dphase;
|
100
|
+
float phaser[1024];
|
101
|
+
float noise[32];
|
102
|
+
float filter[8];
|
103
|
+
float vibe, vspeed, vdelay;
|
104
|
+
int repeat, limit;
|
105
|
+
double arp;
|
106
|
+
int atime, alimit;
|
107
|
+
} bloopsavoice;
|
108
|
+
|
109
|
+
#define BLOOPS_MAX_TRACKS 64
|
110
|
+
#define BLOOPS_MAX_CHANNELS 64
|
111
|
+
|
112
|
+
typedef struct {
|
113
|
+
unsigned refcount;
|
114
|
+
int tempo;
|
115
|
+
float volume;
|
116
|
+
bloopsavoice voices[BLOOPS_MAX_TRACKS];
|
117
|
+
bloopsastate state;
|
118
|
+
} bloops;
|
119
|
+
|
120
|
+
typedef struct {
|
121
|
+
bloops *B[BLOOPS_MAX_CHANNELS];
|
122
|
+
void *stream;
|
123
|
+
} bloopsmix;
|
124
|
+
|
125
|
+
//
|
126
|
+
// the api
|
127
|
+
//
|
128
|
+
bloops *bloops_new();
|
129
|
+
void bloops_ref(bloops *);
|
130
|
+
void bloops_destroy(bloops *);
|
131
|
+
|
132
|
+
void bloops_clear(bloops *);
|
133
|
+
void bloops_tempo(bloops *, int tempo);
|
134
|
+
void bloops_play(bloops *);
|
135
|
+
void bloops_stop(bloops *);
|
136
|
+
int bloops_is_done(bloops *);
|
137
|
+
|
138
|
+
bloopsatrack *bloops_track(bloops *, bloopsaphone *, char *, int);
|
139
|
+
bloopsatrack *bloops_track2(bloops *, bloopsaphone *, char *);
|
140
|
+
void bloops_track_ref(bloopsatrack *);
|
141
|
+
void bloops_track_destroy(bloopsatrack *);
|
142
|
+
|
143
|
+
bloopsaphone *bloops_square();
|
144
|
+
bloopsaphone *bloops_sound_file(bloops *, char *);
|
145
|
+
void bloops_sound_copy(bloopsaphone *, bloopsaphone const *);
|
146
|
+
void bloops_sound_ref(bloopsaphone *);
|
147
|
+
void bloops_sound_destroy(bloopsaphone *);
|
148
|
+
|
149
|
+
char *bloops_track_str(bloopsatrack *);
|
150
|
+
char *bloops_fxcmd_name(bloopsafxcmd fxcmd);
|
151
|
+
float bloops_note_freq(char, int);
|
152
|
+
char *bloops_sound_str(bloopsaphone *);
|
153
|
+
|
154
|
+
#endif
|
data/c/notation.c
ADDED
@@ -0,0 +1,1656 @@
|
|
1
|
+
#line 1 "c/notation.rl"
|
2
|
+
//
|
3
|
+
// notation.rl
|
4
|
+
// the musical notation parser
|
5
|
+
//
|
6
|
+
// (c) 2009 why the lucky stiff
|
7
|
+
// See COPYING for the license
|
8
|
+
//
|
9
|
+
#include <stdio.h>
|
10
|
+
#include <stdlib.h>
|
11
|
+
#include <string.h>
|
12
|
+
#include <math.h>
|
13
|
+
#include <sys/stat.h>
|
14
|
+
#include "bloopsaphone.h"
|
15
|
+
|
16
|
+
#define ATOI(X,N) ({ \
|
17
|
+
char *Ap = X; \
|
18
|
+
int Ai = 0; \
|
19
|
+
size_t Al = N; \
|
20
|
+
while (Al--) { \
|
21
|
+
if ((*Ap >= '0') && (*Ap <= '9')) { \
|
22
|
+
Ai = (Ai * 10) + (*Ap - '0'); \
|
23
|
+
Ap++; \
|
24
|
+
} \
|
25
|
+
else break; \
|
26
|
+
} \
|
27
|
+
Ai; \
|
28
|
+
})
|
29
|
+
|
30
|
+
#define NOTE S->notes[S->nlen]
|
31
|
+
|
32
|
+
#define NEXT() \
|
33
|
+
NOTE.duration = len; \
|
34
|
+
NOTE.octave = oct; \
|
35
|
+
mod = 0; \
|
36
|
+
tone = 0; \
|
37
|
+
len = 4; \
|
38
|
+
fxval = 0; \
|
39
|
+
fxmod = 0; \
|
40
|
+
S->nlen++
|
41
|
+
|
42
|
+
|
43
|
+
#line 44 "c/notation.c"
|
44
|
+
static const char _bloopnotes_actions[] = {
|
45
|
+
0, 1, 1, 1, 3, 1, 4, 1,
|
46
|
+
6, 1, 8, 1, 9, 1, 10, 1,
|
47
|
+
11, 1, 12, 1, 13, 1, 14, 1,
|
48
|
+
15, 1, 16, 1, 17, 1, 18, 1,
|
49
|
+
19, 1, 20, 1, 21, 1, 22, 1,
|
50
|
+
23, 1, 24, 1, 25, 1, 26, 1,
|
51
|
+
27, 1, 28, 1, 29, 1, 30, 1,
|
52
|
+
31, 1, 32, 1, 33, 1, 34, 1,
|
53
|
+
35, 1, 36, 1, 41, 2, 0, 37,
|
54
|
+
2, 0, 39, 2, 0, 40, 2, 28,
|
55
|
+
39, 2, 29, 40, 2, 35, 0, 2,
|
56
|
+
35, 5, 2, 35, 30, 2, 35, 32,
|
57
|
+
3, 1, 2, 38, 3, 3, 2, 38,
|
58
|
+
3, 30, 2, 38, 3, 32, 2, 38,
|
59
|
+
3, 35, 4, 5, 3, 35, 5, 7,
|
60
|
+
4, 35, 4, 5, 7
|
61
|
+
};
|
62
|
+
|
63
|
+
static const short _bloopnotes_key_offsets[] = {
|
64
|
+
0, 0, 8, 11, 12, 20, 27, 31,
|
65
|
+
37, 39, 43, 45, 48, 52, 54, 57,
|
66
|
+
60, 66, 70, 71, 72, 73, 74, 82,
|
67
|
+
83, 84, 85, 86, 94, 95, 96, 97,
|
68
|
+
98, 106, 108, 109, 117, 118, 119, 120,
|
69
|
+
121, 129, 131, 132, 140, 141, 142, 143,
|
70
|
+
144, 152, 155, 156, 157, 158, 166, 167,
|
71
|
+
168, 169, 170, 178, 179, 180, 181, 189,
|
72
|
+
190, 192, 193, 194, 195, 203, 204, 205,
|
73
|
+
206, 207, 208, 209, 217, 220, 221, 222,
|
74
|
+
223, 224, 232, 233, 234, 235, 236, 237,
|
75
|
+
245, 246, 247, 248, 256, 260, 261, 262,
|
76
|
+
263, 264, 272, 273, 274, 282, 283, 284,
|
77
|
+
285, 286, 294, 295, 296, 297, 298, 306,
|
78
|
+
317, 319, 322, 323, 323, 325, 328, 329,
|
79
|
+
329, 336, 341, 345, 350, 353, 354
|
80
|
+
};
|
81
|
+
|
82
|
+
static const char _bloopnotes_trans_keys[] = {
|
83
|
+
97, 100, 104, 108, 112, 114, 115, 118,
|
84
|
+
114, 115, 116, 112, 32, 43, 45, 58,
|
85
|
+
9, 13, 48, 57, 32, 43, 45, 9,
|
86
|
+
13, 48, 57, 32, 58, 9, 13, 32,
|
87
|
+
45, 9, 13, 48, 57, 48, 57, 46,
|
88
|
+
93, 48, 57, 48, 57, 93, 48, 57,
|
89
|
+
46, 93, 48, 57, 48, 57, 93, 48,
|
90
|
+
57, 45, 48, 57, 32, 58, 9, 13,
|
91
|
+
48, 57, 43, 45, 48, 57, 112, 101,
|
92
|
+
101, 100, 32, 43, 45, 58, 9, 13,
|
93
|
+
48, 57, 116, 97, 99, 107, 32, 43,
|
94
|
+
45, 58, 9, 13, 48, 57, 101, 99,
|
95
|
+
97, 121, 32, 43, 45, 58, 9, 13,
|
96
|
+
48, 57, 112, 115, 102, 32, 43, 45,
|
97
|
+
58, 9, 13, 48, 57, 119, 101, 101,
|
98
|
+
112, 32, 43, 45, 58, 9, 13, 48,
|
99
|
+
57, 112, 115, 102, 32, 43, 45, 58,
|
100
|
+
9, 13, 48, 57, 119, 101, 101, 112,
|
101
|
+
32, 43, 45, 58, 9, 13, 48, 57,
|
102
|
+
104, 115, 117, 97, 115, 101, 32, 43,
|
103
|
+
45, 58, 9, 13, 48, 57, 119, 101,
|
104
|
+
101, 112, 32, 43, 45, 58, 9, 13,
|
105
|
+
48, 57, 110, 99, 104, 32, 43, 45,
|
106
|
+
58, 9, 13, 48, 57, 101, 112, 115,
|
107
|
+
101, 97, 116, 32, 43, 45, 58, 9,
|
108
|
+
13, 48, 57, 111, 110, 97, 110, 99,
|
109
|
+
101, 32, 43, 45, 58, 9, 13, 48,
|
110
|
+
57, 113, 117, 119, 117, 97, 114, 101,
|
111
|
+
32, 43, 45, 58, 9, 13, 48, 57,
|
112
|
+
115, 116, 97, 105, 110, 32, 43, 45,
|
113
|
+
58, 9, 13, 48, 57, 101, 101, 112,
|
114
|
+
32, 43, 45, 58, 9, 13, 48, 57,
|
115
|
+
100, 105, 111, 115, 101, 108, 97, 121,
|
116
|
+
32, 43, 45, 58, 9, 13, 48, 57,
|
117
|
+
98, 101, 32, 43, 45, 58, 9, 13,
|
118
|
+
48, 57, 108, 117, 109, 101, 32, 43,
|
119
|
+
45, 58, 9, 13, 48, 57, 112, 101,
|
120
|
+
101, 100, 32, 43, 45, 58, 9, 13,
|
121
|
+
48, 57, 32, 43, 45, 9, 13, 49,
|
122
|
+
57, 65, 71, 97, 103, 49, 57, 58,
|
123
|
+
48, 57, 58, 49, 57, 58, 48, 57,
|
124
|
+
58, 58, 48, 57, 65, 71, 97, 103,
|
125
|
+
58, 65, 71, 97, 103, 65, 71, 97,
|
126
|
+
103, 35, 91, 98, 49, 56, 91, 49,
|
127
|
+
56, 91, 91, 0
|
128
|
+
};
|
129
|
+
|
130
|
+
static const char _bloopnotes_single_lengths[] = {
|
131
|
+
0, 8, 3, 1, 4, 3, 2, 2,
|
132
|
+
0, 2, 0, 1, 2, 0, 1, 1,
|
133
|
+
2, 2, 1, 1, 1, 1, 4, 1,
|
134
|
+
1, 1, 1, 4, 1, 1, 1, 1,
|
135
|
+
4, 2, 1, 4, 1, 1, 1, 1,
|
136
|
+
4, 2, 1, 4, 1, 1, 1, 1,
|
137
|
+
4, 3, 1, 1, 1, 4, 1, 1,
|
138
|
+
1, 1, 4, 1, 1, 1, 4, 1,
|
139
|
+
2, 1, 1, 1, 4, 1, 1, 1,
|
140
|
+
1, 1, 1, 4, 3, 1, 1, 1,
|
141
|
+
1, 4, 1, 1, 1, 1, 1, 4,
|
142
|
+
1, 1, 1, 4, 4, 1, 1, 1,
|
143
|
+
1, 4, 1, 1, 4, 1, 1, 1,
|
144
|
+
1, 4, 1, 1, 1, 1, 4, 3,
|
145
|
+
0, 1, 1, 0, 0, 1, 1, 0,
|
146
|
+
1, 1, 0, 3, 1, 1, 1
|
147
|
+
};
|
148
|
+
|
149
|
+
static const char _bloopnotes_range_lengths[] = {
|
150
|
+
0, 0, 0, 0, 2, 2, 1, 2,
|
151
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
152
|
+
2, 1, 0, 0, 0, 0, 2, 0,
|
153
|
+
0, 0, 0, 2, 0, 0, 0, 0,
|
154
|
+
2, 0, 0, 2, 0, 0, 0, 0,
|
155
|
+
2, 0, 0, 2, 0, 0, 0, 0,
|
156
|
+
2, 0, 0, 0, 0, 2, 0, 0,
|
157
|
+
0, 0, 2, 0, 0, 0, 2, 0,
|
158
|
+
0, 0, 0, 0, 2, 0, 0, 0,
|
159
|
+
0, 0, 0, 2, 0, 0, 0, 0,
|
160
|
+
0, 2, 0, 0, 0, 0, 0, 2,
|
161
|
+
0, 0, 0, 2, 0, 0, 0, 0,
|
162
|
+
0, 2, 0, 0, 2, 0, 0, 0,
|
163
|
+
0, 2, 0, 0, 0, 0, 2, 4,
|
164
|
+
1, 1, 0, 0, 1, 1, 0, 0,
|
165
|
+
3, 2, 2, 1, 1, 0, 0
|
166
|
+
};
|
167
|
+
|
168
|
+
static const short _bloopnotes_index_offsets[] = {
|
169
|
+
0, 0, 9, 13, 15, 22, 28, 32,
|
170
|
+
37, 39, 43, 45, 48, 52, 54, 57,
|
171
|
+
60, 65, 69, 71, 73, 75, 77, 84,
|
172
|
+
86, 88, 90, 92, 99, 101, 103, 105,
|
173
|
+
107, 114, 117, 119, 126, 128, 130, 132,
|
174
|
+
134, 141, 144, 146, 153, 155, 157, 159,
|
175
|
+
161, 168, 172, 174, 176, 178, 185, 187,
|
176
|
+
189, 191, 193, 200, 202, 204, 206, 213,
|
177
|
+
215, 218, 220, 222, 224, 231, 233, 235,
|
178
|
+
237, 239, 241, 243, 250, 254, 256, 258,
|
179
|
+
260, 262, 269, 271, 273, 275, 277, 279,
|
180
|
+
286, 288, 290, 292, 299, 304, 306, 308,
|
181
|
+
310, 312, 319, 321, 323, 330, 332, 334,
|
182
|
+
336, 338, 345, 347, 349, 351, 353, 360,
|
183
|
+
368, 370, 373, 375, 376, 378, 381, 383,
|
184
|
+
384, 389, 393, 396, 401, 404, 406
|
185
|
+
};
|
186
|
+
|
187
|
+
static const char _bloopnotes_trans_targs[] = {
|
188
|
+
2, 28, 33, 41, 49, 63, 76, 92,
|
189
|
+
111, 3, 18, 23, 111, 4, 111, 5,
|
190
|
+
6, 16, 17, 5, 12, 111, 5, 6,
|
191
|
+
16, 5, 12, 111, 7, 15, 7, 111,
|
192
|
+
7, 8, 7, 12, 111, 9, 111, 10,
|
193
|
+
126, 9, 111, 11, 111, 126, 11, 111,
|
194
|
+
13, 126, 12, 111, 14, 111, 126, 14,
|
195
|
+
111, 8, 12, 111, 7, 15, 7, 9,
|
196
|
+
111, 6, 16, 12, 111, 19, 111, 20,
|
197
|
+
111, 21, 111, 22, 111, 5, 6, 16,
|
198
|
+
17, 5, 12, 111, 24, 111, 25, 111,
|
199
|
+
26, 111, 27, 111, 5, 6, 16, 17,
|
200
|
+
5, 12, 111, 29, 111, 30, 111, 31,
|
201
|
+
111, 32, 111, 5, 6, 16, 17, 5,
|
202
|
+
12, 111, 34, 36, 111, 35, 111, 5,
|
203
|
+
6, 16, 17, 5, 12, 111, 37, 111,
|
204
|
+
38, 111, 39, 111, 40, 111, 5, 6,
|
205
|
+
16, 17, 5, 12, 111, 42, 44, 111,
|
206
|
+
43, 111, 5, 6, 16, 17, 5, 12,
|
207
|
+
111, 45, 111, 46, 111, 47, 111, 48,
|
208
|
+
111, 5, 6, 16, 17, 5, 12, 111,
|
209
|
+
50, 54, 59, 111, 51, 111, 52, 111,
|
210
|
+
53, 111, 5, 6, 16, 17, 5, 12,
|
211
|
+
111, 55, 111, 56, 111, 57, 111, 58,
|
212
|
+
111, 5, 6, 16, 17, 5, 12, 111,
|
213
|
+
60, 111, 61, 111, 62, 111, 5, 6,
|
214
|
+
16, 17, 5, 12, 111, 64, 111, 65,
|
215
|
+
69, 111, 66, 111, 67, 111, 68, 111,
|
216
|
+
5, 6, 16, 17, 5, 12, 111, 70,
|
217
|
+
111, 71, 111, 72, 111, 73, 111, 74,
|
218
|
+
111, 75, 111, 5, 6, 16, 17, 5,
|
219
|
+
12, 111, 77, 82, 88, 111, 78, 111,
|
220
|
+
79, 111, 80, 111, 81, 111, 5, 6,
|
221
|
+
16, 17, 5, 12, 111, 83, 111, 84,
|
222
|
+
111, 85, 111, 86, 111, 87, 111, 5,
|
223
|
+
6, 16, 17, 5, 12, 111, 89, 111,
|
224
|
+
90, 111, 91, 111, 5, 6, 16, 17,
|
225
|
+
5, 12, 111, 93, 98, 101, 106, 111,
|
226
|
+
94, 111, 95, 111, 96, 111, 97, 111,
|
227
|
+
5, 6, 16, 17, 5, 12, 111, 99,
|
228
|
+
111, 100, 111, 5, 6, 16, 17, 5,
|
229
|
+
12, 111, 102, 111, 103, 111, 104, 111,
|
230
|
+
105, 111, 5, 6, 16, 17, 5, 12,
|
231
|
+
111, 107, 111, 108, 111, 109, 111, 110,
|
232
|
+
111, 5, 6, 16, 17, 5, 12, 111,
|
233
|
+
111, 112, 116, 111, 120, 123, 123, 0,
|
234
|
+
113, 111, 115, 114, 111, 115, 111, 111,
|
235
|
+
117, 111, 119, 118, 111, 119, 111, 111,
|
236
|
+
122, 121, 123, 123, 111, 122, 123, 123,
|
237
|
+
111, 123, 123, 111, 124, 1, 124, 125,
|
238
|
+
111, 1, 125, 111, 1, 111, 1, 111,
|
239
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
240
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
241
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
242
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
243
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
244
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
245
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
246
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
247
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
248
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
249
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
250
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
251
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
252
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
253
|
+
111, 111, 111, 111, 111, 111, 111, 111,
|
254
|
+
111, 111, 111, 111, 111, 0
|
255
|
+
};
|
256
|
+
|
257
|
+
static const char _bloopnotes_trans_actions[] = {
|
258
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
259
|
+
67, 0, 0, 0, 67, 0, 67, 39,
|
260
|
+
39, 39, 39, 39, 39, 67, 0, 0,
|
261
|
+
0, 0, 0, 67, 55, 55, 55, 67,
|
262
|
+
0, 0, 0, 0, 67, 0, 67, 5,
|
263
|
+
120, 0, 67, 7, 67, 116, 0, 67,
|
264
|
+
5, 112, 0, 67, 7, 67, 87, 0,
|
265
|
+
67, 0, 0, 67, 55, 55, 55, 0,
|
266
|
+
67, 0, 0, 0, 67, 0, 67, 0,
|
267
|
+
67, 0, 67, 0, 67, 41, 41, 41,
|
268
|
+
41, 41, 41, 67, 0, 67, 0, 67,
|
269
|
+
0, 67, 0, 67, 13, 13, 13, 13,
|
270
|
+
13, 13, 67, 0, 67, 0, 67, 0,
|
271
|
+
67, 0, 67, 17, 17, 17, 17, 17,
|
272
|
+
17, 67, 0, 0, 67, 0, 67, 35,
|
273
|
+
35, 35, 35, 35, 35, 67, 0, 67,
|
274
|
+
0, 67, 0, 67, 0, 67, 37, 37,
|
275
|
+
37, 37, 37, 37, 67, 0, 0, 67,
|
276
|
+
0, 67, 29, 29, 29, 29, 29, 29,
|
277
|
+
67, 0, 67, 0, 67, 0, 67, 0,
|
278
|
+
67, 31, 31, 31, 31, 31, 31, 67,
|
279
|
+
0, 0, 0, 67, 0, 67, 0, 67,
|
280
|
+
0, 67, 43, 43, 43, 43, 43, 43,
|
281
|
+
67, 0, 67, 0, 67, 0, 67, 0,
|
282
|
+
67, 45, 45, 45, 45, 45, 45, 67,
|
283
|
+
0, 67, 0, 67, 0, 67, 11, 11,
|
284
|
+
11, 11, 11, 11, 67, 0, 67, 0,
|
285
|
+
0, 67, 0, 67, 0, 67, 0, 67,
|
286
|
+
47, 47, 47, 47, 47, 47, 67, 0,
|
287
|
+
67, 0, 67, 0, 67, 0, 67, 0,
|
288
|
+
67, 0, 67, 33, 33, 33, 33, 33,
|
289
|
+
33, 67, 0, 0, 0, 67, 0, 67,
|
290
|
+
0, 67, 0, 67, 0, 67, 19, 19,
|
291
|
+
19, 19, 19, 19, 67, 0, 67, 0,
|
292
|
+
67, 0, 67, 0, 67, 0, 67, 15,
|
293
|
+
15, 15, 15, 15, 15, 67, 0, 67,
|
294
|
+
0, 67, 0, 67, 21, 21, 21, 21,
|
295
|
+
21, 21, 67, 0, 0, 0, 0, 67,
|
296
|
+
0, 67, 0, 67, 0, 67, 0, 67,
|
297
|
+
27, 27, 27, 27, 27, 27, 67, 0,
|
298
|
+
67, 0, 67, 23, 23, 23, 23, 23,
|
299
|
+
23, 67, 0, 67, 0, 67, 0, 67,
|
300
|
+
0, 67, 9, 9, 9, 9, 9, 9,
|
301
|
+
67, 0, 67, 0, 67, 0, 67, 0,
|
302
|
+
67, 25, 25, 25, 25, 25, 25, 67,
|
303
|
+
65, 0, 0, 65, 0, 63, 63, 0,
|
304
|
+
49, 78, 0, 0, 72, 0, 72, 72,
|
305
|
+
51, 81, 0, 0, 75, 0, 75, 75,
|
306
|
+
0, 0, 84, 84, 69, 0, 84, 84,
|
307
|
+
69, 84, 84, 69, 93, 57, 93, 93,
|
308
|
+
108, 53, 90, 104, 1, 96, 3, 100,
|
309
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
310
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
311
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
312
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
313
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
314
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
315
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
316
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
317
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
318
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
319
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
320
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
321
|
+
67, 67, 67, 67, 67, 67, 67, 67,
|
322
|
+
67, 67, 67, 67, 67, 67, 78, 72,
|
323
|
+
72, 72, 81, 75, 75, 75, 69, 69,
|
324
|
+
69, 108, 104, 96, 100, 0
|
325
|
+
};
|
326
|
+
|
327
|
+
static const char _bloopnotes_to_state_actions[] = {
|
328
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
329
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
330
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
331
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
332
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
333
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
334
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
335
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
336
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
337
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
338
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
339
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
340
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
341
|
+
0, 0, 0, 0, 0, 0, 0, 59,
|
342
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
343
|
+
0, 0, 0, 0, 0, 0, 0
|
344
|
+
};
|
345
|
+
|
346
|
+
static const char _bloopnotes_from_state_actions[] = {
|
347
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
348
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
349
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
350
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
351
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
352
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
353
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
354
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
355
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
356
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
357
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
358
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
359
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
360
|
+
0, 0, 0, 0, 0, 0, 0, 61,
|
361
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
362
|
+
0, 0, 0, 0, 0, 0, 0
|
363
|
+
};
|
364
|
+
|
365
|
+
static const short _bloopnotes_eof_trans[] = {
|
366
|
+
0, 518, 518, 518, 518, 518, 518, 518,
|
367
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
368
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
369
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
370
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
371
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
372
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
373
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
374
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
375
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
376
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
377
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
378
|
+
518, 518, 518, 518, 518, 518, 518, 518,
|
379
|
+
518, 518, 518, 518, 518, 518, 518, 0,
|
380
|
+
519, 522, 522, 522, 523, 526, 526, 526,
|
381
|
+
529, 529, 529, 530, 531, 532, 533
|
382
|
+
};
|
383
|
+
|
384
|
+
static const int bloopnotes_start = 111;
|
385
|
+
static const int bloopnotes_error = 0;
|
386
|
+
|
387
|
+
static const int bloopnotes_en_main = 111;
|
388
|
+
|
389
|
+
#line 154 "c/notation.rl"
|
390
|
+
|
391
|
+
|
392
|
+
extern void _bloops_track_add(bloops *B, bloopsatrack *track);
|
393
|
+
|
394
|
+
bloopsatrack *
|
395
|
+
bloops_track(bloops *B, bloopsaphone *P, char *track, int tracklen)
|
396
|
+
{
|
397
|
+
int cs, act, oct = 4, len = 4;
|
398
|
+
bloopsatrack *S = (bloopsatrack *)malloc(sizeof(bloopsatrack));
|
399
|
+
char tone, mod, fxmod, *p, *pe, *pf, *ts, *te, *eof = 0;
|
400
|
+
bloopsafxcmd fxcmd = (bloopsafxcmd)0;
|
401
|
+
float fxval = 0;
|
402
|
+
|
403
|
+
S->refcount = 1;
|
404
|
+
S->nlen = 0;
|
405
|
+
S->capa = 1024;
|
406
|
+
S->notes = (bloopsanote *)calloc(sizeof(bloopsanote), 1024);
|
407
|
+
|
408
|
+
p = track;
|
409
|
+
pe = track + tracklen + 1;
|
410
|
+
|
411
|
+
|
412
|
+
#line 413 "c/notation.c"
|
413
|
+
{
|
414
|
+
cs = bloopnotes_start;
|
415
|
+
ts = 0;
|
416
|
+
te = 0;
|
417
|
+
act = 0;
|
418
|
+
}
|
419
|
+
#line 176 "c/notation.rl"
|
420
|
+
|
421
|
+
#line 422 "c/notation.c"
|
422
|
+
{
|
423
|
+
int _klen;
|
424
|
+
unsigned int _trans;
|
425
|
+
const char *_acts;
|
426
|
+
unsigned int _nacts;
|
427
|
+
const char *_keys;
|
428
|
+
|
429
|
+
if ( p == pe )
|
430
|
+
goto _test_eof;
|
431
|
+
if ( cs == 0 )
|
432
|
+
goto _out;
|
433
|
+
_resume:
|
434
|
+
_acts = _bloopnotes_actions + _bloopnotes_from_state_actions[cs];
|
435
|
+
_nacts = (unsigned int) *_acts++;
|
436
|
+
while ( _nacts-- > 0 ) {
|
437
|
+
switch ( *_acts++ ) {
|
438
|
+
case 34:
|
439
|
+
#line 1 "c/notation.rl"
|
440
|
+
{ts = p;}
|
441
|
+
break;
|
442
|
+
#line 443 "c/notation.c"
|
443
|
+
}
|
444
|
+
}
|
445
|
+
|
446
|
+
_keys = _bloopnotes_trans_keys + _bloopnotes_key_offsets[cs];
|
447
|
+
_trans = _bloopnotes_index_offsets[cs];
|
448
|
+
|
449
|
+
_klen = _bloopnotes_single_lengths[cs];
|
450
|
+
if ( _klen > 0 ) {
|
451
|
+
const char *_lower = _keys;
|
452
|
+
const char *_mid;
|
453
|
+
const char *_upper = _keys + _klen - 1;
|
454
|
+
while (1) {
|
455
|
+
if ( _upper < _lower )
|
456
|
+
break;
|
457
|
+
|
458
|
+
_mid = _lower + ((_upper-_lower) >> 1);
|
459
|
+
if ( (*p) < *_mid )
|
460
|
+
_upper = _mid - 1;
|
461
|
+
else if ( (*p) > *_mid )
|
462
|
+
_lower = _mid + 1;
|
463
|
+
else {
|
464
|
+
_trans += (_mid - _keys);
|
465
|
+
goto _match;
|
466
|
+
}
|
467
|
+
}
|
468
|
+
_keys += _klen;
|
469
|
+
_trans += _klen;
|
470
|
+
}
|
471
|
+
|
472
|
+
_klen = _bloopnotes_range_lengths[cs];
|
473
|
+
if ( _klen > 0 ) {
|
474
|
+
const char *_lower = _keys;
|
475
|
+
const char *_mid;
|
476
|
+
const char *_upper = _keys + (_klen<<1) - 2;
|
477
|
+
while (1) {
|
478
|
+
if ( _upper < _lower )
|
479
|
+
break;
|
480
|
+
|
481
|
+
_mid = _lower + (((_upper-_lower) >> 1) & ~1);
|
482
|
+
if ( (*p) < _mid[0] )
|
483
|
+
_upper = _mid - 2;
|
484
|
+
else if ( (*p) > _mid[1] )
|
485
|
+
_lower = _mid + 2;
|
486
|
+
else {
|
487
|
+
_trans += ((_mid - _keys)>>1);
|
488
|
+
goto _match;
|
489
|
+
}
|
490
|
+
}
|
491
|
+
_trans += _klen;
|
492
|
+
}
|
493
|
+
|
494
|
+
_match:
|
495
|
+
_eof_trans:
|
496
|
+
cs = _bloopnotes_trans_targs[_trans];
|
497
|
+
|
498
|
+
if ( _bloopnotes_trans_actions[_trans] == 0 )
|
499
|
+
goto _again;
|
500
|
+
|
501
|
+
_acts = _bloopnotes_actions + _bloopnotes_trans_actions[_trans];
|
502
|
+
_nacts = (unsigned int) *_acts++;
|
503
|
+
while ( _nacts-- > 0 )
|
504
|
+
{
|
505
|
+
switch ( *_acts++ )
|
506
|
+
{
|
507
|
+
case 0:
|
508
|
+
#line 44 "c/notation.rl"
|
509
|
+
{
|
510
|
+
len = ATOI(ts, p - ts);
|
511
|
+
}
|
512
|
+
break;
|
513
|
+
case 1:
|
514
|
+
#line 48 "c/notation.rl"
|
515
|
+
{
|
516
|
+
oct = ATOI(p - 1, 1);
|
517
|
+
}
|
518
|
+
break;
|
519
|
+
case 2:
|
520
|
+
#line 52 "c/notation.rl"
|
521
|
+
{
|
522
|
+
switch (tone) {
|
523
|
+
case 'a': case 'A':
|
524
|
+
if (mod == 'b') NOTE.tone = 'a';
|
525
|
+
else if (mod == '#') NOTE.tone = 'b';
|
526
|
+
else NOTE.tone = 'A';
|
527
|
+
break;
|
528
|
+
case 'b': case 'B':
|
529
|
+
if (mod == 'b') NOTE.tone = 'b';
|
530
|
+
else if (mod == '#') NOTE.tone = 'C';
|
531
|
+
else NOTE.tone = 'B';
|
532
|
+
break;
|
533
|
+
case 'c': case 'C':
|
534
|
+
if (mod == 'b') NOTE.tone = 'B';
|
535
|
+
else if (mod == '#') NOTE.tone = 'd';
|
536
|
+
else NOTE.tone = 'C';
|
537
|
+
break;
|
538
|
+
case 'd': case 'D':
|
539
|
+
if (mod == 'b') NOTE.tone = 'd';
|
540
|
+
else if (mod == '#') NOTE.tone = 'e';
|
541
|
+
else NOTE.tone = 'D';
|
542
|
+
break;
|
543
|
+
case 'e': case 'E':
|
544
|
+
if (mod == 'b') NOTE.tone = 'e';
|
545
|
+
else if (mod == '#') NOTE.tone = 'F';
|
546
|
+
else NOTE.tone = 'E';
|
547
|
+
break;
|
548
|
+
case 'f': case 'F':
|
549
|
+
if (mod == 'b') NOTE.tone = 'E';
|
550
|
+
else if (mod == '#') NOTE.tone = 'g';
|
551
|
+
else NOTE.tone = 'F';
|
552
|
+
break;
|
553
|
+
case 'g': case 'G':
|
554
|
+
if (mod == 'b') NOTE.tone = 'g';
|
555
|
+
else if (mod == '#') NOTE.tone = 'a';
|
556
|
+
else NOTE.tone = 'G';
|
557
|
+
break;
|
558
|
+
}
|
559
|
+
}
|
560
|
+
break;
|
561
|
+
case 3:
|
562
|
+
#line 92 "c/notation.rl"
|
563
|
+
{
|
564
|
+
bloopsafx *fx = (bloopsafx *)malloc(sizeof(bloopsafx));
|
565
|
+
fx->next = NOTE.FX;
|
566
|
+
fx->cmd = fxcmd;
|
567
|
+
fx->val = fxval;
|
568
|
+
fx->mod = fxmod;
|
569
|
+
fxval = fxmod = 0;
|
570
|
+
NOTE.FX = fx;
|
571
|
+
}
|
572
|
+
break;
|
573
|
+
case 4:
|
574
|
+
#line 102 "c/notation.rl"
|
575
|
+
{
|
576
|
+
fxval = atoi(p-1) * 1.0f;
|
577
|
+
}
|
578
|
+
break;
|
579
|
+
case 5:
|
580
|
+
#line 106 "c/notation.rl"
|
581
|
+
{
|
582
|
+
fxval += ATOI(pf, p - pf) * pow(0.1f, p - pf);
|
583
|
+
}
|
584
|
+
break;
|
585
|
+
case 6:
|
586
|
+
#line 110 "c/notation.rl"
|
587
|
+
{ pf = p; }
|
588
|
+
break;
|
589
|
+
case 7:
|
590
|
+
#line 111 "c/notation.rl"
|
591
|
+
{ fxval *= -1.0f; }
|
592
|
+
break;
|
593
|
+
case 8:
|
594
|
+
#line 112 "c/notation.rl"
|
595
|
+
{ fxcmd = BLOOPS_FX_VOLUME; }
|
596
|
+
break;
|
597
|
+
case 9:
|
598
|
+
#line 113 "c/notation.rl"
|
599
|
+
{ fxcmd = BLOOPS_FX_PUNCH; }
|
600
|
+
break;
|
601
|
+
case 10:
|
602
|
+
#line 114 "c/notation.rl"
|
603
|
+
{ fxcmd = BLOOPS_FX_ATTACK; }
|
604
|
+
break;
|
605
|
+
case 11:
|
606
|
+
#line 115 "c/notation.rl"
|
607
|
+
{ fxcmd = BLOOPS_FX_SUSTAIN; }
|
608
|
+
break;
|
609
|
+
case 12:
|
610
|
+
#line 116 "c/notation.rl"
|
611
|
+
{ fxcmd = BLOOPS_FX_DECAY; }
|
612
|
+
break;
|
613
|
+
case 13:
|
614
|
+
#line 117 "c/notation.rl"
|
615
|
+
{ fxcmd = BLOOPS_FX_SQUARE; }
|
616
|
+
break;
|
617
|
+
case 14:
|
618
|
+
#line 118 "c/notation.rl"
|
619
|
+
{ fxcmd = BLOOPS_FX_SWEEP; }
|
620
|
+
break;
|
621
|
+
case 15:
|
622
|
+
#line 119 "c/notation.rl"
|
623
|
+
{ fxcmd = BLOOPS_FX_VIBE; }
|
624
|
+
break;
|
625
|
+
case 16:
|
626
|
+
#line 120 "c/notation.rl"
|
627
|
+
{ fxcmd = BLOOPS_FX_VSPEED; }
|
628
|
+
break;
|
629
|
+
case 17:
|
630
|
+
#line 121 "c/notation.rl"
|
631
|
+
{ fxcmd = BLOOPS_FX_VDELAY; }
|
632
|
+
break;
|
633
|
+
case 18:
|
634
|
+
#line 122 "c/notation.rl"
|
635
|
+
{ fxcmd = BLOOPS_FX_LPF; }
|
636
|
+
break;
|
637
|
+
case 19:
|
638
|
+
#line 123 "c/notation.rl"
|
639
|
+
{ fxcmd = BLOOPS_FX_LSWEEP; }
|
640
|
+
break;
|
641
|
+
case 20:
|
642
|
+
#line 124 "c/notation.rl"
|
643
|
+
{ fxcmd = BLOOPS_FX_RESONANCE; }
|
644
|
+
break;
|
645
|
+
case 21:
|
646
|
+
#line 125 "c/notation.rl"
|
647
|
+
{ fxcmd = BLOOPS_FX_HPF; }
|
648
|
+
break;
|
649
|
+
case 22:
|
650
|
+
#line 126 "c/notation.rl"
|
651
|
+
{ fxcmd = BLOOPS_FX_HSWEEP; }
|
652
|
+
break;
|
653
|
+
case 23:
|
654
|
+
#line 127 "c/notation.rl"
|
655
|
+
{ fxcmd = BLOOPS_FX_ARP; }
|
656
|
+
break;
|
657
|
+
case 24:
|
658
|
+
#line 128 "c/notation.rl"
|
659
|
+
{ fxcmd = BLOOPS_FX_ASPEED; }
|
660
|
+
break;
|
661
|
+
case 25:
|
662
|
+
#line 129 "c/notation.rl"
|
663
|
+
{ fxcmd = BLOOPS_FX_PHASE; }
|
664
|
+
break;
|
665
|
+
case 26:
|
666
|
+
#line 130 "c/notation.rl"
|
667
|
+
{ fxcmd = BLOOPS_FX_PSWEEP; }
|
668
|
+
break;
|
669
|
+
case 27:
|
670
|
+
#line 131 "c/notation.rl"
|
671
|
+
{ fxcmd = BLOOPS_FX_REPEAT; }
|
672
|
+
break;
|
673
|
+
case 28:
|
674
|
+
#line 134 "c/notation.rl"
|
675
|
+
{ len = 1; }
|
676
|
+
break;
|
677
|
+
case 29:
|
678
|
+
#line 135 "c/notation.rl"
|
679
|
+
{ len = 1; }
|
680
|
+
break;
|
681
|
+
case 30:
|
682
|
+
#line 136 "c/notation.rl"
|
683
|
+
{ mod = p[-1]; }
|
684
|
+
break;
|
685
|
+
case 31:
|
686
|
+
#line 138 "c/notation.rl"
|
687
|
+
{ fxmod = p[-1]; }
|
688
|
+
break;
|
689
|
+
case 32:
|
690
|
+
#line 140 "c/notation.rl"
|
691
|
+
{ tone = p[-1]; }
|
692
|
+
break;
|
693
|
+
case 35:
|
694
|
+
#line 1 "c/notation.rl"
|
695
|
+
{te = p+1;}
|
696
|
+
break;
|
697
|
+
case 36:
|
698
|
+
#line 150 "c/notation.rl"
|
699
|
+
{te = p+1;}
|
700
|
+
break;
|
701
|
+
case 37:
|
702
|
+
#line 143 "c/notation.rl"
|
703
|
+
{te = p;p--;{
|
704
|
+
NOTE.tone = 0;
|
705
|
+
NEXT();
|
706
|
+
}}
|
707
|
+
break;
|
708
|
+
case 38:
|
709
|
+
#line 147 "c/notation.rl"
|
710
|
+
{te = p;p--;{ NEXT(); }}
|
711
|
+
break;
|
712
|
+
case 39:
|
713
|
+
#line 148 "c/notation.rl"
|
714
|
+
{te = p;p--;{ oct++; len = 4; }}
|
715
|
+
break;
|
716
|
+
case 40:
|
717
|
+
#line 149 "c/notation.rl"
|
718
|
+
{te = p;p--;{ oct--; len = 4; }}
|
719
|
+
break;
|
720
|
+
case 41:
|
721
|
+
#line 147 "c/notation.rl"
|
722
|
+
{{p = ((te))-1;}{ NEXT(); }}
|
723
|
+
break;
|
724
|
+
#line 725 "c/notation.c"
|
725
|
+
}
|
726
|
+
}
|
727
|
+
|
728
|
+
_again:
|
729
|
+
_acts = _bloopnotes_actions + _bloopnotes_to_state_actions[cs];
|
730
|
+
_nacts = (unsigned int) *_acts++;
|
731
|
+
while ( _nacts-- > 0 ) {
|
732
|
+
switch ( *_acts++ ) {
|
733
|
+
case 33:
|
734
|
+
#line 1 "c/notation.rl"
|
735
|
+
{ts = 0;}
|
736
|
+
break;
|
737
|
+
#line 738 "c/notation.c"
|
738
|
+
}
|
739
|
+
}
|
740
|
+
|
741
|
+
if ( cs == 0 )
|
742
|
+
goto _out;
|
743
|
+
if ( ++p != pe )
|
744
|
+
goto _resume;
|
745
|
+
_test_eof: {}
|
746
|
+
if ( p == eof )
|
747
|
+
{
|
748
|
+
if ( _bloopnotes_eof_trans[cs] > 0 ) {
|
749
|
+
_trans = _bloopnotes_eof_trans[cs] - 1;
|
750
|
+
goto _eof_trans;
|
751
|
+
}
|
752
|
+
}
|
753
|
+
|
754
|
+
_out: {}
|
755
|
+
}
|
756
|
+
#line 177 "c/notation.rl"
|
757
|
+
|
758
|
+
memcpy(&S->params, &P->params, sizeof(bloopsaparams));
|
759
|
+
|
760
|
+
_bloops_track_add(B, S);
|
761
|
+
|
762
|
+
return S;
|
763
|
+
}
|
764
|
+
|
765
|
+
bloopsatrack *
|
766
|
+
bloops_track2(bloops *B, bloopsaphone *P, char *track)
|
767
|
+
{
|
768
|
+
return bloops_track(B, P, track, strlen(track));
|
769
|
+
}
|
770
|
+
|
771
|
+
char *
|
772
|
+
bloops_track_str(bloopsatrack *track)
|
773
|
+
{
|
774
|
+
int bufsize = sizeof(char) * (track->nlen * 6 + 1024);
|
775
|
+
char *str = (char *)malloc(bufsize), *ptr = str;
|
776
|
+
int i, adv = 0;
|
777
|
+
|
778
|
+
for (i = 0; i < track->nlen; i++)
|
779
|
+
{
|
780
|
+
if (ptr - str + adv + sizeof(char) * 256 > bufsize) {
|
781
|
+
char *new_str;
|
782
|
+
bufsize += sizeof(char) * 1024;
|
783
|
+
new_str = realloc(str, bufsize);
|
784
|
+
if (new_str == NULL) {
|
785
|
+
free(str);
|
786
|
+
return NULL;
|
787
|
+
}
|
788
|
+
}
|
789
|
+
|
790
|
+
if (ptr > str)
|
791
|
+
strcat(ptr++, " ");
|
792
|
+
|
793
|
+
if (track->notes[i].duration != 4)
|
794
|
+
{
|
795
|
+
adv = sprintf(ptr, "%d:", (int)track->notes[i].duration);
|
796
|
+
ptr += adv;
|
797
|
+
}
|
798
|
+
|
799
|
+
if (track->notes[i].tone)
|
800
|
+
{
|
801
|
+
char tone[3] = "\0\0\0";
|
802
|
+
tone[0] = track->notes[i].tone;
|
803
|
+
switch (tone[0]) {
|
804
|
+
case 'a': tone[0] = 'A'; tone[1] = 'b'; break;
|
805
|
+
case 'b': tone[0] = 'B'; tone[1] = 'b'; break;
|
806
|
+
case 'd': tone[0] = 'C'; tone[1] = '#'; break;
|
807
|
+
case 'e': tone[0] = 'E'; tone[1] = 'b'; break;
|
808
|
+
case 'g': tone[0] = 'F'; tone[1] = '#'; break;
|
809
|
+
}
|
810
|
+
adv = sprintf(ptr, "%s", tone);
|
811
|
+
ptr += adv;
|
812
|
+
|
813
|
+
adv = sprintf(ptr, "%d", (int)track->notes[i].octave);
|
814
|
+
ptr += adv;
|
815
|
+
bloopsafx *fx = (bloopsafx *)track->notes[i].FX;
|
816
|
+
while (fx) {
|
817
|
+
if (fx->mod == 0)
|
818
|
+
adv = sprintf(ptr, "[%s %0.3f]", bloops_fxcmd_name(fx->cmd), fx->val);
|
819
|
+
else
|
820
|
+
adv = sprintf(ptr, "[%s %c %0.3f]", bloops_fxcmd_name(fx->cmd), fx->mod, fx->val);
|
821
|
+
ptr += adv;
|
822
|
+
fx = (bloopsafx *)fx->next;
|
823
|
+
}
|
824
|
+
}
|
825
|
+
}
|
826
|
+
|
827
|
+
return str;
|
828
|
+
}
|
829
|
+
|
830
|
+
char *
|
831
|
+
bloops_fxcmd_name(bloopsafxcmd fxcmd) {
|
832
|
+
char *fxname = "\0";
|
833
|
+
switch (fxcmd) {
|
834
|
+
case BLOOPS_FX_VOLUME: fxname = "volume"; break;
|
835
|
+
case BLOOPS_FX_PUNCH: fxname = "punch"; break;
|
836
|
+
case BLOOPS_FX_ATTACK: fxname = "attack"; break;
|
837
|
+
case BLOOPS_FX_SUSTAIN: fxname = "sustain"; break;
|
838
|
+
case BLOOPS_FX_DECAY: fxname = "decay"; break;
|
839
|
+
case BLOOPS_FX_SQUARE: fxname = "square"; break;
|
840
|
+
case BLOOPS_FX_SWEEP: fxname = "sweep"; break;
|
841
|
+
case BLOOPS_FX_VIBE: fxname = "vibe"; break;
|
842
|
+
case BLOOPS_FX_VSPEED: fxname = "vspeed"; break;
|
843
|
+
case BLOOPS_FX_VDELAY: fxname = "vdelay"; break;
|
844
|
+
case BLOOPS_FX_LPF: fxname = "lpf"; break;
|
845
|
+
case BLOOPS_FX_LSWEEP: fxname = "lsweep"; break;
|
846
|
+
case BLOOPS_FX_RESONANCE: fxname = "resonance"; break;
|
847
|
+
case BLOOPS_FX_HPF: fxname = "hpf"; break;
|
848
|
+
case BLOOPS_FX_HSWEEP: fxname = "hsweep"; break;
|
849
|
+
case BLOOPS_FX_ARP: fxname = "arp"; break;
|
850
|
+
case BLOOPS_FX_ASPEED: fxname = "aspeed"; break;
|
851
|
+
case BLOOPS_FX_PHASE: fxname = "phase"; break;
|
852
|
+
case BLOOPS_FX_PSWEEP: fxname = "psweep"; break;
|
853
|
+
case BLOOPS_FX_REPEAT: fxname = "repeat"; break;
|
854
|
+
}
|
855
|
+
return fxname;
|
856
|
+
}
|
857
|
+
|
858
|
+
float
|
859
|
+
bloops_note_freq(char note, int octave)
|
860
|
+
{
|
861
|
+
switch (note)
|
862
|
+
{
|
863
|
+
case 'A': // A
|
864
|
+
if (octave <= 0) return 0.0;
|
865
|
+
else if (octave == 1) return 0.121;
|
866
|
+
else if (octave == 2) return 0.175;
|
867
|
+
else if (octave == 3) return 0.248;
|
868
|
+
else if (octave == 4) return 0.353;
|
869
|
+
else if (octave == 5) return 0.500;
|
870
|
+
break;
|
871
|
+
|
872
|
+
case 'b': // A# or Bb
|
873
|
+
if (octave <= 0) return 0.0;
|
874
|
+
else if (octave == 1) return 0.125;
|
875
|
+
else if (octave == 2) return 0.181;
|
876
|
+
else if (octave == 3) return 0.255;
|
877
|
+
else if (octave == 4) return 0.364;
|
878
|
+
else if (octave == 5) return 0.515;
|
879
|
+
break;
|
880
|
+
|
881
|
+
case 'B': // B
|
882
|
+
if (octave <= 0) return 0.0;
|
883
|
+
else if (octave == 1) return 0.129;
|
884
|
+
else if (octave == 2) return 0.187;
|
885
|
+
else if (octave == 3) return 0.263;
|
886
|
+
else if (octave == 4) return 0.374;
|
887
|
+
else if (octave == 5) return 0.528;
|
888
|
+
break;
|
889
|
+
|
890
|
+
case 'C': // C
|
891
|
+
if (octave <= 1) return 0.0;
|
892
|
+
else if (octave == 2) return 0.133;
|
893
|
+
else if (octave == 3) return 0.192;
|
894
|
+
else if (octave == 4) return 0.271;
|
895
|
+
else if (octave == 5) return 0.385;
|
896
|
+
else if (octave == 6) return 0.544;
|
897
|
+
break;
|
898
|
+
|
899
|
+
case 'd': // C# or Db
|
900
|
+
if (octave <= 1) return 0.0;
|
901
|
+
else if (octave == 2) return 0.138;
|
902
|
+
else if (octave == 3) return 0.198;
|
903
|
+
else if (octave == 4) return 0.279;
|
904
|
+
else if (octave == 5) return 0.395;
|
905
|
+
else if (octave == 6) return 0.559;
|
906
|
+
break;
|
907
|
+
|
908
|
+
case 'D': // D
|
909
|
+
if (octave <= 1) return 0.0;
|
910
|
+
else if (octave == 2) return 0.143;
|
911
|
+
else if (octave == 3) return 0.202;
|
912
|
+
else if (octave == 4) return 0.287;
|
913
|
+
else if (octave == 5) return 0.406;
|
914
|
+
else if (octave == 6) return 0.575;
|
915
|
+
break;
|
916
|
+
|
917
|
+
case 'e': // D# or Eb
|
918
|
+
if (octave <= 1) return 0.0;
|
919
|
+
else if (octave == 2) return 0.148;
|
920
|
+
else if (octave == 3) return 0.208;
|
921
|
+
else if (octave == 4) return 0.296;
|
922
|
+
else if (octave == 5) return 0.418;
|
923
|
+
else if (octave == 6) return 0.593;
|
924
|
+
break;
|
925
|
+
|
926
|
+
case 'E': // E
|
927
|
+
if (octave <= 1) return 0.0;
|
928
|
+
else if (octave == 2) return 0.152;
|
929
|
+
else if (octave == 3) return 0.214;
|
930
|
+
else if (octave == 4) return 0.305;
|
931
|
+
else if (octave == 5) return 0.429;
|
932
|
+
else if (octave == 6) return 0.608;
|
933
|
+
break;
|
934
|
+
|
935
|
+
case 'F': // F
|
936
|
+
if (octave <= 1) return 0.0;
|
937
|
+
else if (octave == 2) return 0.155;
|
938
|
+
else if (octave == 3) return 0.220;
|
939
|
+
else if (octave == 4) return 0.314;
|
940
|
+
else if (octave == 5) return 0.441;
|
941
|
+
break;
|
942
|
+
|
943
|
+
case 'g': // F# or Gb
|
944
|
+
if (octave <= 1) return 0.0;
|
945
|
+
else if (octave == 2) return 0.160;
|
946
|
+
else if (octave == 3) return 0.227;
|
947
|
+
else if (octave == 4) return 0.323;
|
948
|
+
else if (octave == 5) return 0.454;
|
949
|
+
break;
|
950
|
+
|
951
|
+
case 'G': // G
|
952
|
+
if (octave <= 1) return 0.0;
|
953
|
+
else if (octave == 2) return 0.164;
|
954
|
+
else if (octave == 3) return 0.234;
|
955
|
+
else if (octave == 4) return 0.332;
|
956
|
+
else if (octave == 5) return 0.468;
|
957
|
+
break;
|
958
|
+
|
959
|
+
case 'a': // G# or Ab
|
960
|
+
if (octave <= 1) return 0.117;
|
961
|
+
else if (octave == 2) return 0.170;
|
962
|
+
else if (octave == 3) return 0.242;
|
963
|
+
else if (octave == 4) return 0.343;
|
964
|
+
else if (octave == 5) return 0.485;
|
965
|
+
break;
|
966
|
+
}
|
967
|
+
|
968
|
+
return 0.0;
|
969
|
+
}
|
970
|
+
|
971
|
+
#define KEY(name) key = (void *)&P->params.name
|
972
|
+
|
973
|
+
|
974
|
+
#line 975 "c/notation.c"
|
975
|
+
static const char _bloopserial_actions[] = {
|
976
|
+
0, 1, 0, 1, 1, 1, 2, 1,
|
977
|
+
5, 1, 6, 1, 7, 1, 8, 1,
|
978
|
+
9, 1, 10, 1, 11, 1, 12, 1,
|
979
|
+
13, 1, 14, 1, 15, 1, 16, 1,
|
980
|
+
17, 1, 18, 1, 19, 1, 20, 1,
|
981
|
+
21, 1, 22, 1, 23, 1, 24, 1,
|
982
|
+
25, 1, 26, 1, 27, 1, 29, 1,
|
983
|
+
30, 1, 31, 1, 32, 1, 33, 1,
|
984
|
+
34, 1, 35, 1, 36, 2, 1, 3,
|
985
|
+
2, 1, 35, 2, 4, 28, 3, 1,
|
986
|
+
3, 35
|
987
|
+
};
|
988
|
+
|
989
|
+
static const unsigned char _bloopserial_key_offsets[] = {
|
990
|
+
0, 0, 3, 4, 7, 13, 15, 18,
|
991
|
+
20, 23, 25, 26, 27, 28, 29, 32,
|
992
|
+
33, 34, 35, 36, 39, 41, 42, 43,
|
993
|
+
44, 47, 48, 49, 50, 51, 54, 55,
|
994
|
+
56, 57, 60, 62, 63, 66, 67, 68,
|
995
|
+
69, 70, 73, 76, 77, 78, 79, 82,
|
996
|
+
83, 86, 87, 88, 89, 90, 93, 96,
|
997
|
+
97, 98, 99, 102, 103, 104, 105, 106,
|
998
|
+
109, 110, 111, 112, 115, 116, 118, 119,
|
999
|
+
120, 121, 124, 125, 126, 127, 128, 129,
|
1000
|
+
130, 133, 137, 138, 139, 140, 143, 144,
|
1001
|
+
145, 146, 147, 150, 151, 152, 153, 154,
|
1002
|
+
155, 158, 159, 160, 161, 164, 165, 166,
|
1003
|
+
167, 170, 175, 176, 177, 178, 179, 182,
|
1004
|
+
183, 184, 185, 186, 187, 188, 189, 190,
|
1005
|
+
191, 192, 193, 194, 198, 199, 200, 201,
|
1006
|
+
202, 205, 206, 207, 210, 211, 212, 213,
|
1007
|
+
214, 217, 218, 219, 220, 221, 224, 237,
|
1008
|
+
240, 245, 248
|
1009
|
+
};
|
1010
|
+
|
1011
|
+
static const char _bloopserial_trans_keys[] = {
|
1012
|
+
114, 115, 116, 112, 32, 9, 13, 32,
|
1013
|
+
45, 9, 13, 48, 57, 48, 57, 46,
|
1014
|
+
48, 57, 48, 57, 46, 48, 57, 48,
|
1015
|
+
57, 112, 101, 101, 100, 32, 9, 13,
|
1016
|
+
116, 97, 99, 107, 32, 9, 13, 101,
|
1017
|
+
115, 99, 97, 121, 32, 9, 13, 108,
|
1018
|
+
105, 100, 101, 32, 9, 13, 114, 101,
|
1019
|
+
113, 32, 9, 13, 112, 115, 102, 32,
|
1020
|
+
9, 13, 119, 101, 101, 112, 32, 9,
|
1021
|
+
13, 105, 112, 115, 109, 105, 116, 32,
|
1022
|
+
9, 13, 102, 32, 9, 13, 119, 101,
|
1023
|
+
101, 112, 32, 9, 13, 104, 115, 117,
|
1024
|
+
97, 115, 101, 32, 9, 13, 119, 101,
|
1025
|
+
101, 112, 32, 9, 13, 110, 99, 104,
|
1026
|
+
32, 9, 13, 101, 112, 115, 101, 97,
|
1027
|
+
116, 32, 9, 13, 111, 110, 97, 110,
|
1028
|
+
99, 101, 32, 9, 13, 108, 113, 117,
|
1029
|
+
119, 105, 100, 101, 32, 9, 13, 117,
|
1030
|
+
97, 114, 101, 32, 9, 13, 115, 116,
|
1031
|
+
97, 105, 110, 32, 9, 13, 101, 101,
|
1032
|
+
112, 32, 9, 13, 121, 112, 101, 32,
|
1033
|
+
9, 13, 32, 110, 115, 9, 13, 111,
|
1034
|
+
105, 115, 101, 97, 105, 113, 119, 116,
|
1035
|
+
111, 111, 116, 104, 110, 101, 117, 97,
|
1036
|
+
114, 101, 100, 105, 111, 115, 101, 108,
|
1037
|
+
97, 121, 32, 9, 13, 98, 101, 32,
|
1038
|
+
9, 13, 108, 117, 109, 101, 32, 9,
|
1039
|
+
13, 112, 101, 101, 100, 32, 9, 13,
|
1040
|
+
32, 97, 100, 102, 104, 108, 112, 114,
|
1041
|
+
115, 116, 118, 9, 13, 32, 9, 13,
|
1042
|
+
32, 9, 13, 48, 57, 32, 9, 13,
|
1043
|
+
32, 9, 13, 48, 57, 0
|
1044
|
+
};
|
1045
|
+
|
1046
|
+
static const char _bloopserial_single_lengths[] = {
|
1047
|
+
0, 3, 1, 1, 2, 0, 1, 0,
|
1048
|
+
1, 0, 1, 1, 1, 1, 1, 1,
|
1049
|
+
1, 1, 1, 1, 2, 1, 1, 1,
|
1050
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
1051
|
+
1, 1, 2, 1, 1, 1, 1, 1,
|
1052
|
+
1, 1, 3, 1, 1, 1, 1, 1,
|
1053
|
+
1, 1, 1, 1, 1, 1, 3, 1,
|
1054
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
1055
|
+
1, 1, 1, 1, 1, 2, 1, 1,
|
1056
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
1057
|
+
1, 4, 1, 1, 1, 1, 1, 1,
|
1058
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
1059
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
1060
|
+
1, 3, 1, 1, 1, 1, 3, 1,
|
1061
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
1062
|
+
1, 1, 1, 4, 1, 1, 1, 1,
|
1063
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
1064
|
+
1, 1, 1, 1, 1, 1, 11, 1,
|
1065
|
+
1, 1, 1
|
1066
|
+
};
|
1067
|
+
|
1068
|
+
static const char _bloopserial_range_lengths[] = {
|
1069
|
+
0, 0, 0, 1, 2, 1, 1, 1,
|
1070
|
+
1, 1, 0, 0, 0, 0, 1, 0,
|
1071
|
+
0, 0, 0, 1, 0, 0, 0, 0,
|
1072
|
+
1, 0, 0, 0, 0, 1, 0, 0,
|
1073
|
+
0, 1, 0, 0, 1, 0, 0, 0,
|
1074
|
+
0, 1, 0, 0, 0, 0, 1, 0,
|
1075
|
+
1, 0, 0, 0, 0, 1, 0, 0,
|
1076
|
+
0, 0, 1, 0, 0, 0, 0, 1,
|
1077
|
+
0, 0, 0, 1, 0, 0, 0, 0,
|
1078
|
+
0, 1, 0, 0, 0, 0, 0, 0,
|
1079
|
+
1, 0, 0, 0, 0, 1, 0, 0,
|
1080
|
+
0, 0, 1, 0, 0, 0, 0, 0,
|
1081
|
+
1, 0, 0, 0, 1, 0, 0, 0,
|
1082
|
+
1, 1, 0, 0, 0, 0, 0, 0,
|
1083
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1084
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1085
|
+
1, 0, 0, 1, 0, 0, 0, 0,
|
1086
|
+
1, 0, 0, 0, 0, 1, 1, 1,
|
1087
|
+
2, 1, 2
|
1088
|
+
};
|
1089
|
+
|
1090
|
+
static const short _bloopserial_index_offsets[] = {
|
1091
|
+
0, 0, 4, 6, 9, 14, 16, 19,
|
1092
|
+
21, 24, 26, 28, 30, 32, 34, 37,
|
1093
|
+
39, 41, 43, 45, 48, 51, 53, 55,
|
1094
|
+
57, 60, 62, 64, 66, 68, 71, 73,
|
1095
|
+
75, 77, 80, 83, 85, 88, 90, 92,
|
1096
|
+
94, 96, 99, 103, 105, 107, 109, 112,
|
1097
|
+
114, 117, 119, 121, 123, 125, 128, 132,
|
1098
|
+
134, 136, 138, 141, 143, 145, 147, 149,
|
1099
|
+
152, 154, 156, 158, 161, 163, 166, 168,
|
1100
|
+
170, 172, 175, 177, 179, 181, 183, 185,
|
1101
|
+
187, 190, 195, 197, 199, 201, 204, 206,
|
1102
|
+
208, 210, 212, 215, 217, 219, 221, 223,
|
1103
|
+
225, 228, 230, 232, 234, 237, 239, 241,
|
1104
|
+
243, 246, 251, 253, 255, 257, 259, 263,
|
1105
|
+
265, 267, 269, 271, 273, 275, 277, 279,
|
1106
|
+
281, 283, 285, 287, 292, 294, 296, 298,
|
1107
|
+
300, 303, 305, 307, 310, 312, 314, 316,
|
1108
|
+
318, 321, 323, 325, 327, 329, 332, 345,
|
1109
|
+
348, 352, 355
|
1110
|
+
};
|
1111
|
+
|
1112
|
+
static const unsigned char _bloopserial_trans_targs[] = {
|
1113
|
+
2, 10, 15, 0, 3, 0, 4, 4,
|
1114
|
+
0, 4, 5, 4, 8, 0, 6, 0,
|
1115
|
+
7, 6, 0, 144, 0, 9, 8, 0,
|
1116
|
+
146, 0, 11, 0, 12, 0, 13, 0,
|
1117
|
+
14, 0, 4, 4, 0, 16, 0, 17,
|
1118
|
+
0, 18, 0, 19, 0, 4, 4, 0,
|
1119
|
+
21, 25, 0, 22, 0, 23, 0, 24,
|
1120
|
+
0, 4, 4, 0, 26, 0, 27, 0,
|
1121
|
+
28, 0, 29, 0, 4, 4, 0, 31,
|
1122
|
+
0, 32, 0, 33, 0, 4, 4, 0,
|
1123
|
+
35, 37, 0, 36, 0, 4, 4, 0,
|
1124
|
+
38, 0, 39, 0, 40, 0, 41, 0,
|
1125
|
+
4, 4, 0, 43, 47, 49, 0, 44,
|
1126
|
+
0, 45, 0, 46, 0, 4, 4, 0,
|
1127
|
+
48, 0, 4, 4, 0, 50, 0, 51,
|
1128
|
+
0, 52, 0, 53, 0, 4, 4, 0,
|
1129
|
+
55, 59, 64, 0, 56, 0, 57, 0,
|
1130
|
+
58, 0, 4, 4, 0, 60, 0, 61,
|
1131
|
+
0, 62, 0, 63, 0, 4, 4, 0,
|
1132
|
+
65, 0, 66, 0, 67, 0, 4, 4,
|
1133
|
+
0, 69, 0, 70, 74, 0, 71, 0,
|
1134
|
+
72, 0, 73, 0, 4, 4, 0, 75,
|
1135
|
+
0, 76, 0, 77, 0, 78, 0, 79,
|
1136
|
+
0, 80, 0, 4, 4, 0, 82, 86,
|
1137
|
+
91, 97, 0, 83, 0, 84, 0, 85,
|
1138
|
+
0, 4, 4, 0, 87, 0, 88, 0,
|
1139
|
+
89, 0, 90, 0, 4, 4, 0, 92,
|
1140
|
+
0, 93, 0, 94, 0, 95, 0, 96,
|
1141
|
+
0, 4, 4, 0, 98, 0, 99, 0,
|
1142
|
+
100, 0, 4, 4, 0, 102, 0, 103,
|
1143
|
+
0, 104, 0, 105, 105, 0, 105, 106,
|
1144
|
+
110, 105, 0, 107, 0, 108, 0, 109,
|
1145
|
+
0, 142, 0, 111, 117, 119, 0, 112,
|
1146
|
+
0, 113, 0, 114, 0, 115, 0, 116,
|
1147
|
+
0, 142, 0, 118, 0, 142, 0, 120,
|
1148
|
+
0, 121, 0, 122, 0, 142, 0, 124,
|
1149
|
+
129, 132, 137, 0, 125, 0, 126, 0,
|
1150
|
+
127, 0, 128, 0, 4, 4, 0, 130,
|
1151
|
+
0, 131, 0, 4, 4, 0, 133, 0,
|
1152
|
+
134, 0, 135, 0, 136, 0, 4, 4,
|
1153
|
+
0, 138, 0, 139, 0, 140, 0, 141,
|
1154
|
+
0, 4, 4, 0, 143, 1, 20, 30,
|
1155
|
+
34, 42, 54, 68, 81, 101, 123, 143,
|
1156
|
+
0, 143, 143, 142, 145, 145, 144, 142,
|
1157
|
+
145, 145, 142, 145, 145, 146, 142, 142,
|
1158
|
+
142, 142, 142, 0
|
1159
|
+
};
|
1160
|
+
|
1161
|
+
static const char _bloopserial_trans_actions[] = {
|
1162
|
+
0, 0, 0, 0, 0, 0, 7, 7,
|
1163
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1164
|
+
1, 0, 0, 5, 0, 1, 0, 0,
|
1165
|
+
5, 0, 0, 0, 0, 0, 0, 0,
|
1166
|
+
0, 0, 9, 9, 0, 0, 0, 0,
|
1167
|
+
0, 0, 0, 0, 0, 11, 11, 0,
|
1168
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1169
|
+
0, 13, 13, 0, 0, 0, 0, 0,
|
1170
|
+
0, 0, 0, 0, 15, 15, 0, 0,
|
1171
|
+
0, 0, 0, 0, 0, 17, 17, 0,
|
1172
|
+
0, 0, 0, 0, 0, 19, 19, 0,
|
1173
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1174
|
+
21, 21, 0, 0, 0, 0, 0, 0,
|
1175
|
+
0, 0, 0, 0, 0, 23, 23, 0,
|
1176
|
+
0, 0, 25, 25, 0, 0, 0, 0,
|
1177
|
+
0, 0, 0, 0, 0, 27, 27, 0,
|
1178
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1179
|
+
0, 0, 29, 29, 0, 0, 0, 0,
|
1180
|
+
0, 0, 0, 0, 0, 31, 31, 0,
|
1181
|
+
0, 0, 0, 0, 0, 0, 45, 45,
|
1182
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1183
|
+
0, 0, 0, 0, 33, 33, 0, 0,
|
1184
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1185
|
+
0, 0, 0, 35, 35, 0, 0, 0,
|
1186
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1187
|
+
0, 37, 37, 0, 0, 0, 0, 0,
|
1188
|
+
0, 0, 0, 0, 39, 39, 0, 0,
|
1189
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1190
|
+
0, 41, 41, 0, 0, 0, 0, 0,
|
1191
|
+
0, 0, 43, 43, 0, 0, 0, 0,
|
1192
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1193
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1194
|
+
0, 63, 0, 0, 0, 0, 0, 0,
|
1195
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1196
|
+
0, 59, 0, 0, 0, 61, 0, 0,
|
1197
|
+
0, 0, 0, 0, 0, 57, 0, 0,
|
1198
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1199
|
+
0, 0, 0, 0, 51, 51, 0, 0,
|
1200
|
+
0, 0, 0, 47, 47, 0, 0, 0,
|
1201
|
+
0, 0, 0, 0, 0, 0, 75, 75,
|
1202
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1203
|
+
0, 49, 49, 0, 0, 0, 0, 0,
|
1204
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1205
|
+
0, 0, 0, 67, 69, 69, 0, 78,
|
1206
|
+
0, 0, 65, 3, 3, 0, 72, 67,
|
1207
|
+
78, 65, 72, 0
|
1208
|
+
};
|
1209
|
+
|
1210
|
+
static const char _bloopserial_to_state_actions[] = {
|
1211
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1212
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1213
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1214
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1215
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1216
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1217
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1218
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1219
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1220
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1221
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1222
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1223
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1224
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1225
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1226
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1227
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1228
|
+
0, 0, 0, 0, 0, 0, 53, 0,
|
1229
|
+
0, 0, 0
|
1230
|
+
};
|
1231
|
+
|
1232
|
+
static const char _bloopserial_from_state_actions[] = {
|
1233
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1234
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1235
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1236
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1237
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1238
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1239
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1240
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1241
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1242
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1243
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1244
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1245
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1246
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1247
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1248
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1249
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1250
|
+
0, 0, 0, 0, 0, 0, 55, 0,
|
1251
|
+
0, 0, 0
|
1252
|
+
};
|
1253
|
+
|
1254
|
+
static const short _bloopserial_eof_trans[] = {
|
1255
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1256
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1257
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1258
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1259
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1260
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1261
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1262
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1263
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1264
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1265
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1266
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1267
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1268
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1269
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1270
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1271
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
1272
|
+
0, 0, 0, 0, 0, 0, 0, 360,
|
1273
|
+
361, 362, 363
|
1274
|
+
};
|
1275
|
+
|
1276
|
+
static const int bloopserial_start = 142;
|
1277
|
+
static const int bloopserial_error = 0;
|
1278
|
+
|
1279
|
+
static const int bloopserial_en_main = 142;
|
1280
|
+
|
1281
|
+
#line 446 "c/notation.rl"
|
1282
|
+
|
1283
|
+
|
1284
|
+
bloopsaphone *
|
1285
|
+
bloops_sound_file(bloops *B, char *fname)
|
1286
|
+
{
|
1287
|
+
FILE *fp;
|
1288
|
+
struct stat stats;
|
1289
|
+
int cs, act, len;
|
1290
|
+
float fval;
|
1291
|
+
void *key;
|
1292
|
+
char *str, *p, *pe, *pf, *ts, *te, *eof = 0;
|
1293
|
+
bloopsaphone *P;
|
1294
|
+
|
1295
|
+
if (stat(fname, &stats) == -1)
|
1296
|
+
return NULL;
|
1297
|
+
|
1298
|
+
fp = fopen(fname, "rb");
|
1299
|
+
if (!fp)
|
1300
|
+
return NULL;
|
1301
|
+
|
1302
|
+
len = stats.st_size;
|
1303
|
+
str = (char *)malloc(stats.st_size + 1);
|
1304
|
+
if (fread(str, 1, stats.st_size, fp) != stats.st_size)
|
1305
|
+
goto done;
|
1306
|
+
|
1307
|
+
p = str;
|
1308
|
+
pe = str + len + 1;
|
1309
|
+
p[len] = '\0';
|
1310
|
+
|
1311
|
+
P = bloops_square();
|
1312
|
+
|
1313
|
+
#line 1314 "c/notation.c"
|
1314
|
+
{
|
1315
|
+
cs = bloopserial_start;
|
1316
|
+
ts = 0;
|
1317
|
+
te = 0;
|
1318
|
+
act = 0;
|
1319
|
+
}
|
1320
|
+
#line 477 "c/notation.rl"
|
1321
|
+
|
1322
|
+
#line 1323 "c/notation.c"
|
1323
|
+
{
|
1324
|
+
int _klen;
|
1325
|
+
unsigned int _trans;
|
1326
|
+
const char *_acts;
|
1327
|
+
unsigned int _nacts;
|
1328
|
+
const char *_keys;
|
1329
|
+
|
1330
|
+
if ( p == pe )
|
1331
|
+
goto _test_eof;
|
1332
|
+
if ( cs == 0 )
|
1333
|
+
goto _out;
|
1334
|
+
_resume:
|
1335
|
+
_acts = _bloopserial_actions + _bloopserial_from_state_actions[cs];
|
1336
|
+
_nacts = (unsigned int) *_acts++;
|
1337
|
+
while ( _nacts-- > 0 ) {
|
1338
|
+
switch ( *_acts++ ) {
|
1339
|
+
case 30:
|
1340
|
+
#line 1 "c/notation.rl"
|
1341
|
+
{ts = p;}
|
1342
|
+
break;
|
1343
|
+
#line 1344 "c/notation.c"
|
1344
|
+
}
|
1345
|
+
}
|
1346
|
+
|
1347
|
+
_keys = _bloopserial_trans_keys + _bloopserial_key_offsets[cs];
|
1348
|
+
_trans = _bloopserial_index_offsets[cs];
|
1349
|
+
|
1350
|
+
_klen = _bloopserial_single_lengths[cs];
|
1351
|
+
if ( _klen > 0 ) {
|
1352
|
+
const char *_lower = _keys;
|
1353
|
+
const char *_mid;
|
1354
|
+
const char *_upper = _keys + _klen - 1;
|
1355
|
+
while (1) {
|
1356
|
+
if ( _upper < _lower )
|
1357
|
+
break;
|
1358
|
+
|
1359
|
+
_mid = _lower + ((_upper-_lower) >> 1);
|
1360
|
+
if ( (*p) < *_mid )
|
1361
|
+
_upper = _mid - 1;
|
1362
|
+
else if ( (*p) > *_mid )
|
1363
|
+
_lower = _mid + 1;
|
1364
|
+
else {
|
1365
|
+
_trans += (_mid - _keys);
|
1366
|
+
goto _match;
|
1367
|
+
}
|
1368
|
+
}
|
1369
|
+
_keys += _klen;
|
1370
|
+
_trans += _klen;
|
1371
|
+
}
|
1372
|
+
|
1373
|
+
_klen = _bloopserial_range_lengths[cs];
|
1374
|
+
if ( _klen > 0 ) {
|
1375
|
+
const char *_lower = _keys;
|
1376
|
+
const char *_mid;
|
1377
|
+
const char *_upper = _keys + (_klen<<1) - 2;
|
1378
|
+
while (1) {
|
1379
|
+
if ( _upper < _lower )
|
1380
|
+
break;
|
1381
|
+
|
1382
|
+
_mid = _lower + (((_upper-_lower) >> 1) & ~1);
|
1383
|
+
if ( (*p) < _mid[0] )
|
1384
|
+
_upper = _mid - 2;
|
1385
|
+
else if ( (*p) > _mid[1] )
|
1386
|
+
_lower = _mid + 2;
|
1387
|
+
else {
|
1388
|
+
_trans += ((_mid - _keys)>>1);
|
1389
|
+
goto _match;
|
1390
|
+
}
|
1391
|
+
}
|
1392
|
+
_trans += _klen;
|
1393
|
+
}
|
1394
|
+
|
1395
|
+
_match:
|
1396
|
+
_eof_trans:
|
1397
|
+
cs = _bloopserial_trans_targs[_trans];
|
1398
|
+
|
1399
|
+
if ( _bloopserial_trans_actions[_trans] == 0 )
|
1400
|
+
goto _again;
|
1401
|
+
|
1402
|
+
_acts = _bloopserial_actions + _bloopserial_trans_actions[_trans];
|
1403
|
+
_nacts = (unsigned int) *_acts++;
|
1404
|
+
while ( _nacts-- > 0 )
|
1405
|
+
{
|
1406
|
+
switch ( *_acts++ )
|
1407
|
+
{
|
1408
|
+
case 0:
|
1409
|
+
#line 400 "c/notation.rl"
|
1410
|
+
{
|
1411
|
+
fval = ATOI(ts, p - ts) * 1.0f;
|
1412
|
+
}
|
1413
|
+
break;
|
1414
|
+
case 1:
|
1415
|
+
#line 404 "c/notation.rl"
|
1416
|
+
{
|
1417
|
+
fval = ATOI(pf, p - pf) * pow(0.1f, p - pf);
|
1418
|
+
}
|
1419
|
+
break;
|
1420
|
+
case 2:
|
1421
|
+
#line 408 "c/notation.rl"
|
1422
|
+
{ pf = p; }
|
1423
|
+
break;
|
1424
|
+
case 3:
|
1425
|
+
#line 409 "c/notation.rl"
|
1426
|
+
{ fval *= -1.0f; }
|
1427
|
+
break;
|
1428
|
+
case 4:
|
1429
|
+
#line 410 "c/notation.rl"
|
1430
|
+
{ KEY(volume); }
|
1431
|
+
break;
|
1432
|
+
case 5:
|
1433
|
+
#line 411 "c/notation.rl"
|
1434
|
+
{ KEY(arp); }
|
1435
|
+
break;
|
1436
|
+
case 6:
|
1437
|
+
#line 412 "c/notation.rl"
|
1438
|
+
{ KEY(aspeed); }
|
1439
|
+
break;
|
1440
|
+
case 7:
|
1441
|
+
#line 413 "c/notation.rl"
|
1442
|
+
{ KEY(attack); }
|
1443
|
+
break;
|
1444
|
+
case 8:
|
1445
|
+
#line 414 "c/notation.rl"
|
1446
|
+
{ KEY(decay); }
|
1447
|
+
break;
|
1448
|
+
case 9:
|
1449
|
+
#line 415 "c/notation.rl"
|
1450
|
+
{ KEY(dslide); }
|
1451
|
+
break;
|
1452
|
+
case 10:
|
1453
|
+
#line 416 "c/notation.rl"
|
1454
|
+
{ KEY(freq); }
|
1455
|
+
break;
|
1456
|
+
case 11:
|
1457
|
+
#line 417 "c/notation.rl"
|
1458
|
+
{ KEY(hpf); }
|
1459
|
+
break;
|
1460
|
+
case 12:
|
1461
|
+
#line 418 "c/notation.rl"
|
1462
|
+
{ KEY(hsweep); }
|
1463
|
+
break;
|
1464
|
+
case 13:
|
1465
|
+
#line 419 "c/notation.rl"
|
1466
|
+
{ KEY(limit); }
|
1467
|
+
break;
|
1468
|
+
case 14:
|
1469
|
+
#line 420 "c/notation.rl"
|
1470
|
+
{ KEY(lpf); }
|
1471
|
+
break;
|
1472
|
+
case 15:
|
1473
|
+
#line 421 "c/notation.rl"
|
1474
|
+
{ KEY(lsweep); }
|
1475
|
+
break;
|
1476
|
+
case 16:
|
1477
|
+
#line 422 "c/notation.rl"
|
1478
|
+
{ KEY(phase); }
|
1479
|
+
break;
|
1480
|
+
case 17:
|
1481
|
+
#line 423 "c/notation.rl"
|
1482
|
+
{ KEY(psweep); }
|
1483
|
+
break;
|
1484
|
+
case 18:
|
1485
|
+
#line 424 "c/notation.rl"
|
1486
|
+
{ KEY(repeat); }
|
1487
|
+
break;
|
1488
|
+
case 19:
|
1489
|
+
#line 425 "c/notation.rl"
|
1490
|
+
{ KEY(resonance); }
|
1491
|
+
break;
|
1492
|
+
case 20:
|
1493
|
+
#line 426 "c/notation.rl"
|
1494
|
+
{ KEY(slide); }
|
1495
|
+
break;
|
1496
|
+
case 21:
|
1497
|
+
#line 427 "c/notation.rl"
|
1498
|
+
{ KEY(square); }
|
1499
|
+
break;
|
1500
|
+
case 22:
|
1501
|
+
#line 428 "c/notation.rl"
|
1502
|
+
{ KEY(sustain); }
|
1503
|
+
break;
|
1504
|
+
case 23:
|
1505
|
+
#line 429 "c/notation.rl"
|
1506
|
+
{ KEY(sweep); }
|
1507
|
+
break;
|
1508
|
+
case 24:
|
1509
|
+
#line 430 "c/notation.rl"
|
1510
|
+
{ KEY(punch); }
|
1511
|
+
break;
|
1512
|
+
case 25:
|
1513
|
+
#line 431 "c/notation.rl"
|
1514
|
+
{ KEY(vibe); }
|
1515
|
+
break;
|
1516
|
+
case 26:
|
1517
|
+
#line 432 "c/notation.rl"
|
1518
|
+
{ KEY(vspeed); }
|
1519
|
+
break;
|
1520
|
+
case 27:
|
1521
|
+
#line 433 "c/notation.rl"
|
1522
|
+
{ KEY(vdelay); }
|
1523
|
+
break;
|
1524
|
+
case 28:
|
1525
|
+
#line 434 "c/notation.rl"
|
1526
|
+
{ KEY(volume); }
|
1527
|
+
break;
|
1528
|
+
case 31:
|
1529
|
+
#line 438 "c/notation.rl"
|
1530
|
+
{te = p+1;{ P->params.type = BLOOPS_SQUARE; }}
|
1531
|
+
break;
|
1532
|
+
case 32:
|
1533
|
+
#line 439 "c/notation.rl"
|
1534
|
+
{te = p+1;{ P->params.type = BLOOPS_SAWTOOTH; }}
|
1535
|
+
break;
|
1536
|
+
case 33:
|
1537
|
+
#line 440 "c/notation.rl"
|
1538
|
+
{te = p+1;{ P->params.type = BLOOPS_SINE; }}
|
1539
|
+
break;
|
1540
|
+
case 34:
|
1541
|
+
#line 441 "c/notation.rl"
|
1542
|
+
{te = p+1;{ P->params.type = BLOOPS_NOISE; }}
|
1543
|
+
break;
|
1544
|
+
case 35:
|
1545
|
+
#line 437 "c/notation.rl"
|
1546
|
+
{te = p;p--;{ *((float *)key) = fval; }}
|
1547
|
+
break;
|
1548
|
+
case 36:
|
1549
|
+
#line 442 "c/notation.rl"
|
1550
|
+
{te = p;p--;}
|
1551
|
+
break;
|
1552
|
+
#line 1553 "c/notation.c"
|
1553
|
+
}
|
1554
|
+
}
|
1555
|
+
|
1556
|
+
_again:
|
1557
|
+
_acts = _bloopserial_actions + _bloopserial_to_state_actions[cs];
|
1558
|
+
_nacts = (unsigned int) *_acts++;
|
1559
|
+
while ( _nacts-- > 0 ) {
|
1560
|
+
switch ( *_acts++ ) {
|
1561
|
+
case 29:
|
1562
|
+
#line 1 "c/notation.rl"
|
1563
|
+
{ts = 0;}
|
1564
|
+
break;
|
1565
|
+
#line 1566 "c/notation.c"
|
1566
|
+
}
|
1567
|
+
}
|
1568
|
+
|
1569
|
+
if ( cs == 0 )
|
1570
|
+
goto _out;
|
1571
|
+
if ( ++p != pe )
|
1572
|
+
goto _resume;
|
1573
|
+
_test_eof: {}
|
1574
|
+
if ( p == eof )
|
1575
|
+
{
|
1576
|
+
if ( _bloopserial_eof_trans[cs] > 0 ) {
|
1577
|
+
_trans = _bloopserial_eof_trans[cs] - 1;
|
1578
|
+
goto _eof_trans;
|
1579
|
+
}
|
1580
|
+
}
|
1581
|
+
|
1582
|
+
_out: {}
|
1583
|
+
}
|
1584
|
+
#line 478 "c/notation.rl"
|
1585
|
+
|
1586
|
+
done:
|
1587
|
+
fclose(fp);
|
1588
|
+
return P;
|
1589
|
+
}
|
1590
|
+
|
1591
|
+
char *
|
1592
|
+
bloops_sound_str(bloopsaphone *P)
|
1593
|
+
{
|
1594
|
+
char *lines = (char *)malloc(4096), *str = lines;
|
1595
|
+
bloopsaphone *sq = bloops_square();
|
1596
|
+
if (P->params.type == BLOOPS_SQUARE)
|
1597
|
+
str += sprintf(str, "type square\n");
|
1598
|
+
else if (P->params.type == BLOOPS_SAWTOOTH)
|
1599
|
+
str += sprintf(str, "type sawtooth\n");
|
1600
|
+
else if (P->params.type == BLOOPS_SINE)
|
1601
|
+
str += sprintf(str, "type sine\n");
|
1602
|
+
else if (P->params.type == BLOOPS_NOISE)
|
1603
|
+
str += sprintf(str, "type noise\n");
|
1604
|
+
|
1605
|
+
if (P->params.volume != sq->params.volume)
|
1606
|
+
str += sprintf(str, "volume %0.3f\n", P->params.volume);
|
1607
|
+
if (P->params.punch != sq->params.punch)
|
1608
|
+
str += sprintf(str, "punch %0.3f\n", P->params.punch);
|
1609
|
+
if (P->params.attack != sq->params.attack)
|
1610
|
+
str += sprintf(str, "attack %0.3f\n", P->params.attack);
|
1611
|
+
if (P->params.sustain != sq->params.sustain)
|
1612
|
+
str += sprintf(str, "sustain %0.3f\n", P->params.sustain);
|
1613
|
+
if (P->params.decay != sq->params.decay)
|
1614
|
+
str += sprintf(str, "decay %0.3f\n", P->params.decay);
|
1615
|
+
if (P->params.freq != sq->params.freq)
|
1616
|
+
str += sprintf(str, "freq %0.3f\n", P->params.freq);
|
1617
|
+
if (P->params.limit != sq->params.limit)
|
1618
|
+
str += sprintf(str, "limit %0.3f\n", P->params.limit);
|
1619
|
+
if (P->params.slide != sq->params.slide)
|
1620
|
+
str += sprintf(str, "slide %0.3f\n", P->params.slide);
|
1621
|
+
if (P->params.dslide != sq->params.dslide)
|
1622
|
+
str += sprintf(str, "dslide %0.3f\n", P->params.dslide);
|
1623
|
+
if (P->params.square != sq->params.square)
|
1624
|
+
str += sprintf(str, "square %0.3f\n", P->params.square);
|
1625
|
+
if (P->params.sweep != sq->params.sweep)
|
1626
|
+
str += sprintf(str, "sweep %0.3f\n", P->params.sweep);
|
1627
|
+
if (P->params.vibe != sq->params.vibe)
|
1628
|
+
str += sprintf(str, "vibe %0.3f\n", P->params.vibe);
|
1629
|
+
if (P->params.vspeed != sq->params.vspeed)
|
1630
|
+
str += sprintf(str, "vspeed %0.3f\n", P->params.vspeed);
|
1631
|
+
if (P->params.vdelay != sq->params.vdelay)
|
1632
|
+
str += sprintf(str, "vdelay %0.3f\n", P->params.vdelay);
|
1633
|
+
if (P->params.lpf != sq->params.lpf)
|
1634
|
+
str += sprintf(str, "lpf %0.3f\n", P->params.lpf);
|
1635
|
+
if (P->params.lsweep != sq->params.lsweep)
|
1636
|
+
str += sprintf(str, "lsweep %0.3f\n", P->params.lsweep);
|
1637
|
+
if (P->params.resonance != sq->params.resonance)
|
1638
|
+
str += sprintf(str, "resonance %0.3f\n", P->params.resonance);
|
1639
|
+
if (P->params.hpf != sq->params.hpf)
|
1640
|
+
str += sprintf(str, "hpf %0.3f\n", P->params.hpf);
|
1641
|
+
if (P->params.hsweep != sq->params.hsweep)
|
1642
|
+
str += sprintf(str, "hsweep %0.3f\n", P->params.hsweep);
|
1643
|
+
if (P->params.arp != sq->params.arp)
|
1644
|
+
str += sprintf(str, "arp %0.3f\n", P->params.arp);
|
1645
|
+
if (P->params.aspeed != sq->params.aspeed)
|
1646
|
+
str += sprintf(str, "aspeed %0.3f\n", P->params.aspeed);
|
1647
|
+
if (P->params.phase != sq->params.phase)
|
1648
|
+
str += sprintf(str, "phase %0.3f\n", P->params.phase);
|
1649
|
+
if (P->params.psweep != sq->params.psweep)
|
1650
|
+
str += sprintf(str, "psweep %0.3f\n", P->params.psweep);
|
1651
|
+
if (P->params.repeat != sq->params.repeat)
|
1652
|
+
str += sprintf(str, "repeat %0.3f\n", P->params.repeat);
|
1653
|
+
|
1654
|
+
bloops_sound_destroy(sq);
|
1655
|
+
return lines;
|
1656
|
+
}
|