source: trunk/src/dsound/os2sndbuffer.h

Last change on this file was 21916, checked in by dmik, 14 years ago

Merge branch gcc-kmk to trunk.

File size: 6.0 KB
Line 
1/* $Id: OS2SNDBUFFER.H,v 1.8 2001-03-10 06:21:06 mike Exp $ */
2
3/*
4 * DirectSound SoundBuffer class
5 *
6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)
7 *
8 * Project Odin Software License can be found in LICENSE.TXT
9 *
10 */
11#ifndef __OS2SNDBUFFER_H__
12#define __OS2SNDBUFFER_H__
13
14#undef THIS
15#define THIS VOID*This
16
17#undef THIS_
18#define THIS_ VOID*This,
19
20// simple structure to handle duplicated buffers - the first DWORD of
21// a sound buffer contains the buffer's usage count (to prevent freeing
22// of buffers still in use)
23typedef struct _SOUNDBUF {
24 DWORD dwReferences;
25 char pData[1];
26} SOUNDBUF;
27
28// a forward declaration of some classes is needed here!
29class OS2IDirectSoundNotify;
30class OS2IDirectSound3DBuffer;
31class OS2IDirectSound;
32
33class OS2IDirectSoundBuffer
34{
35 public:
36 //this one has to go first!
37 IDirectSoundBufferVtbl *lpVtbl;
38 IDirectSoundBufferVtbl Vtbl;
39
40 OS2IDirectSoundBuffer(OS2IDirectSound *DSound, const DSBUFFERDESC *lpDSBufferDesc);
41 OS2IDirectSoundBuffer(OS2IDirectSound *DSound, OS2IDirectSoundBuffer *srcBuf);
42 OS2IDirectSoundBuffer() {};
43 ~OS2IDirectSoundBuffer();
44
45 static void DestroyAllBuffers(); // called when DSound is closed
46
47 int Referenced;
48 inline HRESULT GetLastError() { return lastError; };
49 inline void SetNotify(OS2IDirectSoundNotify *_notify) {
50 notify = _notify; };
51 inline void Set3DBuffer(OS2IDirectSound3DBuffer *_buffer3D) {
52 buffer3D = _buffer3D; };
53 private:
54
55 protected:
56 HRESULT lastError;
57
58 ULONG writepos, playpos; // DSound write and play cursors
59 ULONG frequency; // DSB frequency - may differ from source sample
60 WAVEFORMATEX *lpfxFormat; // source sample format
61 ULONG status; // DSB status - playing, looping etc.
62 BOOL fLocked; // is buffer currently locked?
63 BOOL fPrimary; // is this a primary buffer?
64 LONG DSvolume; // DSB volume (in dB)
65 LONG volume; // volume (linear)
66 LONG DSpan; // DSB pan (in dB)
67 LONG pan; // pan (linear)
68 BOOL fPlaying,fLoop; // is buffer playing/looping?
69 DSBUFFERDESC bufferdesc; // DSB description
70 LONG frac; // saved mixer position overflow
71
72 SOUNDBUF *lpSndBuffer; // sound data + reference count
73 char *lpBuffer; // actual sound data
74
75 OS2IDirectSoundNotify* notify; // pointer to the associated Notify object (if exists)
76 OS2IDirectSound3DBuffer* buffer3D; // pointer to the associated 3DBuffer object (if exists)
77 OS2IDirectSound* parentDS;
78
79 // Linked list management
80 OS2IDirectSoundBuffer* next; // Next OS2IDirectSoundBuffer
81 static OS2IDirectSoundBuffer* dsbroot; // List of OS2IDirectSoundBuffers
82 static OS2IDirectSoundBuffer* primary; // The primary SoundBuffer
83
84 friend HRESULT __stdcall SoundBufQueryInterface(THIS, REFIID riid, LPVOID * ppvObj);
85 friend ULONG __stdcall SoundBufAddRef(THIS);
86 friend ULONG __stdcall SoundBufRelease(THIS);
87 friend HRESULT __stdcall SoundBufGetCaps(THIS_ LPDSBCAPS );
88 friend HRESULT __stdcall SoundBufGetCurrentPosition(THIS_ LPDWORD,LPDWORD ) ;
89 friend HRESULT __stdcall SoundBufGetFormat(THIS_ LPWAVEFORMATEX, DWORD, LPDWORD ) ;
90 friend HRESULT __stdcall SoundBufGetVolume(THIS_ LPLONG ) ;
91 friend HRESULT __stdcall SoundBufGetPan(THIS_ LPLONG ) ;
92 friend HRESULT __stdcall SoundBufGetFrequency(THIS_ LPDWORD ) ;
93 friend HRESULT __stdcall SoundBufGetStatus(THIS_ LPDWORD ) ;
94 friend HRESULT __stdcall SoundBufInitialize(THIS_ LPDIRECTSOUND, LPDSBUFFERDESC ) ;
95 friend HRESULT __stdcall SoundBufLock(THIS_ DWORD,DWORD,LPVOID,LPDWORD,LPVOID,LPDWORD,DWORD ) ;
96 friend HRESULT __stdcall SoundBufPlay(THIS_ DWORD,DWORD,DWORD ) ;
97 friend HRESULT __stdcall SoundBufSetCurrentPosition(THIS_ DWORD ) ;
98 friend HRESULT __stdcall SoundBufSetFormat(THIS_ LPWAVEFORMATEX ) ;
99 friend HRESULT __stdcall SoundBufSetVolume(THIS_ LONG ) ;
100 friend HRESULT __stdcall SoundBufSetPan(THIS_ LONG ) ;
101 friend HRESULT __stdcall SoundBufSetFrequency(THIS_ DWORD ) ;
102 friend HRESULT __stdcall SoundBufStop(THIS ) ;
103 friend HRESULT __stdcall SoundBufUnlock(THIS_ LPVOID,DWORD,LPVOID,DWORD ) ;
104 friend HRESULT __stdcall SoundBufRestore(THIS ) ;
105
106 friend void MixCallback(ULONG cbMix);
107 friend void MixFunc (OS2IDirectSoundBuffer *firstBuf, OS2IDirectSoundBuffer *outBuf, ULONG cbMix);
108 friend void MixOneBuffer(OS2IDirectSoundBuffer *inBuf, int tomix, int outrate);
109};
110//******************************************************************************
111//******************************************************************************
112HRESULT __stdcall SoundBufQueryInterface(THIS, REFIID riid, LPVOID * ppvObj);
113ULONG __stdcall SoundBufAddRef(THIS);
114ULONG __stdcall SoundBufRelease(THIS);
115HRESULT __stdcall SoundBufGetCaps(THIS_ LPDSBCAPS );
116HRESULT __stdcall SoundBufGetCurrentPosition(THIS_ LPDWORD,LPDWORD ) ;
117HRESULT __stdcall SoundBufGetFormat(THIS_ LPWAVEFORMATEX, DWORD, LPDWORD ) ;
118HRESULT __stdcall SoundBufGetVolume(THIS_ LPLONG ) ;
119HRESULT __stdcall SoundBufGetPan(THIS_ LPLONG ) ;
120HRESULT __stdcall SoundBufGetFrequency(THIS_ LPDWORD ) ;
121HRESULT __stdcall SoundBufGetStatus(THIS_ LPDWORD ) ;
122HRESULT __stdcall SoundBufInitialize(THIS_ LPDIRECTSOUND, LPDSBUFFERDESC ) ;
123HRESULT __stdcall SoundBufLock(THIS_ DWORD,DWORD,LPVOID,LPDWORD,LPVOID,LPDWORD,DWORD ) ;
124HRESULT __stdcall SoundBufPlay(THIS_ DWORD,DWORD,DWORD ) ;
125HRESULT __stdcall SoundBufSetCurrentPosition(THIS_ DWORD ) ;
126HRESULT __stdcall SoundBufSetFormat(THIS_ LPWAVEFORMATEX ) ;
127HRESULT __stdcall SoundBufSetVolume(THIS_ LONG ) ;
128HRESULT __stdcall SoundBufSetPan(THIS_ LONG ) ;
129HRESULT __stdcall SoundBufSetFrequency(THIS_ DWORD ) ;
130HRESULT __stdcall SoundBufStop(THIS ) ;
131HRESULT __stdcall SoundBufUnlock(THIS_ LPVOID,DWORD,LPVOID,DWORD ) ;
132HRESULT __stdcall SoundBufRestore(THIS ) ;
133
134#endif
Note: See TracBrowser for help on using the repository browser.