[SNDREC32]
[reactos.git] / reactos / base / applications / sndrec32 / audio_waveout.cpp
index c49627d..0814e85 100644 (file)
  * PROGRAMMERS:     Marco Pagliaricci (irc: rendar)
  */
 
-
-
 #include "stdafx.h"
 #include "audio_waveout.hpp"
 
-
 _AUDIO_NAMESPACE_START_
 
-
-
 void
-audio_waveout::init_( void )
+audio_waveout::init_(void)
 {
-
-    ZeroMemory(( LPVOID ) &wave_format, 
-                    sizeof( WAVEFORMATEX ));
-
-    wave_format.cbSize = sizeof( WAVEFORMATEX );
-
+    ZeroMemory((LPVOID)&wave_format, sizeof(WAVEFORMATEX));
+    wave_format.cbSize = sizeof(WAVEFORMATEX);
     waveout_handle = 0;
-
     playthread_id = 0;
     wakeup_playthread = 0;
-
     buf_secs = _AUDIO_DEFAULT_WAVEOUTBUFSECS;
-
-
     status = WAVEOUT_NOTREADY;
-
 }
 
-
-
-
 void 
-audio_waveout::alloc_buffers_mem_( unsigned int buffs, float secs )
+audio_waveout::alloc_buffers_mem_(unsigned int buffs, float secs)
 {
+    unsigned int onebuf_size = 0, tot_size = 0;
 
-
-    unsigned int 
-        onebuf_size = 0, tot_size = 0;
-
-
-    //
-    // Release old memory
-    //
-
-    if ( main_buffer )
+    /* Release old memory */
+    if (main_buffer)
         delete[] main_buffer;
 
-
-    if ( wave_headers )
+    if (wave_headers)
         delete[] wave_headers;
 
-
-
-    //
-    // Calcs size of the buffers
-    //
-
-    onebuf_size = ( unsigned int )
-        (( float )aud_info.byte_rate() * secs ); 
-
-
+    /* Calcs size of the buffers */
+    onebuf_size = (unsigned int)((float)aud_info.byte_rate() * secs); 
     tot_size = onebuf_size * buffs;
-
-    
-    
-    
-    //
-    // Allocs memory for the audio buffers
-    //
-
-    main_buffer = new BYTE [ tot_size ];
-
-
-
-    //
-    // Allocs memory for the `WAVEHDR' structures.
-    //
-
-    wave_headers = ( WAVEHDR * ) 
-        new BYTE [ sizeof( WAVEHDR ) * buffs ];
-
-
-
-    //
-    // Zeros memory.
-    //
-
-    ZeroMemory( main_buffer, tot_size );
-
-    ZeroMemory( wave_headers, 
-        sizeof( WAVEHDR ) * buffs );
-
-
-    //
-    // Updates total size of the buffers.
-    //
-
+    /* Allocs memory for the audio buffers */
+    main_buffer = new BYTE[tot_size];
+    /* Allocs memory for the `WAVEHDR' structures */
+    wave_headers = (WAVEHDR *) new BYTE[sizeof(WAVEHDR) * buffs];
+    /* Zeros memory */
+    ZeroMemory(main_buffer, tot_size);
+    ZeroMemory(wave_headers, sizeof(WAVEHDR) * buffs);
+    /* Updates total size of the buffers */
     mb_size = tot_size;
 }
 
-
 void 
