From 5170eaeaaf1223bbc1bf20b306d9a54381f4c79b Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 21 Dec 2013 13:29:23 +0000 Subject: [PATCH] [SNDREC32] * Attempt to fix a.. crime against style. svn path=/trunk/; revision=61314 --- .../base/applications/sndrec32/audio_api.hpp | 5 - .../base/applications/sndrec32/audio_def.hpp | 47 +- .../applications/sndrec32/audio_format.cpp | 24 +- .../applications/sndrec32/audio_format.hpp | 162 +- .../applications/sndrec32/audio_membuffer.cpp | 470 +---- .../applications/sndrec32/audio_membuffer.hpp | 403 ++-- .../applications/sndrec32/audio_producer.cpp | 1 - .../applications/sndrec32/audio_producer.hpp | 103 +- .../applications/sndrec32/audio_receiver.hpp | 98 +- .../sndrec32/audio_resampler_acm.cpp | 373 +--- .../sndrec32/audio_resampler_acm.hpp | 85 +- .../applications/sndrec32/audio_wavein.cpp | 866 ++------ .../applications/sndrec32/audio_wavein.hpp | 331 +-- .../applications/sndrec32/audio_waveout.cpp | 1004 +++------ .../applications/sndrec32/audio_waveout.hpp | 255 +-- .../base/applications/sndrec32/kkaudio.hpp | 2 +- .../base/applications/sndrec32/sndrec32.cpp | 1865 +++++++---------- reactos/base/applications/sndrec32/sndrec32.h | 82 +- reactos/base/applications/sndrec32/stdafx.h | 4 +- .../base/applications/sndrec32/targetver.h | 6 +- 20 files changed, 1807 insertions(+), 4379 deletions(-) diff --git a/reactos/base/applications/sndrec32/audio_api.hpp b/reactos/base/applications/sndrec32/audio_api.hpp index 5ea4d32c686..6ff7fbb2a5c 100644 --- a/reactos/base/applications/sndrec32/audio_api.hpp +++ b/reactos/base/applications/sndrec32/audio_api.hpp @@ -1,12 +1,7 @@ #ifndef __AUDIO_API__ #define __AUDIO_API__ -//#include "audio_def.hpp" -//#include "audio_format.hpp" #include "audio_membuffer.hpp" -//#include "audio_producer.hpp" -//#include "audio_receiver.hpp" -//#include "audio_resampler_acm.hpp" #include "audio_wavein.hpp" #include "audio_waveout.hpp" diff --git a/reactos/base/applications/sndrec32/audio_def.hpp b/reactos/base/applications/sndrec32/audio_def.hpp index 4f408be0f72..73b94be43e2 100644 --- a/reactos/base/applications/sndrec32/audio_def.hpp +++ b/reactos/base/applications/sndrec32/audio_def.hpp @@ -5,21 +5,10 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - - #ifndef _AUDIO_DEF__H_ #define _AUDIO_DEF__H_ - -//#include - - - -// -// Defaults -// - - +/* Defaults */ #define _AUDIO_DEFAULT_FORMAT A44100_16BIT_STEREO @@ -31,40 +20,16 @@ #define _AUDIO_DEFAULT_BUFSECS 1.0f - - -// -// Namespace stuff -// - +/* Namespace stuff */ #define _AUDIO_NAMESPACE_START_ namespace snd { #define _AUDIO_NAMESPACE_END_ }; - - - - -// -// Platform depend stuff -// - -//#include -#include //Windows MultiMedia (WINMM) audio apis -#include //codecs stuff -#include //codecs stuff - - - - +/* Platform depend stuff */ +#include // Windows MultiMedia (WINMM) audio apis +#include // codecs stuff +#include // codecs stuff //#pragma comment(lib, "winmm.lib") //#pragma comment(lib, "msacm32.lib") - - - - - - - #endif //ifdef _AUDIO_DEF__H_ diff --git a/reactos/base/applications/sndrec32/audio_format.cpp b/reactos/base/applications/sndrec32/audio_format.cpp index be927bf1697..20fffc0e2de 100644 --- a/reactos/base/applications/sndrec32/audio_format.cpp +++ b/reactos/base/applications/sndrec32/audio_format.cpp @@ -5,31 +5,15 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - - - #include "stdafx.h" #include "audio_format.hpp" - - - _AUDIO_NAMESPACE_START_ +/* Standard audio formats (declared as externs in `audio_format.hpp') */ - -// -// Standard audio formats (declared as -// externs in `audio_format.hpp') -// - -audio_format UNNKOWN_FORMAT( 0, 0, 0); -audio_format A44100_16BIT_STEREO( 44100, 16, 2 ); -audio_format A44100_16BIT_MONO( 44100, 16, 1 ); - - - - - +audio_format UNNKOWN_FORMAT(0, 0, 0); +audio_format A44100_16BIT_STEREO(44100, 16, 2); +audio_format A44100_16BIT_MONO(44100, 16, 1); _AUDIO_NAMESPACE_END_ diff --git a/reactos/base/applications/sndrec32/audio_format.hpp b/reactos/base/applications/sndrec32/audio_format.hpp index 947e34d082e..ccd8923a456 100644 --- a/reactos/base/applications/sndrec32/audio_format.hpp +++ b/reactos/base/applications/sndrec32/audio_format.hpp @@ -5,159 +5,91 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - - #ifndef _AUDIOFORMAT__H_ #define _AUDIOFORMAT__H_ - - #include "audio_def.hpp" - - - _AUDIO_NAMESPACE_START_ - - - - - - class audio_format { protected: - - unsigned int samples_psec; unsigned short int bits_psample; unsigned short int chan; - - public: - - - // - // Ctors - // - - audio_format( unsigned int samples_per_second, - unsigned short int bits_per_sample, unsigned short int channels ) - - : samples_psec( samples_per_second ), bits_psample( bits_per_sample ), - chan( channels ) - - { } - - - - - - - - // - // Dtor - // - - virtual ~audio_format( void ) - { } - - - - - - - - // - // Operators - // - - bool operator==( audio_format & eq ) const + /* Ctors */ + audio_format(unsigned int samples_per_second, + unsigned short int bits_per_sample, + unsigned short int channels) : samples_psec(samples_per_second), + bits_psample(bits_per_sample), + chan(channels) { - // - // The same audio format is when samples per second, - // bit per sample, and channels mono/stereo are equal. - // - - return (( samples_psec == eq.samples_psec ) - && ( bits_psample == eq.bits_psample ) && ( chan == eq.chan )); } + /* Dtor */ + virtual ~audio_format(void) + { + } - - - - - - - // - // Public Functions - // - - unsigned int sample_rate( void ) const - { return samples_psec; } - - - unsigned short int bits( void ) const - { return bits_psample; } - - - unsigned short int channels( void ) const - { return chan; } - - - unsigned int byte_rate( void ) const - { return ( samples_psec * chan * ( bits_psample / 8 )); } - - - unsigned int block_align( void ) const - { return ( chan * ( bits_psample / 8 )); } - - - - unsigned int samples_in_seconds( float seconds ) const + /* Operators */ + bool operator==(audio_format & eq) const { + /* The same audio format is when samples per second, + bit per sample, and channels mono/stereo are equal */ + return ((samples_psec == eq.samples_psec) && + (bits_psample == eq.bits_psample) && + (chan == eq.chan)); + } - return ( unsigned int ) - ((( float )samples_psec * ( float ) chan ) * seconds ); + /* Public Functions */ + unsigned int sample_rate(void) const + { + return samples_psec; } - unsigned int samples_in_bytes ( unsigned int bytes ) const + unsigned short int bits(void) const { + return bits_psample; + } - return ( bytes / (( bits_psample / 8 ) * chan )); + unsigned short int channels(void) const + { + return chan; + } + unsigned int byte_rate(void) const + { + return (samples_psec * chan * (bits_psample / 8)); } - unsigned int bytes_in_samples( unsigned int samples ) const + unsigned int block_align(void) const { + return (chan * (bits_psample / 8)); + } - return ( samples * (( bits_psample / 8 ) * chan )); + unsigned int samples_in_seconds(float seconds) const + { + return (unsigned int)(((float)samples_psec * (float) chan) * seconds); + } + unsigned int samples_in_bytes(unsigned int bytes) const + { + return (bytes / ((bits_psample / 8) * chan)); } + unsigned int bytes_in_samples(unsigned int samples) const + { + return (samples * ((bits_psample / 8) * chan)); + } }; - - - extern audio_format UNKNOWN_FORMAT; extern audio_format A44100_16BIT_STEREO; extern audio_format A44100_16BIT_MONO; - - - - - _AUDIO_NAMESPACE_END_ - - - - - - -#endif //ifdef _AUDIOFORMAT__H_ +#endif /* _AUDIOFORMAT__H_ */ diff --git a/reactos/base/applications/sndrec32/audio_membuffer.cpp b/reactos/base/applications/sndrec32/audio_membuffer.cpp index edad39a6137..b2393461445 100644 --- a/reactos/base/applications/sndrec32/audio_membuffer.cpp +++ b/reactos/base/applications/sndrec32/audio_membuffer.cpp @@ -5,510 +5,232 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - - #include "stdafx.h" #include "audio_membuffer.hpp" - - _AUDIO_NAMESPACE_START_ - - - -////////////////////////////////////// -/////// Protected Functions ///////// -////////////////////////////////////// - +/* Protected Functions */ void -audio_membuffer::alloc_mem_( unsigned int bytes ) +audio_membuffer::alloc_mem_(unsigned int bytes) { - - // - // Some checking - // - - if ( bytes == 0 ) + /* Some checking */ + if (bytes == 0) return; - - - - - // - // Checks previsiously alloc'd memory - // and frees it. - // - - if ( audio_data ) + /* Checks previsiously alloc'd memory and frees it */ + if (audio_data) delete[] audio_data; + /* Allocs new memory and zeros it */ + audio_data = new BYTE[bytes]; + memset(audio_data, 0, bytes * sizeof(BYTE)); - - // - // Allocs new memory and zeros it. - // - - audio_data = new BYTE[ bytes ]; - - - memset( audio_data, 0, bytes * sizeof( BYTE )); - - - - // - // Sets the correct buffer size - // - + /* Sets the correct buffer size */ buf_size = bytes; - - init_size = bytes; - - - } - void -audio_membuffer::free_mem_( void ) +audio_membuffer::free_mem_(void) { - - if ( audio_data ) + if (audio_data) delete[] audio_data; buf_size = 0; audio_data = 0; - } - void -audio_membuffer::resize_mem_( unsigned int new_size ) +audio_membuffer::resize_mem_(unsigned int new_size) { - - - if ( new_size == 0 ) + if (new_size == 0) return; - - // - // The new_size, cannot be <= of the - // `bytes_received' member value of the - // parent class `audio_receiver'. - // We cannot touch received audio data, - // so we have to alloc at least - // bytes_received+1 bytes. - // - // But we can truncate unused memory, so - // `new_size' can be < of `buf_size'. - // - - if ( new_size <= bytes_received ) + /* The new_size, cannot be <= of the `bytes_received' member value of the + parent class `audio_receiver'. We cannot touch received audio data, + so we have to alloc at least bytes_received+1 bytes. But we can truncate + unused memory, so `new_size' can be < of `buf_size' */ + if (new_size <= bytes_received) return; - - - BYTE * new_mem; + /* Allocs new memory and zeros it */ + new_mem = new BYTE[new_size]; + memset(new_mem, 0, new_size * sizeof(BYTE)); - - // - // Allocs new memory and zeros it. - // - - - new_mem = new BYTE[ new_size ]; - - memset( new_mem, 0, new_size * sizeof( BYTE )); - - - - if ( audio_data ) + if (audio_data) { - - - // - // Copies received audio data, and discard - // unused memory. - // - - memcpy( new_mem, audio_data, bytes_received ); - - - - // - // Frees old memory. - // - + /* Copies received audio data, and discard unused memory */ + memcpy(new_mem, audio_data, bytes_received); + /* Frees old memory */ delete[] audio_data; - - - - - - // - // Commit new memory. - // - + /* Commit new memory */ audio_data = new_mem; buf_size = new_size; - - - - } else { - audio_data = new_mem; buf_size = new_size; } - - if ( buffer_resized ) - buffer_resized( new_size ); - + if (buffer_resized) + buffer_resized(new_size); } - - - void -audio_membuffer::truncate_( void ) +audio_membuffer::truncate_(void) { - - // - // If `buf_size' is already = to the - // `bytes_received' of audio data, then - // this operation is useless; simply return. - // - - if ( bytes_received == buf_size ) + /* If `buf_size' is already = to the `bytes_received' of audio data, + then this operation is useless; simply return */ + if (bytes_received == buf_size) return; - - - if ( audio_data ) + if (audio_data) { - - - // - // Allocs a new buffer. - // - - BYTE * newbuf = new BYTE[ bytes_received ]; - - - - - // - // Copies audio data. - // - - memcpy( newbuf, audio_data, bytes_received ); - - - - // - // Frees old memory. - // - + /* Allocs a new buffer */ + BYTE * newbuf = new BYTE[bytes_received]; + /* Copies audio data */ + memcpy(newbuf, audio_data, bytes_received); + /* Frees old memory */ delete[] audio_data; - - - - // - // Commit the new buffer. - // - + /* Commit the new buffer */ audio_data = newbuf; buf_size = bytes_received; - - - // - // Buffer truncation successfull. - // Now the buffer size is exactly big - // as much audio data was received. - // - - + /* Buffer truncation successfull. Now the buffer size is exactly big + as much audio data was received */ } - - } - - - - - -////////////////////////////////////// -/////// Public Functions /////////// -////////////////////////////////////// - - - +/* Public Functions */ void -audio_membuffer::clear( void ) +audio_membuffer::clear(void) { - free_mem_(); - bytes_received = 0; } - - void -audio_membuffer::reset( void ) +audio_membuffer::reset(void) { - - - // - // Frees memory and reset - // to initial state. - // - + /* Frees memory and reset to initial state */ clear(); - - - - // - // Alloc memory of size specified - // at the constructor. - // - - alloc_mem_( init_size ); - - + /* Alloc memory of size specified at the constructor */ + alloc_mem_(init_size); } void -audio_membuffer::alloc_bytes( unsigned int bytes ) +audio_membuffer::alloc_bytes(unsigned int bytes) { - - alloc_mem_( bytes ); - + alloc_mem_(bytes); } - - - void -audio_membuffer::alloc_seconds( unsigned int secs ) +audio_membuffer::alloc_seconds(unsigned int secs) { - - alloc_mem_( aud_info.byte_rate() * secs ); - + alloc_mem_(aud_info.byte_rate() * secs); } - void -audio_membuffer::alloc_seconds( float secs ) +audio_membuffer::alloc_seconds(float secs) { - - alloc_mem_(( unsigned int )(( float ) aud_info.byte_rate() * secs )); - + alloc_mem_((unsigned int)((float)aud_info.byte_rate() * secs)); } - - - void -audio_membuffer::resize_bytes( unsigned int bytes ) +audio_membuffer::resize_bytes(unsigned int bytes) { - - resize_mem_( bytes ); - + resize_mem_(bytes); } - - void -audio_membuffer::resize_seconds( unsigned int secs ) +audio_membuffer::resize_seconds(unsigned int secs) { - - resize_mem_( aud_info.byte_rate() * secs ); - + resize_mem_(aud_info.byte_rate() * secs); } - void -audio_membuffer::resize_seconds( float secs ) +audio_membuffer::resize_seconds(float secs) { - - resize_mem_(( unsigned int ) - (( float )aud_info.byte_rate() * secs ) - ); - + resize_mem_((unsigned int)((float)aud_info.byte_rate() * secs)); } - - - - -/////////////////////////////////////// -/////// Inherited Functions ///////// -/////////////////////////////////////// - - - - - - +/* Inherited Functions */ void -audio_membuffer::audio_receive - ( unsigned char * data, unsigned int size ) +audio_membuffer::audio_receive(unsigned char *data, unsigned int size) { - - - - - // - // If there isn't a buffer, allocs memory for - // it of size*2, and copies audio data arrival. - // - - if (( audio_data == 0 ) || ( buf_size == 0 )) + /* If there isn't a buffer, allocs memory for it of size*2, and copies audio data arrival */ + if ((audio_data == 0) || (buf_size == 0)) { - alloc_mem_( size * 2 ); - - memcpy( audio_data, data, size ); - + alloc_mem_(size * 2); + memcpy(audio_data, data, size); return; - } - - - - - // - // If buffer's free memory is < of `size', - // we have to realloc buffer memory of - // buf_size*2, while free memory is enough - // to contain `size' bytes. - // - // In this case free memory is represented - // by `buf_size - bytes_recorded'. - // - - unsigned int tot_mem = buf_size, - free_mem = buf_size - bytes_received; - - - if ( free_mem < size ) + /* If buffer's free memory is < of `size', we have to realloc buffer memory + of buf_size*2, while free memory is enough to contain `size' bytes. + In this case free memory is represented by `buf_size - bytes_recorded' */ + unsigned int tot_mem = buf_size, free_mem = buf_size - bytes_received; + if (free_mem < size) { - - // - // Calcs new buffer size. - // TODO: flags for other behaviour? - - while ( free_mem < size ) + /* Calcs new buffer size */ + /* TODO: flags for other behaviour? */ + while (free_mem < size) { tot_mem *= 2; - free_mem = tot_mem - bytes_received; } - - - // - // Resize buffer memory. - // - - resize_mem_( tot_mem ); - + /* Resize buffer memory */ + resize_mem_(tot_mem); } - - - // - // Now we have enough free space in the - // buffer, so let's copy audio data arrivals. - // - - memcpy( audio_data + bytes_received, data, size ); - - - - - if ( audio_arrival ) - audio_arrival( aud_info.samples_in_bytes( size )); - + /* Now we have enough free space in the buffer, so let's copy audio data arrivals */ + memcpy(audio_data + bytes_received, data, size); + if (audio_arrival) + audio_arrival(aud_info.samples_in_bytes(size)); } - unsigned int -audio_membuffer::read( BYTE * out_buf, unsigned int bytes ) +audio_membuffer::read(BYTE *out_buf, unsigned int bytes) { - - - // - // Some checking - // - - if ( !audio_data ) + /* Some checking */ + if (!audio_data) return 0; - - if ( bytes_played_ >= bytes_received ) + if (bytes_played_ >= bytes_received) return 0; + unsigned int to_play = bytes_received - bytes_played_; + unsigned int to_copy = bytes > to_play ? to_play : bytes; + /* Copies the audio data out */ + if ((out_buf) && (to_copy) && (audio_data)) + memcpy(out_buf, audio_data + bytes_played_, to_copy); - unsigned int to_play = - bytes_received - bytes_played_; - - - unsigned int to_copy = - bytes > to_play ? to_play : bytes; - - - // - // Copies the audio data out. - // - - if (( out_buf ) && ( to_copy ) && ( audio_data )) - memcpy( out_buf, audio_data + bytes_played_, to_copy ); - - - // - // Increments the number of total bytes - // played (audio data gone out from the - // `audio_producer' object). - // - + /* Increments the number of total bytes played (audio data gone out from + the `audio_producer' object) */ bytes_played_ += to_copy; + if (audio_arrival) + audio_arrival(aud_info.samples_in_bytes(to_copy)); - if ( audio_arrival ) - audio_arrival( aud_info.samples_in_bytes( to_copy )); - - - // - // Returns the exact size of audio data - // produced. - // - + /* Returns the exact size of audio data produced */ return to_copy; } - bool -audio_membuffer::finished( void ) +audio_membuffer::finished(void) { - if ( bytes_played_ < bytes_received ) + if (bytes_played_ < bytes_received) return false; else return true; } - _AUDIO_NAMESPACE_END_ diff --git a/reactos/base/applications/sndrec32/audio_membuffer.hpp b/reactos/base/applications/sndrec32/audio_membuffer.hpp index 046fc581a2e..cfdea9b2fe4 100644 --- a/reactos/base/applications/sndrec32/audio_membuffer.hpp +++ b/reactos/base/applications/sndrec32/audio_membuffer.hpp @@ -5,342 +5,195 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - #ifndef _AUDIOMEMBUFFER__H_ #define _AUDIOMEMBUFFER__H_ - - -//#include "audio_def.hpp" #include "audio_receiver.hpp" #include "audio_format.hpp" #include "audio_producer.hpp" - - - _AUDIO_NAMESPACE_START_ - - class audio_membuffer : public audio_receiver, public audio_producer { - - - - - protected: - BYTE * audio_data; audio_format aud_info; unsigned int buf_size; unsigned int init_size; + /* Protected Functions */ - - // - // Protected Functions - // - - - //allocs N bytes for the audio buffer. - void alloc_mem_( unsigned int ); - - - //frees memory - void free_mem_( void ); - - - //resizes memory, and copies old - //audio data to new-size memory - void resize_mem_( unsigned int ); - - - //truncates and discards unused memory. - //`buf_size' will be the same as `bytes_received'. - void truncate_( void ); - - - + /* allocs N bytes for the audio buffer */ + void alloc_mem_(unsigned int); + /* frees memory */ + void free_mem_(void); + /* resizes memory, and copies old audio data to new-size memory */ + void resize_mem_(unsigned int); + /* truncates and discards unused memory. `buf_size' will be the same as `bytes_received' */ + void truncate_(void); public: - - - void ( * audio_arrival )( unsigned int ); - void ( * buffer_resized ) ( unsigned int ); - - - // - // Ctors - // - - audio_membuffer( void ) - : audio_data( 0 ), aud_info( _AUDIO_DEFAULT_FORMAT ), - buf_size( 0 ), init_size( 0 ) - { - - // - // Allocs memory for at least 1 or some seconds - // of recording. - // - init_size = ( unsigned int ) - (( float )aud_info.byte_rate() * _AUDIO_DEFAULT_BUFSECS ); - - - alloc_mem_( init_size ); - - + void (* audio_arrival)(unsigned int); + void (* buffer_resized)(unsigned int); + + /* Ctors */ + audio_membuffer(void) : audio_data(0), + aud_info(_AUDIO_DEFAULT_FORMAT), + buf_size(0), + init_size(0) + { + /* Allocs memory for at least 1 or some seconds of recording */ + init_size = (unsigned int)((float)aud_info.byte_rate() * _AUDIO_DEFAULT_BUFSECS); + alloc_mem_(init_size); } - - - audio_membuffer( audio_format aud_fmt ) - : audio_data( 0 ), aud_info( aud_fmt ), buf_size( 0 ), - init_size( 0 ) - { - - // - // Allocs memory for at least 1 or some seconds - // of recording. - // - init_size = ( unsigned int ) - (( float )aud_info.byte_rate() * _AUDIO_DEFAULT_BUFSECS ); - - - alloc_mem_( init_size ); - + audio_membuffer(audio_format aud_fmt) : audio_data(0), + aud_info(aud_fmt), + buf_size(0), + init_size(0) + { + /* Allocs memory for at least 1 or some seconds of recording */ + init_size = (unsigned int)((float)aud_info.byte_rate() * _AUDIO_DEFAULT_BUFSECS); + alloc_mem_(init_size); } - - - - audio_membuffer( audio_format aud_fmt, unsigned int seconds ) - : audio_data( 0 ), aud_info( aud_fmt ), buf_size( 0 ), - init_size( 0 ) - { - - // - // Allocs memory for audio recording - // the specified number of seconds. - // + audio_membuffer(audio_format aud_fmt, unsigned int seconds) : audio_data(0), + aud_info(aud_fmt), + buf_size(0), + init_size(0) + { + /* Allocs memory for audio recording the specified number of seconds */ init_size = aud_info.byte_rate() * seconds; - alloc_mem_( init_size ); - + alloc_mem_(init_size); } - - - audio_membuffer( audio_format aud_fmt, float seconds ) - : audio_data( 0 ), aud_info( aud_fmt ), buf_size( 0 ), - init_size( 0 ) - { - - // - // Allocs memory for audio recording - // the specified number of seconds. - // - init_size = ( unsigned int )(( float ) aud_info.byte_rate() * - seconds <= 0 ? 1 : seconds ); - - - alloc_mem_( init_size ); - + audio_membuffer(audio_format aud_fmt, float seconds) : audio_data(0), + aud_info(aud_fmt), + buf_size(0), + init_size(0) + { + /* Allocs memory for audio recording the specified number of seconds */ + init_size = (unsigned int)((float)aud_info.byte_rate() * seconds <= 0 ? 1 : seconds); + alloc_mem_(init_size); } - - - - audio_membuffer( unsigned int bytes ) - : audio_data( 0 ), aud_info( _AUDIO_DEFAULT_FORMAT ), - buf_size( 0 ), init_size( 0 ) - { - - // - // Allocs memory for the specified bytes - // + audio_membuffer(unsigned int bytes) : audio_data(0), + aud_info(_AUDIO_DEFAULT_FORMAT), + buf_size(0), + init_size(0) + { + /* Allocs memory for the specified bytes */ init_size = bytes; - alloc_mem_( init_size ); - + alloc_mem_(init_size); } - - - - // - // Dtor - // - - virtual ~audio_membuffer( void ) - { - - // - // Frees memory and reset values. - // - + /* Dtor */ + virtual ~audio_membuffer(void) + { + /* Frees memory and reset values */ clear(); - } + /* Public functions */ - - - - - - - - // - // Public functions - // - - - - //returns the audio buffer size in bytes. - unsigned int mem_size( void ) const - { return buf_size; } - - - //returns how many audio data has been - //received, in bytes. - unsigned int bytes_recorded( void ) const - { return bytes_received; } - - - //returns the integer number of seconds - //that the buffer can record - unsigned int seconds_total( void ) const - { return buf_size / aud_info.byte_rate(); } - - - //returns the integer number of seconds - //that the buffer can record - unsigned int seconds_recorded( void ) const - { return bytes_received / aud_info.byte_rate(); } - - - //returns the float number of seconds - //that the buffer can record - float fseconds_total( void ) const - { return ( float )(( float ) buf_size / - ( float ) aud_info.byte_rate()); } - - - //returns the float number of seconds - //that has been recorded - float fseconds_recorded( void ) const - { return ( float )(( float ) bytes_received / - ( float ) aud_info.byte_rate()); } - - - unsigned int total_samples( void ) const + /* returns the audio buffer size in bytes */ + unsigned int mem_size(void) const { - - return ( aud_info.samples_in_seconds( fseconds_total() )); - + return buf_size; } - - unsigned int samples_received( void ) const + /* returns how many audio data has been received, in bytes */ + unsigned int bytes_recorded(void) const { - - - return ( aud_info.samples_in_bytes( bytes_received )); - + return bytes_received; } + /* returns the integer number of seconds that the buffer can record */ + unsigned int seconds_total(void) const + { + return buf_size / aud_info.byte_rate(); + } + /* returns the integer number of seconds that the buffer can record */ + unsigned int seconds_recorded(void) const + { + return bytes_received / aud_info.byte_rate(); + } - //returns a pointer to the audio buffer - BYTE * audio_buffer( void ) const - { return audio_data; } - - - - //frees memory and resets values. - void clear( void ); - - - audio_format & audinfo( void ) { return aud_info; } - - - //discard audio data, resets values, - //but, instead of clear() which frees memory, - //reset the memory to the initial size, ready - //for receiving "new" audio data. - void reset( void ); + /* returns the float number of seconds that the buffer can record */ + float fseconds_total(void) const + { + return (float)((float) buf_size / (float)aud_info.byte_rate()); + } + /* returns the float number of seconds that has been recorded */ + float fseconds_recorded(void) const + { + return (float)((float)bytes_received / (float)aud_info.byte_rate()); + } - //truncates and discards unused memory. - //`buf_size' will be the same as `bytes_received'. - void truncate( void ) - { truncate_( ); }//TODO: fare truncate N bytes + unsigned int total_samples(void) const + { + return (aud_info.samples_in_seconds(fseconds_total())); + } + unsigned int samples_received(void) const + { + return (aud_info.samples_in_bytes(bytes_received)); + } - //if there is a buffer, discards current buffer - //memory and realloc a new memory buffer with a - //new size expressed in bytes. - void alloc_bytes( unsigned int ); + /* returns a pointer to the audio buffer */ + BYTE * audio_buffer(void) const + { + return audio_data; + } + /* frees memory and resets values */ + void clear(void); + audio_format & audinfo(void) + { + return aud_info; + } - //if there is a buffer, discards current buffer - //memory and realloc a new memory buffer with a - //new size expressed in seconds, integer and float. - void alloc_seconds( unsigned int ); - void alloc_seconds( float ); + /* discard audio data, resets values, but, instead of clear() which + frees memory, reset the memory to the initial size, ready for + receiving "new" audio data. */ + void reset(void); + /* truncates and discards unused memory. `buf_size' will be the same as `bytes_received' */ + void truncate(void) + { + truncate_(); + } /* TODO: fare truncate N bytes */ + /* if there is a buffer, discards current buffer memory and realloc + a new memory buffer with a new size expressed in bytes. */ + void alloc_bytes(unsigned int); - //resizes in bytes the current buffer, - //without discarding previsiously audio data received. - void resize_bytes( unsigned int ); + /* if there is a buffer, discards current buffer memory and realloc + a new memory buffer with a new size expressed in seconds, integer and float. */ + void alloc_seconds(unsigned int); + void alloc_seconds(float); + /* resizes in bytes the current buffer, without discarding + previsiously audio data received */ + void resize_bytes(unsigned int); - //resizes in seconds the current buffer, - //without discarding previsiously audio data received. + /* resizes in seconds the current buffer, without discarding + previsiously audio data received */ void resize_seconds( unsigned int ); void resize_seconds( float ); + /* Inherited Functions from `audio_receiver' */ + void audio_receive(unsigned char *, unsigned int); - - - - - - - - // - // Inherited Functions from `audio_receiver' - // - - void audio_receive( unsigned char *, unsigned int ); - - - - - // - // Inherited Functions from `audio_buffer' - // - - - unsigned int read( BYTE *, unsigned int ); - bool finished( void ); - - - + /* Inherited Functions from `audio_buffer' */ + unsigned int read(BYTE *, unsigned int); + bool finished(void); }; - - - - - - _AUDIO_NAMESPACE_END_ - - - - -#endif //ifdef _AUDIOMEMBUFFER__H_ +#endif /* _AUDIOMEMBUFFER__H_ */ diff --git a/reactos/base/applications/sndrec32/audio_producer.cpp b/reactos/base/applications/sndrec32/audio_producer.cpp index 805bec9e58e..bded23170a2 100644 --- a/reactos/base/applications/sndrec32/audio_producer.cpp +++ b/reactos/base/applications/sndrec32/audio_producer.cpp @@ -7,4 +7,3 @@ #include "stdafx.h" #include "audio_producer.hpp" - diff --git a/reactos/base/applications/sndrec32/audio_producer.hpp b/reactos/base/applications/sndrec32/audio_producer.hpp index 5490e27eeb3..0869674568c 100644 --- a/reactos/base/applications/sndrec32/audio_producer.hpp +++ b/reactos/base/applications/sndrec32/audio_producer.hpp @@ -8,120 +8,61 @@ #ifndef _AUDIOAUDBUF__H_ #define _AUDIOAUDBUF__H_ - - #include "audio_def.hpp" -//#include "audio_producer.hpp" - - - - - _AUDIO_NAMESPACE_START_ - - - - class audio_producer { - - protected: - - unsigned int bytes_played_; - - - - public: + /* Ctors */ + audio_producer() : bytes_played_(0), play_finished(0) + { + } + /* Dtor */ + virtual ~audio_producer(void) + { + } - // - // Ctors - // - - audio_producer ( ) : bytes_played_( 0 ), play_finished ( 0 ) - { } - - - - - - - - - - // - // Dtor - // - - virtual ~audio_producer( void ) - { } - - - - - // - // Public Functions - // - - - //reads N bytes from the buffer - virtual unsigned int read( BYTE *, unsigned int ) = 0; - - virtual bool finished ( void ) = 0; - + /* Public Functions */ + /* reads N bytes from the buffer */ + virtual unsigned int read(BYTE *, unsigned int) = 0; + virtual bool finished(void) = 0; - unsigned int bytes_played( void ) const + unsigned int bytes_played(void) const { return bytes_played_; } - - void set_position( unsigned int pos ) + void set_position(unsigned int pos) { bytes_played_ = pos; } - void set_position_start( void ) + void set_position_start(void) { - bytes_played_ = 0 ; + bytes_played_ = 0; } - - - void forward( unsigned int bytes ) + void forward(unsigned int bytes) { - bytes_played_ += bytes ; + bytes_played_ += bytes; } - - void backward( unsigned int bytes ) + void backward(unsigned int bytes) { - bytes_played_ += bytes ; + bytes_played_ += bytes; } - void ( * play_finished )( void ); - - - - + void (* play_finished)(void); }; - - - _AUDIO_NAMESPACE_END_ - - - - - -#endif //ifdef _AUDIOAUDBUF__H_ +#endif /* _AUDIOAUDBUF__H_ */ diff --git a/reactos/base/applications/sndrec32/audio_receiver.hpp b/reactos/base/applications/sndrec32/audio_receiver.hpp index 1d79aafa02e..505a6f91aec 100644 --- a/reactos/base/applications/sndrec32/audio_receiver.hpp +++ b/reactos/base/applications/sndrec32/audio_receiver.hpp @@ -5,104 +5,44 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - - #ifndef _AUDIORECEIVER_DEF__H_ #define _AUDIORECEIVER_DEF__H_ - - #include "audio_def.hpp" - - - _AUDIO_NAMESPACE_START_ - - - - - - - - - class audio_receiver { - - // - // The `audio_wavein' class, while is - // recording audio, has to access to - // protected members of `audio_receiver' - // such as `bytes_received' protected - // variable. - // - - friend class audio_wavein; - - - - - + /* The `audio_wavein' class, while is recording audio, has to access to + protected members of `audio_receiver' such as `bytes_received' + protected variable */ + friend class audio_wavein; protected: - - unsigned int bytes_received; - - public: - - - // - // Ctors - // - - audio_receiver( void ) - : bytes_received( 0 ) - { } - - - - - - // - // Dtor - // - - virtual ~audio_receiver( void ) - { } - - - - - // - // Public Functions - // + /* Ctors */ + audio_receiver(void) : bytes_received(0) + { + } - virtual void audio_receive( unsigned char *, unsigned int ) = 0; - + /* Dtor */ + virtual ~audio_receiver(void) + { + } + /* Public Functions */ + virtual void audio_receive(unsigned char *, unsigned int) = 0; - void set_b_received( unsigned int r ) - { bytes_received = r; } + void set_b_received(unsigned int r) + { + bytes_received = r; + } }; - - - - - - _AUDIO_NAMESPACE_END_ - - - - - - -#endif //ifdef _AUDIORECEIVER_DEF__H_ +#endif /* _AUDIORECEIVER_DEF__H_ */ diff --git a/reactos/base/applications/sndrec32/audio_resampler_acm.cpp b/reactos/base/applications/sndrec32/audio_resampler_acm.cpp index 32b7b4f63fe..27a30b8efda 100644 --- a/reactos/base/applications/sndrec32/audio_resampler_acm.cpp +++ b/reactos/base/applications/sndrec32/audio_resampler_acm.cpp @@ -5,403 +5,206 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - #include "stdafx.h" #include "audio_resampler_acm.hpp" -//#include - - _AUDIO_NAMESPACE_START_ - -///////////////////////////////////////// -/////// Private Functions //////// -///////////////////////////////////////// - +/* Private Functions */ void -audio_resampler_acm::init_( void ) +audio_resampler_acm::init_(void) { + /* Zeroing structures */ + ZeroMemory(&acm_header, sizeof(ACMSTREAMHEADER)); + ZeroMemory(&wformat_src, sizeof(WAVEFORMATEX)); + ZeroMemory(&wformat_dst, sizeof(WAVEFORMATEX)); + /* Setting structures sizes */ + acm_header.cbStruct = sizeof(ACMSTREAMHEADER); + wformat_src.cbSize = sizeof(WAVEFORMATEX); + wformat_dst.cbSize = sizeof(WAVEFORMATEX); - - // - // Zeroing structures - // - - ZeroMemory( &acm_header, sizeof( ACMSTREAMHEADER )); - ZeroMemory( &wformat_src, sizeof( WAVEFORMATEX )); - ZeroMemory( &wformat_dst, sizeof( WAVEFORMATEX )); - - - - - // - // Setting structures sizes - // - - acm_header.cbStruct = sizeof( ACMSTREAMHEADER ); - wformat_src.cbSize = sizeof( WAVEFORMATEX ); - wformat_dst.cbSize = sizeof( WAVEFORMATEX ); - - - - - // - // Setting WAVEFORMATEX structure parameters - // according to `audio_format' in/out classes - // + /* Setting WAVEFORMATEX structure parameters + according to `audio_format' in/out classes */ wformat_src.wFormatTag = WAVE_FORMAT_PCM; wformat_src.nSamplesPerSec = audfmt_in.sample_rate(); wformat_src.nChannels = audfmt_in.channels(); wformat_src.wBitsPerSample = audfmt_in.bits(); - wformat_src.nAvgBytesPerSec = audfmt_in.byte_rate(); + wformat_src.nAvgBytesPerSec = audfmt_in.byte_rate(); wformat_src.nBlockAlign = audfmt_in.block_align(); - wformat_dst.wFormatTag = WAVE_FORMAT_PCM; wformat_dst.nSamplesPerSec = audfmt_out.sample_rate(); wformat_dst.nChannels = audfmt_out.channels(); wformat_dst.wBitsPerSample = audfmt_out.bits(); - wformat_dst.nAvgBytesPerSec = audfmt_out.byte_rate(); + wformat_dst.nAvgBytesPerSec = audfmt_out.byte_rate(); wformat_dst.nBlockAlign = audfmt_out.block_align(); - - - // - // Init acm structures completed successfull - // + /* Init acm structures completed successfull */ } - - - - - - - - - - -///////////////////////////////////////// -/////// Public Functions //////// -///////////////////////////////////////// - - - +/* Public Functions */ void -audio_resampler_acm::open( void ) +audio_resampler_acm::open(void) { - - MMRESULT err; + /* Opens ACM stream */ + err = acmStreamOpen(&acm_stream, + 0, + &wformat_src, + &wformat_dst, + 0, 0, 0, + ACM_STREAMOPENF_NONREALTIME); - // - // Opens ACM stream - // - - err = acmStreamOpen( &acm_stream, 0, &wformat_src, &wformat_dst, - 0, 0, 0, ACM_STREAMOPENF_NONREALTIME ); - - - if ( err != MMSYSERR_NOERROR ) + if (err != MMSYSERR_NOERROR) { - //TODO: throw error - MessageBox( 0, _T("acmOpen error: %i"), _T("ERROR"), MB_ICONERROR ); - + /* TODO: throw error */ + MessageBox(0, _T("acmOpen error: %i"), _T("ERROR"), MB_ICONERROR); } + /* Calcs source buffer length */ + src_buflen = (unsigned int)((float)audfmt_in.byte_rate() * (float)buf_secs); + /* Calcs destination source buffer length with help of ACM apis */ + err = acmStreamSize(acm_stream, + src_buflen, + &dst_buflen, + ACM_STREAMSIZEF_SOURCE); - // - // Calcs source buffer length - // - - src_buflen = ( unsigned int ) - (( float )audfmt_in.byte_rate() * ( float )buf_secs ); - - - - - - - // - // Calcs destination source buffer length - // with help of ACM apis - // - - err = acmStreamSize( acm_stream, - src_buflen, &dst_buflen, ACM_STREAMSIZEF_SOURCE ); - - - if ( err != MMSYSERR_NOERROR ) + if (err != MMSYSERR_NOERROR) { - //TODO: throw error - MessageBox( 0, _T("acmStreamSize error"), _T("ERROR"), MB_ICONERROR ); - - + /* TODO: throw error */ + MessageBox(0, _T("acmStreamSize error"), _T("ERROR"), MB_ICONERROR); } - - - // - // Initialize ACMSTREAMHEADER structure, - // and alloc memory for source and destination - // buffers. - // + /* Initialize ACMSTREAMHEADER structure, + and alloc memory for source and destination buffers */ acm_header.fdwStatus = 0; acm_header.dwUser = 0; - - acm_header.pbSrc = ( LPBYTE ) new BYTE [ src_buflen ]; + acm_header.pbSrc = (LPBYTE) new BYTE[src_buflen]; acm_header.cbSrcLength = src_buflen; acm_header.cbSrcLengthUsed = 0; acm_header.dwSrcUser = src_buflen; - - acm_header.pbDst = ( LPBYTE ) new BYTE [ dst_buflen ]; + acm_header.pbDst = (LPBYTE) new BYTE[dst_buflen]; acm_header.cbDstLength = dst_buflen; acm_header.cbDstLengthUsed = 0; acm_header.dwDstUser = dst_buflen; - - - - // - // Give ACMSTREAMHEADER initialized correctly to the - // driver. - // - - err = acmStreamPrepareHeader( acm_stream, &acm_header, 0L ); - - if ( err != MMSYSERR_NOERROR ) + /* Give ACMSTREAMHEADER initialized correctly to the driver */ + err = acmStreamPrepareHeader(acm_stream, &acm_header, 0L); + if (err != MMSYSERR_NOERROR) { - //TODO: throw error - MessageBox( 0, _T("acmStreamPrepareHeader error"), _T("ERROR"), MB_ICONERROR ); - - + /* TODO: throw error */ + MessageBox(0, _T("acmStreamPrepareHeader error"), _T("ERROR"), MB_ICONERROR); } - - - - // - // ACM stream successfully opened. - // - + /* ACM stream successfully opened */ stream_opened = true; - } - - - void -audio_resampler_acm::close( void ) +audio_resampler_acm::close(void) { - - MMRESULT err; - - if ( acm_stream ) + if (acm_stream) { - - if ( acm_header.fdwStatus & ACMSTREAMHEADER_STATUSF_PREPARED ) + if (acm_header.fdwStatus & ACMSTREAMHEADER_STATUSF_PREPARED) { - acm_header.cbSrcLength = src_buflen; acm_header.cbDstLength = dst_buflen; - err = acmStreamUnprepareHeader( acm_stream, &acm_header, 0L ); - - - if ( err != MMSYSERR_NOERROR ) + err = acmStreamUnprepareHeader(acm_stream, &acm_header, 0L); + if (err != MMSYSERR_NOERROR) { - - // - // Free buffer memory - // - - if ( acm_header.pbSrc != 0 ) + /* Free buffer memory */ + if (acm_header.pbSrc != 0) delete[] acm_header.pbSrc; - if ( acm_header.pbDst != 0 ) + if (acm_header.pbDst != 0) delete[] acm_header.pbDst; - - // - // Re-init structures - // - + /* Re-init structures */ init_(); - - // - // Updating status - // - + /* Updating status */ stream_opened = false; - - - //TODO: throw error - MessageBox( 0, _T("acmStreamUnPrepareHeader error"), _T("ERROR"), MB_ICONERROR ); - - + /* TODO: throw error */ + MessageBox(0, _T("acmStreamUnPrepareHeader error"), _T("ERROR"), MB_ICONERROR); } } - - err = acmStreamClose( acm_stream, 0 ); + err = acmStreamClose(acm_stream, 0); acm_stream = 0; - if ( err != MMSYSERR_NOERROR ) + if (err != MMSYSERR_NOERROR) { - - // - // Free buffer memory - // - - if ( acm_header.pbSrc != 0 ) + /* Free buffer memory */ + if (acm_header.pbSrc != 0) delete[] acm_header.pbSrc; - if ( acm_header.pbDst != 0 ) + if (acm_header.pbDst != 0) delete[] acm_header.pbDst; - - // - // Re-init structures - // - + /* Re-init structures */ init_(); - - - // - // Updating status - // - + /* Updating status */ stream_opened = false; - - - //TODO: throw error! - - MessageBox( 0, _T("acmStreamClose error"), _T("ERROR"), MB_ICONERROR ); - - + /* TODO: throw error! */ + MessageBox(0, _T("acmStreamClose error"), _T("ERROR"), MB_ICONERROR); } + } /* if acm_stream != 0 */ - }//if acm_stream != 0 - - - - - - - // - // Free buffer memory - // - - if ( acm_header.pbSrc != 0 ) + /* Free buffer memory */ + if (acm_header.pbSrc != 0) delete[] acm_header.pbSrc; - if ( acm_header.pbDst != 0 ) + if (acm_header.pbDst != 0) delete[] acm_header.pbDst; - - // - // Re-init structures - // - + /* Re-init structures */ init_(); - - - // - // Updating status - // - + /* Updating status */ stream_opened = false; - - - // - // ACM sream successfully closed. - // - - + /* ACM sream successfully closed */ } - - - void -audio_resampler_acm::audio_receive( unsigned char * data, unsigned int size ) +audio_resampler_acm::audio_receive(unsigned char *data, unsigned int size) { - MMRESULT err; - // - // Checking for acm stream opened - // - - if ( stream_opened ) + /* Checking for acm stream opened */ + if (stream_opened) { - - - // - // Copy audio data from extern to - // internal source buffer - // - - memcpy( acm_header.pbSrc, data, size ); - + /* Copy audio data from extern to internal source buffer */ + memcpy(acm_header.pbSrc, data, size); acm_header.cbSrcLength = size; acm_header.cbDstLengthUsed = 0; - err = acmStreamConvert( acm_stream, &acm_header, ACM_STREAMCONVERTF_BLOCKALIGN ); + err = acmStreamConvert(acm_stream, &acm_header, ACM_STREAMCONVERTF_BLOCKALIGN); - if ( err != MMSYSERR_NOERROR ) + if (err != MMSYSERR_NOERROR) { - //TODO: throw error - MessageBox( 0, _T("acmStreamConvert error"), _T("ERROR"), MB_ICONERROR ); - - + /* TODO: throw error */ + MessageBox(0, _T("acmStreamConvert error"), _T("ERROR"), MB_ICONERROR); } + /* Wait for sound conversion */ + while ((ACMSTREAMHEADER_STATUSF_DONE & acm_header.fdwStatus) == 0); - // - // Wait for sound conversion - // - - while(( ACMSTREAMHEADER_STATUSF_DONE & acm_header.fdwStatus ) == 0 ); - - - - - - // - // Copy resampled audio, to destination buffer. - // - - //memcpy( pbOutputData, acm_header.pbDst, acm_header.cbDstLengthUsed ); - - + /* Copy resampled audio, to destination buffer */ + //memcpy(pbOutputData, acm_header.pbDst, acm_header.cbDstLengthUsed); } - } - - - - - - - - - _AUDIO_NAMESPACE_END_ diff --git a/reactos/base/applications/sndrec32/audio_resampler_acm.hpp b/reactos/base/applications/sndrec32/audio_resampler_acm.hpp index d68d1e29d64..8e5d8e3e761 100644 --- a/reactos/base/applications/sndrec32/audio_resampler_acm.hpp +++ b/reactos/base/applications/sndrec32/audio_resampler_acm.hpp @@ -5,34 +5,21 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - #ifndef _AUDIORESAMPLERACM__H_ #define _AUDIORESAMPLERACM__H_ - - -//#include "audio_def.hpp" #include "audio_receiver.hpp" #include "audio_format.hpp" - - - _AUDIO_NAMESPACE_START_ - - -//TODO: inherit from a base resampler? +/* TODO: inherit from a base resampler? */ class audio_resampler_acm : public audio_receiver { - private: - void init_( void ); - + void init_(void); protected: - - HACMSTREAM acm_stream; ACMSTREAMHEADER acm_header; DWORD src_buflen; @@ -47,61 +34,31 @@ class audio_resampler_acm : public audio_receiver WAVEFORMATEX wformat_src; WAVEFORMATEX wformat_dst; - - - public: - - - // - // Ctors - // - - audio_resampler_acm( audio_format fmt_in, audio_format fmt_out ) - : acm_stream( 0 ), src_buflen( 0 ), dst_buflen( 0 ), - stream_opened( false ), audfmt_in( fmt_in ), audfmt_out( fmt_out ), - buf_secs( _AUDIO_DEFAULT_BUFSECS ) - - { - - + /* Ctors */ + audio_resampler_acm(audio_format fmt_in, + audio_format fmt_out) : acm_stream(0), + src_buflen(0), + dst_buflen(0), + stream_opened(false), + audfmt_in(fmt_in), + audfmt_out(fmt_out), + buf_secs(_AUDIO_DEFAULT_BUFSECS) + { init_(); - - } + /* Dtor */ + ~audio_resampler_acm(void) + { + } - - - - // - // Dtor - // - - ~audio_resampler_acm( void ) - { } - - - - // - // Public functions - // - - void open( void ); - void close( void ); - - - - void audio_receive( unsigned char *, unsigned int ); - - - + /* Public functions */ + void open(void); + void close(void); + void audio_receive(unsigned char *, unsigned int); }; - _AUDIO_NAMESPACE_END_ - - - -#endif //ifdef _AUDIORESAMPLERACM_H_ +#endif /* _AUDIORESAMPLERACM__H_ */ diff --git a/reactos/base/applications/sndrec32/audio_wavein.cpp b/reactos/base/applications/sndrec32/audio_wavein.cpp index 00dc08ae514..5e5954e1a41 100644 --- a/reactos/base/applications/sndrec32/audio_wavein.cpp +++ b/reactos/base/applications/sndrec32/audio_wavein.cpp @@ -5,875 +5,415 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - - #include "stdafx.h" #include "audio_wavein.hpp" - - _AUDIO_NAMESPACE_START_ - void -audio_wavein::init_( void ) +audio_wavein::init_(void) { - ZeroMemory(( LPVOID ) &wave_format, - sizeof( WAVEFORMATEX )); - - wave_format.cbSize = sizeof( WAVEFORMATEX ); - + ZeroMemory((LPVOID)&wave_format, sizeof(WAVEFORMATEX)); + wave_format.cbSize = sizeof(WAVEFORMATEX); wavein_handle = 0; recthread_id = 0; wakeup_recthread = 0; - data_flushed_event = 0; - buf_secs = _AUDIO_DEFAULT_WAVEINBUFSECS; - - status = WAVEIN_NOTREADY; } - void -audio_wavein::alloc_buffers_mem_( unsigned int buffs, float secs ) +audio_wavein::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_wavein::free_buffers_mem_( void ) +audio_wavein::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_wavein::init_headers_( void ) +audio_wavein::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; - - - // - // Initializes headers. - // - - for ( unsigned int i = 0; i < buffers; ++i ) + /* This is the base address for one buffer */ + BYTE *buf_addr = main_buffer; + /* Initializes headers */ + for (unsigned int i = 0; i < buffers; ++i) { - wave_headers[ i ].dwBufferLength = mb_size / buffers; - wave_headers[ i ].lpData = ( LPSTR ) buf_addr; - + wave_headers[i].dwBufferLength = mb_size / buffers; + wave_headers[i].lpData = (LPSTR)buf_addr; buf_addr += buf_sz; } - } - void -audio_wavein::prep_headers_( void ) +audio_wavein::prep_headers_(void) { MMRESULT err; bool error = false; - - // - // If there is no memory for memory or - // headers, throw error. - // - - if (( !wave_headers ) - || ( !main_buffer ) || ( !wavein_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) || (!wavein_handle)) { - err = waveInPrepareHeader( wavein_handle, - &wave_headers[ i ], sizeof( WAVEHDR )); - + /* TODO: throw error! */ + } - if ( err != MMSYSERR_NOERROR ) + for (unsigned int i = 0; i < buffers; ++i) + { + err = waveInPrepareHeader(wavein_handle, &wave_headers[i], sizeof(WAVEHDR)); + if (err != MMSYSERR_NOERROR) error = true; - } - - - if ( error ) - MessageBox( 0, TEXT("waveInPrepareHeader Error."), 0, 0 ); - - + if (error) + MessageBox(0, TEXT("waveInPrepareHeader Error."), 0, 0); } void -audio_wavein::unprep_headers_( void ) +audio_wavein::unprep_headers_(void) { MMRESULT err; bool error = false; - - - // - // If there is no memory for memory or - // headers, throw error. - // - - if (( !wave_headers ) - || ( !main_buffer ) || ( !wavein_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) || (!wavein_handle)) { - err = waveInUnprepareHeader( wavein_handle, - &wave_headers[ i ], sizeof( WAVEHDR )); - + /* TODO: throw error! */ + } - if ( err != MMSYSERR_NOERROR ) + for (unsigned int i = 0; i < buffers; ++i) + { + err = waveInUnprepareHeader(wavein_handle, &wave_headers[i], sizeof(WAVEHDR)); + if (err != MMSYSERR_NOERROR) error = true; - } - - - if ( error ) - MessageBox( 0, TEXT("waveInUnPrepareHeader Error."), 0, 0 ); + if (error) + MessageBox(0, TEXT("waveInUnPrepareHeader Error."), 0, 0); } - void -audio_wavein::add_buffers_to_driver_( void ) +audio_wavein::add_buffers_to_driver_(void) { MMRESULT err; bool error = false; - - - // - // If there is no memory for memory or - // headers, throw error. - // - - if (( !wave_headers ) - || ( !main_buffer ) || ( !wavein_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) || (!wavein_handle)) { - err = waveInAddBuffer( wavein_handle, - &wave_headers[ i ], sizeof( WAVEHDR )); - + /* TODO: throw error! */ + } - if ( err != MMSYSERR_NOERROR ) + for (unsigned int i = 0; i < buffers; ++i) + { + err = waveInAddBuffer(wavein_handle, &wave_headers[i], sizeof(WAVEHDR)); + if (err != MMSYSERR_NOERROR) error = true; - } - - - if ( error ) - MessageBox( 0, TEXT("waveInAddBuffer Error."), 0, 0 ); + if (error) + MessageBox(0, TEXT("waveInAddBuffer Error."), 0, 0); } - - void -audio_wavein::close( void ) +audio_wavein::close(void) { - - - - - // - // If wavein object is already in the status - // NOTREADY, nothing to do. - // - - if ( status == WAVEIN_NOTREADY ) + /* If wavein object is already in the status NOTREADY, nothing to do */ + if (status == WAVEIN_NOTREADY) return; - - - // - // If the wavein is recording, - // then stop recording and close it. - // - - if ( status == WAVEIN_RECORDING ) + /* If the wavein is recording, then stop recording and close it */ + if (status == WAVEIN_RECORDING) stop_recording(); - - // - // Updating status. - // - + /* Updating status */ status = WAVEIN_NOTREADY; + /* Wakeing up recording thread, so it can receive + the `MM_WIM_CLOSE' message then dies */ + if (wakeup_recthread) + SetEvent(wakeup_recthread); + /* Closing wavein stream */ + while ((waveInClose(wavein_handle)) != MMSYSERR_NOERROR) + Sleep(1); - - // - // Wakeing up recording thread, so it - // can receive the `MM_WIM_CLOSE' message - // then dies. - // - if ( wakeup_recthread ) - SetEvent( wakeup_recthread ); - - - - // - // Closing wavein stream - // - - while (( waveInClose( wavein_handle )) - != MMSYSERR_NOERROR ) Sleep( 1 ); - - - - // - // Release buffers memory. - // - + /* Release buffers memory */ free_buffers_mem_(); - - // - // Re-initialize variables to the - // initial state. - // - + /* Re-initialize variables to the initial state */ init_(); - } - void -audio_wavein::open( void ) +audio_wavein::open(void) { - MMRESULT err; HANDLE recthread_handle = 0; + /* Checkin the status of the object */ + if (status != WAVEIN_NOTREADY) + { + /* TODO: throw error */ + } - // - // Checkin the status of the object - // - - if ( status != WAVEIN_NOTREADY ) - {} //TODO: throw error - - - - // - // Creating the EVENT object that will be signaled - // when the recording thread has to wake up. - // - - wakeup_recthread = - CreateEvent( 0, FALSE, FALSE, 0 ); - - - data_flushed_event = - CreateEvent( 0, FALSE, FALSE, 0 ); - + /* Creating the EVENT object that will be signaled + when the recording thread has to wake up */ + wakeup_recthread = CreateEvent(0, FALSE, FALSE, 0); + data_flushed_event = CreateEvent(0, FALSE, FALSE, 0); - if (( !wakeup_recthread ) || ( !data_flushed_event )) + if ((!wakeup_recthread) || (!data_flushed_event)) { - - status = WAVEIN_ERR; - - MessageBox( 0, TEXT("Thread Error."), 0, 0 ); - - //TODO: throw error + MessageBox(0, TEXT("Thread Error."), 0, 0); + /* 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 - // - - recthread_handle = - CreateThread( NULL, - 0, - audio_wavein::recording_procedure, - ( PVOID ) this, - 0, - &recthread_id - ); - - - - // - // Checking thread handle - // - - if ( !recthread_handle ) + /* Creating the recording thread */ + recthread_handle = CreateThread(NULL, + 0, + audio_wavein::recording_procedure, + (PVOID)this, + 0, + &recthread_id); + /* Checking thread handle */ + if (!recthread_handle) { - - // - // Updating status - // - + /* Updating status */ status = WAVEIN_ERR; - - MessageBox( 0, TEXT("Thread Error."), 0, 0 ); - //TODO: throw error - + MessageBox(0, TEXT("Thread Error."), 0, 0); + /* 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(recthread_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( recthread_handle ); - + /* Opening audio line wavein */ + err = waveInOpen(&wavein_handle, + 0, + &wave_format, + recthread_id, + 0, + CALLBACK_THREAD); - - // - // Opening audio line wavein - // - - err = waveInOpen( &wavein_handle, - 0, - &wave_format, - recthread_id, - 0, - CALLBACK_THREAD - ); - - - if ( err != MMSYSERR_NOERROR ) + if (err != MMSYSERR_NOERROR) { - - - // - // Updating status - // - + /* Updating status */ status = WAVEIN_ERR; - if ( err == WAVERR_BADFORMAT ) - MessageBox( 0, TEXT("waveInOpen Error"), 0, 0 ); - + if (err == WAVERR_BADFORMAT) + MessageBox(0, TEXT("waveInOpen Error"), 0, 0); - //TODO: throw error + /* TODO: throw error */ } - - // - // Update object status - // - + /* Update object status */ status = WAVEIN_READY; - - - // - // Now `audio_wavein' object is ready - // for audio recording! - // + /* Now `audio_wavein' object is ready for audio recording! */ } - - void -audio_wavein::start_recording( void ) +audio_wavein::start_recording(void) { - MMRESULT err; BOOL ev; + if ((status != WAVEIN_READY) && (status != WAVEIN_STOP)) + { + /* TODO: throw error */ + } - - if (( status != WAVEIN_READY ) - && ( status != WAVEIN_STOP )) - {} //TODO: throw error - - - - - // - // Updating to the recording status - // - + /* Updating to the recording status */ status = WAVEIN_RECORDING; - - - - // - // Let's prepare header of type WAVEHDR that - // we will pass to the driver with our - // audio informations, and buffer informations. - // - + /* Let's prepare header of type WAVEHDR that we will pass to the driver + with our audio informations, and buffer informations */ prep_headers_(); - - - // - // The waveInAddBuffer function sends an input buffer - // to the given waveform-audio input device. - // When the buffer is filled, the application is notified. - // - + /* The waveInAddBuffer function sends an input buffer to the given waveform-audio + input device. When the buffer is filled, the application is notified. */ add_buffers_to_driver_(); + /* Signaling event for waking up the recorder thread */ + ev = SetEvent(wakeup_recthread); + if (!ev) + MessageBox(0, TEXT("Event Error."), 0, 0); - - - - // - // Signaling event for waking up - // the recorder thread. - // - - ev = SetEvent( wakeup_recthread ); - - - if ( !ev ) + /* Start recording */ + err = waveInStart(wavein_handle); + if (err != MMSYSERR_NOERROR) { - - - MessageBox( 0, TEXT("Event Error."), 0, 0 ); - - } - - - // - // Start recording - // - - - err = waveInStart( wavein_handle ); - - - if ( err != MMSYSERR_NOERROR ) - { - - // - // Updating status - // - + /* Updating status */ status = WAVEIN_ERR; - - MessageBox( 0, TEXT("waveInStart Error."), 0, 0 ); - - - //TODO: throw error - + MessageBox(0, TEXT("waveInStart Error."), 0, 0); + /* TODO: throw error */ } - } - - void -audio_wavein::stop_recording( void ) +audio_wavein::stop_recording(void) { - - MMRESULT err; - if ( status != WAVEIN_RECORDING ) + if (status != WAVEIN_RECORDING) return; - - status = WAVEIN_FLUSHING; - - // - // waveInReset will make all pending buffer as done. - // - - err = waveInReset( wavein_handle ); - - + /* waveInReset will make all pending buffer as done */ + err = waveInReset(wavein_handle); if ( err != MMSYSERR_NOERROR ) { - - //TODO: throw error - - MessageBox( 0, TEXT("waveInReset Error."), 0, 0 ); - - - + /* TODO: throw error */ + MessageBox(0, TEXT("waveInReset Error."), 0, 0); } - - if ( data_flushed_event ) + if (data_flushed_event) WaitForSingleObject(data_flushed_event, INFINITE); - - - - - - - // - // Stop recording. - // - - err = waveInStop( wavein_handle ); - - - if ( err != MMSYSERR_NOERROR ) + /* Stop recording */ + err = waveInStop(wavein_handle); + if (err != MMSYSERR_NOERROR) { - - //TODO: throw error - - MessageBox( 0, TEXT("waveInStop Error."), 0, 0 ); - - - + /* TODO: throw error */ + MessageBox(0, TEXT("waveInStop Error."), 0, 0); } - - // - // The waveInUnprepareHeader function cleans up the - // preparation performed by the waveInPrepareHeader function. - // - + /* The waveInUnprepareHeader function cleans up the preparation performed + by the waveInPrepareHeader function */ unprep_headers_(); - - - - - - - - - - status = WAVEIN_STOP; - } - - DWORD WINAPI -audio_wavein::recording_procedure( LPVOID arg ) +audio_wavein::recording_procedure(LPVOID arg) { - - MSG msg; - WAVEHDR * phdr; - audio_wavein * _this = ( audio_wavein * ) arg; - - - - - // - // Check the arg pointer - // + WAVEHDR *phdr; + audio_wavein *_this = (audio_wavein *)arg; - 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_recthread ) + /* 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_recthread) WaitForSingleObject(_this->wakeup_recthread, INFINITE); - - - - - - // - // If status of the `audio_wavein' object - // is not ready or recording the thread can exit. - // - - if (( _this->status != WAVEIN_READY ) && - ( _this->status != WAVEIN_RECORDING )) + /* If status of the `audio_wavein' object is not ready or recording the thread can exit */ + if ((_this->status != WAVEIN_READY) && (_this->status != WAVEIN_RECORDING)) return 0; - - - - - - - // - // 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_WIM_DATA: - - phdr = ( WAVEHDR * ) msg.lParam; + phdr = (WAVEHDR *)msg.lParam; - if (( _this->status == WAVEIN_RECORDING ) - || ( _this->status == WAVEIN_FLUSHING )) + if ((_this->status == WAVEIN_RECORDING) || + (_this->status == WAVEIN_FLUSHING)) { - - - if ( phdr->dwFlags & WHDR_DONE ) + if (phdr->dwFlags & WHDR_DONE) { + /* Flushes recorded audio data to the `audio_receiver' object */ + _this->audio_rcvd.audio_receive((unsigned char *)phdr->lpData, + phdr->dwBytesRecorded); - // - // Flushes recorded audio data to - // the `audio_receiver' object. - // - - _this->audio_rcvd.audio_receive( - ( unsigned char * )phdr->lpData, - phdr->dwBytesRecorded - ); - - - // - // Updating `audio_receiver' total - // bytes received _AFTER_ calling - // `audio_receive' function. - // - - _this->audio_rcvd.bytes_received += - phdr->dwBytesRecorded; + /* Updating `audio_receiver' total bytes received + _AFTER_ calling `audio_receive' function */ + _this->audio_rcvd.bytes_received += phdr->dwBytesRecorded; } - - - - // - // If status is not flushing data, then - // we can re-add the buffer for reusing it. - // Otherwise, if we are flushing pending data, - // we cannot re-add buffer because we don't need - // it anymore - // - - if ( _this->status != WAVEIN_FLUSHING ) - { - - // - // Let the audio driver reuse the buffer - // - - waveInAddBuffer( _this->wavein_handle, - phdr, sizeof( WAVEHDR )); - + /* If status is not flushing data, then we can re-add the buffer + for reusing it. Otherwise, if we are flushing pending data, + we cannot re-add buffer because we don't need it anymore */ + if (_this->status != WAVEIN_FLUSHING) + { + /* Let the audio driver reuse the buffer */ + waveInAddBuffer(_this->wavein_handle, phdr, sizeof(WAVEHDR)); } else { - - // - // If we are flushing pending data, we have - // to prepare to stop recording. - // Set WAVEHDR flag to 0, and fires the event - // `data_flushed_event', that will wake up - // the main thread that is sleeping into - // wavein_in::stop_recording() member function, - // waiting the last `MM_WIM_DATA' message that - // contain pending data. - // + /* If we are flushing pending data, we have to prepare + to stop recording. Set WAVEHDR flag to 0, and fires + the event `data_flushed_event', that will wake up + the main thread that is sleeping into wavein_in::stop_recording() + member function, waiting the last `MM_WIM_DATA' message + that contain pending data */ phdr->dwFlags = 0; + SetEvent(_this->data_flushed_event); - SetEvent( _this->data_flushed_event ); - - - // - // The recording is gooing to stop, so the - // recording thread can go to sleep! - // - + /* The recording is gooing to stop, so the recording thread can go to sleep! */ WaitForSingleObject(_this->wakeup_recthread, INFINITE); - } - - - }//if WAVEIN_RECORDING || WAVEIN_FLUSHING - + } /* if WAVEIN_RECORDING || WAVEIN_FLUSHING */ break; - - - - - - - - case MM_WIM_CLOSE: - - // - // The thread can exit now. - // - + /* The thread can exit now */ return 0; - break; + } /* end switch(msg.message) */ + } /* end while(GetMessage(...)) */ - - - } //end switch( msg.message ) - - } //end while( GetMessage( ... )) - - return 0; + return 0; } - - - - - _AUDIO_NAMESPACE_END_ diff --git a/reactos/base/applications/sndrec32/audio_wavein.hpp b/reactos/base/applications/sndrec32/audio_wavein.hpp index 6ec0879589e..0810649945f 100644 --- a/reactos/base/applications/sndrec32/audio_wavein.hpp +++ b/reactos/base/applications/sndrec32/audio_wavein.hpp @@ -5,324 +5,189 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - #ifndef _AUDIOWAVEIN_H_ #define _AUDIOWAVEIN_H_ - - -//#include "audio_def.hpp" #include "audio_format.hpp" #include "audio_receiver.hpp" - - _AUDIO_NAMESPACE_START_ - - - -enum audio_wavein_status { WAVEIN_NOTREADY, WAVEIN_READY, - WAVEIN_RECORDING, WAVEIN_ERR, - WAVEIN_STOP, WAVEIN_FLUSHING - - }; - - - - +enum audio_wavein_status +{ + WAVEIN_NOTREADY, + WAVEIN_READY, + WAVEIN_RECORDING, + WAVEIN_ERR, + WAVEIN_STOP, + WAVEIN_FLUSHING +}; class audio_wavein { private: + /* The new recording thread sends message to this procedure + about open recording, close, and sound data recorded */ + static DWORD WINAPI recording_procedure(LPVOID); - - - // - // The new recording thread sends message to this procedure - // about open recording, close, and sound data recorded - // - - static DWORD WINAPI recording_procedure( LPVOID ); - - // - // When this event is signaled, then the previsiously created - // recording thread will wake up and start recording audio - // and will pass audio data to an `audio_receiver' object. - // - + /* When this event is signaled, then the previsiously created + recording thread will wake up and start recording audio + and will pass audio data to an `audio_receiver' object. */ HANDLE wakeup_recthread; HANDLE data_flushed_event; - - - protected: + /* TODO: puts these structs in private?! */ - -//TODO: puts these structs in private?! - - - - - // - // Audio wavein device stuff - // - - WAVEFORMATEX wave_format; - WAVEHDR * wave_headers; - HWAVEIN wavein_handle; - - - - + /* Audio wavein device stuff */ + WAVEFORMATEX wave_format; + WAVEHDR *wave_headers; + HWAVEIN wavein_handle; audio_format aud_info; - - audio_receiver & audio_rcvd; - - - - // - // Audio Recorder Thread id - // - - DWORD recthread_id; + audio_receiver &audio_rcvd; + /* Audio Recorder Thread id */ + DWORD recthread_id; - - - // - // Object status - // - + /* Object status */ audio_wavein_status status; - - - - - - - // - // How many seconds of audio - // can record the internal buffer - // before flushing audio data - // to the `audio_receiver' class? - // - + /* How many seconds of audio can record the internal buffer before + flushing audio data to the `audio_receiver' class? */ float buf_secs; - - // - // The temporary buffers for the audio - // data incoming from the wavein device - // and its size, and its total number. - // - - BYTE * main_buffer; + /* The temporary buffers for the audio data incoming from the wavein + device and its size, and its total number */ + BYTE *main_buffer; unsigned int mb_size; - unsigned int buffers; + /* Protected Functions */ + /* initialize all structures and variables */ + void init_(void); + void alloc_buffers_mem_(unsigned int, float); + void free_buffers_mem_(void); - - // - // Protected Functions - // - - - //initialize all structures and variables. - void init_( void ); - - void alloc_buffers_mem_( unsigned int, float ); - void free_buffers_mem_( void ); - - void init_headers_( void ); - void prep_headers_( void ); - void unprep_headers_( void ); - void add_buffers_to_driver_( void ); - - - - - - + void init_headers_(void); + void prep_headers_(void); + void unprep_headers_(void); + void add_buffers_to_driver_(void); public: - - - // - // Ctors - // - - audio_wavein( - const audio_format & a_info, audio_receiver & a_receiver ) - - : wave_headers( 0 ), - aud_info( a_info ), audio_rcvd( a_receiver ), - status( WAVEIN_NOTREADY ), main_buffer( 0 ), mb_size( 0 ), - buffers( _AUDIO_DEFAULT_WAVEINBUFFERS ) + /* Ctors */ + audio_wavein(const audio_format &a_info, + audio_receiver &a_receiver) : wave_headers(0), + aud_info(a_info), + audio_rcvd(a_receiver), + status(WAVEIN_NOTREADY), + main_buffer(0), + mb_size(0), + buffers(_AUDIO_DEFAULT_WAVEINBUFFERS) { - - // - // Initializing internal wavein data - // - - + /* Initializing internal wavein data */ init_(); - aud_info = a_info; } - - - - - - - // - // Dtor - // - - ~audio_wavein( void ) + /* Dtor */ + ~audio_wavein(void) { - //close(); TODO! - } + /* Public functions */ + void open(void); + void close(void); - // - // Public functions - // - - void open( void ); - void close ( void ); - - - void start_recording( void ); - void stop_recording( void ); - + void start_recording(void); + void stop_recording(void); - - audio_wavein_status current_status ( void ) const + audio_wavein_status current_status (void) const { return status; } - float buffer_secs( void ) const - { return buf_secs; } - - - void buffer_secs( float bsecs ) - { - // - // Some checking - // + float buffer_secs(void) const + { + return buf_secs; + } - if ( bsecs <= 0 ) + void buffer_secs(float bsecs) + { + /* Some checking */ + if (bsecs <= 0) return; - - // - // Set seconds length for each - // buffer. - // - + /* Set seconds length for each buffer */ buf_secs = bsecs; } - - unsigned int total_buffers( void ) const - { return buffers; } - - - - void total_buffers( unsigned int tot_bufs ) + unsigned int total_buffers(void) const { + return buffers; + } - // - // Some checking - // - - if ( tot_bufs == 0 ) + void total_buffers(unsigned int tot_bufs) + { + /* Some checking */ + if (tot_bufs == 0) return; - - // - // Sets the number of total buffers. - // - + /* Sets the number of total buffers */ buffers = tot_bufs; } + audio_format format(void) const + { + return aud_info; + } - audio_format format( void ) const - { return aud_info; } - - - - - BYTE * buf( void ) { return main_buffer; } - unsigned int bufsz( void ) { return mb_size; } - + BYTE *buf(void) + { + return main_buffer; + } - unsigned int samplevalue_max( void ) + unsigned int bufsz(void) { + return mb_size; + } - if ( aud_info.bits() == 16 ) - return (unsigned int )65535; + unsigned int samplevalue_max(void) + { + if (aud_info.bits() == 16) + return (unsigned int)65535; - else if ( aud_info.bits() == 8 ) + else if (aud_info.bits() == 8) return (unsigned int)255; - else + else return 0; } - - unsigned tot_samples_buf( void ) + unsigned tot_samples_buf(void) { - - - return aud_info.samples_in_bytes( mb_size ); - - + return aud_info.samples_in_bytes(mb_size); } - unsigned int nsample ( unsigned int nsamp ) + unsigned int nsample(unsigned int nsamp) { - - unsigned int svalue; - - - if ( aud_info.bits() == 16 ) - svalue = ( unsigned int ) abs( *(( short * ) (main_buffer + aud_info.bytes_in_samples( nsamp )))); - else if ( aud_info.bits() == 8 ) - svalue = (unsigned int)(( ptrdiff_t ) *(main_buffer + aud_info.bytes_in_samples( nsamp ))); - + if (aud_info.bits() == 16) + svalue = (unsigned int)abs(*((short *)(main_buffer + aud_info.bytes_in_samples(nsamp)))); + else if (aud_info.bits() == 8) + svalue = (unsigned int)((ptrdiff_t) *(main_buffer + aud_info.bytes_in_samples(nsamp))); else svalue = 0; return svalue; - } - - }; - - - _AUDIO_NAMESPACE_END_ - - - -#endif //ifdef _AUDIOWAVEIN_H_ +#endif /* _AUDIOWAVEIN_H_ */ diff --git a/reactos/base/applications/sndrec32/audio_waveout.cpp b/reactos/base/applications/sndrec32/audio_waveout.cpp index c49627d35bd..0814e85d4cd 100644 --- a/reactos/base/applications/sndrec32/audio_waveout.cpp +++ b/reactos/base/applications/sndrec32/audio_waveout.cpp @@ -5,988 +5,470 @@ * 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_ diff --git a/reactos/base/applications/sndrec32/audio_waveout.hpp b/reactos/base/applications/sndrec32/audio_waveout.hpp index 932bde75e89..cf3fd06b402 100644 --- a/reactos/base/applications/sndrec32/audio_waveout.hpp +++ b/reactos/base/applications/sndrec32/audio_waveout.hpp @@ -5,247 +5,142 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ - - - #ifndef _AUDIOWAVEOUT__H_ #define _AUDIOWAVEOUT__H_ - -//#include "audio_def.hpp" #include "audio_format.hpp" - - #include "audio_producer.hpp" - - _AUDIO_NAMESPACE_START_ - - - - -enum audio_waveout_status { WAVEOUT_NOTREADY, WAVEOUT_READY, - WAVEOUT_PLAYING, WAVEOUT_FLUSHING, - WAVEOUT_PAUSED, WAVEOUT_STOP, - WAVEOUT_ERR, - - }; - - - - +enum audio_waveout_status +{ + WAVEOUT_NOTREADY, + WAVEOUT_READY, + WAVEOUT_PLAYING, + WAVEOUT_FLUSHING, + WAVEOUT_PAUSED, + WAVEOUT_STOP, + WAVEOUT_ERR +}; class audio_waveout { - friend class audio_buffer; - - private: - - - static DWORD WINAPI - playing_procedure( LPVOID ); - - - + static DWORD WINAPI playing_procedure(LPVOID); HANDLE wakeup_playthread; - - - protected: + WAVEFORMATEX wave_format; + WAVEHDR *wave_headers; + HWAVEOUT waveout_handle; - - WAVEFORMATEX wave_format; - WAVEHDR * wave_headers; - HWAVEOUT waveout_handle; - - - - - - const audio_format & aud_info; - audio_producer & audio_buf; - - - - - - - // - // Audio Playing Thread id - // - - DWORD playthread_id; - - - + const audio_format &aud_info; + audio_producer &audio_buf; + /* Audio Playing Thread id */ + DWORD playthread_id; audio_waveout_status status; - - - - float buf_secs; + /* The temporary buffers for the audio data outgoing to the waveout + device and its size, and its total number */ + /* base address for entire memory */ + BYTE *main_buffer; - // - // The temporary buffers for the audio - // data outgoing to the waveout device - // and its size, and its total number. - // - - - //base address for entire memory - BYTE * main_buffer; - - //size in bytes for the entire memory + /* size in bytes for the entire memory */ unsigned int mb_size; - //number of little buffers + /* number of little buffers */ unsigned int buffers; + /* Protected Functions */ - - - - - // - // Protected Functions - // - - void init_( void ); - void alloc_buffers_mem_( unsigned int, float ); - void free_buffers_mem_( void ); - - - void init_headers_( void ); - void prep_headers_( void ); - void unprep_headers_( void ); - - - - - + void init_(void); + void alloc_buffers_mem_(unsigned int, float); + void free_buffers_mem_(void); + void init_headers_(void); + void prep_headers_(void); + void unprep_headers_(void); public: - - // - // Ctors - // - - audio_waveout( const audio_format & aud_fmt, - audio_producer & a_buf ) - - : wave_headers( 0 ), aud_info( aud_fmt ), - audio_buf( a_buf ), status( WAVEOUT_NOTREADY ), - main_buffer( 0 ), mb_size( 0 ), - buffers( _AUDIO_DEFAULT_WAVEOUTBUFFERS ) + /* Ctors */ + audio_waveout(const audio_format &aud_fmt, + audio_producer &a_buf) : wave_headers(0), + aud_info(aud_fmt), + audio_buf(a_buf), + status(WAVEOUT_NOTREADY), + main_buffer(0), + mb_size(0), + buffers(_AUDIO_DEFAULT_WAVEOUTBUFFERS) { - - // - // Initializing internal wavein data - // - - + /* Initializing internal wavein data */ init_(); - } - - - - - - // - // Dtor - // - - ~audio_waveout( void ) - { } - - - - - // - // Public Functions - // - - void open ( void ); - void play ( void ); - void pause ( void ); - void stop ( void ); - void close ( void ); - - - audio_waveout_status current_status( void ) - { return status; } - - + /* Dtor */ + ~audio_waveout(void) + { + } + /* Public Functions */ - BYTE * buf( void ) { return main_buffer; } - unsigned int bufsz( void ) { return mb_size; } + void open(void); + void play(void); + void pause(void); + void stop(void); + void close(void); + audio_waveout_status current_status(void) + { + return status; + } - unsigned int samplevalue_max( void ) + BYTE *buf(void) { + return main_buffer; + } - if ( aud_info.bits() == 16 ) - return (unsigned int )65535; + unsigned int bufsz(void) + { + return mb_size; + } - else if ( aud_info.bits() == 8 ) + unsigned int samplevalue_max(void) + { + if (aud_info.bits() == 16) + return (unsigned int)65535; + else if (aud_info.bits() == 8) return (unsigned int)255; - else return 0; } - - unsigned tot_samples_buf( void ) + unsigned tot_samples_buf(void) { - - - return aud_info.samples_in_bytes( mb_size ); - - + return aud_info.samples_in_bytes(mb_size); } - unsigned int nsample ( unsigned int nsamp ) + unsigned int nsample(unsigned int nsamp) { - - unsigned int svalue; - - - if ( aud_info.bits() == 16 ) - svalue = ( unsigned int ) abs( *(( short * ) (main_buffer + aud_info.bytes_in_samples( nsamp )))); - else if ( aud_info.bits() == 8 ) - svalue = (unsigned int)(( ptrdiff_t ) *(main_buffer + aud_info.bytes_in_samples( nsamp ))); - + if (aud_info.bits() == 16) + svalue = (unsigned int)abs(*((short *)(main_buffer + aud_info.bytes_in_samples(nsamp)))); + else if (aud_info.bits() == 8) + svalue = (unsigned int)((ptrdiff_t) *(main_buffer + aud_info.bytes_in_samples(nsamp))); else svalue = 0; return svalue; - } - - }; - - _AUDIO_NAMESPACE_END_ - - - -#endif //ifdef _AUDIOWAVEOUT__H_ +#endif /* _AUDIOWAVEOUT__H_ */ diff --git a/reactos/base/applications/sndrec32/kkaudio.hpp b/reactos/base/applications/sndrec32/kkaudio.hpp index 6638590056c..4031d122921 100644 --- a/reactos/base/applications/sndrec32/kkaudio.hpp +++ b/reactos/base/applications/sndrec32/kkaudio.hpp @@ -10,4 +10,4 @@ #include "audio_producer.hpp" #include "audio_receiver.hpp" -#endif //ifdef _KKAUDIO__H_ +#endif /* _AUDIO__H_ */ diff --git a/reactos/base/applications/sndrec32/sndrec32.cpp b/reactos/base/applications/sndrec32/sndrec32.cpp index 24b71d97087..6e3e77a8c64 100644 --- a/reactos/base/applications/sndrec32/sndrec32.cpp +++ b/reactos/base/applications/sndrec32/sndrec32.cpp @@ -5,26 +5,25 @@ * PROGRAMMERS: Marco Pagliaricci (irc: rendar) */ +#include "stdafx.h" +#include "sndrec32.h" + #ifndef _UNICODE #define gprintf _snprintf #else #define gprintf _snwprintf #endif -#include "stdafx.h" -#include "sndrec32.h" - HINSTANCE hInst; TCHAR szTitle[MAX_LOADSTRING]; TCHAR szWindowClass[MAX_LOADSTRING]; - -ATOM MyRegisterClass( HINSTANCE hInstance ); -ATOM MyRegisterClass_wave( HINSTANCE hInstance ); -BOOL InitInstance( HINSTANCE, int ); -BOOL InitInstance_wave( HWND, HINSTANCE, int ); -LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); -LRESULT CALLBACK WndProc_wave( HWND, UINT, WPARAM, LPARAM ); +ATOM MyRegisterClass(HINSTANCE hInstance); +ATOM MyRegisterClass_wave(HINSTANCE hInstance); +BOOL InitInstance(HINSTANCE, int); +BOOL InitInstance_wave(HWND, HINSTANCE, int); +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK WndProc_wave(HWND, UINT, WPARAM, LPARAM); BOOL win_first, wout_first; @@ -41,7 +40,6 @@ BOOL stopped_flag; BOOL isnew; BOOL display_dur; - DWORD slider_pos; WORD slider_min; WORD slider_max; @@ -61,53 +59,52 @@ TCHAR str_stereo[10]; BOOL path_set; -snd::audio_membuffer * AUD_BUF; -snd::audio_waveout * AUD_OUT; -snd::audio_wavein * AUD_IN; - +snd::audio_membuffer *AUD_BUF; +snd::audio_waveout *AUD_OUT; +snd::audio_wavein *AUD_IN; BOOL s_recording; - NONCLIENTMETRICS s_info; - RECT text_rect; RECT text2_rect; RECT cli; - -INT_PTR CALLBACK AboutDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) +INT_PTR +CALLBACK +AboutDlgProc(HWND hWnd, + UINT msg, + WPARAM wp, + LPARAM lp) { - switch (msg) - { - case WM_COMMAND: - switch (LOWORD(wp)) - { - case IDOK: - EndDialog(hWnd, 0); - return TRUE; - } - break; - case WM_CLOSE: - EndDialog(hWnd, 0); - return TRUE; - } - return FALSE; + switch (msg) + { + case WM_COMMAND: + switch (LOWORD(wp)) + { + case IDOK: + EndDialog(hWnd, 0); + return TRUE; + } + break; + case WM_CLOSE: + EndDialog(hWnd, 0); + return TRUE; + } + return FALSE; } - - -int APIENTRY _tWinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPTSTR lpCmdLine, - int nCmdShow) +int +APIENTRY +_tWinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPTSTR lpCmdLine, + int nCmdShow) { - UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); - MSG msg; HACCEL hAccelTable; @@ -127,69 +124,51 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, text2_rect.right = REFRESHB_CX; text2_rect.bottom = REFRESHB_CY; - // - // Retrieving defaul system font, and others - // system informations. - // - - SystemParametersInfo( - SPI_GETNONCLIENTMETRICS, - sizeof( NONCLIENTMETRICS ), - &s_info, - 0 - ); - - // - // Set font size - // + /* Retrieving defaul system font, and others system informations */ + SystemParametersInfo(SPI_GETNONCLIENTMETRICS, + sizeof(NONCLIENTMETRICS), + &s_info, + 0); + /* Set font size */ s_info.lfMenuFont.lfHeight = 14; - // - // Inits buttons bitmaps - // - - butbmps[0] = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP2_START )); - butbmps[1] = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP2_END )); - butbmps[2] = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP2_PLAY )); - butbmps[3] = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP2_STOP )); - butbmps[4] = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP2_REC )); + /* Inits buttons bitmaps */ - butbmps_dis[0] = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP2_START_DIS )); - butbmps_dis[1] = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP2_END_DIS )); - butbmps_dis[2] = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP2_PLAY_DIS )); - butbmps_dis[3] = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP2_STOP_DIS )); - butbmps_dis[4] = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP2_REC_DIS )); + butbmps[0] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2_START)); + butbmps[1] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2_END)); + butbmps[2] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2_PLAY)); + butbmps[3] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2_STOP)); + butbmps[4] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2_REC)); + butbmps_dis[0] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2_START_DIS)); + butbmps_dis[1] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2_END_DIS)); + butbmps_dis[2] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2_PLAY_DIS)); + butbmps_dis[3] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2_STOP_DIS)); + butbmps_dis[4] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP2_REC_DIS)); + /* Inits audio devices and buffers */ - // - // Inits audio devices and buffers - // - - snd::audio_membuffer AUD_buffer( snd::A44100_16BIT_STEREO ); - snd::audio_waveout AUD_waveout( snd::A44100_16BIT_STEREO, AUD_buffer ); - snd::audio_wavein AUD_wavein( snd::A44100_16BIT_STEREO, AUD_buffer ); + snd::audio_membuffer AUD_buffer(snd::A44100_16BIT_STEREO); + snd::audio_waveout AUD_waveout(snd::A44100_16BIT_STEREO, AUD_buffer); + snd::audio_wavein AUD_wavein(snd::A44100_16BIT_STEREO, AUD_buffer); AUD_buffer.play_finished = l_play_finished; AUD_buffer.audio_arrival = l_audio_arrival; AUD_buffer.buffer_resized = l_buffer_resized; - AUD_buffer.alloc_seconds( INITIAL_BUFREC_SECONDS ); + AUD_buffer.alloc_seconds(INITIAL_BUFREC_SECONDS); AUD_IN = &AUD_wavein; AUD_OUT = &AUD_waveout; AUD_BUF = &AUD_buffer; - // - // Inits slider default parameters - // + /* Inits slider default parameters */ slider_pos = 0; slider_min = 0; slider_max = SLIDER_W; - stopped_flag = FALSE; path_set = FALSE; isnew = TRUE; @@ -198,345 +177,254 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, samples_max = AUD_buffer.total_samples(); s_recording = false; - - // - // Inits strings - // - - LoadString( hInstance, - IDS_APP_TITLE, szTitle, MAX_LOADSTRING ); - - LoadString( hInstance, - IDC_REACTOS_SNDREC32, szWindowClass, MAX_LOADSTRING ); - - - LoadString( hInstance, - IDS_STRPOS, str_pos, MAX_LOADSTRING ); - - LoadString( hInstance, - IDS_STRDUR, str_dur, MAX_LOADSTRING ); - - LoadString( hInstance, - IDS_STRBUF, str_buf, MAX_LOADSTRING ); - - LoadString( hInstance, - IDS_STRFMT, str_fmt, MAX_LOADSTRING ); - - LoadString( hInstance, - IDS_STRCHAN, str_chan, MAX_LOADSTRING ); - - LoadString( hInstance, - IDS_STRMONO, str_mono, 10 ); - - LoadString( hInstance, - IDS_STRSTEREO, str_stereo, 10 ); - - - // - // Registers sndrec32 window class - // - - MyRegisterClass( hInstance ); - - MyRegisterClass_wave( hInstance ); - - - if ( !InitInstance( hInstance, nCmdShow )) + /* Inits strings */ + LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + LoadString(hInstance, IDC_REACTOS_SNDREC32, szWindowClass, MAX_LOADSTRING); + LoadString(hInstance, IDS_STRPOS, str_pos, MAX_LOADSTRING); + LoadString(hInstance, IDS_STRDUR, str_dur, MAX_LOADSTRING); + LoadString(hInstance, IDS_STRBUF, str_buf, MAX_LOADSTRING); + LoadString(hInstance, IDS_STRFMT, str_fmt, MAX_LOADSTRING); + LoadString(hInstance, IDS_STRCHAN, str_chan, MAX_LOADSTRING); + LoadString(hInstance, IDS_STRMONO, str_mono, 10); + LoadString(hInstance, IDS_STRSTEREO, str_stereo, 10); + + /* Registers sndrec32 window class */ + MyRegisterClass(hInstance); + MyRegisterClass_wave(hInstance); + + if (!InitInstance(hInstance, nCmdShow)) { - MessageBox( 0, TEXT( "CreateWindow() Error!" ), TEXT( "ERROR" ), MB_ICONERROR ); + MessageBox(0, TEXT("CreateWindow() Error!"), TEXT("ERROR"), MB_ICONERROR); return FALSE; } - - // - // Loads key accelerators - // - - hAccelTable = LoadAccelerators(hInstance, - MAKEINTRESOURCE( IDC_REACTOS_SNDREC32 )); - - - // - // Starts main loop - // + /* Loads key accelerators */ + hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_REACTOS_SNDREC32)); - while ( GetMessage( &msg, NULL, 0, 0 )) + /* Starts main loop */ + while (GetMessage(&msg, NULL, 0, 0)) { - if ( !TranslateAccelerator( msg.hwnd, hAccelTable, &msg )) + if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { - TranslateMessage( &msg ); - DispatchMessage( &msg ); + TranslateMessage(&msg); + DispatchMessage(&msg); } } - if ( wout_first ) + if (wout_first) { AUD_waveout.close(); - } - - if ( win_first ) + if (win_first) { AUD_wavein.close(); - } AUD_buffer.clear(); - return ( int )msg.wParam; + return (int)msg.wParam; } - - - ATOM -MyRegisterClass( HINSTANCE hInstance ) +MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); - wcex.style = CS_HREDRAW | CS_VREDRAW; - wcex.lpfnWndProc = WndProc; - wcex.cbClsExtra = 0; - wcex.cbWndExtra = 0; - wcex.hInstance = hInstance; - wcex.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_SNDREC32 )); - wcex.hCursor = LoadCursor( NULL, IDC_ARROW ); - wcex.hbrBackground = GetSysColorBrush(COLOR_BTNFACE); - wcex.lpszMenuName = MAKEINTRESOURCE( IDR_MENU1 ); - wcex.lpszClassName = szWindowClass; - wcex.hIconSm = LoadIcon( wcex.hInstance, MAKEINTRESOURCE( IDI_SNDREC32 )); - - - return RegisterClassEx( &wcex ); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SNDREC32)); + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = GetSysColorBrush(COLOR_BTNFACE); + wcex.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); + wcex.lpszClassName = szWindowClass; + wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SNDREC32)); + + return RegisterClassEx(&wcex); } BOOL -InitInstance( HINSTANCE hInstance, int nCmdShow ) +InitInstance(HINSTANCE hInstance, int nCmdShow) { - HWND hWnd; - - hInst = hInstance; - - hWnd = CreateWindow( - szWindowClass, - szTitle, - WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, - CW_USEDEFAULT, - CW_USEDEFAULT, - MAINWINDOW_W, - MAINWINDOW_H, - NULL, NULL, - hInstance, NULL - ); - - if (!hWnd) - { - return FALSE; - } - - ShowWindow(hWnd, nCmdShow); - UpdateWindow(hWnd); + HWND hWnd; + + hInst = hInstance; + + hWnd = CreateWindow(szWindowClass, + szTitle, + WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, + CW_USEDEFAULT, + CW_USEDEFAULT, + MAINWINDOW_W, + MAINWINDOW_H, + NULL, + NULL, + hInstance, + NULL); + if (!hWnd) + { + return FALSE; + } - main_win = hWnd; + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + main_win = hWnd; - return TRUE; + return TRUE; } - - - - ATOM -MyRegisterClass_wave( HINSTANCE hInstance ) +MyRegisterClass_wave(HINSTANCE hInstance) { WNDCLASSEX wcex; - wcex.cbSize = sizeof( WNDCLASSEX ); - - wcex.style = CS_HREDRAW | CS_VREDRAW; - wcex.lpfnWndProc = WndProc_wave; - wcex.cbClsExtra = 0; - wcex.cbWndExtra = 0; - wcex.hInstance = hInstance; - wcex.hIcon = 0; - wcex.hCursor = LoadCursor( NULL, IDC_ARROW ); - wcex.hbrBackground = ( HBRUSH )GetStockObject( BLACK_BRUSH ); - wcex.lpszMenuName = 0; - wcex.lpszClassName = TEXT( "sndrec32_wave" ); - wcex.hIconSm = 0; - + wcex.cbSize = sizeof(WNDCLASSEX); - return RegisterClassEx( &wcex ); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc_wave; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = 0; + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); + wcex.lpszMenuName = 0; + wcex.lpszClassName = TEXT("sndrec32_wave"); + wcex.hIconSm = 0; + + return RegisterClassEx(&wcex); } BOOL -InitInstance_wave( HWND f, HINSTANCE hInstance, int nCmdShow ) +InitInstance_wave(HWND f, + HINSTANCE hInstance, + int nCmdShow) { - HWND hWnd; - - hInst = hInstance; - - hWnd = CreateWindow( - TEXT( "sndrec32_wave" ), - TEXT(""), - WS_DLGFRAME|WS_VISIBLE|WS_CHILD, - WAVEBAR_X, - WAVEBAR_Y, - WAVEBAR_CX, - WAVEBAR_CY, - f, ( HMENU ) 8, - hInstance, 0 - ); - - if ( !hWnd ) - { - return FALSE; - } - - ShowWindow( hWnd, nCmdShow ); - UpdateWindow( hWnd ); + HWND hWnd; + + hInst = hInstance; + + hWnd = CreateWindow(TEXT("sndrec32_wave"), + TEXT(""), + WS_DLGFRAME | WS_VISIBLE | WS_CHILD, + WAVEBAR_X, + WAVEBAR_Y, + WAVEBAR_CX, + WAVEBAR_CY, + f, + (HMENU)8, + hInstance, + 0); + + if (!hWnd ) + { + return FALSE; + } - wave_win = hWnd; + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + wave_win = hWnd; - return TRUE; + return TRUE; } - -LRESULT CALLBACK -WndProc_wave( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) +LRESULT +CALLBACK +WndProc_wave(HWND hWnd, + UINT message, + WPARAM wParam, + LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; HPEN pen; - - - unsigned int max_h = ( cli.bottom / 2 ); + unsigned int max_h = (cli.bottom / 2); unsigned int samples; unsigned int x, line_h; - - - switch ( message ) + switch (message) { - - - case WM_CREATE: - - - GetClientRect( hWnd, &cli ); - - break; - - - case WM_PAINT: - - // - // Initialize hdc objects - // - - hdc = BeginPaint( hWnd, &ps ); - - pen = ( HPEN ) CreatePen( PS_SOLID, 1, WAVEBAR_COLOR ); - - SelectObject( hdc, ( HBRUSH )pen ); - - if ( AUD_OUT->current_status() == snd::WAVEOUT_PLAYING ) - { - - samples = AUD_OUT->tot_samples_buf(); - - - for ( unsigned int i = 0; i < WAVEBAR_CX; ++i ) + case WM_CREATE: + GetClientRect(hWnd, &cli); + break; + case WM_PAINT: + /* Initialize hdc objects */ + hdc = BeginPaint(hWnd, &ps); + pen = (HPEN)CreatePen(PS_SOLID, 1, WAVEBAR_COLOR); + SelectObject(hdc, (HBRUSH)pen); + if (AUD_OUT->current_status() == snd::WAVEOUT_PLAYING) { - - x = ( i * samples ) / WAVEBAR_CX; - - line_h = ( AUD_OUT->nsample( x ) * max_h ) / AUD_OUT->samplevalue_max(); - - - if ( line_h ) + samples = AUD_OUT->tot_samples_buf(); + for (unsigned int i = 0; i < WAVEBAR_CX; ++i) { - MoveToEx( hdc, i, max_h, 0 ); - LineTo( hdc, i, max_h - ( line_h * 2 )); - LineTo( hdc, i, max_h + ( line_h * 2 )); - } else - SetPixel( hdc, i, max_h, WAVEBAR_COLOR ); - + x = (i * samples) / WAVEBAR_CX; + line_h = (AUD_OUT->nsample(x) * max_h) / AUD_OUT->samplevalue_max(); + if (line_h) + { + MoveToEx(hdc, i, max_h, 0); + LineTo(hdc, i, max_h - (line_h * 2)); + LineTo(hdc, i, max_h + (line_h * 2)); + } + else + { + SetPixel(hdc, i, max_h, WAVEBAR_COLOR); + } + } } - - - } else if ( AUD_IN->current_status() == snd::WAVEIN_RECORDING ) { - - - samples = AUD_IN->tot_samples_buf(); - - - for ( unsigned int i = 0; i < WAVEBAR_CX; ++i ) + else if (AUD_IN->current_status() == snd::WAVEIN_RECORDING) { - - x = ( i * samples ) / WAVEBAR_CX; - - line_h = ( AUD_IN->nsample( x ) * max_h ) / AUD_IN->samplevalue_max(); - - - if ( line_h ) + samples = AUD_IN->tot_samples_buf(); + for (unsigned int i = 0; i < WAVEBAR_CX; ++i) { - MoveToEx( hdc, i, max_h, 0 ); - LineTo( hdc, i, max_h - ( line_h * 2 )); - LineTo( hdc, i, max_h + ( line_h * 2 )); - } else - SetPixel( hdc, i, max_h, WAVEBAR_COLOR ); - + x = (i * samples) / WAVEBAR_CX; + line_h = (AUD_IN->nsample(x) * max_h) / AUD_IN->samplevalue_max(); + if (line_h) + { + MoveToEx(hdc, i, max_h, 0); + LineTo(hdc, i, max_h - (line_h * 2)); + LineTo(hdc, i, max_h + (line_h * 2)); + } + else + { + SetPixel( hdc, i, max_h, WAVEBAR_COLOR ); + } + } + } + else + { + /* In standby mode draw a simple line */ + MoveToEx(hdc, 0, cli.bottom / 2, 0); + LineTo(hdc, WAVEBAR_CX, cli.bottom / 2); } + DeleteObject( pen ); + EndPaint( hWnd, &ps ); + break; - } else { - - // - // In standby mode draw a simple line. - // - - MoveToEx( hdc, 0, cli.bottom / 2, 0 ); - LineTo( hdc, WAVEBAR_CX, cli.bottom / 2 ); - - } - - - DeleteObject( pen ); - - EndPaint( hWnd, &ps ); - - break; - - - case WM_USER: - - - break; - - - default: - return DefWindowProc( hWnd, message, wParam, lParam ); - - + case WM_USER: + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); } - return 0; - } - - -LRESULT CALLBACK -WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) +LRESULT +CALLBACK +WndProc(HWND hWnd, + UINT message, + WPARAM wParam, + LPARAM lParam) { int wmId; TCHAR str_tmp[MAX_LOADSTRING]; @@ -545,682 +433,490 @@ WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) HFONT font; long long slid_samp = 0; - - - // - // Checking for global pointers to buffer and - // io audio devices. - // - - if (( !AUD_IN ) || ( !AUD_OUT ) || ( !AUD_BUF )) + /* Checking for global pointers to buffer and io audio devices */ + if ((!AUD_IN) || (!AUD_OUT) || (!AUD_BUF)) { - MessageBox( 0, TEXT("Buffer Error"), 0, 0 ); + MessageBox(0, TEXT("Buffer Error"), 0, 0); return 1; } - - switch ( message ) + switch (message) { - - - case WM_CREATE: - - - // - // Creating the wave bar - // - - if ( !InitInstance_wave( hWnd, hInst, SW_SHOWNORMAL )) - { - MessageBox( - 0, - TEXT( "CreateWindow() Error!" ), - TEXT( "ERROR" ), - MB_ICONERROR - ); - - return FALSE; - } - - - - - // - // Creating ALL the buttons - // - - for ( int i = 0; i < 5; ++ i ) - { - - buttons[i] = CreateWindow( - TEXT("button"), - TEXT(""), - WS_CHILD|WS_VISIBLE|BS_BITMAP, - BUTTONS_CX + ( i * (BUTTONS_W+((i == 0)?0:BUTTONS_SPACE))), - BUTTONS_CY, BUTTONS_W, BUTTONS_H, hWnd, - (HMENU)i, hInst, 0 - ); - - if ( !buttons[i] ) + case WM_CREATE: + /* Creating the wave bar */ + if (!InitInstance_wave(hWnd, hInst, SW_SHOWNORMAL)) { - MessageBox(0, 0, TEXT("CreateWindow() Error!"), 0); + MessageBox(0, TEXT("CreateWindow() Error!"), TEXT("ERROR"), MB_ICONERROR); return FALSE; - } + /* Creating ALL the buttons */ + for (int i = 0; i < 5; ++i) + { + buttons[i] = CreateWindow(TEXT("button"), + TEXT(""), + WS_CHILD | WS_VISIBLE | BS_BITMAP, + BUTTONS_CX + (i * (BUTTONS_W + ((i == 0) ? 0 : BUTTONS_SPACE))), + BUTTONS_CY, + BUTTONS_W, + BUTTONS_H, + hWnd, + (HMENU)i, + hInst, + 0); + if (!buttons[i]) + { + MessageBox(0, 0, TEXT("CreateWindow() Error!"), 0); + return FALSE; + } + + /* Realize the button bmp image */ + SendMessage(buttons[i], BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)butbmps[i]); + UpdateWindow(buttons[i]); + disable_but(i); + } - // - // Realize the button bmp image - // - - SendMessage(buttons[i], BM_SETIMAGE, ( WPARAM )IMAGE_BITMAP, ( LPARAM )butbmps[i]); - - UpdateWindow( buttons[i] ); - - disable_but( i ); - - } - + /* Creating the SLIDER window */ + slider = CreateWindow(TRACKBAR_CLASS, + TEXT(""), + WS_CHILD | WS_VISIBLE | TBS_NOTICKS | TBS_HORZ | TBS_ENABLESELRANGE, + SLIDER_CX, + SLIDER_CY, + SLIDER_W, + SLIDER_H, + hWnd, + (HMENU)SLIDER_ID, + hInst, + 0); + if (!slider) + { + MessageBox(0, 0, TEXT( "CreateWindow() Error!" ), 0); + return FALSE; + } - // - // Creating the SLIDER window - // - - slider = CreateWindow( - TRACKBAR_CLASS, - TEXT(""), - WS_CHILD|WS_VISIBLE|TBS_NOTICKS|TBS_HORZ|TBS_ENABLESELRANGE, - SLIDER_CX, SLIDER_CY, SLIDER_W, SLIDER_H, hWnd, - ( HMENU )SLIDER_ID, hInst, 0 - ); + /* Sets slider limits */ + SendMessage(slider, + TBM_SETRANGE, + (WPARAM)TRUE, + (LPARAM)MAKELONG(slider_min, slider_max)); + UpdateWindow(slider); + enable_but(BUTREC_ID); + EnableWindow(slider, FALSE); + break; - if ( !slider ) + /* Implements slider logic */ + case WM_HSCROLL: { - MessageBox( 0, 0, TEXT( "CreateWindow() Error!" ), 0 ); - return FALSE; - + switch (LOWORD(wParam)) + { + case SB_ENDSCROLL: + break; + case SB_PAGERIGHT: + case SB_PAGELEFT: + case TB_THUMBTRACK: + /* If the user touch the slider bar, set the + audio start position properly */ + slider_pos = SendMessage(slider, TBM_GETPOS, 0, 0); + slid_samp = (__int64)slider_pos * (__int64)samples_max; + AUD_BUF->set_position(AUD_BUF->audinfo().bytes_in_samples((unsigned int)(slid_samp / (__int64)slider_max))); + InvalidateRect(hWnd, &text_rect, TRUE); + break; + } + break; } + case WM_COMMAND: + wmId = LOWORD(wParam); + if ((wmId >= 0) && (wmId < 5) && (butdisabled[wmId] == TRUE)) + break; - // - // Sets slider limits - // - - - SendMessage( - slider, - TBM_SETRANGE, - ( WPARAM )TRUE, - ( LPARAM )MAKELONG( slider_min, slider_max ) - ); - + switch (wmId) + { + case ID_NEW: + if (!isnew) + { + if (AUD_IN->current_status() == snd::WAVEIN_RECORDING) + AUD_IN->stop_recording(); + + if ((AUD_OUT->current_status() == snd::WAVEOUT_PLAYING) || + (AUD_OUT->current_status() == snd::WAVEOUT_PAUSED)) + AUD_OUT->stop(); + + AUD_BUF->reset(); + + enable_but(BUTREC_ID); + disable_but(BUTSTART_ID); + disable_but(BUTEND_ID); + disable_but(BUTSTOP_ID); + disable_but(BUTPLAY_ID); + + samples_max = AUD_BUF->total_samples(); + slider_pos = 0; + + SendMessage(slider, TBM_SETPOS, (WPARAM) TRUE, (LPARAM) slider_pos); + + EnableMenuItem(GetMenu(hWnd), ID_FILE_SAVEAS, MF_GRAYED); + EnableMenuItem(GetMenu(hWnd), ID_FILE_SAVE, MF_GRAYED); + + isnew = TRUE; + display_dur = TRUE; + + ZeroMemory(file_path, MAX_PATH * sizeof(TCHAR)); + + EnableWindow(slider, FALSE); + + InvalidateRect(hWnd, &text_rect, TRUE); + InvalidateRect(hWnd, &text2_rect, TRUE); + } + break; + + case ID_FILE_OPEN: + ZeroMemory(&ofn, sizeof(ofn)); + + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = hWnd; + ofn.lpstrFilter = TEXT("Audio Files (*.wav)\0*.wav\0All Files (*.*)\0*.*\0"); + ofn.lpstrFile = file_path; + ofn.nMaxFile = MAX_PATH; + ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; + ofn.lpstrDefExt = TEXT("wav"); + + if (GetOpenFileName(&ofn)) + { + open_wav(file_path); + EnableMenuItem(GetMenu(hWnd), ID_FILE_SAVE, MF_ENABLED); + EnableMenuItem(GetMenu(hWnd), ID_FILE_SAVEAS, MF_ENABLED); - UpdateWindow( slider ); + EnableWindow(slider, TRUE); + } + + InvalidateRect(hWnd, &text_rect, TRUE); + InvalidateRect(hWnd, &text2_rect, TRUE); + break; - enable_but( BUTREC_ID ); + case ID__ABOUT: + DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, AboutDlgProc); + return TRUE; + break; - EnableWindow( slider, FALSE ); + case ID_FILE_SAVEAS: + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = hWnd ; + ofn.Flags = OFN_OVERWRITEPROMPT; + ofn.lpstrFilter = TEXT("Audio Files (*.wav)\0*.wav\0All Files (*.*)\0*.*\0"); + ofn.lpstrFile = file_path; + ofn.nMaxFile = MAX_PATH; + + ofn.lpstrDefExt = TEXT("wav"); + + if (GetSaveFileName (&ofn)) + { + write_wav(file_path); + EnableMenuItem(GetMenu(hWnd), ID_FILE_SAVE, MF_ENABLED); + } + break; + case ID_EXIT: + DestroyWindow(hWnd); + break; + /* Sndrec32 buttons routines */ + case BUTSTART_ID: + AUD_BUF->set_position_start(); + slider_pos = 0; + SendMessage(slider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)slider_pos); + break; - break; + case BUTEND_ID: + DestroyWindow(hWnd); + break; + case BUTPLAY_ID: + if (wout_first == false) + { + AUD_OUT->open(); + wout_first = true; + } + AUD_OUT->play(); - // - // Implements slider logic - // + disable_but(BUTSTART_ID); + disable_but(BUTEND_ID); + disable_but(BUTREC_ID); + disable_but(BUTPLAY_ID); - case WM_HSCROLL : - { - switch( LOWORD( wParam )) - { - - case SB_ENDSCROLL: - break; + SetTimer(hWnd, 1, 250, 0); + SetTimer(hWnd, WAVEBAR_TIMERID, WAVEBAR_TIMERTIME, 0); - case SB_PAGERIGHT: - case SB_PAGELEFT: - case TB_THUMBTRACK: + break; + case BUTSTOP_ID: + if (s_recording) + { + s_recording = FALSE; - // - // If the user touch the slider bar, - // set the audio start position properly - // + AUD_IN->stop_recording(); + /* Resetting slider position */ + slider_pos = 0; + SendMessage(slider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)slider_pos); - slider_pos = SendMessage( slider, TBM_GETPOS, 0, 0 ); + samples_max = AUD_BUF->samples_received(); - slid_samp = ( __int64 )slider_pos * ( __int64 )samples_max; + EnableMenuItem((HMENU)IDR_MENU1, ID_FILE_SAVEAS, MF_ENABLED); - AUD_BUF->set_position( - AUD_BUF->audinfo().bytes_in_samples( - ( unsigned int )( slid_samp / ( __int64 )slider_max ) - ) - ); + enable_but(BUTSTART_ID); + enable_but(BUTEND_ID); + enable_but(BUTREC_ID); + enable_but(BUTPLAY_ID); - InvalidateRect( hWnd, &text_rect, TRUE ); + EnableMenuItem(GetMenu(hWnd), ID_FILE_SAVEAS, MF_ENABLED); + EnableWindow(slider, TRUE); + display_dur = FALSE; - break; + AUD_BUF->truncate(); - } + InvalidateRect(hWnd, &text_rect, TRUE); + InvalidateRect(wave_win, 0, TRUE); - break; - } + } + else + { + AUD_OUT->pause(); + enable_but(BUTSTART_ID); + enable_but(BUTEND_ID); + enable_but(BUTREC_ID); + enable_but(BUTPLAY_ID); + } + KillTimer(hWnd, 1); + KillTimer(hWnd, WAVEBAR_TIMERID); + InvalidateRect(hWnd, &text_rect, TRUE); + break; - case WM_COMMAND: + case BUTREC_ID: + if (win_first == false) + { + AUD_IN->open(); + win_first = true; + } - wmId = LOWORD( wParam ); - - if (( wmId >= 0 ) && ( wmId < 5 ) && ( butdisabled[wmId] == TRUE )) - break; - - switch ( wmId ) - { - - case ID_NEW: - - if ( !isnew ) - { + s_recording = TRUE; - if ( AUD_IN->current_status() == snd::WAVEIN_RECORDING ) - AUD_IN->stop_recording(); + samples_max = AUD_BUF->total_samples(); + AUD_IN->start_recording(); - if (( AUD_OUT->current_status() == snd::WAVEOUT_PLAYING ) || - ( AUD_OUT->current_status() == snd::WAVEOUT_PAUSED )) - AUD_OUT->stop(); + enable_but(BUTSTOP_ID); + disable_but(BUTSTART_ID); + disable_but(BUTEND_ID); + disable_but(BUTREC_ID); + disable_but(BUTPLAY_ID); - AUD_BUF->reset(); + isnew = FALSE; - enable_but( BUTREC_ID ); - disable_but( BUTSTART_ID ); - disable_but( BUTEND_ID ); - disable_but( BUTSTOP_ID ); - disable_but( BUTPLAY_ID ); + EnableWindow(slider, FALSE); + SetTimer(hWnd, 1, 150, 0); + SetTimer(hWnd, WAVEBAR_TIMERID, WAVEBAR_TIMERTIME, 0); - samples_max = AUD_BUF->total_samples(); - slider_pos = 0; - - SendMessage(slider, TBM_SETPOS, (WPARAM) TRUE, (LPARAM) slider_pos); - - EnableMenuItem( GetMenu( hWnd ), ID_FILE_SAVEAS, MF_GRAYED ); - EnableMenuItem( GetMenu( hWnd ), ID_FILE_SAVE, MF_GRAYED ); - - isnew = TRUE; - display_dur = TRUE; - - ZeroMemory( file_path, MAX_PATH * sizeof(TCHAR) ); - - EnableWindow( slider, FALSE ); - - InvalidateRect( hWnd, &text_rect, TRUE ); - InvalidateRect( hWnd, &text2_rect, TRUE ); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); } - - - break; - - - - case ID_FILE_OPEN: - - ZeroMemory( &ofn, sizeof( ofn )); - - ofn.lStructSize = sizeof( ofn ); - ofn.hwndOwner = hWnd; - ofn.lpstrFilter = TEXT("Audio Files (*.wav)\0*.wav\0All Files (*.*)\0*.*\0"); - ofn.lpstrFile = file_path; - ofn.nMaxFile = MAX_PATH; - ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; - ofn.lpstrDefExt = TEXT("wav"); - - if( GetOpenFileName( &ofn )) + case WM_TIMER: + switch (wParam) { - open_wav( file_path ); - EnableMenuItem( GetMenu( hWnd ), ID_FILE_SAVE, MF_ENABLED ); - EnableMenuItem( GetMenu( hWnd ), ID_FILE_SAVEAS, MF_ENABLED ); - - EnableWindow( slider, TRUE ); - + case 1: + if (stopped_flag) + { + KillTimer(hWnd, 1); + KillTimer(hWnd, WAVEBAR_TIMERID); + slider_pos = 0; + enable_but(BUTPLAY_ID); + stopped_flag = FALSE; + } + + SendMessage(slider, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)slider_pos); + InvalidateRect(hWnd, &text_rect, TRUE); + break; + + case WAVEBAR_TIMERID: + InvalidateRect(wave_win, 0, TRUE); + SendMessage(wave_win, WM_USER, 0, 0); + break; } - - InvalidateRect( hWnd, &text_rect, TRUE ); - InvalidateRect( hWnd, &text2_rect, TRUE ); - break; + case WM_PAINT: + hdc = BeginPaint(hWnd, &ps); + font = CreateFontIndirect(&s_info.lfMenuFont); + SelectObject(hdc, font); + SetBkMode(hdc, TRANSPARENT); - - - case ID__ABOUT: - - DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, AboutDlgProc); - return TRUE; - break; - - - case ID_FILE_SAVEAS: - - ZeroMemory( &ofn, sizeof( ofn )); - - ofn.lStructSize = sizeof( ofn ); - ofn.hwndOwner = hWnd ; - ofn.Flags = OFN_OVERWRITEPROMPT; - ofn.lpstrFilter = TEXT("Audio Files (*.wav)\0*.wav\0All Files (*.*)\0*.*\0"); - ofn.lpstrFile = file_path; - ofn.nMaxFile = MAX_PATH; - - ofn.lpstrDefExt = TEXT("wav"); - - if ( GetSaveFileName ( &ofn )) + if (AUD_IN->current_status() == snd::WAVEIN_RECORDING) { - write_wav( file_path ); + gprintf(str_tmp, + MAX_LOADSTRING, + str_pos, + (float)((float)AUD_BUF->bytes_recorded() / (float)AUD_BUF->audinfo().byte_rate())); - EnableMenuItem( GetMenu( hWnd ), ID_FILE_SAVE, MF_ENABLED ); } - - break; - - case ID_EXIT: - DestroyWindow( hWnd ); - break; - - - // - // Sndrec32 buttons routines - // - - case BUTSTART_ID: - - AUD_BUF->set_position_start(); - - slider_pos = 0; - - SendMessage( slider, TBM_SETPOS, (WPARAM) TRUE, (LPARAM) slider_pos ); - - break; - - - case BUTEND_ID: - DestroyWindow( hWnd ); - break; - - case BUTPLAY_ID: - - if ( wout_first == false ) + else if (AUD_OUT->current_status() == snd::WAVEOUT_PLAYING) { - AUD_OUT->open(); - wout_first = true; + gprintf(str_tmp, + MAX_LOADSTRING, + str_pos, + (float)((float)AUD_BUF->bytes_played() / (float)AUD_BUF->audinfo().byte_rate())); } - - - AUD_OUT->play(); - - disable_but( BUTSTART_ID ); - disable_but( BUTEND_ID ); - disable_but( BUTREC_ID ); - disable_but( BUTPLAY_ID ); - - - SetTimer( hWnd, 1, 250, 0 ); - SetTimer( hWnd, WAVEBAR_TIMERID, WAVEBAR_TIMERTIME, 0 ); - - break; - - case BUTSTOP_ID: - if ( s_recording ) + else { - s_recording = FALSE; - - AUD_IN->stop_recording(); - - - - // - // Resetting slider position - // - - slider_pos = 0; - SendMessage(slider, TBM_SETPOS, (WPARAM) TRUE, (LPARAM) slider_pos); - - - samples_max = AUD_BUF->samples_received(); - - EnableMenuItem((HMENU)IDR_MENU1, ID_FILE_SAVEAS, MF_ENABLED ); - - - enable_but( BUTSTART_ID ); - enable_but( BUTEND_ID ); - enable_but( BUTREC_ID ); - enable_but( BUTPLAY_ID ); - - EnableMenuItem( GetMenu( hWnd ), ID_FILE_SAVEAS, MF_ENABLED ); - EnableWindow( slider, TRUE ); - - display_dur = FALSE; - - AUD_BUF->truncate(); - - InvalidateRect( hWnd, &text_rect, TRUE ); - InvalidateRect( wave_win, 0, TRUE ); - - - } else { - - AUD_OUT->pause(); - - enable_but( BUTSTART_ID ); - enable_but( BUTEND_ID ); - enable_but( BUTREC_ID ); - enable_but( BUTPLAY_ID ); - + gprintf(str_tmp, + MAX_LOADSTRING, + str_pos, + (float)((((float)slider_pos * (float)samples_max) / (float)slider_max) / (float)AUD_BUF->audinfo().sample_rate())); } - KillTimer( hWnd, 1 ); - KillTimer( hWnd, WAVEBAR_TIMERID ); + ExtTextOut(hdc, + STRPOS_X, + STRPOS_Y, + ETO_OPAQUE, + 0, + str_tmp, + _tcslen(str_tmp), + 0); - InvalidateRect( hWnd, &text_rect, TRUE ); - - break; - - case BUTREC_ID: - - if ( win_first == false ) + if (display_dur) { - AUD_IN->open(); - win_first = true; + gprintf(str_tmp, + MAX_LOADSTRING, + str_dur, + AUD_BUF->fseconds_total()); } - - s_recording = TRUE; - - samples_max = AUD_BUF->total_samples(); - - AUD_IN->start_recording(); - - enable_but( BUTSTOP_ID ); - - disable_but( BUTSTART_ID ); - disable_but( BUTEND_ID ); - disable_but( BUTREC_ID ); - disable_but( BUTPLAY_ID ); - - isnew = FALSE; - - EnableWindow( slider, FALSE ); - - SetTimer( hWnd, 1, 150, 0 ); - - SetTimer( hWnd, WAVEBAR_TIMERID, WAVEBAR_TIMERTIME, 0 ); - - break; - - - default: - return DefWindowProc(hWnd, message, wParam, lParam); - } - break; - - - case WM_TIMER: - - switch ( wParam ) - { - - case 1: - if ( stopped_flag ) + else { - KillTimer( hWnd, 1 ); - KillTimer( hWnd, WAVEBAR_TIMERID ); - slider_pos = 0; - - enable_but( BUTPLAY_ID ); - - stopped_flag = FALSE; + gprintf(str_tmp, + MAX_LOADSTRING, + str_dur, + AUD_BUF->fseconds_recorded()); } + ExtTextOut(hdc, + STRDUR_X, + STRDUR_Y, + ETO_OPAQUE, + 0, + str_tmp, + _tcslen(str_tmp), + 0); - - SendMessage( - slider, - TBM_SETPOS, - ( WPARAM ) TRUE, - ( LPARAM ) slider_pos - ); - - InvalidateRect( hWnd, &text_rect, TRUE ); - break; - - - - case WAVEBAR_TIMERID: - InvalidateRect( wave_win, 0, TRUE ); - SendMessage( wave_win, WM_USER, 0, 0 ); - break; - - } - - break; - - - - case WM_PAINT: - - - hdc = BeginPaint(hWnd, &ps); - - - font = CreateFontIndirect( &s_info.lfMenuFont ); - - - SelectObject( hdc, font ); - - SetBkMode( hdc, TRANSPARENT ); - - - if ( AUD_IN->current_status() == snd::WAVEIN_RECORDING ) - { - gprintf( - str_tmp, - MAX_LOADSTRING, - str_pos, - ( float )(( float )AUD_BUF->bytes_recorded( ) / ( float )AUD_BUF->audinfo().byte_rate( )) - ); - - } else if ( AUD_OUT->current_status() == snd::WAVEOUT_PLAYING ) { - - gprintf( - str_tmp, - MAX_LOADSTRING, - str_pos, - ( float )(( float )AUD_BUF->bytes_played() / ( float )AUD_BUF->audinfo().byte_rate( )) - ); - - } else { - - gprintf( - str_tmp, - MAX_LOADSTRING, - str_pos, - ( float )(((( float )slider_pos * ( float )samples_max ) / ( float )slider_max ) / ( float )AUD_BUF->audinfo().sample_rate()) - ); - } - - - ExtTextOut( hdc, STRPOS_X, STRPOS_Y, ETO_OPAQUE, - 0, str_tmp, _tcslen( str_tmp ), 0 ); - - - if ( display_dur ) - { - - gprintf( str_tmp, MAX_LOADSTRING, str_dur, - AUD_BUF->fseconds_total( )); - - } else { - - - gprintf( str_tmp, MAX_LOADSTRING, str_dur, - AUD_BUF->fseconds_recorded( )); - } - - - - ExtTextOut( hdc, STRDUR_X, STRDUR_Y, ETO_OPAQUE, - 0, str_tmp, _tcslen( str_tmp ), 0 ); - - - - gprintf( - str_tmp, + gprintf(str_tmp, MAX_LOADSTRING, str_buf, - ( float )(( float )AUD_BUF->mem_size() / 1024.0f ) - ); - - - ExtTextOut( hdc, STRBUF_X, STRBUF_Y, ETO_OPAQUE, - 0, str_tmp, _tcslen( str_tmp ), 0 ); - - - - gprintf( - str_tmp, + (float)((float)AUD_BUF->mem_size() / 1024.0f)); + + ExtTextOut(hdc, + STRBUF_X, + STRBUF_Y, + ETO_OPAQUE, + 0, + str_tmp, + _tcslen(str_tmp), + 0); + + gprintf(str_tmp, MAX_LOADSTRING, str_fmt, - ( float )(( float )AUD_BUF->audinfo().sample_rate() / 1000.0f ), + (float)((float)AUD_BUF->audinfo().sample_rate() / 1000.0f), AUD_BUF->audinfo().bits(), - AUD_BUF->audinfo().channels() == 2 ? str_mono : str_stereo - ); - - - ExtTextOut( hdc, STRFMT_X, STRFMT_Y, ETO_OPAQUE, - 0, str_tmp, _tcslen( str_tmp ), 0 ); - - - - gprintf( - str_tmp, + AUD_BUF->audinfo().channels() == 2 ? str_mono : str_stereo); + + ExtTextOut(hdc, + STRFMT_X, + STRFMT_Y, + ETO_OPAQUE, + 0, + str_tmp, + _tcslen(str_tmp), + 0); + + gprintf(str_tmp, MAX_LOADSTRING, str_chan, - AUD_BUF->audinfo().channels() == 2 ? str_stereo : str_mono - ); - - - ExtTextOut( hdc, STRCHAN_X, STRCHAN_Y, ETO_OPAQUE, - 0, str_tmp, _tcslen( str_tmp ), 0 ); - - - - DeleteObject( font ); - - EndPaint(hWnd, &ps); - - - break; - - - + AUD_BUF->audinfo().channels() == 2 ? str_stereo : str_mono); + + ExtTextOut(hdc, + STRCHAN_X, + STRCHAN_Y, + ETO_OPAQUE, + 0, + str_tmp, + _tcslen(str_tmp), + 0); + + DeleteObject(font); + EndPaint(hWnd, &ps); + break; - case WM_DESTROY: - PostQuitMessage(0); - break; - default: - return DefWindowProc( hWnd, message, wParam, lParam ); + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); } + return 0; } - - - - -void l_play_finished ( void ) +void l_play_finished(void) { - stopped_flag = true; + enable_but(BUTSTART_ID); + enable_but(BUTEND_ID); + enable_but(BUTREC_ID); + enable_but(BUTPLAY_ID); - enable_but( BUTSTART_ID ); - enable_but( BUTEND_ID ); - enable_but( BUTREC_ID ); - enable_but( BUTPLAY_ID ); - - InvalidateRect( wave_win, 0, TRUE ); - + InvalidateRect(wave_win, 0, TRUE); } -void l_audio_arrival ( unsigned int samples_arrival ) +void l_audio_arrival(unsigned int samples_arrival) { - - - slider_pos += ( DWORD ) (( slider_max * samples_arrival ) / samples_max ); - - + slider_pos += (DWORD)((slider_max * samples_arrival) / samples_max); } -void l_buffer_resized ( unsigned int new_size ) +void l_buffer_resized(unsigned int new_size) { - - - - - } -VOID enable_but( DWORD id ) +VOID enable_but(DWORD id) { - - butdisabled[ id ] = FALSE; - - SendMessage(buttons[ id ], BM_SETIMAGE, ( WPARAM )IMAGE_BITMAP, ( LPARAM )butbmps[ id ]); - - + butdisabled[id] = FALSE; + SendMessage(buttons[id], BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)butbmps[id]); } -VOID disable_but( DWORD id ) -{ - - butdisabled[ id ] = TRUE; - - SendMessage(buttons[ id ], BM_SETIMAGE, ( WPARAM )IMAGE_BITMAP, ( LPARAM )butbmps_dis[ id ]); +VOID disable_but(DWORD id) +{ + butdisabled[id] = TRUE; + SendMessage(buttons[id], BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)butbmps_dis[id]); } - - - - - - - - - - - - - - - -BOOL open_wav( TCHAR * f ) +BOOL open_wav(TCHAR *f) { - - HANDLE file; - + riff_hdr r; wave_hdr w; data_chunk d; @@ -1230,160 +926,116 @@ BOOL open_wav( TCHAR * f ) DWORD bytes_recorded_in_wav = 0; DWORD is_read = 0; - - file = CreateFile( - f, - GENERIC_READ, - 0, 0, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - 0 - ); - - - - if ( !file ) + file = CreateFile(f, + GENERIC_READ, + 0, + 0, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + 0); + if (!file) { - MessageBox( - main_win, - TEXT("Cannot open file. CreateFile() error."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); + MessageBox(main_win, + TEXT("Cannot open file. CreateFile() error."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); return FALSE; } - - b = ReadFile( file, ( LPVOID ) &r, sizeof ( r ), &is_read, 0 ); - - if ( !b ) + b = ReadFile(file, (LPVOID)&r, sizeof(r), &is_read, 0); + if (!b) { - MessageBox( - main_win, - TEXT("Cannot read RIFF header."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); - - CloseHandle( file ); + MessageBox(main_win, + TEXT("Cannot read RIFF header."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); + + CloseHandle(file); return FALSE; } - - b = ReadFile( file, ( LPVOID ) &w, sizeof ( w ), &is_read, 0 ); - - - if ( !b ) + b = ReadFile(file, (LPVOID)&w, sizeof(w), &is_read, 0); + if (!b) { - MessageBox( - main_win, - TEXT("Cannot read WAVE header."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); - - CloseHandle( file ); + MessageBox(main_win, + TEXT("Cannot read WAVE header."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); + + CloseHandle(file); return FALSE; } - - - b = ReadFile( file, ( LPVOID ) &d, sizeof ( d ), &is_read, 0 ); - - if ( !b ) + b = ReadFile(file, (LPVOID)&d, sizeof(d), &is_read, 0); + if (!b) { - MessageBox( - main_win, - TEXT("Cannot read WAVE subchunk."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); - - CloseHandle( file ); + MessageBox(main_win, + TEXT("Cannot read WAVE subchunk."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); + + CloseHandle(file); return FALSE; } bytes_recorded_in_wav = r.chunksize - 36; - - - if ( bytes_recorded_in_wav == 0 ) + if (bytes_recorded_in_wav == 0) { - MessageBox( - main_win, - TEXT("Cannot read file. No audio data."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); - - CloseHandle( file ); + MessageBox(main_win, + TEXT("Cannot read file. No audio data."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); + + CloseHandle(file); return FALSE; } - - snd::audio_format openfmt - ( w.SampleRate, w.BitsPerSample, w.NumChannels ); - - + snd::audio_format openfmt(w.SampleRate, w.BitsPerSample, w.NumChannels); AUD_BUF->clear(); + AUD_BUF->alloc_bytes(bytes_recorded_in_wav); + b = ReadFile(file, + (LPVOID)AUD_BUF->audio_buffer(), + bytes_recorded_in_wav, + &is_read, + 0); - AUD_BUF->alloc_bytes( bytes_recorded_in_wav ); - - - b = ReadFile( - file, - ( LPVOID ) AUD_BUF->audio_buffer(), - bytes_recorded_in_wav, - &is_read, - 0 - ); - + AUD_BUF->set_b_received(bytes_recorded_in_wav); - AUD_BUF->set_b_received( bytes_recorded_in_wav ); - - - if (( !b ) || ( is_read != bytes_recorded_in_wav )) + if ((!b) || (is_read != bytes_recorded_in_wav)) { - MessageBox( - main_win, - TEXT("Cannot read file. Error reading audio data."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); + MessageBox(main_win, + TEXT("Cannot read file. Error reading audio data."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); - CloseHandle( file ); + CloseHandle(file); AUD_BUF->reset(); return FALSE; } - CloseHandle( file ); - - enable_but( BUTPLAY_ID ); - enable_but( BUTSTOP_ID ); - enable_but( BUTSTART_ID ); - enable_but( BUTEND_ID ); - enable_but( BUTREC_ID ); + CloseHandle(file); + enable_but(BUTPLAY_ID); + enable_but(BUTSTOP_ID); + enable_but(BUTSTART_ID); + enable_but(BUTEND_ID); + enable_but(BUTREC_ID); samples_max = AUD_BUF->samples_received(); isnew = FALSE; return TRUE; - } - BOOL -write_wav( TCHAR * f ) +write_wav(TCHAR *f) { - HANDLE file; - - DWORD written; BOOL is_writ; int i; @@ -1391,71 +1043,36 @@ write_wav( TCHAR * f ) wave_hdr w; data_chunk d; - - - file = CreateFile( - f, - GENERIC_WRITE, - 0, 0, - CREATE_NEW, - FILE_ATTRIBUTE_NORMAL, - 0 - ); - - - - if ( !file ) + file = CreateFile(f, GENERIC_WRITE, 0, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); + if (!file) { - i = MessageBox( - main_win, - TEXT("File already exist. Overwrite it?"), - TEXT("Warning"), - MB_YESNO|MB_ICONQUESTION - ); - - if ( i == IDYES ) - { + i = MessageBox(main_win, + TEXT("File already exist. Overwrite it?"), + TEXT("Warning"), + MB_YESNO | MB_ICONQUESTION); - file = CreateFile( - f, - GENERIC_WRITE, - 0, 0, - CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, - 0 - ); - - if ( !file ) + if (i == IDYES) + { + file = CreateFile(f, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); + if (!file) { - MessageBox( - main_win, - TEXT("File Error, CreateFile() failed."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); - + MessageBox(main_win, + TEXT("File Error, CreateFile() failed."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); return FALSE; - } - } else return FALSE; } - - - r.magic = 0x46464952; - - r.format = 0x45564157; r.chunksize = 36 + AUD_BUF->bytes_recorded(); - w.Subchunkid = 0x20746d66; - w.Subchunk1Size = 16; w.AudioFormat = 1; w.NumChannels = AUD_BUF->audinfo().channels(); @@ -1464,98 +1081,62 @@ write_wav( TCHAR * f ) w.BlockAlign = AUD_BUF->audinfo().block_align(); w.BitsPerSample = AUD_BUF->audinfo().bits(); - d.subc = 0x61746164; d.subc_size = AUD_BUF->bytes_recorded(); - - - // - // Writing headers - // - - - is_writ = WriteFile( file, ( LPCVOID ) &r, sizeof ( r ), &written, 0 ); - - if ( !is_writ ) + /* Writing headers */ + is_writ = WriteFile(file, (LPCVOID)&r, sizeof(r), &written, 0); + if (!is_writ) { - MessageBox( - main_win, - TEXT("File Error, WriteFile() failed."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); - - CloseHandle( file ); + MessageBox(main_win, + TEXT("File Error, WriteFile() failed."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); + CloseHandle(file); return FALSE; - } - - is_writ = WriteFile( file, ( LPCVOID ) &w, sizeof ( w ), &written, 0 ); - - if ( !is_writ ) + is_writ = WriteFile(file, (LPCVOID)&w, sizeof(w), &written, 0); + if (!is_writ) { - MessageBox( - main_win, - TEXT("File Error, WriteFile() failed."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); + MessageBox(main_win, + TEXT("File Error, WriteFile() failed."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); - CloseHandle( file ); - + CloseHandle(file); return FALSE; - } - - is_writ = WriteFile( file, ( LPCVOID ) &d, sizeof ( d ), &written, 0 ); - - - if ( !is_writ ) + is_writ = WriteFile(file, (LPCVOID)&d, sizeof(d), &written, 0); + if (!is_writ) { - MessageBox( - main_win, - TEXT("File Error, WriteFile() failed."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); + MessageBox(main_win, + TEXT("File Error, WriteFile() failed."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); - CloseHandle( file ); - + CloseHandle(file); return FALSE; - } - - - is_writ = WriteFile( - file, - ( LPCVOID ) AUD_BUF->audio_buffer(), - AUD_BUF->bytes_recorded(), - &written, - 0 - ); - - if ( !is_writ ) + is_writ = WriteFile(file, + (LPCVOID)AUD_BUF->audio_buffer(), + AUD_BUF->bytes_recorded(), + &written, + 0); + if (!is_writ) { - MessageBox( - main_win, - TEXT("File Error, WriteFile() failed."), - TEXT("ERROR"), - MB_OK|MB_ICONERROR - ); - - CloseHandle( file ); - - return FALSE; + MessageBox(main_win, + TEXT("File Error, WriteFile() failed."), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); + CloseHandle(file); + return FALSE; } - - CloseHandle( file ); - + CloseHandle(file); return TRUE; } diff --git a/reactos/base/applications/sndrec32/sndrec32.h b/reactos/base/applications/sndrec32/sndrec32.h index d48d67de17d..2ac41f5eff0 100644 --- a/reactos/base/applications/sndrec32/sndrec32.h +++ b/reactos/base/applications/sndrec32/sndrec32.h @@ -30,55 +30,48 @@ #define BUTTONS_H 30 #define BUTTONS_W 60 #define BUTTONS_CY 100 -#define BUTTONS_CX ( CONTROLS_CX ) +#define BUTTONS_CX (CONTROLS_CX) #define BUTTONS_SPACE 5 - - #define SLIDER_CX CONTROLS_CX #define SLIDER_CY 65 #define SLIDER_H 30 #define SLIDER_W 320 - #define STRPOS_X 240 #define STRPOS_Y 5 -#define STRDUR_X ( STRPOS_X ) -#define STRDUR_Y ( STRPOS_Y + 13 ) - -#define STRBUF_X ( STRDUR_X ) -#define STRBUF_Y ( STRDUR_Y + 13 ) +#define STRDUR_X (STRPOS_X) +#define STRDUR_Y (STRPOS_Y + 13) +#define STRBUF_X (STRDUR_X) +#define STRBUF_Y (STRDUR_Y + 13) #define STRFMT_X 10 -#define STRFMT_Y ( STRPOS_Y ) - -#define STRCHAN_X ( STRFMT_X ) -#define STRCHAN_Y ( STRFMT_Y + 13 ) +#define STRFMT_Y (STRPOS_Y) +#define STRCHAN_X (STRFMT_X) +#define STRCHAN_Y (STRFMT_Y + 13) -#define WAVEBAR_X ( CONTROLS_CX + 90 ) -#define WAVEBAR_Y ( STRPOS_Y ) +#define WAVEBAR_X (CONTROLS_CX + 90) +#define WAVEBAR_Y (STRPOS_Y) #define WAVEBAR_CX 130 #define WAVEBAR_CY 50 #define WAVEBAR_TIMERID 2 #define WAVEBAR_TIMERTIME 80 -#define WAVEBAR_COLOR ( RGB( 0, 0, 255 )) +#define WAVEBAR_COLOR (RGB(0, 0, 255)) -#define REFRESHA_X ( STRPOS_X ) -#define REFRESHA_Y ( STRPOS_Y ) -#define REFRESHA_CX ( REFRESHA_X + 100 ) -#define REFRESHA_CY ( REFRESHA_Y + 55 ) - - -#define REFRESHB_X ( STRFMT_X ) -#define REFRESHB_Y ( STRFMT_Y ) -#define REFRESHB_CX ( REFRESHB_X + 85 ) -#define REFRESHB_CY ( REFRESHB_Y + 55 ) +#define REFRESHA_X (STRPOS_X) +#define REFRESHA_Y (STRPOS_Y) +#define REFRESHA_CX (REFRESHA_X + 100) +#define REFRESHA_CY (REFRESHA_Y + 55) +#define REFRESHB_X (STRFMT_X) +#define REFRESHB_Y (STRFMT_Y) +#define REFRESHB_CX (REFRESHB_X + 85) +#define REFRESHB_CY (REFRESHB_Y + 55) struct riff_hdr { @@ -87,10 +80,8 @@ struct riff_hdr DWORD format; }; - struct wave_hdr { - DWORD Subchunkid; DWORD Subchunk1Size; WORD AudioFormat; @@ -108,32 +99,15 @@ struct data_chunk //unsigned char data[]; }; +/* Functions prototypes */ +LRESULT CALLBACK Buttons_proc(HWND, UINT, WPARAM, LPARAM); -// -// Functions prototypes -// -LRESULT CALLBACK -Buttons_proc(HWND, UINT, WPARAM, LPARAM); - - -BOOL -write_wav( TCHAR * ); - -BOOL -open_wav( TCHAR * ); - - -VOID enable_but( DWORD ); -VOID disable_but( DWORD ); - - - -void -l_play_finished ( void ); - -void -l_audio_arrival ( unsigned int ); +BOOL write_wav(TCHAR *); +BOOL open_wav(TCHAR *); +VOID enable_but(DWORD); +VOID disable_but(DWORD); -void -l_buffer_resized ( unsigned int ); +void l_play_finished(void); +void l_audio_arrival(unsigned int); +void l_buffer_resized(unsigned int); diff --git a/reactos/base/applications/sndrec32/stdafx.h b/reactos/base/applications/sndrec32/stdafx.h index 4e622e48811..d669203c956 100644 --- a/reactos/base/applications/sndrec32/stdafx.h +++ b/reactos/base/applications/sndrec32/stdafx.h @@ -3,9 +3,9 @@ //#include "targetver.h" #ifdef _UNICODE - #define _sntprintf_s _snwprintf_s +#define _sntprintf_s _snwprintf_s #else - #define _sntprintf_s _snprintf_s +#define _sntprintf_s _snprintf_s #endif #define WIN32_NO_STATUS diff --git a/reactos/base/applications/sndrec32/targetver.h b/reactos/base/applications/sndrec32/targetver.h index 1b8dc073f01..c3f11c9ace5 100644 --- a/reactos/base/applications/sndrec32/targetver.h +++ b/reactos/base/applications/sndrec32/targetver.h @@ -7,11 +7,11 @@ #pragma once -#ifndef WINVER -#define WINVER 0x0600 +#ifndef WINVER +#define WINVER 0x0600 #endif -#ifndef _WIN32_WINNT +#ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0600 #endif -- 2.17.1