Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

mpeg_soundprovider.cpp

Go to the documentation of this file.
00001 /*
00002         $Id: mpeg_soundprovider.cpp,v 1.1.1.1 2000/04/09 12:18:03 mbn Exp $
00003 
00004         ------------------------------------------------------------------------
00005         ClanLib, the platform independent game SDK.
00006 
00007         This library is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE
00008         version 2. See COPYING for details.
00009 
00010         For a total list of contributers see CREDITS.
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; // bugbug: how do we figure this out?
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; // how to implement this?
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         // damn, unknown sound format. something went wrong.
00098         cl_assert(false);
00099         return sf_8bit_signed;
00100 }
00101 
00102 // MPEGAudioDrv interface:
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         // hmm, what is this supposed to do?
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 }

Generated at Wed Apr 4 19:54:02 2001 for ClanLib by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001