annotate Plugins/Input/console/Multi_Buffer.h @ 256:84aabc053b6e trunk

[svn] C++ warning fixes by external contractor Stephen Bennett.
author chainsaw
date Sun, 04 Dec 2005 08:49:53 -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 // Multi-channel sound buffer interface, and basic mono and stereo buffers
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
3
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
4 // 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
5
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
6 #ifndef MULTI_BUFFER_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7 #define MULTI_BUFFER_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
8
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
9 #include "Blip_Buffer.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11 // Multi_Buffer is an interface to one or more Blip_Buffers mapped to one or
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12 // more channels consisting of left, center, and right buffers.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13 class Multi_Buffer {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15 Multi_Buffer();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16 virtual ~Multi_Buffer() { }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18 // Set the number of channels available
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19 virtual blargg_err_t set_channel_count( int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21 // Get indexed channel, from 0 to channel count - 1
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22 struct channel_t {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23 Blip_Buffer* center;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24 Blip_Buffer* left;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25 Blip_Buffer* right;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27 virtual channel_t channel( int index ) = 0;
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 // See Blip_Buffer.h
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 //virtual blargg_err_t sample_rate( long rate, int msec = 0 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31 virtual void clock_rate( long ) = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 virtual void bass_freq( int ) = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33 virtual void clear() = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34 long sample_rate() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36 // Length of buffer, in milliseconds
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37 int length() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39 // See Blip_Buffer.h. For optimal operation, pass false for 'added_stereo'
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40 // if nothing was added to the left and right buffers of any channel for
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41 // this time frame.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42 virtual void end_frame( blip_time_t, bool added_stereo = true ) = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
44 // See Blip_Buffer.h
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
45 virtual long read_samples( blip_sample_t*, long ) = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47 protected:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48 // Derived classes must set these to appropriate values, which are returned
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49 // by the corresponding public function.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50 long sample_rate_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51 int length_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52 private:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53 // noncopyable
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54 Multi_Buffer( const Multi_Buffer& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55 Multi_Buffer& operator = ( const Multi_Buffer& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56 };
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 // Mono_Buffer uses a single buffer and outputs mono samples.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
59 class Mono_Buffer : public Multi_Buffer {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
60 Blip_Buffer buf;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
62 Mono_Buffer();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
63 ~Mono_Buffer();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
64
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
65 // Buffer used for all channels
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
66 Blip_Buffer* center();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
67
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
68 // See Multi_Buffer
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
69 blargg_err_t sample_rate( long rate, int msec = blip_default_length );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
70 void clock_rate( long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
71 void bass_freq( int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
72 void clear();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
73 channel_t channel( int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
74 void end_frame( blip_time_t, bool unused = true );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
75 long read_samples( blip_sample_t*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
76 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
77
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
78 // Stereo_Buffer uses three buffers (one for center) and outputs stereo sample pairs.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
79 class Stereo_Buffer : public Multi_Buffer {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
80 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
81 Stereo_Buffer();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
82 ~Stereo_Buffer();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
83
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
84 // Buffers used for all channels
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
85 Blip_Buffer* center();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
86 Blip_Buffer* left();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
87 Blip_Buffer* right();
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 // See Multi_Buffer
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
90 blargg_err_t sample_rate( long, int msec = blip_default_length );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
91 void clock_rate( long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
92 void bass_freq( int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
93 void clear();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
94 channel_t channel( int index );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
95 void end_frame( blip_time_t, bool added_stereo = true );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
96 long read_samples( blip_sample_t*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
97
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
98 private:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
99 enum { buf_count = 3 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
100 Blip_Buffer bufs [buf_count];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
101 channel_t chan;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
102 bool stereo_added;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
103 bool was_stereo;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
104
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
105 void mix_stereo( blip_sample_t*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
106 void mix_mono( blip_sample_t*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
107 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
108
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
109
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
110 // End of public interface
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
111
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
112 inline Blip_Buffer* Stereo_Buffer::left() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
113 return &bufs [1];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
114 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
115
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
116 inline Blip_Buffer* Stereo_Buffer::center() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
117 return &bufs [0];
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
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
120 inline Blip_Buffer* Stereo_Buffer::right() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
121 return &bufs [2];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
122 }
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 inline Stereo_Buffer::channel_t Stereo_Buffer::channel( int index ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
125 return chan;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
126 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
127
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
128 inline long Multi_Buffer::sample_rate() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
129 return sample_rate_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
130 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
131
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
132 inline int Multi_Buffer::length() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
133 return length_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
134 }
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 inline Blip_Buffer* Mono_Buffer::center() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
137 return &buf;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
138 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
139
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
140 inline void Mono_Buffer::clock_rate( long rate ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
141 buf.clock_rate( rate );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
142 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
143
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
144 inline void Mono_Buffer::clear() {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
145 buf.clear();
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
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
148 inline void Mono_Buffer::bass_freq( int freq ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
149 buf.bass_freq( freq );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
150 }
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 inline long Mono_Buffer::read_samples( blip_sample_t* p, long s ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
153 return buf.read_samples( p, s );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
154 }
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 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
157