-audio_waveout::init_headers_( void )
+audio_waveout::init_headers_(void)
 {
-
-
-
-    //
-    // If there is no memory for memory or
-    // headers, simply return.
-    //
-
-    if (( !wave_headers ) || ( !main_buffer ))
+    /* If there is no memory for memory or headers, simply return */
+    if ((!wave_headers) || (!main_buffer))
         return;
 
-
-    //
-    // This is the size for one buffer
-    //
-
+    /* This is the size for one buffer */
     DWORD buf_sz = mb_size / buffers;
+    /* This is the base address for one buffer */
+    BYTE *buf_addr = main_buffer;
 
+    ZeroMemory(wave_headers, sizeof(WAVEHDR) * buffers);
 
-
-    //
-    // This is the base address for one buffer
-    //
-    
-    BYTE * buf_addr = main_buffer;
-
-
-
-    ZeroMemory( wave_headers, sizeof( WAVEHDR ) * buffers );
-
-
-    //
-    // Initializes headers.
-    //
-
-    for ( unsigned int i = 0; i < buffers; ++i )
+    /* Initializes headers */
+    for (unsigned int i = 0; i < buffers; ++i)
     {
-        
-        //
-        // Sets the correct base address and 
-        // length for the little buffer.
-        //
-
-        wave_headers[ i ].dwBufferLength = mb_size / buffers;
-        wave_headers[ i ].lpData = ( LPSTR ) buf_addr;
-
-        //
-        // Unsets the WHDR_DONE flag.
-        //
-
-        wave_headers[ i ].dwFlags &= ~WHDR_DONE;
+        /* Sets the correct base address and length for the little buffer */
+        wave_headers[i].dwBufferLength = mb_size / buffers;
+        wave_headers[i].lpData = (LPSTR) buf_addr;
 
+        /* Unsets the WHDR_DONE flag */
+        wave_headers[i].dwFlags &= ~WHDR_DONE;
 
-        
-        //
-        // Sets the WAVEHDR user data with an
-        // unique little buffer ID#
-        //
-
-        wave_headers[ i ].dwUser = ( unsigned int ) i;
-
-        
-        
-        //
-        // Increments little buffer base address.
-        //
+        /* Sets the WAVEHDR user data with an unique little buffer ID# */
+        wave_headers[i].dwUser = (unsigned int)i;
 
+        /* Increments little buffer base address */
         buf_addr += buf_sz;
     }
-
 }
 
-
 void 
-audio_waveout::prep_headers_( void )
+audio_waveout::prep_headers_(void)
 {
     MMRESULT err;
     bool error = false;
 
-
-    //
-    // If there is no memory for memory or
-    // headers, throw error.
-    //
-
-    if (( !wave_headers ) 
-        || ( !main_buffer ) || ( !waveout_handle ))
-    {} //TODO: throw error!
-
-
-
-    for ( unsigned int i = 0; i < buffers; ++i )
+    /* If there is no memory for memory or headers, throw error */
+    if ((!wave_headers) || (!main_buffer) || (!waveout_handle))
     {
-        err = waveOutPrepareHeader( waveout_handle, 
-                    &wave_headers[ i ], sizeof( WAVEHDR ));
-
+        /* TODO: throw error! */
+    }
 
-        if ( err != MMSYSERR_NOERROR )
+    for (unsigned int i = 0; i < buffers; ++i)
+    {
+        err = waveOutPrepareHeader(waveout_handle, &wave_headers[i], sizeof(WAVEHDR));
+        if (err != MMSYSERR_NOERROR)
             error = true;
-
     }
-    
-
-    if ( error )
-    {} //TODO: throw error indicating which
-      //header i-th is errorneous
-
-
 
+    if (error)
+    {
+        /* TODO: throw error indicating which header i-th is errorneous */
+    }
 }
 
 void 
-audio_waveout::unprep_headers_( void )
+audio_waveout::unprep_headers_(void)
 {
     MMRESULT err;
     bool error = false;
 
-
-
-    //
-    // If there is no memory for memory or
-    // headers, throw error.
-    //
-
-    if (( !wave_headers ) 
-        || ( !main_buffer ) || ( !waveout_handle ))
-    {} //TODO: throw error!
-
-
-
-    for ( unsigned int i = 0; i < buffers; ++i )
+    /* If there is no memory for memory or headers, throw error */
+    if ((!wave_headers) || (!main_buffer) || (!waveout_handle))
     {
-        err = waveOutUnprepareHeader( waveout_handle, 
-                    &wave_headers[ i ], sizeof( WAVEHDR ));
-
+        /* TODO: throw error! */
+    }
 
-        if ( err != MMSYSERR_NOERROR )
+    for (unsigned int i = 0; i < buffers; ++i)
+    {
+        err = waveOutUnprepareHeader(waveout_handle, &wave_headers[i], sizeof(WAVEHDR));
+        if (err != MMSYSERR_NOERROR)
             error = true;
-
     }
-    
-
-    if ( error )
-    {} //TODO: throw error indicating which
-      //header i-th is errorneous
 
+    if (error)
+    {
+        /* TODO: throw error indicating which header i-th is errorneous */
+    }
 }
 
-
-
-
-
-
-
-
-
 void 
