1from typing import Callable, Mapping, Optional, Sequence, Tuple, Union
2from typing_extensions import Final
3
4paFloat32: Final[int] = ...
5paInt32: Final[int] = ...
6paInt24: Final[int] = ...
7paInt16: Final[int] = ...
8paInt8: Final[int] = ...
9paUInt8: Final[int] = ...
10paCustomFormat: Final[int] = ...
11
12paInDevelopment: Final[int] = ...
13paDirectSound: Final[int] = ...
14paMME: Final[int] = ...
15paASIO: Final[int] = ...
16paSoundManager: Final[int] = ...
17paCoreAudio: Final[int] = ...
18paOSS: Final[int] = ...
19paALSA: Final[int] = ...
20paAL: Final[int] = ...
21paBeOS: Final[int] = ...
22paWDMKS: Final[int] = ...
23paJACK: Final[int] = ...
24paWASAPI: Final[int] = ...
25paNoDevice: Final[int] = ...
26
27paNoError: Final[int] = ...
28paNotInitialized: Final[int] = ...
29paUnanticipatedHostError: Final[int] = ...
30paInvalidChannelCount: Final[int] = ...
31paInvalidSampleRate: Final[int] = ...
32paInvalidDevice: Final[int] = ...
33paInvalidFlag: Final[int] = ...
34paSampleFormatNotSupported: Final[int] = ...
35paBadIODeviceCombination: Final[int] = ...
36paInsufficientMemory: Final[int] = ...
37paBufferTooBig: Final[int] = ...
38paBufferTooSmall: Final[int] = ...
39paNullCallback: Final[int] = ...
40paBadStreamPtr: Final[int] = ...
41paTimedOut: Final[int] = ...
42paInternalError: Final[int] = ...
43paDeviceUnavailable: Final[int] = ...
44paIncompatibleHostApiSpecificStreamInfo: Final[int] = ...
45paStreamIsStopped: Final[int] = ...
46paStreamIsNotStopped: Final[int] = ...
47paInputOverflowed: Final[int] = ...
48paOutputUnderflowed: Final[int] = ...
49paHostApiNotFound: Final[int] = ...
50paInvalidHostApi: Final[int] = ...
51paCanNotReadFromACallbackStream: Final[int] = ...
52paCanNotWriteToACallbackStream: Final[int] = ...
53paCanNotReadFromAnOutputOnlyStream: Final[int] = ...
54paCanNotWriteToAnInputOnlyStream: Final[int] = ...
55paIncompatibleStreamHostApi: Final[int] = ...
56
57paContinue: Final[int] = ...
58paComplete: Final[int] = ...
59paAbort: Final[int] = ...
60
61paInputUnderflow: Final[int] = ...
62paInputOverflow: Final[int] = ...
63paOutputUnderflow: Final[int] = ...
64paOutputOverflow: Final[int] = ...
65paPrimingOutput: Final[int] = ...
66
67paMacCoreStreamInfo: PaMacCoreStreamInfo
68
69# Auxiliary types
70_ChannelMap = Sequence[int]
71_PaHostApiInfo = Mapping[str, Union[str, int]]
72_PaDeviceInfo = Mapping[str, Union[str, int, float]]
73_StreamCallback = Callable[[Optional[bytes], int, Mapping[str, float], int], Tuple[Optional[bytes], int]]
74
75def get_format_from_width(width: int, unsigned: bool = ...) -> int: ...
76def get_portaudio_version() -> int: ...
77def get_portaudio_version_text() -> str: ...
78def get_sample_size(format: int) -> int: ...
79
80class Stream:
81    def __init__(
82        self,
83        PA_manager: PyAudio,
84        rate: int,
85        channels: int,
86        format: int,
87        input: bool = ...,
88        output: bool = ...,
89        input_device_index: Optional[int] = ...,
90        output_device_index: Optional[int] = ...,
91        frames_per_buffer: int = ...,
92        start: bool = ...,
93        input_host_api_specific_stream_info: Optional[PaMacCoreStreamInfo] = ...,
94        output_host_api_specific_stream_info: Optional[PaMacCoreStreamInfo] = ...,
95        stream_callback: Optional[_StreamCallback] = ...,
96    ) -> None: ...
97    def close(self) -> None: ...
98    def get_cpu_load(self) -> float: ...
99    def get_input_latency(self) -> float: ...
100    def get_output_latency(self) -> float: ...
101    def get_read_available(self) -> int: ...
102    def get_time(self) -> float: ...
103    def get_write_available(self) -> int: ...
104    def is_active(self) -> bool: ...
105    def is_stopped(self) -> bool: ...
106    def read(self, num_frames: int, exception_on_overflow: bool = ...) -> bytes: ...
107    def start_stream(self) -> None: ...
108    def stop_stream(self) -> None: ...
109    def write(self, frames: bytes, num_frames: Optional[int] = ..., exception_on_underflow: bool = ...) -> None: ...
110
111class PyAudio:
112    def __init__(self) -> None: ...
113    def close(self, stream: Stream) -> None: ...
114    def get_default_host_api_info(self) -> _PaHostApiInfo: ...
115    def get_default_input_device_info(self) -> _PaDeviceInfo: ...
116    def get_default_output_device_info(self) -> _PaDeviceInfo: ...
117    def get_device_count(self) -> int: ...
118    def get_device_info_by_host_api_device_index(self, host_api_index: int, host_api_device_index: int) -> _PaDeviceInfo: ...
119    def get_device_info_by_index(self, device_index: int) -> _PaDeviceInfo: ...
120    def get_format_from_width(self, width: int, unsigned: bool = ...) -> int: ...
121    def get_host_api_count(self) -> int: ...
122    def get_host_api_info_by_index(self, host_api_index: int) -> _PaHostApiInfo: ...
123    def get_host_api_info_by_type(self, host_api_type: int) -> _PaHostApiInfo: ...
124    def get_sample_size(self, format: int) -> int: ...
125    def is_format_supported(
126        self,
127        rate: int,
128        input_device: Optional[int] = ...,
129        input_channels: Optional[int] = ...,
130        input_format: Optional[int] = ...,
131        output_device: Optional[int] = ...,
132        output_channels: Optional[int] = ...,
133        output_format: Optional[int] = ...,
134    ) -> bool: ...
135    def open(
136        self,
137        rate: int,
138        channels: int,
139        format: int,
140        input: bool = ...,
141        output: bool = ...,
142        input_device_index: Optional[int] = ...,
143        output_device_index: Optional[int] = ...,
144        frames_per_buffer: int = ...,
145        start: bool = ...,
146        input_host_api_specific_stream_info: Optional[PaMacCoreStreamInfo] = ...,
147        output_host_api_specific_stream_info: Optional[PaMacCoreStreamInfo] = ...,
148        stream_callback: Optional[_StreamCallback] = ...,
149    ) -> Stream: ...
150    def terminate(self) -> None: ...
151
152class PaMacCoreStreamInfo:
153    paMacCoreChangeDeviceParameters: Final[int] = ...
154    paMacCoreFailIfConversionRequired: Final[int] = ...
155    paMacCoreConversionQualityMin: Final[int] = ...
156    paMacCoreConversionQualityMedium: Final[int] = ...
157    paMacCoreConversionQualityLow: Final[int] = ...
158    paMacCoreConversionQualityHigh: Final[int] = ...
159    paMacCoreConversionQualityMax: Final[int] = ...
160    paMacCorePlayNice: Final[int] = ...
161    paMacCorePro: Final[int] = ...
162    paMacCoreMinimizeCPUButPlayNice: Final[int] = ...
163    paMacCoreMinimizeCPU: Final[int] = ...
164    def __init__(self, flags: Optional[int] = ..., channel_map: Optional[_ChannelMap] = ...) -> None: ...
165    def get_flags(self) -> int: ...
166    def get_channel_map(self) -> Optional[_ChannelMap]: ...
167