Skip to content

Latest commit

 

History

History
168 lines (141 loc) · 3.83 KB

instrum.h

File metadata and controls

168 lines (141 loc) · 3.83 KB
 
Oct 21, 1999
Oct 21, 1999
1
2
3
4
5
/*
TiMidity -- Experimental MIDI to WAVE converter
Copyright (C) 1995 Tuukka Toivonen <toivonen@clinet.fi>
This program is free software; you can redistribute it and/or modify
Dec 31, 2011
Dec 31, 2011
6
7
it under the terms of the Perl Artistic License, available in COPYING.
*/
Oct 21, 1999
Oct 21, 1999
8
Aug 21, 2004
Aug 21, 2004
9
Oct 21, 1999
Oct 21, 1999
10
11
12
13
typedef struct {
int32
loop_start, loop_end, data_length,
sample_rate, low_freq, high_freq, root_freq;
Aug 21, 2004
Aug 21, 2004
14
15
uint8
root_tune, fine_tune;
Oct 21, 1999
Oct 21, 1999
16
int32
Aug 21, 2004
Aug 21, 2004
17
18
19
20
21
envelope_rate[7], envelope_offset[7],
modulation_rate[7], modulation_offset[7];
FLOAT_T
volume, resonance,
modEnvToFilterFc, modEnvToPitch, modLfoToFilterFc;
Oct 21, 1999
Oct 21, 1999
22
23
24
sample_t *data;
int32
tremolo_sweep_increment, tremolo_phase_increment,
Aug 21, 2004
Aug 21, 2004
25
26
27
lfo_sweep_increment, lfo_phase_increment,
vibrato_sweep_increment, vibrato_control_ratio,
cutoff_freq;
Oct 21, 1999
Oct 21, 1999
28
uint8
Aug 21, 2004
Aug 21, 2004
29
reverberation, chorusdepth,
Oct 21, 1999
Oct 21, 1999
30
31
tremolo_depth, vibrato_depth,
modes;
Aug 21, 2004
Aug 21, 2004
32
33
uint8
attenuation, freq_center;
Oct 21, 1999
Oct 21, 1999
34
int8
Aug 21, 2004
Aug 21, 2004
35
36
37
38
39
40
panning, note_to_use, exclusiveClass;
int16
scale_tuning, keyToModEnvHold, keyToModEnvDecay,
keyToVolEnvHold, keyToVolEnvDecay;
int32
freq_scale, vibrato_delay;
Oct 21, 1999
Oct 21, 1999
41
42
43
44
45
46
47
48
49
50
} Sample;
/* Bits in modes: */
#define MODES_16BIT (1<<0)
#define MODES_UNSIGNED (1<<1)
#define MODES_LOOPING (1<<2)
#define MODES_PINGPONG (1<<3)
#define MODES_REVERSE (1<<4)
#define MODES_SUSTAIN (1<<5)
#define MODES_ENVELOPE (1<<6)
Aug 21, 2004
Aug 21, 2004
51
#define MODES_FAST_RELEASE (1<<7)
Oct 21, 1999
Oct 21, 1999
52
Aug 21, 2004
Aug 21, 2004
53
#if 0
Oct 21, 1999
Oct 21, 1999
54
55
56
57
typedef struct {
int samples;
Sample *sample;
} Instrument;
Aug 21, 2004
Aug 21, 2004
58
59
60
61
#endif
#define INST_GUS 0
#define INST_SF2 1
Oct 21, 1999
Oct 21, 1999
62
63
typedef struct {
Aug 21, 2004
Aug 21, 2004
64
65
66
67
68
69
70
71
72
73
74
75
76
77
int type;
int samples;
Sample *sample;
int left_samples;
Sample *left_sample;
int right_samples;
Sample *right_sample;
unsigned char *contents;
} Instrument;
typedef struct _InstrumentLayer {
uint8 lo, hi;
int size;
Oct 21, 1999
Oct 21, 1999
78
Instrument *instrument;
Aug 21, 2004
Aug 21, 2004
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
struct _InstrumentLayer *next;
} InstrumentLayer;
struct cfg_type {
int font_code;
int num;
const char *name;
};
#define FONT_NORMAL 0
#define FONT_FFF 1
#define FONT_SBK 2
#define FONT_TONESET 3
#define FONT_DRUMSET 4
#define FONT_PRESET 5
typedef struct {
char *name;
InstrumentLayer *layer;
int font_type, sf_ix, last_used, tuning;
Oct 21, 1999
Oct 21, 1999
100
101
102
int note, amp, pan, strip_loop, strip_envelope, strip_tail;
} ToneBankElement;
Aug 21, 2004
Aug 21, 2004
103
104
105
106
107
108
109
#if 0
typedef struct {
char *name;
Instrument *instrument;
int note, amp, pan, strip_loop, strip_envelope, strip_tail;
} ToneBankElement;
#endif
Oct 21, 1999
Oct 21, 1999
110
111
/* A hack to delay instrument loading until after reading the
entire MIDI file. */
Aug 21, 2004
Aug 21, 2004
112
#define MAGIC_LOAD_INSTRUMENT ((InstrumentLayer *)(-1))
Oct 21, 1999
Oct 21, 1999
113
Aug 21, 2004
Aug 21, 2004
114
115
116
117
118
119
120
121
#define MAXPROG 128
#define MAXBANK 130
#define SFXBANK (MAXBANK-1)
#define SFXDRUM1 (MAXBANK-2)
#define SFXDRUM2 (MAXBANK-1)
#define XGDRUM 1
#if 0
Oct 21, 1999
Oct 21, 1999
122
123
124
typedef struct {
ToneBankElement tone[128];
} ToneBank;
Aug 21, 2004
Aug 21, 2004
125
126
127
128
129
130
131
132
133
#endif
typedef struct {
char *name;
ToneBankElement tone[MAXPROG];
} ToneBank;
extern char *sf_file;
Oct 21, 1999
Oct 21, 1999
134
135
136
extern ToneBank *tonebank[], *drumset[];
Aug 21, 2004
Aug 21, 2004
137
#if 0
Oct 21, 1999
Oct 21, 1999
138
extern Instrument *default_instrument;
Aug 21, 2004
Aug 21, 2004
139
140
#endif
extern InstrumentLayer *default_instrument;
Oct 21, 1999
Oct 21, 1999
141
142
143
144
145
146
147
148
149
extern int default_program;
extern int antialiasing_allowed;
extern int fast_decay;
extern int free_instruments_afterwards;
#define SPECIAL_PROGRAM -1
extern int load_missing_instruments(void);
extern void free_instruments(void);
Aug 21, 2004
Aug 21, 2004
150
extern void end_soundfont(void);
Oct 10, 2009
Oct 10, 2009
151
extern int set_default_instrument(const char *name);
Oct 21, 1999
Oct 21, 1999
152
Aug 21, 2004
Aug 21, 2004
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
extern int32 convert_tremolo_sweep(uint8 sweep);
extern int32 convert_vibrato_sweep(uint8 sweep, int32 vib_control_ratio);
extern int32 convert_tremolo_rate(uint8 rate);
extern int32 convert_vibrato_rate(uint8 rate);
extern int init_soundfont(char *fname, int oldbank, int newbank, int level);
extern InstrumentLayer *load_sbk_patch(const char *name, int gm_num, int bank, int percussion,
int panning, int amp, int note_to_use, int sf_ix);
extern int current_tune_number;
extern int max_patch_memory;
extern int current_patch_memory;
#define XMAPMAX 800
extern int xmap[XMAPMAX][5];
extern void pcmap(int *b, int *v, int *p, int *drums);