/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
- #pragma implementation "mmbman.cpp"
+ #pragma implementation "mmbman.h"
#endif
// ----------------------------------------------------------------------------
#endif
// for all others, include the necessary headers (this file is usually all you
-// need because it includes almost all "standard" wxWindows headers
+// need because it includes almost all "standard" wxWidgets headers
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/mmedia/sndaiff.h"
#include "wx/mmedia/sndpcm.h"
#include "wx/mmedia/sndulaw.h"
+#include "wx/mmedia/sndmsad.h"
#ifdef __UNIX__
#include "wx/mmedia/sndoss.h"
public:
MMBoardSoundFile(const wxString& filename);
~MMBoardSoundFile();
-
+
bool NeedWindow();
-
+
void SetWindow(wxWindow *window);
-
+
void Play();
void Pause();
void Resume();
void Stop();
-
+
MMBoardTime GetPosition();
MMBoardTime GetLength();
void SetPosition(MMBoardTime btime);
-
+
bool IsStopped();
bool IsPaused();
-
+
wxString GetStringType();
wxString GetStringInformation();
-
+
protected:
wxSoundFileStream *GetDecoder();
-
+
wxSoundStream *m_output_stream;
wxInputStream *m_input_stream;
wxSoundFileStream *m_file_stream;
public:
MMBoardVideoFile(const wxString& filename);
~MMBoardVideoFile();
-
+
bool NeedWindow();
-
+
void SetWindow(wxWindow *window);
-
+
void Play();
void Pause();
void Resume();
void Stop();
-
+
MMBoardTime GetPosition();
MMBoardTime GetLength();
void SetPosition(MMBoardTime btime);
-
+
bool IsStopped();
bool IsPaused();
-
+
wxString GetStringType();
wxString GetStringInformation();
-
+
protected:
wxWindow *m_output_window;
wxVideoBaseDriver *m_video_driver;
{
m_input_stream = new wxFileInputStream(filename);
m_output_stream = MMBoardManager::OpenSoundStream();
-
+
m_file_stream = GetDecoder();
-
+
if (!m_file_stream) {
SetError(MMBoard_UnknownFile);
return;
}
-
+
// Compute length
wxUint32 length, seconds;
wxSoundFileStream *MMBoardSoundFile::GetDecoder()
{
wxSoundFileStream *f_stream;
-
+
// First, we try a Wave decoder
f_stream = new wxSoundWave(*m_input_stream, *m_output_stream);
m_file_type = MMBoard_WAVE;
if (f_stream->CanRead())
return f_stream;
delete f_stream;
-
+
// Then, a AIFF decoder
f_stream = new wxSoundAiff(*m_input_stream, *m_output_stream);
m_file_type = MMBoard_AIFF;
if (f_stream->CanRead())
return f_stream;
delete f_stream;
-
+
m_file_type = MMBoard_UNKNOWNTYPE;
-
+
// TODO: automate
-
+
return NULL;
}
{
wxUint32 length, seconds;
MMBoardTime file_time;
-
+
file_time.seconds = file_time.minutes = file_time.hours = 0;
if (m_file_stream->IsStopped())
return file_time;
-
+
length = m_file_stream->GetPosition();
seconds = m_file_stream->GetSoundFormat().GetTimeFromBytes(length);
file_time.seconds = seconds % 60;
file_time.minutes = (seconds / 60) % 60;
file_time.hours = seconds / 3600;
-
+
return file_time;
}
bool MMBoardSoundFile::NeedWindow()
{
- return FALSE;
+ return false;
}
-void MMBoardSoundFile::SetWindow(wxWindow *window)
+void MMBoardSoundFile::SetWindow(wxWindow *WXUNUSED(window))
{
}
switch (m_file_type) {
case MMBoard_WAVE:
return wxString(wxT("WAVE file"));
+ #if 0
+ // break is not reachable after return
break;
+ #endif
case MMBoard_AIFF:
return wxString(wxT("AIFF file"));
+ #if 0
+ // break is not reachable after return
break;
+ #endif
+ #if 0
+ // default moved outside switch for those compilers
+ // which complain about lack of return in function
default:
return wxString(wxT("Unknown file"));
break;
+ #endif
}
+ return wxString(wxT("Unknown file"));
}
wxString MMBoardSoundFile::GetStringInformation()
{
wxString info;
wxSoundFormatBase *format;
-
+
format = &(m_file_stream->GetSoundFormat());
-
+
info = wxT("Data encoding: ");
switch (format->GetType()) {
case wxSOUND_PCM: {
wxSoundFormatPcm *pcm_format = (wxSoundFormatPcm *)format;
-
- info += wxString::Format(wxT("PCM %s %s\n"),
+
+ info += wxString::Format(wxT("PCM %s %s\n"),
pcm_format->Signed() ? wxT("signed") : wxT("unsigned"),
pcm_format->GetOrder() == wxLITTLE_ENDIAN ? wxT("little endian") : wxT("big endian"));
- info += wxString::Format(wxT("Sampling rate: %d\n")
- wxT("Bits per sample: %d\n")
- wxT("Number of channels: %d\n"),
- pcm_format->GetSampleRate(),
- pcm_format->GetBPS(),
- pcm_format->GetChannels());
-
- break;
+ info += wxString::Format(wxT("Sampling rate: %d\n")
+ wxT("Bits per sample: %d\n")
+ wxT("Number of channels: %d\n"),
+ pcm_format->GetSampleRate(),
+ pcm_format->GetBPS(),
+ pcm_format->GetChannels());
+
+ break;
+ }
+ case wxSOUND_MSADPCM: {
+ wxSoundFormatMSAdpcm *adpcm_format = (wxSoundFormatMSAdpcm *)format;
+
+ info += wxString::Format(wxT("Microsoft ADPCM\n"));
+ info += wxString::Format(wxT("Sampling Rate: %d\n")
+ wxT("Number of channels: %d\n"),
+ adpcm_format->GetSampleRate(),
+ adpcm_format->GetChannels());
+ break;
}
case wxSOUND_ULAW: {
wxSoundFormatUlaw *ulaw_format = (wxSoundFormatUlaw *)format;
- info += wxT("ULAW\n");
- info += wxString::Format(wxT("Sampling rate: %d\n"), ulaw_format->GetSampleRate());
- break;
+ info += wxT("ULAW\n");
+ info += wxString::Format(wxT("Sampling rate: %d\n"), ulaw_format->GetSampleRate());
+ break;
}
default:
info += wxT("Unknown");
- break;
+ break;
}
return info;
}
MMBoardVideoFile::MMBoardVideoFile(const wxString& filename)
{
m_output_window = NULL;
-
-#if defined(__UNIX__)
+
+#if defined(__UNIX__) && !defined(__CYGWIN__)
m_video_driver = new wxVideoXANIM(filename);
-#elif defined(__WIN32__)
+#elif defined(__WINDOWS__) && !defined(__MINGW32__) && !defined(__WATCOMC__) && !defined(__CYGWIN__)
+ // versions of Open Watcom and MinGW tested against this source does not
+ // deliver "digitalv.h" required in this feature
m_video_driver = new wxVideoWindows(filename);
#else
+ wxUnusedVar(filename);
m_video_driver = NULL;
SetError(MMBoard_UnknownFile);
#endif
bool MMBoardVideoFile::NeedWindow()
{
- return TRUE;
+ return true;
}
void MMBoardVideoFile::SetWindow(wxWindow *window)
int frameTime;
frameTime = (int)( m_video_driver->GetNbFrames() / m_video_driver->GetFrameRate());
-
+
btime.seconds = frameTime % 60;
btime.minutes = (frameTime / 60) % 60;
btime.hours = frameTime / 3600;
return btime;
}
-void MMBoardVideoFile::SetPosition(MMBoardTime btime)
+void MMBoardVideoFile::SetPosition(MMBoardTime WXUNUSED(btime))
{
}
wxString info;
info = wxT("Video codec: ");
- info += m_video_driver->GetMovieCodec() + "\n";
+ info += m_video_driver->GetMovieCodec() + _T("\n");
info += wxT("Audio codec: ");
info += m_video_driver->GetAudioCodec();
- info += wxString::Format(" Sample rate: %d Channels: %d\n", m_video_driver->GetSampleRate(),
+ info += wxString::Format(_T(" Sample rate: %d Channels: %d\n"), m_video_driver->GetSampleRate(),
m_video_driver->GetBPS());
- info += wxString::Format(" Frame rate: %.01f", m_video_driver->GetFrameRate());
+ info += wxString::Format(_T(" Frame rate: %.01f"), m_video_driver->GetFrameRate());
return info;
}
wxSoundStream *MMBoardManager::OpenSoundStream()
{
-#ifdef __UNIX__
+#ifdef __WIN32__
+ if ((wxGetApp().m_caps & MM_SOUND_WIN) != 0)
+ return new wxSoundStreamWin();
+#elif __UNIX__
if ((wxGetApp().m_caps & MM_SOUND_ESD) != 0)
return new wxSoundStreamESD();
return new wxSoundStreamOSS();
#endif
-#ifdef __WIN32__
- if ((wxGetApp().m_caps & MM_SOUND_WIN) != 0)
- return new wxSoundStreamWin();
-#endif
-
- wxMessageBox("You are trying to open a multimedia but you have not devices", "Error", wxOK | wxICON_ERROR, NULL);
+ wxMessageBox(_T("You are trying to open a multimedia but you have not devices"), _T("Error"), wxOK | wxICON_ERROR, NULL);
return NULL;
}