annotate Plugins/Input/console/Blip_Buffer.h @ 145:8794a4781a15 trunk

[svn] looping stuff
author nenolod
date Thu, 10 Nov 2005 17:51:04 -0800
parents 252843aac42f
children 7c5e886205ef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
1
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
2 // Buffer of sound samples into which band-limited waveforms can be synthesized
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
3 // using Blip_Wave or Blip_Synth.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
4
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
5 // Blip_Buffer 0.3.3. Copyright (C) 2003-2005 Shay Green. GNU LGPL license.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
6
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7 #ifndef BLIP_BUFFER_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
8 #define BLIP_BUFFER_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
9
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10 #include "blargg_common.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12 class Blip_Reader;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 // Source time unit.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15 typedef long blip_time_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17 // Type of sample produced. Signed 16-bit format.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18 typedef BOOST::int16_t blip_sample_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20 // Make buffer as large as possible (currently about 65000 samples)
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21 const int blip_default_length = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23 class Blip_Buffer {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25 // Construct an empty buffer.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26 Blip_Buffer();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27 ~Blip_Buffer();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
28
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
29 // Set output sample rate and buffer length in milliseconds (1/1000 sec),
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 // then clear buffer. If length is not specified, make as large as possible.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31 // If there is insufficient memory for the buffer, sets the buffer length
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 // to 0 and returns error string (or propagates exception if compiler supports it).
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33 blargg_err_t sample_rate( long samples_per_sec, int msec_length = blip_default_length );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35 // Length of buffer, in milliseconds
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36 int length() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38 // Current output sample rate
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39 long sample_rate() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41 // Number of source time units per second
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42 void clock_rate( long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43 long clock_rate() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
44
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
45 // Set frequency at which high-pass filter attenuation passes -3dB
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46 void bass_freq( int frequency );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48 // Remove all available samples and clear buffer to silence. If 'entire_buffer' is
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49 // false, just clear out any samples waiting rather than the entire buffer.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50 void clear( bool entire_buffer = true );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52 // End current time frame of specified duration and make its samples available
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53 // (along with any still-unread samples) for reading with read_samples(). Begin
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54 // a new time frame at the end of the current frame. All transitions must have
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55 // been added before 'time'.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56 void end_frame( blip_time_t time );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
57
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
58 // Number of samples available for reading with read_samples()
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
59 long samples_avail() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
60
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61 // Read at most 'max_samples' out of buffer into 'dest', removing them from from
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
62 // the buffer. Return number of samples actually read and removed. If stereo is
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
63 // true, increment 'dest' one extra time after writing each sample, to allow
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
64 // easy interleving of two channels into a stereo output buffer.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
65 long read_samples( blip_sample_t* dest, long max_samples, bool stereo = false );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
66
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
67 // Remove 'count' samples from those waiting to be read
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
68 void remove_samples( long count );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
69
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
70 // Number of samples delay from synthesis to samples read out
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
71 int output_latency() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
72
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
73
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
74 // Experimental external buffer mixing support
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
75
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
76 // Number of raw samples that can be mixed within frame of specified duration
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
77 long count_samples( blip_time_t duration ) const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
78
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
79 // Mix 'count' samples from 'buf' into buffer.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
80 void mix_samples( const blip_sample_t* buf, long count );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
81
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
82
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
83 // not documented yet
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
84
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
85 void remove_silence( long count );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
86
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
87 typedef unsigned long resampled_time_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
88
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
89 resampled_time_t resampled_time( blip_time_t t ) const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
90 return t * resampled_time_t (factor_) + offset_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
91 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
92
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
93 resampled_time_t resampled_duration( int t ) const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
94 return t * resampled_time_t (factor_);
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
95 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
96
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
97 private:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
98 // noncopyable
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
99 Blip_Buffer( const Blip_Buffer& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
100 Blip_Buffer& operator = ( const Blip_Buffer& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
101
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
102 // Don't use the following members. They are public only for technical reasons.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
103 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
104 enum { widest_impulse_ = 24 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
105 typedef BOOST::uint16_t buf_t_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
106
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
107 unsigned long factor_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
108 resampled_time_t offset_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
109 buf_t_* buffer_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
110 unsigned buffer_size_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
111 private:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
112 long reader_accum;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
113 int bass_shift;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
114 long samples_per_sec;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
115 long clocks_per_sec;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
116 int bass_freq_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
117 int length_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
118
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
119 enum { accum_fract = 15 }; // less than 16 to give extra sample range
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
120 enum { sample_offset = 0x7F7F }; // repeated byte allows memset to clear buffer
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
121
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
122 friend class Blip_Reader;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
123 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
124
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
125 // Low-pass equalization parameters (see notes.txt)
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
126 class blip_eq_t {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
127 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
128 blip_eq_t( double treble = 0 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
129 blip_eq_t( double treble, long cutoff, long sample_rate );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
130 private:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
131 double treble;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
132 long cutoff;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
133 long sample_rate;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
134 friend class Blip_Impulse_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
135 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
136
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
137 // not documented yet (see Multi_Buffer.cpp for an example of use)
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
138 class Blip_Reader {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
139 const Blip_Buffer::buf_t_* buf;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
140 long accum;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
141 #ifdef __MWERKS__
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
142 void operator = ( struct foobar ); // helps optimizer
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
143 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
144 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
145 // avoid anything which might cause optimizer to put object in memory
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
146
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
147 int begin( Blip_Buffer& blip_buf ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
148 buf = blip_buf.buffer_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
149 accum = blip_buf.reader_accum;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
150 return blip_buf.bass_shift;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
151 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
152
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
153 int read() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
154 return accum >> Blip_Buffer::accum_fract;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
155 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
156
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
157 void next( int bass_shift = 9 ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
158 accum -= accum >> bass_shift;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
159 accum += ((long) *buf++ - Blip_Buffer::sample_offset) << Blip_Buffer::accum_fract;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
160 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
161
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
162 void end( Blip_Buffer& blip_buf ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
163 blip_buf.reader_accum = accum;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
164 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
165 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
166
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
167
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
168
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
169 // End of public interface
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
170
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
171 #ifndef BLIP_BUFFER_ACCURACY
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
172 #define BLIP_BUFFER_ACCURACY 16
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
173 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
174
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
175 const int blip_res_bits_ = 5;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
176
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
177 typedef BOOST::uint32_t blip_pair_t_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
178
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
179 class Blip_Impulse_ {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
180 typedef BOOST::uint16_t imp_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
181
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
182 blip_eq_t eq;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
183 double volume_unit_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
184 imp_t* impulses;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
185 imp_t* impulse;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
186 int width;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
187 int fine_bits;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
188 int res;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
189 bool generate;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
190
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
191 void fine_volume_unit();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
192 void scale_impulse( int unit, imp_t* ) const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
193 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
194 Blip_Buffer* buf;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
195 BOOST::uint32_t offset;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
196
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
197 void init( blip_pair_t_* impulses, int width, int res, int fine_bits = 0 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
198 void volume_unit( double );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
199 void treble_eq( const blip_eq_t& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
200 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
201
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
202 inline blip_eq_t::blip_eq_t( double t ) :
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
203 treble( t ), cutoff( 0 ), sample_rate( 44100 ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
204 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
205
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
206 inline blip_eq_t::blip_eq_t( double t, long c, long sr ) :
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
207 treble( t ), cutoff( c ), sample_rate( sr ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
208 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
209
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
210 inline int Blip_Buffer::length() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
211 return length_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
212 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
213
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
214 inline long Blip_Buffer::samples_avail() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
215 return long (offset_ >> BLIP_BUFFER_ACCURACY);
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
216 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
217
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
218 inline long Blip_Buffer::sample_rate() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
219 return samples_per_sec;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
220 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
221
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
222 inline void Blip_Buffer::end_frame( blip_time_t t ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
223 offset_ += t * factor_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
224 assert(( "Blip_Buffer::end_frame(): Frame went past end of buffer",
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
225 samples_avail() <= buffer_size_ ));
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
226 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
227
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
228 inline void Blip_Buffer::remove_silence( long count ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
229 assert(( "Blip_Buffer::remove_silence(): Tried to remove more samples than available",
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
230 count <= samples_avail() ));
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
231 offset_ -= resampled_time_t (count) << BLIP_BUFFER_ACCURACY;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
232 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
233
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
234 inline int Blip_Buffer::output_latency() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
235 return widest_impulse_ / 2;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
236 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
237
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
238 inline long Blip_Buffer::clock_rate() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
239 return clocks_per_sec;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
240 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
241
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
242 // MSVC6 fix
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
243 typedef Blip_Buffer::resampled_time_t blip_resampled_time_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
244
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
245 #include "Blip_Synth.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
246
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
247 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
248