1 /*
2  * Copyright (c) 2002 Francois Gouget
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18 
19 #ifndef WAVE_FORMAT_48M08
20 #define WAVE_FORMAT_48M08      0x00001000    /* 48     kHz, Mono,   8-bit  */
21 #define WAVE_FORMAT_48S08      0x00002000    /* 48     kHz, Stereo, 8-bit  */
22 #define WAVE_FORMAT_48M16      0x00004000    /* 48     kHz, Mono,   16-bit */
23 #define WAVE_FORMAT_48S16      0x00008000    /* 48     kHz, Stereo, 16-bit */
24 #define WAVE_FORMAT_96M08      0x00010000    /* 96     kHz, Mono,   8-bit  */
25 #define WAVE_FORMAT_96S08      0x00020000    /* 96     kHz, Stereo, 8-bit  */
26 #define WAVE_FORMAT_96M16      0x00040000    /* 96     kHz, Mono,   16-bit */
27 #define WAVE_FORMAT_96S16      0x00080000    /* 96     kHz, Stereo, 16-bit */
28 #endif
29 
30 #ifndef DRV_QUERYDEVICEINTERFACE
31 #define DRV_QUERYDEVICEINTERFACE     (DRV_RESERVED + 12)
32 #endif
33 #ifndef DRV_QUERYDEVICEINTERFACESIZE
34 #define DRV_QUERYDEVICEINTERFACESIZE (DRV_RESERVED + 13)
35 #endif
36 
37 static const unsigned int win_formats[][4] = {
38     {0,                  8000,  8, 1},
39     {0,                  8000,  8, 2},
40     {0,                  8000, 16, 1},
41     {0,                  8000, 16, 2},
42     {WAVE_FORMAT_1M08,  11025,  8, 1},
43     {WAVE_FORMAT_1S08,  11025,  8, 2},
44     {WAVE_FORMAT_1M16,  11025, 16, 1},
45     {WAVE_FORMAT_1S16,  11025, 16, 2},
46     {0,                 12000,  8, 1},
47     {0,                 12000,  8, 2},
48     {0,                 12000, 16, 1},
49     {0,                 12000, 16, 2},
50     {0,                 16000,  8, 1},
51     {0,                 16000,  8, 2},
52     {0,                 16000, 16, 1},
53     {0,                 16000, 16, 2},
54     {WAVE_FORMAT_2M08,  22050,  8, 1},
55     {WAVE_FORMAT_2S08,  22050,  8, 2},
56     {WAVE_FORMAT_2M16,  22050, 16, 1},
57     {WAVE_FORMAT_2S16,  22050, 16, 2},
58     {WAVE_FORMAT_4M08,  44100,  8, 1},
59     {WAVE_FORMAT_4S08,  44100,  8, 2},
60     {WAVE_FORMAT_4M16,  44100, 16, 1},
61     {WAVE_FORMAT_4S16,  44100, 16, 2},
62     {WAVE_FORMAT_48M08, 48000,  8, 1},
63     {WAVE_FORMAT_48S08, 48000,  8, 2},
64     {WAVE_FORMAT_48M16, 48000, 16, 1},
65     {WAVE_FORMAT_48S16, 48000, 16, 2},
66     {WAVE_FORMAT_96M08, 96000,  8, 1},
67     {WAVE_FORMAT_96S08, 96000,  8, 2},
68     {WAVE_FORMAT_96M16, 96000, 16, 1},
69     {WAVE_FORMAT_96S16, 96000, 16, 2}
70 };
71 
72 extern const char* dev_name(int);
73 extern const char* wave_open_flags(DWORD);
74 extern const char* mmsys_error(MMRESULT);
75 extern const char* wave_out_error(MMRESULT);
76 extern const char* get_format_str(WORD format);
77 extern const char* wave_time_format(UINT type);
78 extern DWORD bytes_to_samples(DWORD bytes, LPWAVEFORMATEX pwfx);
79 extern DWORD bytes_to_ms(DWORD bytes, LPWAVEFORMATEX pwfx);
80 extern DWORD time_to_bytes(LPMMTIME mmtime, LPWAVEFORMATEX pwfx);
81