- Create another branch for networking fixes
[reactos.git] / base / applications / sndrec32 / audio_waveout.hpp
1 #ifndef _AUDIOWAVEOUT__H_
2 #define _AUDIOWAVEOUT__H_
3
4
5 #include "audio_def.hpp"
6 #include "audio_format.hpp"
7 #include "audio_producer.hpp"
8
9
10
11 _AUDIO_NAMESPACE_START_
12
13 enum audio_waveout_status { WAVEOUT_NOTREADY, WAVEOUT_READY,
14 WAVEOUT_PLAYING, WAVEOUT_ERR,
15 WAVEOUT_PAUSED, WAVEOUT_STOP
16
17 };
18
19
20 class audio_waveout
21 {
22
23 friend class audio_buffer;
24
25
26
27 private:
28
29
30 static DWORD WINAPI playing_procedure( LPVOID );
31
32
33
34 HANDLE wakeup_playthread;
35
36
37
38
39 protected:
40
41
42 WAVEFORMATEX wave_format;
43 WAVEHDR * wave_headers;
44 HWAVEOUT waveout_handle;
45
46
47
48
49
50 const audio_format & aud_info;
51 audio_producer & audio_buf;
52
53
54
55
56
57
58 //
59 // Audio Playing Thread id
60 //
61
62 DWORD playthread_id;
63
64
65
66
67
68 audio_waveout_status status;
69
70
71
72
73 float buf_secs;
74
75
76
77 //
78 // The temporary buffers for the audio
79 // data outgoing to the waveout device
80 // and its size, and its total number.
81 //
82
83
84 //base address for entire memory
85 BYTE * main_buffer;
86
87 //size in bytes for the entire memory
88 unsigned int mb_size;
89
90 //number of little buffers
91 unsigned int buffers;
92
93
94
95
96
97
98 //
99 // Protected Functions
100 //
101
102 void init_( void );
103 void alloc_buffers_mem_( unsigned int, float );
104 void free_buffers_mem_( void );
105
106
107 void init_headers_( void );
108 void prep_headers_( void );
109 void unprep_headers_( void );
110
111
112
113
114
115
116
117 public:
118
119 //
120 // Ctors
121 //
122
123 audio_waveout( const audio_format & aud_fmt,
124 audio_producer & a_buf )
125
126 : wave_headers( 0 ), aud_info( aud_fmt ),
127 audio_buf( a_buf ), status( WAVEOUT_NOTREADY ),
128 main_buffer( 0 ), mb_size( 0 ),
129 buffers( _AUDIO_DEFAULT_WAVEOUTBUFFERS )
130 {
131
132 //
133 // Initializing internal wavein data
134 //
135
136
137 init_();
138
139 }
140
141
142
143
144
145
146 //
147 // Dtor
148 //
149
150 ~audio_waveout( void )
151 { }
152
153
154
155
156 //
157 // Public Functions
158 //
159
160 void open ( void );
161 void play ( void );
162 void pause ( void );
163 void stop ( void );
164 void close ( void );
165
166
167 audio_waveout_status current_status( void )
168 { return status; }
169
170
171
172
173
174
175
176
177 };
178
179
180
181 _AUDIO_NAMESPACE_END_
182
183
184
185
186 #endif //ifdef _AUDIOWAVEOUT__H_