-audio_waveout::free_buffers_mem_( void )
+audio_waveout::free_buffers_mem_(void)
 {
-
-
-
-    //
-    // Frees memory
-    //
-
-    if ( main_buffer )
+    /* Frees memory */
+    if (main_buffer)
         delete[] main_buffer;
 
-
-    if ( wave_headers )
+    if (wave_headers)
         delete[] wave_headers;
 
-
     main_buffer = 0;
     wave_headers = 0;
-
-
-
-
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
 void 
-audio_waveout::open( void )
+audio_waveout::open(void)
 {
-
     MMRESULT err;
     HANDLE playthread_handle = 0;
 
-
-    //
-    // Checkin the status of the object
-    //
-
-    if ( status != WAVEOUT_NOTREADY )
-    {} //TODO: throw error
-
-
-    //
-    // Creating the EVENT object that will be signaled
-    // when the playing thread has to wake up.
-    //
-
-    wakeup_playthread = 
-        CreateEvent( 0, FALSE, FALSE, 0 );
-
-    if ( !wakeup_playthread )
+    /* Checkin the status of the object */
+    if (status != WAVEOUT_NOTREADY)
     {
+        /* TODO: throw error */
+    }
 
-
+    /* Creating the EVENT object that will be signaled when
+       the playing thread has to wake up */
+    wakeup_playthread = CreateEvent(0, FALSE, FALSE, 0);
+    if (!wakeup_playthread)
+    {
         status = WAVEOUT_ERR;
-
-        //TODO: throw error
+        /* TODO: throw error */
     }
 
-
-
-    //
-    // Inialize buffers for recording audio 
-    // data from the wavein audio line.
-    //
-
-    alloc_buffers_mem_( buffers, buf_secs );
+    /* Inialize buffers for recording audio data from the wavein audio line */
+    alloc_buffers_mem_(buffers, buf_secs);
     init_headers_();
 
-
-
-
-
-
-    //
-    // Sound format that will be captured by wavein
-    //
-
+    /* Sound format that will be captured by wavein */
     wave_format.wFormatTag = WAVE_FORMAT_PCM;
-
     wave_format.nChannels = aud_info.channels();
     wave_format.nSamplesPerSec = aud_info.sample_rate();
     wave_format.wBitsPerSample = aud_info.bits();
     wave_format.nBlockAlign = aud_info.block_align();
     wave_format.nAvgBytesPerSec = aud_info.byte_rate();
 
-
-
-    //
-    // Creating the recording thread
-    //
-
-    playthread_handle = 
-        CreateThread( NULL, 
-                      0, 
-                      audio_waveout::playing_procedure, 
-                      ( PVOID ) this, 
-                      0, 
-                      &playthread_id 
-            );
-
-    
-
-    //
-    // Checking thread handle
-    //
-
-    if ( !playthread_handle )
+    /* Creating the recording thread */
+    playthread_handle = CreateThread(NULL,
+                                     0,
+                                     audio_waveout::playing_procedure,
+                                     (PVOID)this,
+                                     0,
+                                     &playthread_id);
+    /* Checking thread handle */
+    if (!playthread_handle)
     {
-
-        //
-        // Updating status
-        //
-
-        status = WAVEOUT_ERR;          
-        //TODO: throw error
-
+        /* Updating status */
+        status = WAVEOUT_ERR;
+        /* TODO: throw error */
     }
 
+    /* We don't need the thread handle anymore, so we can close it from now.
+       (We'll just need the thread ID for the `waveInOpen' API) */
+    CloseHandle(playthread_handle);
 
-    //
-    // We don't need the thread handle anymore,
-    // so we can close it from now. (We'll just
-    // need the thread ID for the `waveInOpen' API)
-    //
-
-    CloseHandle( playthread_handle );
-
-
-
-    //
-    // Reset the `audio_source' to the start
-    // position.
-    //
-
+    /* Reset the `audio_source' to the start position */
     audio_buf.set_position_start();
-
-
-
-
-    //
-    // Opens the WAVE_OUT device.
-    //
-
-    err = waveOutOpen( 
-                &waveout_handle, 
-                WAVE_MAPPER, 
-                &wave_format, 
-                playthread_id, 
-                0, 
-                CALLBACK_THREAD | WAVE_ALLOWSYNC 
-            );
-
-
-
-    if ( err != MMSYSERR_NOERROR )
+    /* Opens the WAVE_OUT device */
+    err = waveOutOpen(&waveout_handle,
+                      WAVE_MAPPER,
+                      &wave_format,
+                      playthread_id,
+                      0,
+                      CALLBACK_THREAD | WAVE_ALLOWSYNC);
+    if (err != MMSYSERR_NOERROR)
     {
         MessageBox(0, _T("waveOutOpen Error"), 0, 0);
-        //TODO: throw error
-
+        /* TODO: throw error */
     }
 
-
-
-
     status = WAVEOUT_READY;
-
-
 }
 
-
-
 void 
-audio_waveout::play( void )
+audio_waveout::play(void)
 {
-
-
     MMRESULT err;
     unsigned int i;
 
-    if ( !main_buffer )
-    { return; } //TODO; throw error, or assert
-
-
-
-
-    //
-    // If the status is PAUSED, we have to
-    // resume the audio playing.
-    //
-    if ( status == WAVEOUT_PAUSED )
+    if (!main_buffer)
     {
+        /* TODO; throw error, or assert */
+        return;
+    }
 
-        //
-        // Updates status.
-        //
-
+    /* If the status is PAUSED, we have to resume the audio playing */
+    if (status == WAVEOUT_PAUSED)
+    {
+        /* Updates status */
         status = WAVEOUT_PLAYING;
-
-
-        //
-        // Tells to the driver to resume
-        // audio playing.
-        //
-
-        waveOutRestart( waveout_handle );
-        
-
-        //
-        // Wakeup playing thread.
-        //
-
-        SetEvent( wakeup_playthread );
-
+        /* Tells to the driver to resume audio playing */
+        waveOutRestart(waveout_handle);
+        /* Wakeup playing thread */
+        SetEvent(wakeup_playthread);
         return;
+    } /* if status == WAVEOUT_PAUSED */
 
-    } //if status == WAVEOUT_PAUSED
-
-
-
-
-
-    if ( status != WAVEOUT_READY ) 
+    if (status != WAVEOUT_READY)
         return;
-    
-
-
-
-    //
-    // Prepares WAVEHDR structures.
-    //
 
+    /* Prepares WAVEHDR structures */
     prep_headers_();
-
-
-
-    //
-    // Sets correct status.
-    //
-
+    /* Sets correct status */
     status = WAVEOUT_PLAYING;
-    
-    
-
-    //
-    // Reads the audio from the start.
-    //
-
+    /* Reads the audio from the start */
     //audio_buf.set_position_start();
 
-    
-
-    
-    //
-    // Reads the first N bytes from the audio
-    // buffer, where N = the total size of all
-    // little buffers.
-    //
-
-    audio_buf.read( main_buffer, mb_size );
-
-    
-
+    /* Reads the first N bytes from the audio buffer, where N = the total
+       size of all little buffers */
+    audio_buf.read(main_buffer, mb_size);
 
+    /* Wakeup the playing thread */
+    SetEvent(wakeup_playthread);
 
-    
-    //
-    // Wakeup the playing thread.
-    //
-
-    SetEvent( wakeup_playthread );
-
-
-
-
-    //
-    // Sends all the little buffers to the
-    // audio driver, so it can play the sound 
-    // data.
-    //
-
-    for ( i = 0; i < buffers; ++ i )
+    /* Sends all the little buffers to the audio driver, so it can play
+       the sound data */
+    for (i = 0; i < buffers; ++i)
     {
-
-        
-        err = waveOutWrite( waveout_handle, &wave_headers[ i ], sizeof( WAVEHDR ));
-
-        if ( err != MMSYSERR_NOERROR )
+        err = waveOutWrite(waveout_handle, &wave_headers[i], sizeof(WAVEHDR));
+        if (err != MMSYSERR_NOERROR)
         {
-        
-
             MessageBox(0, _T("waveOutWrite Error"), 0, 0);
-                                
-            //TODO: throw error
+            /* TODO: throw error */
         }
-
     }
-
 }
 
