LMMS
Loading...
Searching...
No Matches
Blip_Buffer.h
Go to the documentation of this file.
1// Band-limited sound synthesis buffer
2
3// Blip_Buffer 0.4.1
4#ifndef BLIP_BUFFER_H
5#define BLIP_BUFFER_H
6
7 // internal
8 #include <limits.h>
9 #if INT_MAX < 0x7FFFFFFF
10 #error "int must be at least 32 bits"
11 #endif
12
13 typedef int blip_long;
14 typedef unsigned blip_ulong;
15
16// Time unit at source clock rate
18
19// Output samples are 16-bit signed, with a range of -32768 to 32767
20typedef short blip_sample_t;
21enum { blip_sample_max = 32767 };
22
24public:
25 typedef const char* blargg_err_t;
26
27 // Set output sample rate and buffer length in milliseconds (1/1000 sec, defaults
28 // to 1/4 second), then clear buffer. Returns NULL on success, otherwise if there
29 // isn't enough memory, returns error without affecting current buffer setup.
30 blargg_err_t set_sample_rate( long samples_per_sec, int msec_length = 1000 / 4 );
31
32 // Set number of source time units per second
33 void clock_rate( long );
34
35 // End current time frame of specified duration and make its samples available
36 // (along with any still-unread samples) for reading with read_samples(). Begins
37 // a new time frame at the end of the current frame.
38 void end_frame( blip_time_t time );
39
40 // Read at most 'max_samples' out of buffer into 'dest', removing them from from
41 // the buffer. Returns number of samples actually read and removed. If stereo is
42 // true, increments 'dest' one extra time after writing each sample, to allow
43 // easy interleving of two channels into a stereo output buffer.
44 long read_samples( blip_sample_t* dest, long max_samples, int stereo = 0 );
45
46// Additional optional features
47
48 // Current output sample rate
49 long sample_rate() const;
50
51 // Length of buffer, in milliseconds
52 int length() const;
53
54 // Number of source time units per second
55 long clock_rate() const;
56
57 // Set frequency high-pass filter frequency, where higher values reduce bass more
58 void bass_freq( int frequency );
59
60 // Number of samples delay from synthesis to samples read out
61 int output_latency() const;
62
63 // Remove all available samples and clear buffer to silence. If 'entire_buffer' is
64 // false, just clears out any samples waiting rather than the entire buffer.
65 void clear( int entire_buffer = 1 );
66
67 // Number of samples available for reading with read_samples()
68 long samples_avail() const;
69
70 // Remove 'count' samples from those waiting to be read
71 void remove_samples( long count );
72
73// Experimental features
74
75 // Count number of clocks needed until 'count' samples will be available.
76 // If buffer can't even hold 'count' samples, returns number of clocks until
77 // buffer becomes full.
78 blip_time_t count_clocks( long count ) const;
79
80 // Number of raw samples that can be mixed within frame of specified duration.
81 long count_samples( blip_time_t duration ) const;
82
83 // Mix 'count' samples from 'buf' into buffer.
84 void mix_samples( blip_sample_t const* buf, long count );
85
86 // not documented yet
87 void set_modified() { modified_ = 1; }
88 int clear_modified() { int b = modified_; modified_ = 0; return b; }
90 void remove_silence( long count );
94public:
97
98 Blip_Buffer(Blip_Buffer &&) = default;
99
100 // Deprecated
103 blargg_err_t sample_rate( long r, int msec ) { return set_sample_rate( r, msec ); }
104private:
105 // noncopyable
108public:
116private:
122 friend class Blip_Reader;
123};
124
125#ifdef HAVE_CONFIG_H
126 #include "config.h"
127#endif
128
129// Number of bits in resample ratio fraction. Higher values give a more accurate ratio
130// but reduce maximum buffer size.
131#ifndef BLIP_BUFFER_ACCURACY
132 #define BLIP_BUFFER_ACCURACY 16
133#endif
134
135// Number bits in phase offset. Fewer than 6 bits (64 phase offsets) results in
136// noticeable broadband noise when synthesizing high frequency square waves.
137// Affects size of Blip_Synth objects since they store the waveform directly.
138#ifndef BLIP_PHASE_BITS
139 #if BLIP_BUFFER_FAST
140 #define BLIP_PHASE_BITS 8
141 #else
142 #define BLIP_PHASE_BITS 6
143 #endif
144#endif
145
146 // Internal
148 int const blip_widest_impulse_ = 16;
150 int const blip_res = 1 << BLIP_PHASE_BITS;
151 class blip_eq_t;
152
154 public:
158
159 void volume_unit( double );
161 void treble_eq( blip_eq_t const& ) { }
162 };
163
165 public:
169
170 void volume_unit( double );
171 Blip_Synth_( short* impulses, int width );
172 void treble_eq( blip_eq_t const& );
173 private:
175 short* const impulses;
176 int const width;
178 int impulses_size() const { return blip_res / 2 * width + 1; }
179 void adjust_impulse();
180 };
181
182// Quality level. Start with blip_good_quality.
183const int blip_med_quality = 8;
184const int blip_good_quality = 12;
185const int blip_high_quality = 16;
186
187// Range specifies the greatest expected change in amplitude. Calculate it
188// by finding the difference between the maximum and minimum expected
189// amplitudes (max - min).
190template<int quality,int range>
192public:
193 // Set overall volume of waveform
194 void volume( double v ) { impl.volume_unit( v * (1.0 / (range < 0 ? -range : range)) ); }
195
196 // Configure low-pass filter (see blip_buffer.txt)
197 void treble_eq( blip_eq_t const& eq ) { impl.treble_eq( eq ); }
198
199 // Get/set Blip_Buffer used for output
200 Blip_Buffer* output() const { return impl.buf; }
201 void output( Blip_Buffer* b ) { impl.buf = b; impl.last_amp = 0; }
202
203 // Update amplitude of waveform at given time. Using this requires a separate
204 // Blip_Synth for each waveform.
205 void update( blip_time_t time, int amplitude );
206
207// Low-level interface
208
209 // Add an amplitude transition of specified delta, optionally into specified buffer
210 // rather than the one set with output(). Delta can be positive or negative.
211 // The actual change in amplitude is delta * (volume / range)
212 void offset( blip_time_t, int delta, Blip_Buffer* ) const;
213 void offset( blip_time_t t, int delta ) const { offset( t, delta, impl.buf ); }
214
215 // Works directly in terms of fractional output samples. Contact author for more info.
217
218 // Same as offset(), except code is inlined for higher performance
219 void offset_inline( blip_time_t t, int delta, Blip_Buffer* buf ) const {
220 offset_resampled( t * buf->factor_ + buf->offset_, delta, buf );
221 }
222 void offset_inline( blip_time_t t, int delta ) const {
223 offset_resampled( t * impl.buf->factor_ + impl.buf->offset_, delta, impl.buf );
224 }
225
226private:
227#if BLIP_BUFFER_FAST
229#else
231 typedef short imp_t;
233public:
235#endif
236};
237
238// Low-pass equalization parameters
240public:
241 // Logarithmic rolloff to treble dB at half sampling rate. Negative values reduce
242 // treble, small positive values (0 to 5.0) increase treble.
243 blip_eq_t( double treble_db = 0 );
244
245 // See blip_buffer.txt
246 blip_eq_t( double treble, long rolloff_freq, long sample_rate, long cutoff_freq = 0 );
247
248private:
249 double treble;
253 void generate( float* out, int count ) const;
254 friend class Blip_Synth_;
255};
256
257int const blip_sample_bits = 30;
258
259// Dummy Blip_Buffer to direct sound output to, for easy muting without
260// having to stop sound code.
263public:
264 // The following cannot be used (an assertion will fail if attempted):
265 blargg_err_t set_sample_rate( long samples_per_sec, int msec_length );
267 void mix_samples( blip_sample_t const* buf, long count );
268
270};
271
272 #if defined (__GNUC__) || _MSC_VER >= 1100
273 #define BLIP_RESTRICT __restrict
274 #else
275 #define BLIP_RESTRICT
276 #endif
277
278// Optimized reading from Blip_Buffer, for use in custom sample output
279
280// Begin reading from buffer. Name should be unique to the current block.
281#define BLIP_READER_BEGIN( name, blip_buffer ) \
282 const Blip_Buffer::buf_t_* BLIP_RESTRICT name##_reader_buf = (blip_buffer).buffer_;\
283 blip_long name##_reader_accum = (blip_buffer).reader_accum_
284
285// Get value to pass to BLIP_READER_NEXT()
286#define BLIP_READER_BASS( blip_buffer ) ((blip_buffer).bass_shift_)
287
288// Constant value to use instead of BLIP_READER_BASS(), for slightly more optimal
289// code at the cost of having no bass control
291
292// Current sample
293#define BLIP_READER_READ( name ) (name##_reader_accum >> (blip_sample_bits - 16))
294
295// Current raw sample in full internal resolution
296#define BLIP_READER_READ_RAW( name ) (name##_reader_accum)
297
298// Advance to next sample
299#define BLIP_READER_NEXT( name, bass ) \
300 (void) (name##_reader_accum += *name##_reader_buf++ - (name##_reader_accum >> (bass)))
301
302// End reading samples from buffer. The number of samples read must now be removed
303// using Blip_Buffer::remove_samples().
304#define BLIP_READER_END( name, blip_buffer ) \
305 (void) ((blip_buffer).reader_accum_ = name##_reader_accum)
306
307
308// Compatibility with older version
309const long blip_unscaled = 65535;
312
313// Deprecated; use BLIP_READER macros as follows:
314// Blip_Reader r; r.begin( buf ); -> BLIP_READER_BEGIN( r, buf );
315// int bass = r.begin( buf ) -> BLIP_READER_BEGIN( r, buf ); int bass = BLIP_READER_BASS( buf );
316// r.read() -> BLIP_READER_READ( r )
317// r.read_raw() -> BLIP_READER_READ_RAW( r )
318// r.next( bass ) -> BLIP_READER_NEXT( r, bass )
319// r.next() -> BLIP_READER_NEXT( r, blip_reader_default_bass )
320// r.end( buf ) -> BLIP_READER_END( r, buf )
322public:
323 int begin( Blip_Buffer& );
324 blip_long read() const { return accum >> (blip_sample_bits - 16); }
325 blip_long read_raw() const { return accum; }
326 void next( int bass_shift = 9 ) { accum += *buf++ - (accum >> bass_shift); }
327 void end( Blip_Buffer& b ) { b.reader_accum_ = accum; }
328
329private:
332};
333
334// End of public interface
335
336#include <assert.h>
337
338template<int quality,int range>
340 int delta, Blip_Buffer* blip_buf ) const
341{
342 // Fails if time is beyond end of Blip_Buffer, due to a bug in caller code or the
343 // need for a longer buffer as set by set_sample_rate().
344 assert( (blip_long) (time >> BLIP_BUFFER_ACCURACY) < blip_buf->buffer_size_ );
345 delta *= impl.delta_factor;
346 blip_long* BLIP_RESTRICT buf = blip_buf->buffer_ + (time >> BLIP_BUFFER_ACCURACY);
347 int phase = (int) (time >> (BLIP_BUFFER_ACCURACY - BLIP_PHASE_BITS) & (blip_res - 1));
348
349#if BLIP_BUFFER_FAST
350 blip_long left = buf [0] + delta;
351
352 // Kind of crappy, but doing shift after multiply results in overflow.
353 // Alternate way of delaying multiply by delta_factor results in worse
354 // sub-sample resolution.
355 blip_long right = (delta >> BLIP_PHASE_BITS) * phase;
356 left -= right;
357 right += buf [1];
358
359 buf [0] = left;
360 buf [1] = right;
361#else
362
363 int const fwd = (blip_widest_impulse_ - quality) / 2;
364 int const rev = fwd + quality - 2;
365 int const mid = quality / 2 - 1;
366
367 imp_t const* BLIP_RESTRICT imp = impulses + blip_res - phase;
368
369 #if defined (_M_IX86) || defined (_M_IA64) || defined (__i486__) || \
370 defined (__x86_64__) || defined (__ia64__) || defined (__i386__)
371
372 // straight forward implementation resulted in better code on GCC for x86
373
374 #define ADD_IMP( out, in ) \
375 buf [out] += (blip_long) imp [blip_res * (in)] * delta
376
377 #define BLIP_FWD( i ) {\
378 ADD_IMP( fwd + i, i );\
379 ADD_IMP( fwd + 1 + i, i + 1 );\
380 }
381 #define BLIP_REV( r ) {\
382 ADD_IMP( rev - r, r + 1 );\
383 ADD_IMP( rev + 1 - r, r );\
384 }
385
386 BLIP_FWD( 0 )
387 if ( quality > 8 ) BLIP_FWD( 2 )
388 if ( quality > 12 ) BLIP_FWD( 4 )
389 {
390 ADD_IMP( fwd + mid - 1, mid - 1 );
391 ADD_IMP( fwd + mid , mid );
392 imp = impulses + phase;
393 }
394 if ( quality > 12 ) BLIP_REV( 6 )
395 if ( quality > 8 ) BLIP_REV( 4 )
396 BLIP_REV( 2 )
397
398 ADD_IMP( rev , 1 );
399 ADD_IMP( rev + 1, 0 );
400
401 #else
402
403 // for RISC processors, help compiler by reading ahead of writes
404
405 #define BLIP_FWD( i ) {\
406 blip_long t0 = i0 * delta + buf [fwd + i];\
407 blip_long t1 = imp [blip_res * (i + 1)] * delta + buf [fwd + 1 + i];\
408 i0 = imp [blip_res * (i + 2)];\
409 buf [fwd + i] = t0;\
410 buf [fwd + 1 + i] = t1;\
411 }
412 #define BLIP_REV( r ) {\
413 blip_long t0 = i0 * delta + buf [rev - r];\
414 blip_long t1 = imp [blip_res * r] * delta + buf [rev + 1 - r];\
415 i0 = imp [blip_res * (r - 1)];\
416 buf [rev - r] = t0;\
417 buf [rev + 1 - r] = t1;\
418 }
419
420 blip_long i0 = *imp;
421 BLIP_FWD( 0 )
422 if ( quality > 8 ) BLIP_FWD( 2 )
423 if ( quality > 12 ) BLIP_FWD( 4 )
424 {
425 blip_long t0 = i0 * delta + buf [fwd + mid - 1];
426 blip_long t1 = imp [blip_res * mid] * delta + buf [fwd + mid ];
427 imp = impulses + phase;
428 i0 = imp [blip_res * mid];
429 buf [fwd + mid - 1] = t0;
430 buf [fwd + mid ] = t1;
431 }
432 if ( quality > 12 ) BLIP_REV( 6 )
433 if ( quality > 8 ) BLIP_REV( 4 )
434 BLIP_REV( 2 )
435
436 blip_long t0 = i0 * delta + buf [rev ];
437 blip_long t1 = *imp * delta + buf [rev + 1];
438 buf [rev ] = t0;
439 buf [rev + 1] = t1;
440 #endif
441
442#endif
443}
444
445#undef BLIP_FWD
446#undef BLIP_REV
447
448template<int quality,int range>
449#if BLIP_BUFFER_FAST
450 inline
451#endif
453{
454 offset_resampled( t * buf->factor_ + buf->offset_, delta, buf );
455}
456
457template<int quality,int range>
458#if BLIP_BUFFER_FAST
459 inline
460#endif
462{
463 int delta = amp - impl.last_amp;
464 impl.last_amp = amp;
465 offset_resampled( t * impl.buf->factor_ + impl.buf->offset_, delta, impl.buf );
466}
467
468inline blip_eq_t::blip_eq_t( double t ) :
469 treble( t ), rolloff_freq( 0 ), sample_rate( 44100 ), cutoff_freq( 0 ) { }
470inline blip_eq_t::blip_eq_t( double t, long rf, long sr, long cf ) :
471 treble( t ), rolloff_freq( rf ), sample_rate( sr ), cutoff_freq( cf ) { }
472
473inline int Blip_Buffer::length() const { return length_; }
474inline long Blip_Buffer::samples_avail() const { return (long) (offset_ >> BLIP_BUFFER_ACCURACY); }
475inline long Blip_Buffer::sample_rate() const { return sample_rate_; }
476inline int Blip_Buffer::output_latency() const { return blip_widest_impulse_ / 2; }
477inline long Blip_Buffer::clock_rate() const { return clock_rate_; }
478inline void Blip_Buffer::clock_rate( long cps ) { factor_ = clock_rate_factor( clock_rate_ = cps ); }
479
480inline int Blip_Reader::begin( Blip_Buffer& blip_buf )
481{
482 buf = blip_buf.buffer_;
483 accum = blip_buf.reader_accum_;
484 return blip_buf.bass_shift_;
485}
486
487int const blip_max_length = 0;
488int const blip_default_length = 250;
489
490#endif
#define BLIP_REV(r)
#define BLIP_RESTRICT
Definition Blip_Buffer.h:275
#define BLIP_FWD(i)
int const blip_sample_bits
Definition Blip_Buffer.h:257
int blip_long
Definition Blip_Buffer.h:13
const int blip_med_quality
Definition Blip_Buffer.h:183
#define BLIP_BUFFER_ACCURACY
Definition Blip_Buffer.h:132
int const blip_buffer_extra_
Definition Blip_Buffer.h:149
const int blip_best_quality
Definition Blip_Buffer.h:311
const int blip_high_quality
Definition Blip_Buffer.h:185
blip_long blip_time_t
Definition Blip_Buffer.h:17
int const blip_max_length
Definition Blip_Buffer.h:487
#define BLIP_PHASE_BITS
Definition Blip_Buffer.h:142
int const blip_reader_default_bass
Definition Blip_Buffer.h:290
blip_ulong blip_resampled_time_t
Definition Blip_Buffer.h:147
const int blip_good_quality
Definition Blip_Buffer.h:184
const long blip_unscaled
Definition Blip_Buffer.h:309
const int blip_low_quality
Definition Blip_Buffer.h:310
int const blip_default_length
Definition Blip_Buffer.h:488
int const blip_widest_impulse_
Definition Blip_Buffer.h:148
unsigned blip_ulong
Definition Blip_Buffer.h:14
int const blip_res
Definition Blip_Buffer.h:150
short blip_sample_t
Definition Blip_Buffer.h:20
@ blip_sample_max
Definition Blip_Buffer.h:21
const long clock_rate
Definition Gym_Emu.cpp:26
assert(0)
Definition Blip_Buffer.h:23
blip_long buffer_size_
Definition Blip_Buffer.h:113
void clear(int entire_buffer=1)
Definition Blip_Buffer.cpp:67
friend class Blip_Reader
Definition Blip_Buffer.h:122
int length_
Definition Blip_Buffer.h:120
blip_resampled_time_t resampled_duration(int t) const
Definition Blip_Buffer.h:91
void set_modified()
Definition Blip_Buffer.h:87
const char * blargg_err_t
Definition Blip_Buffer.h:25
void mix_samples(blip_sample_t const *buf, long count)
Definition Blip_Buffer.cpp:439
blip_ulong blip_resampled_time_t
Definition Blip_Buffer.h:89
void bass_freq(int frequency)
Definition Blip_Buffer.cpp:131
Blip_Buffer()
Definition Blip_Buffer.cpp:28
Blip_Buffer & operator=(const Blip_Buffer &)
void remove_samples(long count)
Definition Blip_Buffer.cpp:177
~Blip_Buffer()
Definition Blip_Buffer.cpp:53
blip_resampled_time_t resampled_time_t
Definition Blip_Buffer.h:101
void remove_silence(long count)
Definition Blip_Buffer.cpp:150
long sample_rate() const
Definition Blip_Buffer.h:475
long samples_avail() const
Definition Blip_Buffer.h:474
long sample_rate_
Definition Blip_Buffer.h:117
long read_samples(blip_sample_t *dest, long max_samples, int stereo=0)
Definition Blip_Buffer.cpp:398
long clock_rate() const
Definition Blip_Buffer.h:477
blip_time_t count_clocks(long count) const
Definition Blip_Buffer.cpp:163
blip_long reader_accum_
Definition Blip_Buffer.h:114
blargg_err_t set_sample_rate(long samples_per_sec, int msec_length=1000/4)
Definition Blip_Buffer.cpp:79
Blip_Buffer(Blip_Buffer &&)=default
int bass_freq_
Definition Blip_Buffer.h:119
Blip_Buffer(const Blip_Buffer &)
int output_latency() const
Definition Blip_Buffer.h:476
int modified_
Definition Blip_Buffer.h:121
int length() const
Definition Blip_Buffer.h:473
int clear_modified()
Definition Blip_Buffer.h:88
long clock_rate_
Definition Blip_Buffer.h:118
int bass_shift_
Definition Blip_Buffer.h:115
long count_samples(blip_time_t duration) const
Definition Blip_Buffer.cpp:156
blip_resampled_time_t resampled_time(blip_time_t t) const
Definition Blip_Buffer.h:92
blip_resampled_time_t offset_
Definition Blip_Buffer.h:111
blip_resampled_time_t clock_rate_factor(long clock_rate) const
Definition Blip_Buffer.cpp:123
blip_time_t buf_t_
Definition Blip_Buffer.h:109
blargg_err_t sample_rate(long r, int msec)
Definition Blip_Buffer.h:103
blip_ulong factor_
Definition Blip_Buffer.h:110
blargg_err_t sample_rate(long r)
Definition Blip_Buffer.h:102
void end_frame(blip_time_t time)
Definition Blip_Buffer.cpp:144
buf_t_ * buffer_
Definition Blip_Buffer.h:112
Definition Blip_Buffer.h:321
int begin(Blip_Buffer &)
Definition Blip_Buffer.h:480
const Blip_Buffer::buf_t_ * buf
Definition Blip_Buffer.h:330
blip_long read_raw() const
Definition Blip_Buffer.h:325
blip_long accum
Definition Blip_Buffer.h:331
void end(Blip_Buffer &b)
Definition Blip_Buffer.h:327
void next(int bass_shift=9)
Definition Blip_Buffer.h:326
blip_long read() const
Definition Blip_Buffer.h:324
Definition Blip_Buffer.h:153
Blip_Synth_Fast_()
Definition Blip_Buffer.cpp:192
void treble_eq(blip_eq_t const &)
Definition Blip_Buffer.h:161
int last_amp
Definition Blip_Buffer.h:156
int delta_factor
Definition Blip_Buffer.h:157
void volume_unit(double)
Definition Blip_Buffer.cpp:199
Blip_Buffer * buf
Definition Blip_Buffer.h:155
Definition Blip_Buffer.h:164
double volume_unit_
Definition Blip_Buffer.h:174
int last_amp
Definition Blip_Buffer.h:167
short *const impulses
Definition Blip_Buffer.h:175
int const width
Definition Blip_Buffer.h:176
blip_long kernel_unit
Definition Blip_Buffer.h:177
int delta_factor
Definition Blip_Buffer.h:168
Blip_Buffer * buf
Definition Blip_Buffer.h:166
void volume_unit(double)
Definition Blip_Buffer.cpp:356
void adjust_impulse()
Definition Blip_Buffer.cpp:283
Blip_Synth_(short *impulses, int width)
Definition Blip_Buffer.cpp:206
void treble_eq(blip_eq_t const &)
Definition Blip_Buffer.cpp:307
int impulses_size() const
Definition Blip_Buffer.h:178
Blip_Buffer * output() const
Definition Blip_Buffer.h:200
void offset(blip_time_t t, int delta) const
Definition Blip_Buffer.h:213
void offset_inline(blip_time_t t, int delta) const
Definition Blip_Buffer.h:222
void update(blip_time_t time, int amplitude)
Definition Blip_Buffer.h:461
Blip_Synth()
Definition Blip_Buffer.h:234
short imp_t
Definition Blip_Buffer.h:231
void offset_resampled(blip_resampled_time_t, int delta, Blip_Buffer *) const
Definition Blip_Buffer.h:339
void offset_inline(blip_time_t t, int delta, Blip_Buffer *buf) const
Definition Blip_Buffer.h:219
Blip_Synth_ impl
Definition Blip_Buffer.h:230
void volume(double v)
Definition Blip_Buffer.h:194
imp_t impulses[blip_res *(quality/2)+1]
Definition Blip_Buffer.h:232
void treble_eq(blip_eq_t const &eq)
Definition Blip_Buffer.h:197
void output(Blip_Buffer *b)
Definition Blip_Buffer.h:201
void offset(blip_time_t, int delta, Blip_Buffer *) const
Definition Blip_Buffer.h:452
blip_time_t count_clocks(long count) const
void mix_samples(blip_sample_t const *buf, long count)
blargg_err_t set_sample_rate(long samples_per_sec, int msec_length)
Silent_Blip_Buffer()
Definition Blip_Buffer.cpp:59
buf_t_ buf[blip_buffer_extra_+1]
Definition Blip_Buffer.h:262
Definition Blip_Buffer.h:239
long cutoff_freq
Definition Blip_Buffer.h:252
void generate(float *out, int count) const
Definition Blip_Buffer.cpp:265
long sample_rate
Definition Blip_Buffer.h:251
blip_eq_t(double treble_db=0)
Definition Blip_Buffer.h:468
double treble
Definition Blip_Buffer.h:249
friend class Blip_Synth_
Definition Blip_Buffer.h:254
long rolloff_freq
Definition Blip_Buffer.h:250
struct huft * t
Definition inflate.c:943
unsigned v[N_MAX]
Definition inflate.c:1584
struct @113205115357366127300225113341150224053346037032::@137033172036070230260373056156374243321245367362 left
struct @113205115357366127300225113341150224053346037032::@137033172036070230260373056156374243321245367362 right
int quality
Definition jpeglib.h:919
float out
Definition lilv_test.c:1461
Definition tap_eq.c:71
void DWORD DWORD LPVOID DWORD cf
Definition swell-functions.h:807
int r
Definition crypt.c:458
b
Definition crypt.c:628
typedef int(UZ_EXP MsgFn)()
_WDL_CSTRING_PREFIX void INT_PTR count
Definition wdlcstring.h:263