1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/sound.h
3// Purpose:     wxSoundBase class
4// Author:      Vaclav Slavik
5// Modified by:
6// Created:     2004/02/01
7// RCS-ID:      $Id: sound.h 61872 2009-09-09 22:37:05Z VZ $
8// Copyright:   (c) 2004, Vaclav Slavik
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_SOUND_H_BASE_
13#define _WX_SOUND_H_BASE_
14
15#include "wx/defs.h"
16
17#if wxUSE_SOUND
18
19#include "wx/object.h"
20
21// ----------------------------------------------------------------------------
22// wxSoundBase: common wxSound code and interface
23// ----------------------------------------------------------------------------
24
25// Flags for wxSound::Play
26
27// NB: We can't use enum because there would be ambiguity between the
28//     two Play() prototypes when called without explicit parameters
29//     if WXWIN_COMPATIBILITY_2_4.
30//     We can't use enum with some compilers either, because they
31//     keep reporting nonexistent ambiguities between
32//     Play(unsigned) and static Play(const wxString&, unsigned).
33#define wxSOUND_SYNC  ((unsigned)0)
34#define wxSOUND_ASYNC ((unsigned)1)
35#define wxSOUND_LOOP  ((unsigned)2)
36
37// Base class for wxSound implementations
38class WXDLLIMPEXP_ADV wxSoundBase : public wxObject
39{
40public:
41    // Play the sound:
42    bool Play(unsigned flags = wxSOUND_ASYNC) const
43    {
44        wxASSERT_MSG( (flags & wxSOUND_LOOP) == 0 ||
45                      (flags & wxSOUND_ASYNC) != 0,
46                     wxT("sound can only be looped asynchronously") );
47        return DoPlay(flags);
48    }
49#if WXWIN_COMPATIBILITY_2_4
50    wxDEPRECATED( bool Play(bool async, bool looped = false) const );
51#endif
52
53    // Plays sound from filename:
54    static bool Play(const wxString& filename, unsigned flags = wxSOUND_ASYNC);
55
56protected:
57    virtual bool DoPlay(unsigned flags) const = 0;
58};
59
60// ----------------------------------------------------------------------------
61// wxSound class implementation
62// ----------------------------------------------------------------------------
63
64#if defined(__WXMSW__)
65    #include "wx/msw/sound.h"
66#elif defined(__WXCOCOA__)
67    #include "wx/cocoa/sound.h"
68#elif defined(__WXMAC__)
69    #include "wx/mac/sound.h"
70#elif defined(__WXPM__)
71    #include "wx/os2/sound.h"
72#elif defined(__UNIX__)
73    #include "wx/unix/sound.h"
74#endif
75
76// ----------------------------------------------------------------------------
77// wxSoundBase methods
78// ----------------------------------------------------------------------------
79
80inline bool wxSoundBase::Play(const wxString& filename, unsigned flags)
81{
82    wxSound snd(filename);
83    return snd.IsOk() ? snd.Play(flags) : false;
84}
85
86#if WXWIN_COMPATIBILITY_2_4
87inline bool wxSoundBase::Play(bool async, bool looped) const
88{
89    unsigned flags = 0;
90    if (async) flags |= wxSOUND_ASYNC;
91    if (looped) flags |= wxSOUND_LOOP | wxSOUND_ASYNC;
92    return DoPlay(flags);
93}
94#endif
95
96#endif // wxUSE_SOUND
97
98#endif // _WX_SOUND_H_BASE_
99