ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

audio_wavein.hpp
Go to the documentation of this file.
00001 /* PROJECT:         ReactOS sndrec32
00002  * LICENSE:         GPL - See COPYING in the top level directory
00003  * FILE:            base/applications/sndrec32/audio_wavein.hpp
00004  * PURPOSE:         Windows MM wave in abstraction
00005  * PROGRAMMERS:     Marco Pagliaricci (irc: rendar)
00006  */
00007 
00008 
00009 #ifndef _AUDIOWAVEIN_H_
00010 #define _AUDIOWAVEIN_H_
00011 
00012 
00013 
00014 #include "audio_def.hpp"
00015 #include "audio_format.hpp"
00016 #include "audio_receiver.hpp"
00017 
00018 
00019 
00020 _AUDIO_NAMESPACE_START_
00021 
00022 
00023 
00024 
00025 enum audio_wavein_status { WAVEIN_NOTREADY, WAVEIN_READY, 
00026                            WAVEIN_RECORDING, WAVEIN_ERR,
00027                            WAVEIN_STOP, WAVEIN_FLUSHING
00028                         
00029                           };
00030 
00031 
00032 
00033 
00034 
00035 class audio_wavein
00036 {
00037     private:
00038 
00039 
00040 
00041         //
00042         // The new recording thread sends message to this procedure
00043         // about open recording, close, and sound data recorded
00044         //
00045 
00046         static DWORD WINAPI recording_procedure( LPVOID );
00047 
00048         //
00049         // When this event is signaled, then the previsiously created
00050         // recording thread will wake up and start recording audio
00051         // and will pass audio data to an `audio_receiver' object.
00052         //
00053 
00054         HANDLE wakeup_recthread;
00055         HANDLE data_flushed_event;
00056 
00057 
00058 
00059 
00060     protected:
00061 
00062 
00063 //TODO: puts these structs in private?!
00064 
00065 
00066 
00067 
00068         //
00069         // Audio wavein device stuff
00070         //
00071 
00072         WAVEFORMATEX   wave_format;
00073         WAVEHDR        * wave_headers;
00074         HWAVEIN        wavein_handle;
00075 
00076 
00077 
00078     
00079 
00080         audio_format aud_info;
00081         
00082         audio_receiver & audio_rcvd;
00083 
00084 
00085         
00086         //
00087         // Audio Recorder Thread id
00088         //
00089 
00090         DWORD     recthread_id;
00091 
00092 
00093         
00094 
00095         //
00096         // Object status
00097         //
00098 
00099         audio_wavein_status status;
00100 
00101 
00102 
00103 
00104 
00105 
00106 
00107         //
00108         // How many seconds of audio
00109         // can record the internal buffer
00110         // before flushing audio data 
00111         // to the `audio_receiver' class?
00112         //
00113 
00114         float buf_secs;
00115 
00116 
00117         //
00118         // The temporary buffers for the audio
00119         // data incoming from the wavein device
00120         // and its size, and its total number.
00121         //
00122 
00123         BYTE * main_buffer;
00124         unsigned int mb_size;
00125 
00126         unsigned int buffers;
00127 
00128 
00129 
00130 
00131 
00132         //
00133         // Protected Functions
00134         //
00135 
00136 
00137         //initialize all structures and variables.
00138         void init_( void );
00139 
00140         void alloc_buffers_mem_( unsigned int, float );
00141         void free_buffers_mem_( void );
00142 
00143         void init_headers_( void );
00144         void prep_headers_( void );
00145         void unprep_headers_( void );
00146         void add_buffers_to_driver_( void );
00147 
00148 
00149 
00150 
00151 
00152 
00153 
00154     public:
00155 
00156 
00157         //
00158         // Ctors
00159         //
00160 
00161         audio_wavein(
00162             const audio_format & a_info, audio_receiver & a_receiver )
00163 
00164             : wave_headers( 0 ),
00165             aud_info( a_info ), audio_rcvd( a_receiver ), 
00166             status( WAVEIN_NOTREADY ), main_buffer( 0 ), mb_size( 0 ),
00167             buffers( _AUDIO_DEFAULT_WAVEINBUFFERS )
00168         {
00169 
00170             //
00171             // Initializing internal wavein data
00172             //
00173             
00174             
00175             init_();
00176 
00177             aud_info = a_info;
00178         }
00179 
00180 
00181 
00182 
00183 
00184 
00185 
00186         //
00187         // Dtor
00188         //
00189 
00190         ~audio_wavein( void )
00191         {
00192             
00193             //close(); TODO!
00194 
00195         }
00196 
00197 
00198 
00199         //
00200         // Public functions
00201         //
00202 
00203         void open( void );
00204         void close ( void );
00205 
00206 
00207         void start_recording( void );
00208         void stop_recording( void );
00209 
00210 
00211 
00212         audio_wavein_status current_status ( void ) const
00213         {
00214             return status;
00215         }
00216 
00217         float buffer_secs( void ) const
00218         { return buf_secs; }
00219 
00220 
00221         void buffer_secs( float bsecs )
00222         { 
00223             //
00224             // Some checking
00225             //
00226 
00227             if ( bsecs <= 0 )
00228                 return;
00229 
00230 
00231             //
00232             // Set seconds lenght for each
00233             // buffer.
00234             //
00235 
00236             buf_secs = bsecs; 
00237         }
00238 
00239 
00240         unsigned int total_buffers( void ) const
00241         { return buffers; }
00242 
00243 
00244 
00245         void total_buffers( unsigned int tot_bufs )
00246         {
00247 
00248             //
00249             // Some checking
00250             //
00251 
00252             if ( tot_bufs == 0 )
00253                 return;
00254 
00255             
00256             //
00257             // Sets the number of total buffers.
00258             //
00259 
00260             buffers = tot_bufs;
00261         }
00262 
00263 
00264         audio_format format( void ) const
00265         { return aud_info; }
00266 
00267 
00268 
00269         
00270         BYTE * buf( void ) { return main_buffer; }
00271         unsigned int bufsz( void ) { return mb_size; }
00272 
00273 
00274         unsigned int samplevalue_max( void )
00275         {
00276 
00277             if ( aud_info.bits() == 16 )
00278                 return (unsigned int )65535;
00279 
00280             else if ( aud_info.bits() == 8 )
00281                 return (unsigned int)255;
00282 
00283             else 
00284                 return 0;
00285         }
00286 
00287 
00288         unsigned tot_samples_buf( void )
00289         {
00290 
00291 
00292             return aud_info.samples_in_bytes( mb_size );
00293 
00294 
00295         }
00296 
00297         unsigned int nsample ( unsigned int nsamp )
00298         {
00299 
00300 
00301             unsigned int svalue;
00302 
00303 
00304 
00305             if ( aud_info.bits() == 16 )
00306                 svalue = ( unsigned int )  abs( *(( short * ) (main_buffer + aud_info.bytes_in_samples( nsamp ))));
00307             else if ( aud_info.bits() == 8 )
00308                svalue = (unsigned int)(( ptrdiff_t ) *(main_buffer + aud_info.bytes_in_samples( nsamp )));
00309 
00310             else 
00311                 svalue = 0;
00312 
00313             return svalue;
00314 
00315         }
00316 
00317     
00318 };
00319 
00320 
00321 
00322 
00323 _AUDIO_NAMESPACE_END_
00324 
00325 
00326 
00327 
00328 #endif //ifdef _AUDIOWAVEIN_H_

Generated on Sun May 27 2012 04:17:43 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.