]> git.saurik.com Git - wxWidgets.git/blame - utils/wxMMedia/sndwin.h
* Fixes.
[wxWidgets.git] / utils / wxMMedia / sndwin.h
CommitLineData
4d6306eb
GL
1// /////////////////////////////////////////////////////////////////////////////
2// Name: sndwin.h
3// Purpose: wxMMedia
4// Author: Guilhem Lavaux
5// Created: 1997
6// Updated: 1998
7// Copyright: (C) 1997, 1998, Guilhem Lavaux
8// License: wxWindows license
9// /////////////////////////////////////////////////////////////////////////////
10/* Real -*- C++ -*- */
11#ifndef __SND_win_H__
12#define __SND_win_H__
13
14#include "sndsnd.h"
15#include "sndfrag.h"
16
17#ifdef WXMMEDIA_INTERNAL
18#include <wx/msw/private.h>
19#include <windows.h>
20#include <mmsystem.h>
21
22typedef struct wxWinSoundInternal {
23 HWAVEOUT devout_id;
24 HWAVEIN devin_id;
25 HWND sndWin;
26} wxWinSoundInternal;
27
28typedef struct wxSndWinInfo {
29 HGLOBAL h_data, h_hdr;
30
31 char *data;
32 WAVEHDR *hdr;
33} wxSndWinInfo;
34
35#endif
36
37/** Sound buffer fragmenter: windows specific implementation
38 * @author Guilhem Lavaux
39 */
40class wxSndWinFragment : public wxFragmentBuffer {
41public:
42 wxSndWinFragment(wxSound& io_drv);
43 virtual ~wxSndWinFragment(void);
44
45 virtual void AllocIOBuffer(void);
46 virtual void FreeIOBuffer(void);
47
48 virtual bool OnBufferFilled(wxFragBufPtr *ptr, wxSndMode mode);
49
50 void WaitForAll();
51};
52
53///
54class wxWinSound : public wxSound {
55 ///
56 DECLARE_DYNAMIC_CLASS(wxWinSound)
57protected:
58 struct wxWinSoundInternal *internal;
59
60 ///
61 bool wout_opened, win_opened;
62 ///
63 wxUint32 curr_o_srate, curr_i_srate;
64 ///
65 wxUint8 curr_o_bps, curr_i_bps;
66 ///
67 bool curr_o_stereo, curr_i_stereo;
68 ///
69 wxSndMode curr_mode;
70
71 ///
72 wxSndWinFragment fragments;
73
74#ifdef WXMMEDIA_INTERNAL
75 ///
76 friend LRESULT APIENTRY _EXPORT wxSoundHandlerWndProc(HWND win,
77 UINT message,
78 WPARAM wParam, LPARAM lParam);
79
80#endif
81
82public:
83 ///
84 wxWinSound(void);
85 ///
86 virtual ~wxWinSound(void);
87
88 ///
89 void OnNeedBuffer(wxSndMode mode);
90 ///
91 void StopBuffer(wxSndBuffer& buf);
92protected:
93 ///
94 virtual bool Wakeup(wxSndBuffer& buf);
95
96 ///
97 bool Reopen(wxSndBuffer& buf, bool force);
98
99 ///
100 friend class wxSndWinFragment;
101
102 ///
103 void PrepareHeader(wxFragmentBuffer::wxFragBufPtr& frag, wxSndMode mode);
104 ///
105 void UnprepareHeader(wxFragmentBuffer::wxFragBufPtr& frag, wxSndMode mode);
106};
107
108#endif