148 lines
3.8 KiB
C++
148 lines
3.8 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/sound.h
|
|
// Purpose: wxSoundBase class
|
|
// Author: Vaclav Slavik
|
|
// Modified by:
|
|
// Created: 2004/02/01
|
|
// Copyright: (c) 2004, Vaclav Slavik
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_SOUND_H_BASE_
|
|
#define _WX_SOUND_H_BASE_
|
|
|
|
#include "wx/defs.h"
|
|
|
|
#if wxUSE_SOUND
|
|
|
|
#include "wx/object.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxSoundBase: common wxSound code and interface
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// Flags for wxSound::Play
|
|
|
|
// NB: We can't use enum with some compilers, because they keep reporting
|
|
// nonexistent ambiguities between Play(unsigned) and static Play(const
|
|
// wxString&, unsigned).
|
|
#define wxSOUND_SYNC ((unsigned)0)
|
|
#define wxSOUND_ASYNC ((unsigned)1)
|
|
#define wxSOUND_LOOP ((unsigned)2)
|
|
|
|
// Base class for wxSound implementations
|
|
class WXDLLIMPEXP_ADV wxSoundBase : public wxObject
|
|
{
|
|
public:
|
|
// Play the sound:
|
|
bool Play(unsigned flags = wxSOUND_ASYNC) const
|
|
{
|
|
wxASSERT_MSG( (flags & wxSOUND_LOOP) == 0 ||
|
|
(flags & wxSOUND_ASYNC) != 0,
|
|
wxT("sound can only be looped asynchronously") );
|
|
return DoPlay(flags);
|
|
}
|
|
|
|
// Plays sound from filename:
|
|
static bool Play(const wxString& filename, unsigned flags = wxSOUND_ASYNC);
|
|
|
|
protected:
|
|
virtual bool DoPlay(unsigned flags) const = 0;
|
|
};
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxSound class implementation
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#if defined(__WINDOWS__)
|
|
#include "wx/msw/sound.h"
|
|
#elif defined(__WXMAC__)
|
|
#ifndef __CPPAST__
|
|
#include "wx/osx/sound.h"
|
|
#else
|
|
#ifndef _WX_SOUND_H_
|
|
#define _WX_SOUND_H_
|
|
|
|
#if wxUSE_SOUND
|
|
|
|
#include "wx/object.h"
|
|
|
|
class WXDLLIMPEXP_FWD_CORE wxSoundTimer;
|
|
|
|
class WXDLLIMPEXP_CORE wxSoundData
|
|
{
|
|
public :
|
|
wxSoundData();
|
|
virtual ~wxSoundData();
|
|
|
|
virtual bool Play(unsigned int flags) = 0;
|
|
// stops the sound and deletes the optional timer
|
|
virtual void Stop();
|
|
// mark this to be deleted
|
|
virtual void MarkForDeletion();
|
|
virtual bool IsMarkedForDeletion() const { return m_markedForDeletion; }
|
|
|
|
// does the true work of stopping and cleaning up
|
|
virtual void DoStop() = 0;
|
|
|
|
protected:
|
|
unsigned int m_flags;
|
|
bool m_markedForDeletion;
|
|
} ;
|
|
|
|
class WXDLLIMPEXP_CORE wxSound : public wxSoundBase
|
|
{
|
|
public:
|
|
wxSound();
|
|
wxSound(const wxString& fileName, bool isResource = false);
|
|
wxSound(size_t size, const void* data);
|
|
virtual ~wxSound();
|
|
|
|
// Create from resource or file
|
|
bool Create(const wxString& fileName, bool isResource = false);
|
|
// Create from data
|
|
bool Create(size_t size, const void* data);
|
|
|
|
bool IsOk() const { return m_data != NULL; }
|
|
|
|
// Stop playing any sound
|
|
static void Stop();
|
|
|
|
// Returns true if a sound is being played
|
|
static bool IsPlaying();
|
|
|
|
// Notification when a sound has stopped
|
|
static void SoundStopped(const wxSoundData* data);
|
|
|
|
protected:
|
|
bool DoPlay(unsigned flags) const wxOVERRIDE;
|
|
void Init();
|
|
|
|
private:
|
|
// data of this object
|
|
class wxSoundData *m_data;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxSound);
|
|
};
|
|
|
|
#endif
|
|
#endif
|
|
#endif
|
|
// _WX_SOUND_H_
|
|
#elif defined(__UNIX__)
|
|
#include "wx/unix/sound.h"
|
|
#endif
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxSoundBase methods
|
|
// ----------------------------------------------------------------------------
|
|
|
|
inline bool wxSoundBase::Play(const wxString& filename, unsigned flags)
|
|
{
|
|
wxSound snd(filename);
|
|
return snd.IsOk() ? snd.Play(flags) : false;
|
|
}
|
|
|
|
#endif // wxUSE_SOUND
|
|
|
|
#endif // _WX_SOUND_H_BASE_
|