]> git.saurik.com Git - wxWidgets.git/blame - contrib/src/mmedia/sndbase.cpp
wxVariant support for icon and bitmap should work regardless wxBitmapBase.
[wxWidgets.git] / contrib / src / mmedia / sndbase.cpp
CommitLineData
e8482f24
GL
1// --------------------------------------------------------------------------
2// Name: sndbase.cpp
3// Purpose:
4// Date: 08/11/1999
5// Author: Guilhem Lavaux <lavaux@easynet.fr> (C) 1999, 2000
6// CVSID: $Id$
58b9c9ba 7// wxWindows licence
e8482f24 8// --------------------------------------------------------------------------
e8482f24 9
92a19c2e 10#include "wx/wxprec.h"
c42b1de6
GL
11
12#ifndef WX_PRECOMP
13#include "wx/defs.h"
14#include "wx/string.h"
15#include "wx/log.h"
16#endif
17
e8482f24
GL
18#include "wx/mmedia/sndbase.h"
19
20
21// ---------------------------------------------------------------------------
22// wxSoundFormatBase
23// ---------------------------------------------------------------------------
24
25wxSoundFormatBase::wxSoundFormatBase()
26{
27}
28
29wxSoundFormatBase::~wxSoundFormatBase()
30{
31}
32
33wxSoundFormatBase *wxSoundFormatBase::Clone() const
34{
2b3644c7
JS
35 wxLogFatalError(wxT("In wxSoundFormatBase::Clone() but I should")
36 wxT(" not be there"));
c42b1de6 37 return NULL;
e8482f24
GL
38}
39
40bool wxSoundFormatBase::operator!=(const wxSoundFormatBase& frmt2) const
41{
c42b1de6 42 return (GetType() != frmt2.GetType());
e8482f24
GL
43}
44
45// ---------------------------------------------------------------------------
46// wxSoundStream
47// ---------------------------------------------------------------------------
48
49wxSoundStream::wxSoundStream()
50{
c42b1de6
GL
51 int i;
52
53 // Reset all variables to their neutral value.
54 m_sndformat = NULL;
55 m_handler = NULL;
56 m_snderror = wxSOUND_NOERROR;
57 m_lastcount = 0;
58 for (i=0;i<2;i++)
59 m_callback[i] = NULL;
e8482f24
GL
60}
61
62wxSoundStream::~wxSoundStream()
63{
64 if (m_sndformat)
c42b1de6 65 delete m_sndformat;
e8482f24
GL
66}
67
68// --------------------------------------------------------------------------
69// SetSoundFormat(const wxSoundFormatBase& format) is one of the most
70// important function of the wxSoundStream class. It prepares the stream to
71// receive or send the data in a strict format. Normally, the sound stream
72// should be ready to accept any format it is asked to manage but in certain
dea7e44a 73// cases, it really cannot: in that case it returns false. To have more
e8482f24
GL
74// details in the functionnalities of SetSoundFormat see
75// wxSoundRouterStream::SetSoundFormat()
76// --------------------------------------------------------------------------
77bool wxSoundStream::SetSoundFormat(const wxSoundFormatBase& format)
78{
c42b1de6
GL
79 // delete the previous prepared format
80 if (m_sndformat)
81 delete m_sndformat;
82
83 // create a new one by cloning the format passed in parameter
84 m_sndformat = format.Clone();
dea7e44a 85 return true;
e8482f24
GL
86}
87
88
89// --------------------------------------------------------------------------
90// Register(int evt, ...) registers the callback for a specified async event.
91// Warning ! Only one callback by event is supported. It means that if you
92// call twice this function the previous registered callback is absolutely
93// ignored.
94// --------------------------------------------------------------------------
95void wxSoundStream::SetCallback(int evt, wxSoundCallback cbk, void *cdata)
96{
97 int c;
98
99 switch (evt) {
100 case wxSOUND_INPUT:
101 c = 0;
102 break;
103 case wxSOUND_OUTPUT:
104 c = 1;
105 break;
106 default:
107 return;
108 }
109 m_callback[c] = cbk;
110 m_cdata[c] = cdata;
111}
112
113// --------------------------------------------------------------------------
114// OnSoundEvent(int evt) is called either when the driver is ready to receive
115// a new block to play or when the driver has a new recorded buffer. You
116// must be careful here and try not to spend a lot of time: this is a
117// real-time call. In the case, an "event handler" was specified previously,
118// it called him before everything.
119// --------------------------------------------------------------------------
120void wxSoundStream::OnSoundEvent(int evt)
121{
122 int c;
123
124 if (m_handler) {
125 m_handler->OnSoundEvent(evt);
126 return;
127 }
128
129 switch (evt) {
130 case wxSOUND_INPUT:
131 c = 0;
132 break;
133 case wxSOUND_OUTPUT:
134 c = 1;
135 break;
136 default:
137 return;
138 }
139 if (m_callback[c])
140 m_callback[c](this, evt, m_cdata[c]);
141}