00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "API/MPEG/mpeg_soundprovider.h"
00016 #include "API/Core/System/cl_assert.h"
00017
00018 CL_MPEGSoundProvider::CL_MPEGSoundProvider(const char *filename)
00019 {
00020 file = filename;
00021 }
00022
00023 CL_MPEGSoundProvider::~CL_MPEGSoundProvider()
00024 {
00025 }
00026
00027 CL_StreamSoundProvider_Session *CL_MPEGSoundProvider::begin_session()
00028 {
00029 return new CL_MPEGSoundProvider_Session(file.c_str());
00030 }
00031
00032 void CL_MPEGSoundProvider::end_session(CL_StreamSoundProvider_Session *session)
00033 {
00034 delete session;
00035 }
00036
00037
00038
00039 CL_MPEGSoundProvider_Session::CL_MPEGSoundProvider_Session(const char *filename)
00040 {
00041 Uint8 *m = NULL;
00042 int size = 0;
00043 mpeg = new MPEG(m, size, this);
00044 mpeg->EnableAudio(true);
00045 }
00046
00047 CL_MPEGSoundProvider_Session::~CL_MPEGSoundProvider_Session()
00048 {
00049 delete mpeg;
00050 }
00051
00052 bool CL_MPEGSoundProvider_Session::eof() const
00053 {
00054 return false;
00055 }
00056
00057 void CL_MPEGSoundProvider_Session::stop()
00058 {
00059 mpeg->Stop();
00060 }
00061
00062 bool CL_MPEGSoundProvider_Session::play()
00063 {
00064 mpeg->Play();
00065 return true;
00066 }
00067
00068 bool CL_MPEGSoundProvider_Session::set_position(int pos)
00069 {
00070 return false;
00071 }
00072
00073 int CL_MPEGSoundProvider_Session::get_data(void *data_ptr, int data_requested)
00074 {
00075 audiospec.callback(audiospec.userdata, (Uint8 *) data_ptr, data_requested);
00076 return data_requested;
00077 }
00078
00079 int CL_MPEGSoundProvider_Session::get_frequency() const
00080 {
00081 return audiospec.freq;
00082 }
00083
00084 SoundFormat CL_MPEGSoundProvider_Session::get_format() const
00085 {
00086 if (audiospec.channels == 1)
00087 {
00088 if ((audiospec.format & MPEG_AUDIO_S8) == MPEG_AUDIO_S8) return sf_8bit_signed;
00089 if ((audiospec.format & MPEG_AUDIO_S16LSB) == MPEG_AUDIO_S16LSB) return sf_16bit_signed;
00090 }
00091 else if (audiospec.channels == 2)
00092 {
00093 if ((audiospec.format & MPEG_AUDIO_S8) == MPEG_AUDIO_S8) return sf_8bit_signed_stereo;
00094 if ((audiospec.format & MPEG_AUDIO_S16LSB) == MPEG_AUDIO_S16LSB) return sf_16bit_signed_stereo;
00095 }
00096
00097
00098 cl_assert(false);
00099 return sf_8bit_signed;
00100 }
00101
00102
00103
00104 bool CL_MPEGSoundProvider_Session::Open(MPEGAudioSpec *desired, MPEGAudioSpec *optained)
00105 {
00106 audiospec = *desired;
00107 *optained = audiospec;
00108 return true;
00109 }
00110
00111 void CL_MPEGSoundProvider_Session::Close()
00112 {
00113 }
00114
00115 void CL_MPEGSoundProvider_Session::Pause(bool enable)
00116 {
00117
00118 }
00119
00120 void CL_MPEGSoundProvider_Session::Mix(Uint8 *dst, Uint8 *src, Uint32 len, int volume)
00121 {
00122 memcpy(dst, src, len);
00123 }
00124
00125 void CL_MPEGSoundProvider_Session::Lock()
00126 {
00127 }
00128
00129 void CL_MPEGSoundProvider_Session::Unlock()
00130 {
00131 }
00132
00133 int CL_MPEGSoundProvider_Session::GetMaxVolume()
00134 {
00135 return 100;
00136 }
00137
00138 char *CL_MPEGSoundProvider_Session::GetError()
00139 {
00140 return "No error";
00141 }