Skip to content

Commit 8fc0fd4

Browse files
authored
Merge 302968a into c756899
2 parents c756899 + 302968a commit 8fc0fd4

2 files changed

Lines changed: 417 additions & 59 deletions

File tree

source/synthDrivers/_sapi4.py

Lines changed: 86 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
sizeof,
1818
Structure,
1919
)
20-
from ctypes.wintypes import BYTE, DWORD, LPCWSTR, WORD
20+
from ctypes.wintypes import BOOL, BYTE, DWORD, FILETIME, LPCWSTR, WORD
2121
from enum import IntEnum
22-
from comtypes import GUID, IUnknown, STDMETHOD
22+
from comtypes import GUID, IUnknown, STDMETHOD, COMMETHOD
2323

2424
import winKernel
2525

@@ -43,6 +43,27 @@
4343
TTSFEATURE_PITCH = 8
4444
TTSFEATURE_FIXEDAUDIO = 1024
4545

46+
# Audio related error codes
47+
AUDERR_BADDEVICEID = -2147220735
48+
AUDERR_NEEDWAVEFORMAT = -2147220734
49+
AUDERR_NOTSUPPORTED = -2147467263 # E_NOTIMPL
50+
AUDERR_NOTENOUGHDATA = -2147220991
51+
AUDERR_NOTPLAYING = -2147220730
52+
AUDERR_WAVEFORMATNOTSUPPORTED = -2147220990
53+
AUDERR_WAVEDEVICEBUSY = -2147220989
54+
AUDERR_WAVEDEVNOTSUPPORTED = -2147220718
55+
AUDERR_NOTRECORDING = -2147220717
56+
AUDERR_INVALIDFLAG = -2147220988
57+
AUDERR_NODRIVER = -2147220713
58+
AUDERR_HANDLEBUSY = -2147220712
59+
AUDERR_INVALIDNOTIFYSINK = -2147220711
60+
AUDERR_WAVENOTENABLED = -2147220710
61+
AUDERR_ALREADYCLAIMED = -2147220707
62+
AUDERR_NOTCLAIMED = -2147220706
63+
AUDERR_STILLPLAYING = -2147220705
64+
AUDERR_ALREADYSTARTED = -2147220704
65+
AUDERR_SYNCNOTALLOWED = -2147220703
66+
4667
LANGID = WORD
4768
QWORD = c_ulonglong
4869

@@ -224,6 +245,69 @@ class ITTSNotifySinkW(IUnknown):
224245

225246
ITTSNotifySink = ITTSNotifySinkW
226247

248+
249+
class IAudio(IUnknown):
250+
_iid_ = GUID("{F546B340-C743-11cd-80E5-00AA003E4B50}")
251+
252+
253+
IAudio._methods_ = [
254+
COMMETHOD([], HRESULT, "Flush"),
255+
COMMETHOD([], HRESULT, "LevelGet", (["out"], POINTER(DWORD), "pdwLevel")),
256+
COMMETHOD([], HRESULT, "LevelSet", (["in"], DWORD, "dwLevel")),
257+
COMMETHOD(
258+
[],
259+
HRESULT,
260+
"PassNotify",
261+
(["in"], c_void_p, "pNotifyInterface"),
262+
(["in"], GUID, "IIDNotifyInterface"),
263+
),
264+
COMMETHOD([], HRESULT, "PosnGet", (["out"], POINTER(QWORD), "pqwTimeStamp")),
265+
COMMETHOD([], HRESULT, "Claim"),
266+
COMMETHOD([], HRESULT, "UnClaim"),
267+
COMMETHOD([], HRESULT, "Start"),
268+
COMMETHOD([], HRESULT, "Stop"),
269+
COMMETHOD([], HRESULT, "TotalGet", (["out"], POINTER(QWORD), "pqWord")),
270+
COMMETHOD(
271+
[],
272+
HRESULT,
273+
"ToFileTime",
274+
(["in"], POINTER(QWORD), "pqWord"),
275+
(["out"], POINTER(FILETIME), "pFT"),
276+
),
277+
COMMETHOD([], HRESULT, "WaveFormatGet", (["out"], POINTER(SDATA), "pdWFEX")),
278+
COMMETHOD([], HRESULT, "WaveFormatSet", (["in"], SDATA, "dWFEX")),
279+
]
280+
281+
282+
class IAudioDest(IUnknown):
283+
_iid_ = GUID("{2EC34DA0-C743-11cd-80E5-00AA003E4B50}")
284+
285+
286+
IAudioDest._methods_ = [
287+
COMMETHOD(
288+
[],
289+
HRESULT,
290+
"FreeSpace",
291+
(["out"], POINTER(DWORD), "pdwBytes"),
292+
(["out"], POINTER(BOOL), "pfEOF"),
293+
),
294+
COMMETHOD([], HRESULT, "DataSet", (["in"], c_void_p, "pBuffer"), (["in"], DWORD, "dwSize")),
295+
COMMETHOD([], HRESULT, "BookMark", (["in"], DWORD, "dwMarkID")),
296+
]
297+
298+
299+
class IAudioDestNotifySink(IUnknown):
300+
_iid_ = GUID("{ACB08C00-C743-11cd-80E5-00AA003E4B50}")
301+
302+
303+
IAudioDestNotifySink._methods_ = [
304+
STDMETHOD(HRESULT, "AudioStop", [WORD]),
305+
STDMETHOD(HRESULT, "AudioStart"),
306+
STDMETHOD(HRESULT, "FreeSpace", [DWORD, BOOL]),
307+
STDMETHOD(HRESULT, "BookMark", [DWORD, BOOL]),
308+
]
309+
310+
227311
CLSID_MMAudioDest = GUID("{CB96B400-C743-11cd-80E5-00AA003E4B50}")
228312
CLSID_TTSEnumerator = GUID("{D67C0280-C743-11cd-80E5-00AA003E4B50}")
229313

0 commit comments

Comments
 (0)