source: trunk/src/winmm/dwaveout.h@ 5280

Last change on this file since 5280 was 3852, checked in by sandervl, 25 years ago

waveOutSetVolume fix

File size: 3.4 KB
Line 
1/* $Id: dwaveout.h,v 1.10 2000-07-18 18:34:43 sandervl Exp $ */
2
3/*
4 * Wave playback class
5 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)
6 * Project Odin Software License can be found in LICENSE.TXT
7 */
8#ifndef __DWAVEOUT_H__
9#define __DWAVEOUT_H__
10
11#define STATE_STOPPED 0
12#define STATE_PLAYING 1
13#define STATE_PAUSED 2
14
15#define PREFILLBUF_DART 4
16#define DART_BUFSIZE 4096
17
18#ifdef OS2_ONLY
19#include "winmmtype.h"
20#endif
21#include "vmutex.h"
22
23#ifdef _OS2WIN_H
24#define MCI_MIX_BUFFER DWORD
25#define PMCI_MIX_BUFFER MCI_MIX_BUFFER *
26#define MCI_MIXSETUP_PARMS DWORD
27#define MCI_BUFFER_PARMS DWORD
28#define MCI_PLAY_PARMS DWORD
29#endif
30
31class DartWaveOut
32{
33public:
34 DartWaveOut(LPWAVEFORMATEX pwfx, ULONG nCallback, ULONG dwInstance, USHORT usSel);
35 DartWaveOut(LPWAVEFORMATEX pwfx, HWND hwndCallback);
36 DartWaveOut(LPWAVEFORMATEX pwfx);
37 ~DartWaveOut();
38
39 MMRESULT getError();
40 MMRESULT write(LPWAVEHDR pwh, UINT cbwh);
41 MMRESULT pause();
42 MMRESULT restart();
43 MMRESULT setVolume(ULONG ulVol);
44 ULONG getVolume() { return volume; };
45 int getState() { return State; };
46 MMRESULT reset();
47 ULONG getPosition();
48
49 ULONG getSampleRate() { return SampleRate; };
50 ULONG getBitsPerSample() { return BitsPerSample; };
51 ULONG getnumChannels() { return nChannels; };
52 ULONG getAvgBytesPerSecond() { return (BitsPerSample/8) * nChannels * SampleRate; };
53
54 static BOOL queryFormat(ULONG formatTag, ULONG nChannels,
55 ULONG nSamplesPerSec, ULONG sampleSize);
56
57 static BOOL find(DartWaveOut *dwave);
58 static int getNumDevices();
59
60 static void setDefaultVolume(ULONG volume);
61
62protected:
63 static void mciError(ULONG ulError);
64 void Init(LPWAVEFORMATEX pwfx);
65 void handler(ULONG ulStatus, PMCI_MIX_BUFFER pBuffer, ULONG ulFlags);
66
67private:
68 USHORT DeviceId;
69 ULONG ulBufferCount; /* Current file buffer */
70 ULONG ulBufSize;
71
72 ULONG ulError, State;
73 ULONG volume; // Volume state
74
75 MCI_MIX_BUFFER *MixBuffer; /* Device buffers */
76 MCI_MIXSETUP_PARMS *MixSetupParms; /* Mixer parameters */
77 MCI_BUFFER_PARMS *BufferParms; /* Device buffer parms */
78
79 int SampleRate;
80 int BitsPerSample;
81 int nChannels;
82 int curPlayBuf, curFillBuf;
83 int curFillPos, curPlayPos; //fillpos == pos in os2 mix buffer, bufpos == pos in win buffer
84
85 // callback interface
86 LPDRVCALLBACK mthdCallback; // pointer to win32 routine for the callback
87 USHORT selCallback; // the win32 tib selector for the callback (saved at waveOutOpen)
88 void callback(HDRVR h, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
89 HWND hwndCallback;
90 DWORD dwInstance;
91
92 WAVEHDR *wavehdr,
93 *curhdr;
94
95 BOOL fMixerSetup;
96 BOOL fUnderrun;
97
98 VMutex *wmutex;
99 // Linked list management
100 DartWaveOut* next; // Next Timer
101 static DartWaveOut* waveout; // List of Timer
102
103 static ULONG defvolume; //default volume for streams (if waveOutSetVolume called with NULL stream)
104
105#ifndef _OS2WIN_H
106 friend LONG APIENTRY WaveOutHandler(ULONG ulStatus, PMCI_MIX_BUFFER pBuffer, ULONG ulFlags);
107#endif
108};
109
110#endif
Note: See TracBrowser for help on using the repository browser.