-
 void 
-audio_waveout::pause( void )
+audio_waveout::pause(void)
 {
-
     MMRESULT err;
 
-
-    //
-    // If the waveout object is not playing audio,
-    // do nothing.
-    //
-    
-    if ( status == WAVEOUT_PLAYING )
+    /* If the waveout object is not playing audio, do nothing */
+    if (status == WAVEOUT_PLAYING)
     {
-
-        //
-        // Updating status.
-        //
-
+        /* Updating status */
         status = WAVEOUT_PAUSED;
-
-
-        //
-        // Tells to audio driver to pause audio.
-        //
-
-        err = waveOutPause( waveout_handle );
-
-
-        if ( err != MMSYSERR_NOERROR )
+        /* Tells to audio driver to pause audio */
+        err = waveOutPause(waveout_handle);
+        if (err != MMSYSERR_NOERROR)
         {
-
             MessageBox(0, _T("waveOutPause Error"), 0, 0);
-            //TODO: throw error
-
+            /* TODO: throw error */
         }
-
     }
-
 }
 
-
 void 
-audio_waveout::stop( void )
+audio_waveout::stop(void)
 {
-
     MMRESULT err;
 
-
-    //
-    // Checks the current status
-    //
-
-    if (( status != WAVEOUT_PLAYING ) 
-            && ( status != WAVEOUT_FLUSHING )
-            && ( status != WAVEOUT_PAUSED ))
+    /* Checks the current status */
+    if ((status != WAVEOUT_PLAYING) &&
+        (status != WAVEOUT_FLUSHING) &&
+        (status != WAVEOUT_PAUSED))
     {
-        //
-        // Do nothing.
-        //
-
+        /* Do nothing */
         return;
-
     }
 
-
-
-    //
-    // Sets a new status
-    //
-
+    /* Sets a new status */
     status = WAVEOUT_STOP;
-
-
-
-    //
-    // Flushes pending audio datas
-    //
-
+    /* Flushes pending audio datas */
     err = waveOutReset( waveout_handle );
-
-
-
-    if ( err != MMSYSERR_NOERROR )
+    if (err != MMSYSERR_NOERROR)
     {
-
         MessageBox(0, _T("err WaveOutReset.\n"),_T("ERROR"), 0);
-        //TODO: throw error
-
+        /* TODO: throw error */
     }
 
-
-
-    //
-    // Sets the start position of the audio
-    // buffer.
-    //
-
+    /* Sets the start position of the audio buffer */
     audio_buf.set_position_start();
-
-
-    //
-    // Cleans little buffers.
-    //
-
+    /* Cleans little buffers */
     unprep_headers_();
     init_headers_();
-
-
-    
-    //
-    // Refreshes the status.
-    //
-
+    /* Refreshes the status */
     status = WAVEOUT_READY;
-
 }
 
 void
