git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35650 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			161 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        sound.h
 | 
						|
// Purpose:     wxSound class
 | 
						|
// Author:      Julian Smart, Vaclav Slavik
 | 
						|
// Modified by:
 | 
						|
// Created:     25/10/98
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// 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_ADV wxSoundBackend;
 | 
						|
class WXDLLIMPEXP_ADV wxSound;
 | 
						|
class WXDLLIMPEXP_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);
 | 
						|
    ~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
 |