Soren Jorvang d14efe561b Import r67258 of the wxWidgets trunk, which I expect will before
long become wxWidgets 2.9.2, which in turn is expected to be the
last 2.9 release before the 3.0 stable release.

Since the full wxWidgets distribution is rather large, I have
imported only the parts that we use, on a subdirectory basis:

art
include/wx/*.*
include/wx/aui
include/wx/cocoa
include/wx/generic
include/wx/gtk
include/wx/meta
include/wx/msw
include/wx/osx
include/wx/persist
include/wx/private
include/wx/protocol
include/wx/unix
src/aui
src/common
src/generic
src/gtk
src/msw
src/osx
src/unix


git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7380 8ced0084-cf51-0410-be5f-012b33b47a6e
2011-03-20 18:05:19 +00:00

162 lines
4.8 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: wx/unix/sound.h
// Purpose: wxSound class
// Author: Julian Smart, Vaclav Slavik
// Modified by:
// Created: 25/10/98
// RCS-ID: $Id: sound.h 47254 2007-07-09 10:09:52Z VS $
// Copyright: (c) Julian Smart, Vaclav Slavik
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_SOUND_H_
#define _WX_SOUND_H_
#include "wx/defs.h"
#if wxUSE_SOUND
#include "wx/object.h"
// ----------------------------------------------------------------------------
// wxSound: simple audio playback class
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_FWD_ADV wxSoundBackend;
class WXDLLIMPEXP_FWD_ADV wxSound;
class WXDLLIMPEXP_FWD_BASE wxDynamicLibrary;
/// Sound data, as loaded from .wav file:
class WXDLLIMPEXP_ADV wxSoundData
{
public:
wxSoundData() : m_refCnt(1) {}
void IncRef();
void DecRef();
// .wav header information:
unsigned m_channels; // num of channels (mono:1, stereo:2)
unsigned m_samplingRate;
unsigned m_bitsPerSample; // if 8, then m_data contains unsigned 8bit
// samples (wxUint8), if 16 then signed 16bit
// (wxInt16)
unsigned m_samples; // length in samples:
// wave data:
size_t m_dataBytes;
wxUint8 *m_data; // m_dataBytes bytes of data
private:
~wxSoundData();
unsigned m_refCnt;
wxUint8 *m_dataWithHeader; // ditto, but prefixed with .wav header
friend class wxSound;
};
/// Simple sound class:
class WXDLLIMPEXP_ADV wxSound : public wxSoundBase
{
public:
wxSound();
wxSound(const wxString& fileName, bool isResource = false);
wxSound(int size, const wxByte* data);
virtual ~wxSound();
// Create from resource or file
bool Create(const wxString& fileName, bool isResource = false);
// Create from data
bool Create(int size, const wxByte* 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();
// for internal use
static void UnloadBackend();
protected:
bool DoPlay(unsigned flags) const;
static void EnsureBackend();
void Free();
bool LoadWAV(const wxUint8 *data, size_t length, bool copyData);
static wxSoundBackend *ms_backend;
#if wxUSE_LIBSDL && wxUSE_PLUGINS
// FIXME - temporary, until we have plugins architecture
static wxDynamicLibrary *ms_backendSDL;
#endif
private:
wxSoundData *m_data;
};
// ----------------------------------------------------------------------------
// wxSoundBackend:
// ----------------------------------------------------------------------------
// This is interface to sound playing implementation. There are multiple
// sound architectures in use on Unix platforms and wxWidgets can use several
// of them for playback, depending on their availability at runtime; hence
// the need for backends. This class is for use by wxWidgets and people writing
// additional backends only, it is _not_ for use by applications!
// Structure that holds playback status information
struct wxSoundPlaybackStatus
{
// playback is in progress
bool m_playing;
// main thread called wxSound::Stop()
bool m_stopRequested;
};
// Audio backend interface
class WXDLLIMPEXP_ADV wxSoundBackend
{
public:
virtual ~wxSoundBackend() {}
// Returns the name of the backend (e.g. "Open Sound System")
virtual wxString GetName() const = 0;
// Returns priority (higher priority backends are tried first)
virtual int GetPriority() const = 0;
// Checks if the backend's audio system is available and the backend can
// be used for playback
virtual bool IsAvailable() const = 0;
// Returns true if the backend is capable of playing sound asynchronously.
// If false, then wxWidgets creates a playback thread and handles async
// playback, otherwise it is left up to the backend (will usually be more
// effective).
virtual bool HasNativeAsyncPlayback() const = 0;
// Plays the sound. flags are same flags as those passed to wxSound::Play.
// The function should periodically check the value of
// status->m_stopRequested and terminate if it is set to true (it may
// be modified by another thread)
virtual bool Play(wxSoundData *data, unsigned flags,
volatile wxSoundPlaybackStatus *status) = 0;
// Stops playback (if something is played).
virtual void Stop() = 0;
// Returns true if the backend is playing anything at the moment.
// (This method is never called for backends that don't support async
// playback.)
virtual bool IsPlaying() const = 0;
};
#endif // wxUSE_SOUND
#endif // _WX_SOUND_H_