-audio_waveout::close( void )
+audio_waveout::close(void)
 {
-
     MMRESULT err;
 
-
-    //
-    // If the `wave_out' object is playing audio,
-    // or it is in paused state, we have to call
-    // the `stop' member function, to flush 
-    // pending buffers.
-    //
-    
-    if (( status == WAVEOUT_PLAYING ) 
-                    || ( status== WAVEOUT_PAUSED ))
+    /* If the `wave_out' object is playing audio, or it is in paused state,
+       we have to call the `stop' member function, to flush pending buffers */
+    if ((status == WAVEOUT_PLAYING) || (status== WAVEOUT_PAUSED))
     {
-    
         stop();
-
     }
 
-
-
-    //
-    // When we have flushed all pending buffers,
-    // the wave out handle can be successfully closed.
-    //
-
-    err = waveOutClose( waveout_handle );
-
-
-    if ( err != MMSYSERR_NOERROR )
+    /* When we have flushed all pending buffers, the wave out handle can be successfully closed */
+    err = waveOutClose(waveout_handle);
+    if (err != MMSYSERR_NOERROR)
     {
-
         MessageBox(0, _T("waveOutClose Error"), 0, 0);
-        //TODO: throw error
-
+        /* TODO: throw error */
     }
 
     free_buffers_mem_();
-
 }
 
-
 DWORD WINAPI 
