1 ////////////////////////////////////////////////////////////////////////////////
4 // Author: Guilhem Lavaux
6 // Updated: December 1998
7 // Copyright: (C) 1997, 1998, Guilhem Lavaux
8 // License: wxWindows license
9 ////////////////////////////////////////////////////////////////////////////////
17 #include <wx/object.h>
18 #include <wx/stream.h>
22 // Standard Microsoft types (why change ?)
23 #define WXSOUND_PCM 0x0001
24 #define WXSOUND_ADPCM 0x0002
25 #define WXSOUND_ALAW 0x0006
26 #define WXSOUND_ULAW 0x0007
29 class wxSoundDataFormat
{
32 wxSoundDataFormat(const wxSoundDataFormat
& format
);
35 void SetSampleRate(int srate
) { m_srate
= srate
; }
36 void SetChannels(int channels
);
37 void SetStereo(bool on
);
38 void SetCodecNo(int no
);
39 int GetCodecNo() { return m_codno
; }
40 void SetCodecCreate(bool create
) { m_codcreate
= create
; }
42 int GetSampleRate() const { return m_srate
; }
43 int GetChannels() const { return m_channels
; }
44 bool GetStereo() const { return (m_channels
== 2); }
45 int GetCodecNo() const { return m_codno
; }
47 wxSoundCodec
*GetCodec();
49 wxSoundDataFormat
& operator =(const wxSoundDataFormat
& format
);
50 bool operator ==(const wxSoundDataFormat
& format
) const;
51 bool operator !=(const wxSoundDataFormat
& format
) const
52 { return !(operator ==(format
)); }
55 void SetByteOrder(int order
);
56 void SetSign(int sign
);
57 int GetByteOrder() const { return m_byteorder
; }
58 int GetSign() const { return m_sign
; }
61 int GetBps() const { return m_bps
; }
67 int m_srate
, m_bps
, m_channels
, m_codno
;
68 int m_byteorder
, m_sign
;
69 bool m_codchange
, m_codcreate
;
70 wxSoundCodec
*m_codec
;
73 class wxSoundCodec
: public wxObject
, public wxStreamBase
{
74 DECLARE_ABSTRACT_CLASS(wxSoundCodec
)
83 virtual ~wxSoundCodec();
85 void SetIOBuffer(wxSndBuffer
*sndbuf
) { m_io_sndbuf
= sndbuf
; }
88 void InitIO(const wxSoundDataFormat
& format
);
89 virtual void InitWith(const wxSoundDataFormat
& format
) {}
91 inline void SetInStream(wxStreamBuffer
*s
)
93 inline void SetOutStream(wxStreamBuffer
*s
)
95 inline wxStreamBuffer
*GetInStream() const { return m_in_sound
; }
96 inline wxStreamBuffer
*GetOutStream() const { return m_out_sound
; }
98 inline bool StreamOk() const
99 { return (m_in_sound
->Stream()->LastError() == wxStream_NOERROR
) &&
100 (m_out_sound
->Stream()->LastError() == wxStream_NOERROR
); }
102 virtual size_t GetByteRate() const = 0;
103 virtual wxSoundDataFormat
GetPreferredFormat(int codec
= 0) const = 0;
105 virtual void InitMode(ModeType mode
);
106 virtual void ExitMode();
107 virtual void Decode() = 0;
108 virtual void Encode() = 0;
110 static wxSoundCodec
*Get(int no
);
115 unsigned short Convert8_16(unsigned char s
) { return (s
& 0xff) << 8; }
116 unsigned char Convert16_8(unsigned short s
) { return (s
& 0xff00) >> 8; }
118 bool ChainCodecBefore(wxSoundDataFormat
& cod_to
);
119 bool ChainCodecAfter(wxSoundDataFormat
& cod_to
);
124 size_t OnSysWrite(const void *buffer
, size_t bsize
);
125 size_t OnSysRead(void *buffer
, size_t bsize
);
128 wxSndBuffer
*m_io_sndbuf
;
129 wxSoundDataFormat m_io_format
;
130 wxStreamBuffer
*m_in_sound
, *m_out_sound
;
131 wxSoundCodec
*m_chain_codec
;
132 bool m_init
, m_chain_before
;