]> git.saurik.com Git - wxWidgets.git/blame - contrib/include/wx/mmedia/sndbase.h
revert return type changes for gdi object pointers
[wxWidgets.git] / contrib / include / wx / mmedia / sndbase.h
CommitLineData
e8482f24
GL
1// --------------------------------------------------------------------------
2// Name: sndbase.h
3// Purpose:
4// Date: 08/11/1999
5// Author: Guilhem Lavaux <lavaux@easynet.fr> (C) 1999
6// CVSID: $Id$
05aa8cf3 7// License: wxWindows license
e8482f24
GL
8// --------------------------------------------------------------------------
9#ifndef _WX_SNDBASE_H
10#define _WX_SNDBASE_H
11
e8482f24 12#include "wx/defs.h"
15e8daec 13#include "wx/mmedia/defs.h"
e8482f24
GL
14
15// ------------------------------------------------------------------------
16// DEFINITIONS
17
18// ---------------------
19// Sound streaming mode:
20// - wxSOUND_INPUT: simple recording mode
21// - wxSOUND_OUTPUT: simple playing mode
22// - wxSOUND_DUPLEX: full duplex record/play at the same time
23// ---------------------
24enum {
25 wxSOUND_INPUT = 1,
26 wxSOUND_OUTPUT = 2,
27 wxSOUND_DUPLEX = wxSOUND_INPUT | wxSOUND_OUTPUT,
28};
29
30// ---------------------
31// wxSoundFormatType: it specifies the format family of the sound data
32// which will be passed to the stream.
33// ---------------------
34typedef enum {
35 wxSOUND_NOFORMAT,
36 wxSOUND_PCM,
37 wxSOUND_ULAW,
38 wxSOUND_G72X,
39 wxSOUND_MSADPCM
40} wxSoundFormatType;
41
42// ---------------------
43// wxSoundError:
3103e8a9
JS
44// - wxSOUND_NOERR: No error occurred
45// - wxSOUND_IOERR: an input/output error occurred, it may concern either
e8482f24
GL
46// a driver or a file
47// - wxSOUND_INVFRMT: the sound format passed to the function is invalid.
48// Generally, it means that you passed out of range values
49// to the codec stream or you don't pass the right sound
50// format object to the right sound codec stream.
51// - wxSOUND_INVDEV: Invalid device. Generally, it means that the sound stream
52// didn't manage to open the device driver due to an invalid// parameter or to the fact that sound is not supported on
53// this computer.
54// - wxSOUND_NOEXACT: No exact matching sound codec has been found for
55// this sound format. It means that the sound driver didn't
56// manage to setup the sound card with the specified
57// values.
58// - wxSOUND_NOCODEC: No matching codec has been found. Generally, it
59// may happen when you call
60// wxSoundRouterStream::SetSoundFormat().
61// - wxSOUND_MEMERR: Not enough memory.
62// - wxSOUND_NOTSTARTED: You did not start the production using
63// StartProduction()
64// ---------------------
65typedef enum {
66 wxSOUND_NOERROR,
67 wxSOUND_IOERROR,
68 wxSOUND_INVFRMT,
69 wxSOUND_INVDEV,
70 wxSOUND_NOEXACT,
71 wxSOUND_INVSTRM,
72 wxSOUND_NOCODEC,
73 wxSOUND_MEMERROR,
74 wxSOUND_NOTSTARTED
75} wxSoundError;
76
15e8daec 77class WXDLLIMPEXP_MMEDIA wxSoundStream;
e8482f24
GL
78
79// ---------------------
80// wxSoundCallback(stream, evt, cdata): C callback for sound event.
81// - stream: current wxSoundStream
3103e8a9 82// - evt: the sound event which has occurred, it may be wxSOUND_INPUT,
e8482f24
GL
83// wxSOUND_OUTPUT or wxSOUND_DUPLEX
84// - cdata: User callback data
85// ---------------------
86typedef void (*wxSoundCallback)(wxSoundStream *stream, int evt,
87 void *cdata);
88
89//
90// Base class for sound format specification
91//
92
15e8daec 93class WXDLLIMPEXP_MMEDIA wxSoundFormatBase {
e8482f24
GL
94 public:
95 wxSoundFormatBase();
96 virtual ~wxSoundFormatBase();
97
98 // It returns a "standard" format type.
99 virtual wxSoundFormatType GetType() const { return wxSOUND_NOFORMAT; }
100 // It clones the current format.
101 virtual wxSoundFormatBase *Clone() const;
102
103 virtual wxUint32 GetTimeFromBytes(wxUint32 bytes) const = 0;
104 virtual wxUint32 GetBytesFromTime(wxUint32 time) const = 0;
105
106 virtual bool operator !=(const wxSoundFormatBase& frmt2) const;
107};
108
109//
110// Base class for sound streams
111//
112
15e8daec 113class WXDLLIMPEXP_MMEDIA wxSoundStream {
e8482f24
GL
114 public:
115 wxSoundStream();
116 virtual ~wxSoundStream();
117
118 // Reads "len" bytes from the sound stream.
119 virtual wxSoundStream& Read(void *buffer, wxUint32 len) = 0;
120 // Writes "len" byte to the sound stream.
121 virtual wxSoundStream& Write(const void *buffer, wxUint32 len) = 0;
122 // Returns the best size for IO calls
123 virtual wxUint32 GetBestSize() const { return 1024; }
124
dea7e44a 125 // SetSoundFormat returns true when the format can be handled.
e8482f24
GL
126 virtual bool SetSoundFormat(const wxSoundFormatBase& format);
127
128 // GetSoundFormat returns the current sound format.
129 wxSoundFormatBase& GetSoundFormat() const { return *m_sndformat; }
130
131 // Register a callback for a specified async event.
132 void SetCallback(int evt, wxSoundCallback cbk, void *cdata);
133
134 // Starts the async notifier. After this call, the stream begins either
135 // recording or playing or the two at the same time.
136 virtual bool StartProduction(int evt) = 0;
137 // Stops the async notifier.
138 virtual bool StopProduction() = 0;
139 // Sets the event handler: if it is non-null, all events are routed to it.
140 void SetEventHandler(wxSoundStream *handler) { m_handler = handler; }
141
142 wxSoundError GetError() const { return m_snderror; }
143 wxUint32 GetLastAccess() const { return m_lastcount; }
144
145 // This is only useful for device (I think).
dea7e44a 146 virtual bool QueueFilled() const { return true; }
e8482f24
GL
147
148 protected:
149 // Current sound format
150 wxSoundFormatBase *m_sndformat;
151
152 // Last error
153 wxSoundError m_snderror;
154
155 // Last access
156 wxUint32 m_lastcount;
157
158 // Event handler
159 wxSoundStream *m_handler;
160
161 wxSoundCallback m_callback[2];
162 void *m_cdata[2];
163
164 protected:
165 // Handles event
166 virtual void OnSoundEvent(int evt);
167};
168
169#endif