-audio_waveout::playing_procedure( LPVOID arg )
+audio_waveout::playing_procedure(LPVOID arg)
 {
     MSG msg;
-    WAVEHDR * phdr;
+    WAVEHDR *phdr;
     MMRESULT err;
-    audio_waveout * _this = ( audio_waveout * ) arg;
+    audio_waveout *_this = (audio_waveout *)arg;
     unsigned int read_size;
-    
-
-
-    //
-    // Check the arg pointer
-    //
 
-    if ( _this == 0 )
+    /* Check the arg pointer */
+    if (_this == 0)
         return 0;
 
-    
-    
-    //
-    // The thread can go to sleep for now.
-    // It will be wake up only when there is audio data
-    // to be recorded.
-    //
-
-    if ( _this->wakeup_playthread )
+    /* The thread can go to sleep for now. It will be wake up only when
+       there is audio data to be recorded */
+    if (_this->wakeup_playthread)
         WaitForSingleObject(_this->wakeup_playthread, INFINITE);
 
-
-
-    //
-    // Entering main polling loop
-    //
-
-    while ( GetMessage( &msg, 0, 0, 0 ))       
-    {  
-
-        switch ( msg.message )
+    /* Entering main polling loop */
+    while (GetMessage(&msg, 0, 0, 0))
+    {
+        switch (msg.message)
         {
-
             case MM_WOM_DONE:
-            
-                phdr = ( WAVEHDR * ) msg.lParam;
-
+                phdr = (WAVEHDR *)msg.lParam;
 
-                //
-                // If the status of the `wave_out' object
-                // is different than playing, then the thread
-                // can go to sleep.
-                //
-
-                if (( _this->status != WAVEOUT_PLAYING ) && 
-                        ( _this->status != WAVEOUT_FLUSHING ) &&
-                                    ( _this->wakeup_playthread ))
+                /* If the status of the `wave_out' object is different
+                   than playing, then the thread can go to sleep */
+                if ((_this->status != WAVEOUT_PLAYING) &&
+                    (_this->status != WAVEOUT_FLUSHING) &&
+                    (_this->wakeup_playthread))
                 {
                     WaitForSingleObject(_this->wakeup_playthread, INFINITE);
                 }
 
-
-
-                //
-                // The playing thread doesn't have to sleep,
-                // so let's checking first if the little buffer
-                // has been sent to the audio driver (it has the 
-                // WHDR_DONE flag). If it is, we can read new
-                // audio datas from the `audio_producer' object,
-                // refill the little buffer, and resend it to the
-                // driver with waveOutWrite( ) API.
-                //
-                
-                if ( phdr->dwFlags & WHDR_DONE )
+                /* The playing thread doesn't have to sleep, so let's checking
+                   first if the little buffer has been sent to the audio driver
+                   (it has the WHDR_DONE flag). If it is, we can read new audio
+                   datas from the `audio_producer' object, refill the little buffer,
+                   and resend it to the driver with waveOutWrite( ) API */
+                if (phdr->dwFlags & WHDR_DONE)
                 {
-
-                    if ( _this->status == WAVEOUT_PLAYING )
+                    if (_this->status == WAVEOUT_PLAYING)
                     {
-
-                        //
-                        // Here the thread is still playing a sound,
-                        // so it can read new audio data from the
-                        // `audio_producer' object.
-                        //
-                    
-                        read_size = 
-                            _this->audio_buf.read(
-                                            ( BYTE * ) phdr->lpData, 
-                                            phdr->dwBufferLength 
-                                        );
-
+                        /* Here the thread is still playing a sound, so it can
+                           read new audio data from the `audio_producer' object */
+                        read_size = _this->audio_buf.read((BYTE *)phdr->lpData,
+                                                          phdr->dwBufferLength);
                     } else
-                       read_size = 0;
-
-                    
+                        read_size = 0;
 
-                    //
-                    // If the `audio_producer' object, has produced some
-                    // audio data, so `read_size' will be > 0.
-                    //
-                        
-                    if ( read_size )
+                    /* If the `audio_producer' object, has produced some
+                       audio data, so `read_size' will be > 0 */
+                    if (read_size)
                     {
-
-                        //
-                        // Adjusts the correct effectively read size.
-                        //
-
+                        /* Adjusts the correct effectively read size */
                         phdr->dwBufferLength = read_size;
 
-                        //
-                        // Before sending the little buffer to the
-                        // driver, we have to remove the `WHDR_DONE'
-                        // flag, because the little buffer now contain
-                        // new audio data that have to be played.
-                        //
-
+                        /* Before sending the little buffer to the driver,
+                           we have to remove the `WHDR_DONE' flag, because
+                           the little buffer now contain new audio data that have to be played */
                         phdr->dwFlags &= ~WHDR_DONE;
 
+                        /* Plays the sound of the little buffer */
+                        err = waveOutWrite(_this->waveout_handle,
+                                           phdr,
+                                           sizeof(WAVEHDR));
 
-                        //
-                        // Plays the sound of the little buffer.
-                        //
-
-                        err = waveOutWrite( 
-                                    _this->waveout_handle, 
-                                    phdr, 
-                                    sizeof( WAVEHDR )
-                                );
-
-
-                        //
-                        // Checking if any error has occured.
-                        //
-
-                        if ( err != MMSYSERR_NOERROR )
+                        /* Checking if any error has occured */
+                        if (err != MMSYSERR_NOERROR)
                         {
-                                MessageBox(0, _T("waveOutWrite Error"), 0, 0);
-                                //TODO: throw error
+                            MessageBox(0, _T("waveOutWrite Error"), 0, 0);
+                            /* TODO: throw error */
                         }
-
-
-
-
-                    } else { // if ( read_size )
-
-
-
-                        //
-                        // Here `read_size' is 0, so the
-                        // `audio_producer' object, doesn't have any
-                        // sound data to produce anymore.
-                        // So, now we have to see the little buffer
-                        // #ID to establishing what to do.
-                        //
-
-                        if ( phdr->dwUser == 0 )
+                    }
+                    else
+                    {
+                        /* Here `read_size' is 0, so the `audio_producer' object,
+                           doesn't have any sound data to produce anymore. So,
+                           now we have to see the little buffer #ID to establishing what to do */
+                        if (phdr->dwUser == 0)
                         {
-
-                           
-                            
-                            //
-                            // Here `read_size' is 0, and the buffer
-                            // user data contain 0, so this is the
-                            // first of N little buffers that came
-                            // back with `WHDR_DONE' flag; this means
-                            // that this is the last little buffer in
-                            // which we have to read data to; so we
-                            // can _STOP_ reading data from the 
-                            // `audio_producer' object: doing this is
-                            // accomplished just setting the current
-                            // status as "WAVEOUT_FLUSHING".
-                            //
-
+                            /* Here `read_size' is 0, and the buffer user data
+                               contain 0, so this is the first of N little
+                               buffers that came back with `WHDR_DONE' flag;
+                               this means that this is the last little buffer
+                               in which we have to read data to; so we can
+                               _STOP_ reading data from the `audio_producer'
+                               object: doing this is accomplished just setting
+                               the current status as "WAVEOUT_FLUSHING" */
                             _this->status = WAVEOUT_FLUSHING;
-
-
-                        } else if ( phdr->dwUser == ( _this->buffers - 1 )) {
-
-
-                           
-                            //
-                            // Here `read_size' and the buffer user
-                            // data, that contain a buffer ID#,
-                            // is equal to the number of the total
-                            // buffers - 1. This means that this is the
-                            // _LAST_ little buffer that has been played
-                            // by the audio driver. We can STOP the
-                            // `wave_out' object now, or restart the
-                            // sound playing, if we have a infinite loop.
-                            //
-
-
+                        }
+                        else if (phdr->dwUser == (_this->buffers - 1))
+                        {
+                            /* Here `read_size' and the buffer user data, that
+                               contain a buffer ID#, is equal to the number of
+                               the total buffers - 1. This means that this is
+                               the _LAST_ little buffer that has been played by
+                               the audio driver. We can STOP the `wave_out'
+                               object now, or restart the sound playing, if we have a infinite loop */
                             _this->stop();
-                            
-                            //
-                            // Let the thread go to sleep.
-                            //
 
-                            if ( _this->audio_buf.play_finished )
+                            /* Let the thread go to sleep */
+                            if (_this->audio_buf.play_finished)
                                 _this->audio_buf.play_finished();
-                            
 
-                            if ( _this->wakeup_playthread )
+                            if (_this->wakeup_playthread)
                                 WaitForSingleObject(_this->wakeup_playthread,
                                                     INFINITE);
 
-                        }  //if ( phdr->dwUser == ( _this->buffers - 1 ))
-
-                    }  //if read_size != 0
-
-                }  //( phdr->dwFlags & WHDR_DONE )
-                    
-
-                break; // end case
-
-
-
+                        } /* if (phdr->dwUser == (_this->buffers - 1)) */
+                    } /* if read_size != 0 */
+                } /* (phdr->dwFlags & WHDR_DONE) */
+                break; /* end case */
             case MM_WOM_CLOSE:
-
-                //
-                // The thread can exit now.
-                //
-
+                /* The thread can exit now */
                 return 0;
-
                 break;
-
-
             case MM_WOM_OPEN:
-                
-                //
-                // Do nothing.
-                //
-
+                /* Do nothing */
                 break;
+        } /* end switch(msg.message) */
+    } /* end while(GetMessage(...)) */
 
-
-        }  //end switch( msg.message )
-        
-    }  //end while( GetMessage( ... ))
-
-    return 0;                          
+    return 0;
 }
 
-
 _AUDIO_NAMESPACE_END_