1 /* PROJECT: ReactOS sndrec32 2 * LICENSE: GPL - See COPYING in the top level directory 3 * FILE: base/applications/sndrec32/audio_format.hpp 4 * PURPOSE: Audio format abstraction 5 * PROGRAMMERS: Marco Pagliaricci (irc: rendar) 6 */ 7 8 #ifndef _AUDIOFORMAT__H_ 9 #define _AUDIOFORMAT__H_ 10 11 #include "audio_def.hpp" 12 13 _AUDIO_NAMESPACE_START_ 14 15 class audio_format 16 { 17 protected: 18 unsigned int samples_psec; 19 unsigned short int bits_psample; 20 unsigned short int chan; 21 public: 22 /* Ctors */ audio_format(unsigned int samples_per_second,unsigned short int bits_per_sample,unsigned short int channels)23 audio_format(unsigned int samples_per_second, 24 unsigned short int bits_per_sample, 25 unsigned short int channels) : samples_psec(samples_per_second), 26 bits_psample(bits_per_sample), 27 chan(channels) 28 { 29 } 30 31 /* Dtor */ ~audio_format(void)32 virtual ~audio_format(void) 33 { 34 } 35 36 /* Operators */ operator ==(audio_format & eq) const37 bool operator==(audio_format & eq) const 38 { 39 /* The same audio format is when samples per second, 40 bit per sample, and channels mono/stereo are equal */ 41 return ((samples_psec == eq.samples_psec) && 42 (bits_psample == eq.bits_psample) && 43 (chan == eq.chan)); 44 } 45 46 /* Public Functions */ 47 sample_rate(void) const48 unsigned int sample_rate(void) const 49 { 50 return samples_psec; 51 } 52 bits(void) const53 unsigned short int bits(void) const 54 { 55 return bits_psample; 56 } 57 channels(void) const58 unsigned short int channels(void) const 59 { 60 return chan; 61 } 62 byte_rate(void) const63 unsigned int byte_rate(void) const 64 { 65 return (samples_psec * chan * (bits_psample / 8)); 66 } 67 block_align(void) const68 unsigned int block_align(void) const 69 { 70 return (chan * (bits_psample / 8)); 71 } 72 samples_in_seconds(float seconds) const73 unsigned int samples_in_seconds(float seconds) const 74 { 75 return (unsigned int)(((float)samples_psec * (float) chan) * seconds); 76 } 77 samples_in_bytes(unsigned int bytes) const78 unsigned int samples_in_bytes(unsigned int bytes) const 79 { 80 return (bytes / ((bits_psample / 8) * chan)); 81 } 82 bytes_in_samples(unsigned int samples) const83 unsigned int bytes_in_samples(unsigned int samples) const 84 { 85 return (samples * ((bits_psample / 8) * chan)); 86 } 87 }; 88 89 extern audio_format UNKNOWN_FORMAT; 90 extern audio_format A44100_16BIT_STEREO; 91 extern audio_format A44100_16BIT_MONO; 92 93 _AUDIO_NAMESPACE_END_ 94 95 #endif /* _AUDIOFORMAT__H_ */ 96