1 /* PROJECT: ReactOS sndrec32
2 * LICENSE: GPL - See COPYING in the top level directory
3 * FILE: base/applications/sndrec32/audio_waveout.hpp
4 * PURPOSE: Windows MM wave out abstraction
5 * PROGRAMMERS: Marco Pagliaricci (irc: rendar)
11 #ifndef _AUDIOWAVEOUT__H_
12 #define _AUDIOWAVEOUT__H_
15 #include "audio_def.hpp"
16 #include "audio_format.hpp"
19 #include "audio_producer.hpp"
23 _AUDIO_NAMESPACE_START_
29 enum audio_waveout_status { WAVEOUT_NOTREADY, WAVEOUT_READY,
30 WAVEOUT_PLAYING, WAVEOUT_FLUSHING,
31 WAVEOUT_PAUSED, WAVEOUT_STOP,
43 friend class audio_buffer;
51 playing_procedure( LPVOID );
55 HANDLE wakeup_playthread;
63 WAVEFORMATEX wave_format;
64 WAVEHDR * wave_headers;
65 HWAVEOUT waveout_handle;
71 const audio_format & aud_info;
72 audio_producer & audio_buf;
80 // Audio Playing Thread id
89 audio_waveout_status status;
99 // The temporary buffers for the audio
100 // data outgoing to the waveout device
101 // and its size, and its total number.
105 //base address for entire memory
108 //size in bytes for the entire memory
109 unsigned int mb_size;
111 //number of little buffers
112 unsigned int buffers;
120 // Protected Functions
124 void alloc_buffers_mem_( unsigned int, float );
125 void free_buffers_mem_( void );
128 void init_headers_( void );
129 void prep_headers_( void );
130 void unprep_headers_( void );
144 audio_waveout( const audio_format & aud_fmt,
145 audio_producer & a_buf )
147 : wave_headers( 0 ), aud_info( aud_fmt ),
148 audio_buf( a_buf ), status( WAVEOUT_NOTREADY ),
149 main_buffer( 0 ), mb_size( 0 ),
150 buffers( _AUDIO_DEFAULT_WAVEOUTBUFFERS )
154 // Initializing internal wavein data
171 ~audio_waveout( void )
188 audio_waveout_status current_status( void )
194 BYTE * buf( void ) { return main_buffer; }
195 unsigned int bufsz( void ) { return mb_size; }
198 unsigned int samplevalue_max( void )
201 if ( aud_info.bits() == 16 )
202 return (unsigned int )65535;
204 else if ( aud_info.bits() == 8 )
205 return (unsigned int)255;
212 unsigned tot_samples_buf( void )
216 return aud_info.samples_in_bytes( mb_size );
221 unsigned int nsample ( unsigned int nsamp )
229 if ( aud_info.bits() == 16 )
230 svalue = ( unsigned int ) abs( *(( short * ) (main_buffer + aud_info.bytes_in_samples( nsamp ))));
231 else if ( aud_info.bits() == 8 )
232 svalue = (unsigned int)(( unsigned char * ) *(main_buffer + aud_info.bytes_in_samples( nsamp )));
246 _AUDIO_NAMESPACE_END_
251 #endif //ifdef _AUDIOWAVEOUT__H_