reactos/base/applications/sndrec32/audio_format.hpp

164 lines
2.5 KiB
C++
Raw Normal View History

/* PROJECT: ReactOS sndrec32
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/sndrec32/audio_format.hpp
* PURPOSE: Audio format abstraction
* 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
{
//
// 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 ));
}
//
// 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
{
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_