livekit 1.2.1__py3-none-win_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. livekit/rtc/__init__.py +264 -0
  2. livekit/rtc/_ffi_client.py +321 -0
  3. livekit/rtc/_proto/__init__.py +0 -0
  4. livekit/rtc/_proto/audio_frame_pb2.py +159 -0
  5. livekit/rtc/_proto/audio_frame_pb2.pyi +1560 -0
  6. livekit/rtc/_proto/capture_pb2.py +70 -0
  7. livekit/rtc/_proto/capture_pb2.pyi +559 -0
  8. livekit/rtc/_proto/data_stream_pb2.py +171 -0
  9. livekit/rtc/_proto/data_stream_pb2.pyi +1498 -0
  10. livekit/rtc/_proto/data_track_pb2.py +120 -0
  11. livekit/rtc/_proto/data_track_pb2.pyi +1073 -0
  12. livekit/rtc/_proto/e2ee_pb2.py +81 -0
  13. livekit/rtc/_proto/e2ee_pb2.pyi +591 -0
  14. livekit/rtc/_proto/ffi_pb2.py +55 -0
  15. livekit/rtc/_proto/ffi_pb2.pyi +1246 -0
  16. livekit/rtc/_proto/handle_pb2.py +27 -0
  17. livekit/rtc/_proto/handle_pb2.pyi +51 -0
  18. livekit/rtc/_proto/participant_pb2.py +45 -0
  19. livekit/rtc/_proto/participant_pb2.pyi +313 -0
  20. livekit/rtc/_proto/room_pb2.py +311 -0
  21. livekit/rtc/_proto/room_pb2.pyi +3136 -0
  22. livekit/rtc/_proto/rpc_pb2.py +47 -0
  23. livekit/rtc/_proto/rpc_pb2.pyi +261 -0
  24. livekit/rtc/_proto/stats_pb2.py +123 -0
  25. livekit/rtc/_proto/stats_pb2.pyi +1514 -0
  26. livekit/rtc/_proto/track_pb2.py +76 -0
  27. livekit/rtc/_proto/track_pb2.pyi +544 -0
  28. livekit/rtc/_proto/track_publication_pb2.py +39 -0
  29. livekit/rtc/_proto/track_publication_pb2.pyi +145 -0
  30. livekit/rtc/_proto/video_frame_pb2.py +97 -0
  31. livekit/rtc/_proto/video_frame_pb2.pyi +838 -0
  32. livekit/rtc/_utils.py +187 -0
  33. livekit/rtc/apm.py +119 -0
  34. livekit/rtc/audio_filter.py +23 -0
  35. livekit/rtc/audio_frame.py +242 -0
  36. livekit/rtc/audio_mixer.py +247 -0
  37. livekit/rtc/audio_resampler.py +174 -0
  38. livekit/rtc/audio_source.py +191 -0
  39. livekit/rtc/audio_stream.py +354 -0
  40. livekit/rtc/data_stream.py +640 -0
  41. livekit/rtc/data_track.py +296 -0
  42. livekit/rtc/e2ee.py +320 -0
  43. livekit/rtc/encoded_video.py +127 -0
  44. livekit/rtc/event_emitter.py +215 -0
  45. livekit/rtc/frame_processor.py +37 -0
  46. livekit/rtc/jupyter.py +68 -0
  47. livekit/rtc/log.py +3 -0
  48. livekit/rtc/media_devices.py +596 -0
  49. livekit/rtc/participant.py +1171 -0
  50. livekit/rtc/platform_audio.py +426 -0
  51. livekit/rtc/py.typed +0 -0
  52. livekit/rtc/resources/LICENSE.md +4055 -0
  53. livekit/rtc/resources/__init__.py +1 -0
  54. livekit/rtc/resources/jupyter-html/index.html +101 -0
  55. livekit/rtc/resources/livekit_ffi.dll +0 -0
  56. livekit/rtc/resources/livekit_ffi.h +42 -0
  57. livekit/rtc/room.py +1304 -0
  58. livekit/rtc/rpc.py +244 -0
  59. livekit/rtc/synchronizer.py +202 -0
  60. livekit/rtc/track.py +264 -0
  61. livekit/rtc/track_publication.py +145 -0
  62. livekit/rtc/transcription.py +19 -0
  63. livekit/rtc/utils.py +138 -0
  64. livekit/rtc/version.py +1 -0
  65. livekit/rtc/video_frame.py +347 -0
  66. livekit/rtc/video_source.py +74 -0
  67. livekit/rtc/video_stream.py +191 -0
  68. livekit-1.2.1.dist-info/METADATA +80 -0
  69. livekit-1.2.1.dist-info/RECORD +71 -0
  70. livekit-1.2.1.dist-info/WHEEL +5 -0
  71. livekit-1.2.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1560 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ Copyright 2025 LiveKit, Inc.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ """
18
+
19
+ import builtins
20
+ import collections.abc
21
+ import google.protobuf.descriptor
22
+ import google.protobuf.internal.containers
23
+ import google.protobuf.internal.enum_type_wrapper
24
+ import google.protobuf.message
25
+ from . import handle_pb2
26
+ import sys
27
+ from . import track_pb2
28
+ import typing
29
+
30
+ if sys.version_info >= (3, 10):
31
+ import typing as typing_extensions
32
+ else:
33
+ import typing_extensions
34
+
35
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
36
+
37
+ class _SoxResamplerDataType:
38
+ ValueType = typing.NewType("ValueType", builtins.int)
39
+ V: typing_extensions.TypeAlias = ValueType
40
+
41
+ class _SoxResamplerDataTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SoxResamplerDataType.ValueType], builtins.type):
42
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
43
+ SOXR_DATATYPE_INT16I: _SoxResamplerDataType.ValueType # 0
44
+ """TODO(theomonnom): support other datatypes (shouldn't really be needed)"""
45
+ SOXR_DATATYPE_INT16S: _SoxResamplerDataType.ValueType # 1
46
+
47
+ class SoxResamplerDataType(_SoxResamplerDataType, metaclass=_SoxResamplerDataTypeEnumTypeWrapper): ...
48
+
49
+ SOXR_DATATYPE_INT16I: SoxResamplerDataType.ValueType # 0
50
+ """TODO(theomonnom): support other datatypes (shouldn't really be needed)"""
51
+ SOXR_DATATYPE_INT16S: SoxResamplerDataType.ValueType # 1
52
+ global___SoxResamplerDataType = SoxResamplerDataType
53
+
54
+ class _SoxQualityRecipe:
55
+ ValueType = typing.NewType("ValueType", builtins.int)
56
+ V: typing_extensions.TypeAlias = ValueType
57
+
58
+ class _SoxQualityRecipeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SoxQualityRecipe.ValueType], builtins.type):
59
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
60
+ SOXR_QUALITY_QUICK: _SoxQualityRecipe.ValueType # 0
61
+ SOXR_QUALITY_LOW: _SoxQualityRecipe.ValueType # 1
62
+ SOXR_QUALITY_MEDIUM: _SoxQualityRecipe.ValueType # 2
63
+ SOXR_QUALITY_HIGH: _SoxQualityRecipe.ValueType # 3
64
+ SOXR_QUALITY_VERYHIGH: _SoxQualityRecipe.ValueType # 4
65
+
66
+ class SoxQualityRecipe(_SoxQualityRecipe, metaclass=_SoxQualityRecipeEnumTypeWrapper): ...
67
+
68
+ SOXR_QUALITY_QUICK: SoxQualityRecipe.ValueType # 0
69
+ SOXR_QUALITY_LOW: SoxQualityRecipe.ValueType # 1
70
+ SOXR_QUALITY_MEDIUM: SoxQualityRecipe.ValueType # 2
71
+ SOXR_QUALITY_HIGH: SoxQualityRecipe.ValueType # 3
72
+ SOXR_QUALITY_VERYHIGH: SoxQualityRecipe.ValueType # 4
73
+ global___SoxQualityRecipe = SoxQualityRecipe
74
+
75
+ class _SoxFlagBits:
76
+ ValueType = typing.NewType("ValueType", builtins.int)
77
+ V: typing_extensions.TypeAlias = ValueType
78
+
79
+ class _SoxFlagBitsEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SoxFlagBits.ValueType], builtins.type):
80
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
81
+ SOXR_ROLLOFF_SMALL: _SoxFlagBits.ValueType # 0
82
+ """1 << 0"""
83
+ SOXR_ROLLOFF_MEDIUM: _SoxFlagBits.ValueType # 1
84
+ """1 << 1"""
85
+ SOXR_ROLLOFF_NONE: _SoxFlagBits.ValueType # 2
86
+ """1 << 2"""
87
+ SOXR_HIGH_PREC_CLOCK: _SoxFlagBits.ValueType # 3
88
+ """1 << 3"""
89
+ SOXR_DOUBLE_PRECISION: _SoxFlagBits.ValueType # 4
90
+ """1 << 4"""
91
+ SOXR_VR: _SoxFlagBits.ValueType # 5
92
+ """1 << 5"""
93
+
94
+ class SoxFlagBits(_SoxFlagBits, metaclass=_SoxFlagBitsEnumTypeWrapper): ...
95
+
96
+ SOXR_ROLLOFF_SMALL: SoxFlagBits.ValueType # 0
97
+ """1 << 0"""
98
+ SOXR_ROLLOFF_MEDIUM: SoxFlagBits.ValueType # 1
99
+ """1 << 1"""
100
+ SOXR_ROLLOFF_NONE: SoxFlagBits.ValueType # 2
101
+ """1 << 2"""
102
+ SOXR_HIGH_PREC_CLOCK: SoxFlagBits.ValueType # 3
103
+ """1 << 3"""
104
+ SOXR_DOUBLE_PRECISION: SoxFlagBits.ValueType # 4
105
+ """1 << 4"""
106
+ SOXR_VR: SoxFlagBits.ValueType # 5
107
+ """1 << 5"""
108
+ global___SoxFlagBits = SoxFlagBits
109
+
110
+ class _AudioStreamType:
111
+ ValueType = typing.NewType("ValueType", builtins.int)
112
+ V: typing_extensions.TypeAlias = ValueType
113
+
114
+ class _AudioStreamTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_AudioStreamType.ValueType], builtins.type):
115
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
116
+ AUDIO_STREAM_NATIVE: _AudioStreamType.ValueType # 0
117
+ AUDIO_STREAM_HTML: _AudioStreamType.ValueType # 1
118
+
119
+ class AudioStreamType(_AudioStreamType, metaclass=_AudioStreamTypeEnumTypeWrapper):
120
+ """
121
+ AudioStream
122
+ """
123
+
124
+ AUDIO_STREAM_NATIVE: AudioStreamType.ValueType # 0
125
+ AUDIO_STREAM_HTML: AudioStreamType.ValueType # 1
126
+ global___AudioStreamType = AudioStreamType
127
+
128
+ class _AudioSourceType:
129
+ ValueType = typing.NewType("ValueType", builtins.int)
130
+ V: typing_extensions.TypeAlias = ValueType
131
+
132
+ class _AudioSourceTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_AudioSourceType.ValueType], builtins.type):
133
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
134
+ AUDIO_SOURCE_NATIVE: _AudioSourceType.ValueType # 0
135
+ """Push-based audio source - manually capture frames via CaptureAudioFrameRequest"""
136
+ AUDIO_SOURCE_PLATFORM: _AudioSourceType.ValueType # 1
137
+ """Platform ADM-based audio source - captures from microphone automatically
138
+ Requires PlatformAudio to be created first to enable ADM recording
139
+ """
140
+
141
+ class AudioSourceType(_AudioSourceType, metaclass=_AudioSourceTypeEnumTypeWrapper): ...
142
+
143
+ AUDIO_SOURCE_NATIVE: AudioSourceType.ValueType # 0
144
+ """Push-based audio source - manually capture frames via CaptureAudioFrameRequest"""
145
+ AUDIO_SOURCE_PLATFORM: AudioSourceType.ValueType # 1
146
+ """Platform ADM-based audio source - captures from microphone automatically
147
+ Requires PlatformAudio to be created first to enable ADM recording
148
+ """
149
+ global___AudioSourceType = AudioSourceType
150
+
151
+ @typing.final
152
+ class NewAudioStreamRequest(google.protobuf.message.Message):
153
+ """Create a new AudioStream
154
+ AudioStream is used to receive audio frames from a track
155
+ """
156
+
157
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
158
+
159
+ TRACK_HANDLE_FIELD_NUMBER: builtins.int
160
+ TYPE_FIELD_NUMBER: builtins.int
161
+ SAMPLE_RATE_FIELD_NUMBER: builtins.int
162
+ NUM_CHANNELS_FIELD_NUMBER: builtins.int
163
+ AUDIO_FILTER_MODULE_ID_FIELD_NUMBER: builtins.int
164
+ AUDIO_FILTER_OPTIONS_FIELD_NUMBER: builtins.int
165
+ FRAME_SIZE_MS_FIELD_NUMBER: builtins.int
166
+ QUEUE_SIZE_FRAMES_FIELD_NUMBER: builtins.int
167
+ track_handle: builtins.int
168
+ type: global___AudioStreamType.ValueType
169
+ sample_rate: builtins.int
170
+ num_channels: builtins.int
171
+ audio_filter_module_id: builtins.str
172
+ """Unique identifier passed in LoadAudioFilterPluginRequest"""
173
+ audio_filter_options: builtins.str
174
+ frame_size_ms: builtins.int
175
+ queue_size_frames: builtins.int
176
+ """Maximum number of queued WebRTC sink frames. Each frame is typically 10 ms
177
+ of decoded PCM audio on the receive path. Omit this field to use the
178
+ default bounded queue size of 10 frames. Set it to 0 to request unbounded
179
+ buffering.
180
+
181
+ If your application consumes both audio and video, keep the queue sizing
182
+ strategy coordinated across both streams. Using a much larger queue, or
183
+ unbounded buffering, for only one of them can increase end-to-end latency
184
+ for that stream and cause audio/video drift.
185
+ """
186
+ def __init__(
187
+ self,
188
+ *,
189
+ track_handle: builtins.int | None = ...,
190
+ type: global___AudioStreamType.ValueType | None = ...,
191
+ sample_rate: builtins.int | None = ...,
192
+ num_channels: builtins.int | None = ...,
193
+ audio_filter_module_id: builtins.str | None = ...,
194
+ audio_filter_options: builtins.str | None = ...,
195
+ frame_size_ms: builtins.int | None = ...,
196
+ queue_size_frames: builtins.int | None = ...,
197
+ ) -> None: ...
198
+ def HasField(self, field_name: typing.Literal["audio_filter_module_id", b"audio_filter_module_id", "audio_filter_options", b"audio_filter_options", "frame_size_ms", b"frame_size_ms", "num_channels", b"num_channels", "queue_size_frames", b"queue_size_frames", "sample_rate", b"sample_rate", "track_handle", b"track_handle", "type", b"type"]) -> builtins.bool: ...
199
+ def ClearField(self, field_name: typing.Literal["audio_filter_module_id", b"audio_filter_module_id", "audio_filter_options", b"audio_filter_options", "frame_size_ms", b"frame_size_ms", "num_channels", b"num_channels", "queue_size_frames", b"queue_size_frames", "sample_rate", b"sample_rate", "track_handle", b"track_handle", "type", b"type"]) -> None: ...
200
+
201
+ global___NewAudioStreamRequest = NewAudioStreamRequest
202
+
203
+ @typing.final
204
+ class NewAudioStreamResponse(google.protobuf.message.Message):
205
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
206
+
207
+ STREAM_FIELD_NUMBER: builtins.int
208
+ @property
209
+ def stream(self) -> global___OwnedAudioStream: ...
210
+ def __init__(
211
+ self,
212
+ *,
213
+ stream: global___OwnedAudioStream | None = ...,
214
+ ) -> None: ...
215
+ def HasField(self, field_name: typing.Literal["stream", b"stream"]) -> builtins.bool: ...
216
+ def ClearField(self, field_name: typing.Literal["stream", b"stream"]) -> None: ...
217
+
218
+ global___NewAudioStreamResponse = NewAudioStreamResponse
219
+
220
+ @typing.final
221
+ class AudioStreamFromParticipantRequest(google.protobuf.message.Message):
222
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
223
+
224
+ PARTICIPANT_HANDLE_FIELD_NUMBER: builtins.int
225
+ TYPE_FIELD_NUMBER: builtins.int
226
+ TRACK_SOURCE_FIELD_NUMBER: builtins.int
227
+ SAMPLE_RATE_FIELD_NUMBER: builtins.int
228
+ NUM_CHANNELS_FIELD_NUMBER: builtins.int
229
+ AUDIO_FILTER_MODULE_ID_FIELD_NUMBER: builtins.int
230
+ AUDIO_FILTER_OPTIONS_FIELD_NUMBER: builtins.int
231
+ FRAME_SIZE_MS_FIELD_NUMBER: builtins.int
232
+ QUEUE_SIZE_FRAMES_FIELD_NUMBER: builtins.int
233
+ participant_handle: builtins.int
234
+ type: global___AudioStreamType.ValueType
235
+ track_source: track_pb2.TrackSource.ValueType
236
+ sample_rate: builtins.int
237
+ num_channels: builtins.int
238
+ audio_filter_module_id: builtins.str
239
+ audio_filter_options: builtins.str
240
+ frame_size_ms: builtins.int
241
+ queue_size_frames: builtins.int
242
+ """Maximum number of queued WebRTC sink frames. Each frame is typically 10 ms
243
+ of decoded PCM audio on the receive path. Omit this field to use the
244
+ default bounded queue size of 10 frames. Set it to 0 to request unbounded
245
+ buffering.
246
+
247
+ If your application consumes both audio and video, keep the queue sizing
248
+ strategy coordinated across both streams. Using a much larger queue, or
249
+ unbounded buffering, for only one of them can increase end-to-end latency
250
+ for that stream and cause audio/video drift.
251
+ """
252
+ def __init__(
253
+ self,
254
+ *,
255
+ participant_handle: builtins.int | None = ...,
256
+ type: global___AudioStreamType.ValueType | None = ...,
257
+ track_source: track_pb2.TrackSource.ValueType | None = ...,
258
+ sample_rate: builtins.int | None = ...,
259
+ num_channels: builtins.int | None = ...,
260
+ audio_filter_module_id: builtins.str | None = ...,
261
+ audio_filter_options: builtins.str | None = ...,
262
+ frame_size_ms: builtins.int | None = ...,
263
+ queue_size_frames: builtins.int | None = ...,
264
+ ) -> None: ...
265
+ def HasField(self, field_name: typing.Literal["audio_filter_module_id", b"audio_filter_module_id", "audio_filter_options", b"audio_filter_options", "frame_size_ms", b"frame_size_ms", "num_channels", b"num_channels", "participant_handle", b"participant_handle", "queue_size_frames", b"queue_size_frames", "sample_rate", b"sample_rate", "track_source", b"track_source", "type", b"type"]) -> builtins.bool: ...
266
+ def ClearField(self, field_name: typing.Literal["audio_filter_module_id", b"audio_filter_module_id", "audio_filter_options", b"audio_filter_options", "frame_size_ms", b"frame_size_ms", "num_channels", b"num_channels", "participant_handle", b"participant_handle", "queue_size_frames", b"queue_size_frames", "sample_rate", b"sample_rate", "track_source", b"track_source", "type", b"type"]) -> None: ...
267
+
268
+ global___AudioStreamFromParticipantRequest = AudioStreamFromParticipantRequest
269
+
270
+ @typing.final
271
+ class AudioStreamFromParticipantResponse(google.protobuf.message.Message):
272
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
273
+
274
+ STREAM_FIELD_NUMBER: builtins.int
275
+ @property
276
+ def stream(self) -> global___OwnedAudioStream: ...
277
+ def __init__(
278
+ self,
279
+ *,
280
+ stream: global___OwnedAudioStream | None = ...,
281
+ ) -> None: ...
282
+ def HasField(self, field_name: typing.Literal["stream", b"stream"]) -> builtins.bool: ...
283
+ def ClearField(self, field_name: typing.Literal["stream", b"stream"]) -> None: ...
284
+
285
+ global___AudioStreamFromParticipantResponse = AudioStreamFromParticipantResponse
286
+
287
+ @typing.final
288
+ class NewAudioSourceRequest(google.protobuf.message.Message):
289
+ """Create a new AudioSource"""
290
+
291
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
292
+
293
+ TYPE_FIELD_NUMBER: builtins.int
294
+ OPTIONS_FIELD_NUMBER: builtins.int
295
+ SAMPLE_RATE_FIELD_NUMBER: builtins.int
296
+ NUM_CHANNELS_FIELD_NUMBER: builtins.int
297
+ QUEUE_SIZE_MS_FIELD_NUMBER: builtins.int
298
+ PLATFORM_AUDIO_HANDLE_FIELD_NUMBER: builtins.int
299
+ type: global___AudioSourceType.ValueType
300
+ sample_rate: builtins.int
301
+ """Sample rate in Hz. Optional - defaults to 48000 if not specified.
302
+ For AudioSourcePlatform: ignored, ADM uses hardware native sample rate.
303
+ For AudioSourceNative with queue_size_ms=0 (fast path): ignored, frame values used directly.
304
+ """
305
+ num_channels: builtins.int
306
+ """Number of audio channels. Optional - defaults to 1 (mono) if not specified.
307
+ For AudioSourcePlatform: ignored, ADM uses hardware native channels.
308
+ For AudioSourceNative with queue_size_ms=0 (fast path): ignored, frame values used directly.
309
+ """
310
+ queue_size_ms: builtins.int
311
+ platform_audio_handle: builtins.int
312
+ """For AudioSourcePlatform: the PlatformAudio handle to configure audio processing on.
313
+ If provided with options, audio processing will be configured on the PlatformAudio.
314
+ """
315
+ @property
316
+ def options(self) -> global___AudioSourceOptions: ...
317
+ def __init__(
318
+ self,
319
+ *,
320
+ type: global___AudioSourceType.ValueType | None = ...,
321
+ options: global___AudioSourceOptions | None = ...,
322
+ sample_rate: builtins.int | None = ...,
323
+ num_channels: builtins.int | None = ...,
324
+ queue_size_ms: builtins.int | None = ...,
325
+ platform_audio_handle: builtins.int | None = ...,
326
+ ) -> None: ...
327
+ def HasField(self, field_name: typing.Literal["num_channels", b"num_channels", "options", b"options", "platform_audio_handle", b"platform_audio_handle", "queue_size_ms", b"queue_size_ms", "sample_rate", b"sample_rate", "type", b"type"]) -> builtins.bool: ...
328
+ def ClearField(self, field_name: typing.Literal["num_channels", b"num_channels", "options", b"options", "platform_audio_handle", b"platform_audio_handle", "queue_size_ms", b"queue_size_ms", "sample_rate", b"sample_rate", "type", b"type"]) -> None: ...
329
+
330
+ global___NewAudioSourceRequest = NewAudioSourceRequest
331
+
332
+ @typing.final
333
+ class NewAudioSourceResponse(google.protobuf.message.Message):
334
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
335
+
336
+ SOURCE_FIELD_NUMBER: builtins.int
337
+ @property
338
+ def source(self) -> global___OwnedAudioSource: ...
339
+ def __init__(
340
+ self,
341
+ *,
342
+ source: global___OwnedAudioSource | None = ...,
343
+ ) -> None: ...
344
+ def HasField(self, field_name: typing.Literal["source", b"source"]) -> builtins.bool: ...
345
+ def ClearField(self, field_name: typing.Literal["source", b"source"]) -> None: ...
346
+
347
+ global___NewAudioSourceResponse = NewAudioSourceResponse
348
+
349
+ @typing.final
350
+ class CaptureAudioFrameRequest(google.protobuf.message.Message):
351
+ """Push a frame to an AudioSource
352
+ The data provided must be available as long as the client receive the callback.
353
+ """
354
+
355
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
356
+
357
+ SOURCE_HANDLE_FIELD_NUMBER: builtins.int
358
+ BUFFER_FIELD_NUMBER: builtins.int
359
+ REQUEST_ASYNC_ID_FIELD_NUMBER: builtins.int
360
+ source_handle: builtins.int
361
+ request_async_id: builtins.int
362
+ @property
363
+ def buffer(self) -> global___AudioFrameBufferInfo: ...
364
+ def __init__(
365
+ self,
366
+ *,
367
+ source_handle: builtins.int | None = ...,
368
+ buffer: global___AudioFrameBufferInfo | None = ...,
369
+ request_async_id: builtins.int | None = ...,
370
+ ) -> None: ...
371
+ def HasField(self, field_name: typing.Literal["buffer", b"buffer", "request_async_id", b"request_async_id", "source_handle", b"source_handle"]) -> builtins.bool: ...
372
+ def ClearField(self, field_name: typing.Literal["buffer", b"buffer", "request_async_id", b"request_async_id", "source_handle", b"source_handle"]) -> None: ...
373
+
374
+ global___CaptureAudioFrameRequest = CaptureAudioFrameRequest
375
+
376
+ @typing.final
377
+ class CaptureAudioFrameResponse(google.protobuf.message.Message):
378
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
379
+
380
+ ASYNC_ID_FIELD_NUMBER: builtins.int
381
+ async_id: builtins.int
382
+ def __init__(
383
+ self,
384
+ *,
385
+ async_id: builtins.int | None = ...,
386
+ ) -> None: ...
387
+ def HasField(self, field_name: typing.Literal["async_id", b"async_id"]) -> builtins.bool: ...
388
+ def ClearField(self, field_name: typing.Literal["async_id", b"async_id"]) -> None: ...
389
+
390
+ global___CaptureAudioFrameResponse = CaptureAudioFrameResponse
391
+
392
+ @typing.final
393
+ class CaptureAudioFrameCallback(google.protobuf.message.Message):
394
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
395
+
396
+ ASYNC_ID_FIELD_NUMBER: builtins.int
397
+ ERROR_FIELD_NUMBER: builtins.int
398
+ async_id: builtins.int
399
+ error: builtins.str
400
+ def __init__(
401
+ self,
402
+ *,
403
+ async_id: builtins.int | None = ...,
404
+ error: builtins.str | None = ...,
405
+ ) -> None: ...
406
+ def HasField(self, field_name: typing.Literal["async_id", b"async_id", "error", b"error"]) -> builtins.bool: ...
407
+ def ClearField(self, field_name: typing.Literal["async_id", b"async_id", "error", b"error"]) -> None: ...
408
+
409
+ global___CaptureAudioFrameCallback = CaptureAudioFrameCallback
410
+
411
+ @typing.final
412
+ class ClearAudioBufferRequest(google.protobuf.message.Message):
413
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
414
+
415
+ SOURCE_HANDLE_FIELD_NUMBER: builtins.int
416
+ source_handle: builtins.int
417
+ def __init__(
418
+ self,
419
+ *,
420
+ source_handle: builtins.int | None = ...,
421
+ ) -> None: ...
422
+ def HasField(self, field_name: typing.Literal["source_handle", b"source_handle"]) -> builtins.bool: ...
423
+ def ClearField(self, field_name: typing.Literal["source_handle", b"source_handle"]) -> None: ...
424
+
425
+ global___ClearAudioBufferRequest = ClearAudioBufferRequest
426
+
427
+ @typing.final
428
+ class ClearAudioBufferResponse(google.protobuf.message.Message):
429
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
430
+
431
+ def __init__(
432
+ self,
433
+ ) -> None: ...
434
+
435
+ global___ClearAudioBufferResponse = ClearAudioBufferResponse
436
+
437
+ @typing.final
438
+ class NewAudioResamplerRequest(google.protobuf.message.Message):
439
+ """Create a new AudioResampler"""
440
+
441
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
442
+
443
+ def __init__(
444
+ self,
445
+ ) -> None: ...
446
+
447
+ global___NewAudioResamplerRequest = NewAudioResamplerRequest
448
+
449
+ @typing.final
450
+ class NewAudioResamplerResponse(google.protobuf.message.Message):
451
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
452
+
453
+ RESAMPLER_FIELD_NUMBER: builtins.int
454
+ @property
455
+ def resampler(self) -> global___OwnedAudioResampler: ...
456
+ def __init__(
457
+ self,
458
+ *,
459
+ resampler: global___OwnedAudioResampler | None = ...,
460
+ ) -> None: ...
461
+ def HasField(self, field_name: typing.Literal["resampler", b"resampler"]) -> builtins.bool: ...
462
+ def ClearField(self, field_name: typing.Literal["resampler", b"resampler"]) -> None: ...
463
+
464
+ global___NewAudioResamplerResponse = NewAudioResamplerResponse
465
+
466
+ @typing.final
467
+ class RemixAndResampleRequest(google.protobuf.message.Message):
468
+ """Remix and resample an audio frame"""
469
+
470
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
471
+
472
+ RESAMPLER_HANDLE_FIELD_NUMBER: builtins.int
473
+ BUFFER_FIELD_NUMBER: builtins.int
474
+ NUM_CHANNELS_FIELD_NUMBER: builtins.int
475
+ SAMPLE_RATE_FIELD_NUMBER: builtins.int
476
+ resampler_handle: builtins.int
477
+ num_channels: builtins.int
478
+ sample_rate: builtins.int
479
+ @property
480
+ def buffer(self) -> global___AudioFrameBufferInfo: ...
481
+ def __init__(
482
+ self,
483
+ *,
484
+ resampler_handle: builtins.int | None = ...,
485
+ buffer: global___AudioFrameBufferInfo | None = ...,
486
+ num_channels: builtins.int | None = ...,
487
+ sample_rate: builtins.int | None = ...,
488
+ ) -> None: ...
489
+ def HasField(self, field_name: typing.Literal["buffer", b"buffer", "num_channels", b"num_channels", "resampler_handle", b"resampler_handle", "sample_rate", b"sample_rate"]) -> builtins.bool: ...
490
+ def ClearField(self, field_name: typing.Literal["buffer", b"buffer", "num_channels", b"num_channels", "resampler_handle", b"resampler_handle", "sample_rate", b"sample_rate"]) -> None: ...
491
+
492
+ global___RemixAndResampleRequest = RemixAndResampleRequest
493
+
494
+ @typing.final
495
+ class RemixAndResampleResponse(google.protobuf.message.Message):
496
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
497
+
498
+ BUFFER_FIELD_NUMBER: builtins.int
499
+ @property
500
+ def buffer(self) -> global___OwnedAudioFrameBuffer: ...
501
+ def __init__(
502
+ self,
503
+ *,
504
+ buffer: global___OwnedAudioFrameBuffer | None = ...,
505
+ ) -> None: ...
506
+ def HasField(self, field_name: typing.Literal["buffer", b"buffer"]) -> builtins.bool: ...
507
+ def ClearField(self, field_name: typing.Literal["buffer", b"buffer"]) -> None: ...
508
+
509
+ global___RemixAndResampleResponse = RemixAndResampleResponse
510
+
511
+ @typing.final
512
+ class NewApmRequest(google.protobuf.message.Message):
513
+ """AEC"""
514
+
515
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
516
+
517
+ ECHO_CANCELLER_ENABLED_FIELD_NUMBER: builtins.int
518
+ GAIN_CONTROLLER_ENABLED_FIELD_NUMBER: builtins.int
519
+ HIGH_PASS_FILTER_ENABLED_FIELD_NUMBER: builtins.int
520
+ NOISE_SUPPRESSION_ENABLED_FIELD_NUMBER: builtins.int
521
+ echo_canceller_enabled: builtins.bool
522
+ gain_controller_enabled: builtins.bool
523
+ high_pass_filter_enabled: builtins.bool
524
+ noise_suppression_enabled: builtins.bool
525
+ def __init__(
526
+ self,
527
+ *,
528
+ echo_canceller_enabled: builtins.bool | None = ...,
529
+ gain_controller_enabled: builtins.bool | None = ...,
530
+ high_pass_filter_enabled: builtins.bool | None = ...,
531
+ noise_suppression_enabled: builtins.bool | None = ...,
532
+ ) -> None: ...
533
+ def HasField(self, field_name: typing.Literal["echo_canceller_enabled", b"echo_canceller_enabled", "gain_controller_enabled", b"gain_controller_enabled", "high_pass_filter_enabled", b"high_pass_filter_enabled", "noise_suppression_enabled", b"noise_suppression_enabled"]) -> builtins.bool: ...
534
+ def ClearField(self, field_name: typing.Literal["echo_canceller_enabled", b"echo_canceller_enabled", "gain_controller_enabled", b"gain_controller_enabled", "high_pass_filter_enabled", b"high_pass_filter_enabled", "noise_suppression_enabled", b"noise_suppression_enabled"]) -> None: ...
535
+
536
+ global___NewApmRequest = NewApmRequest
537
+
538
+ @typing.final
539
+ class NewApmResponse(google.protobuf.message.Message):
540
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
541
+
542
+ APM_FIELD_NUMBER: builtins.int
543
+ @property
544
+ def apm(self) -> global___OwnedApm: ...
545
+ def __init__(
546
+ self,
547
+ *,
548
+ apm: global___OwnedApm | None = ...,
549
+ ) -> None: ...
550
+ def HasField(self, field_name: typing.Literal["apm", b"apm"]) -> builtins.bool: ...
551
+ def ClearField(self, field_name: typing.Literal["apm", b"apm"]) -> None: ...
552
+
553
+ global___NewApmResponse = NewApmResponse
554
+
555
+ @typing.final
556
+ class ApmProcessStreamRequest(google.protobuf.message.Message):
557
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
558
+
559
+ APM_HANDLE_FIELD_NUMBER: builtins.int
560
+ DATA_PTR_FIELD_NUMBER: builtins.int
561
+ SIZE_FIELD_NUMBER: builtins.int
562
+ SAMPLE_RATE_FIELD_NUMBER: builtins.int
563
+ NUM_CHANNELS_FIELD_NUMBER: builtins.int
564
+ apm_handle: builtins.int
565
+ data_ptr: builtins.int
566
+ """*mut i16"""
567
+ size: builtins.int
568
+ """in bytes"""
569
+ sample_rate: builtins.int
570
+ num_channels: builtins.int
571
+ def __init__(
572
+ self,
573
+ *,
574
+ apm_handle: builtins.int | None = ...,
575
+ data_ptr: builtins.int | None = ...,
576
+ size: builtins.int | None = ...,
577
+ sample_rate: builtins.int | None = ...,
578
+ num_channels: builtins.int | None = ...,
579
+ ) -> None: ...
580
+ def HasField(self, field_name: typing.Literal["apm_handle", b"apm_handle", "data_ptr", b"data_ptr", "num_channels", b"num_channels", "sample_rate", b"sample_rate", "size", b"size"]) -> builtins.bool: ...
581
+ def ClearField(self, field_name: typing.Literal["apm_handle", b"apm_handle", "data_ptr", b"data_ptr", "num_channels", b"num_channels", "sample_rate", b"sample_rate", "size", b"size"]) -> None: ...
582
+
583
+ global___ApmProcessStreamRequest = ApmProcessStreamRequest
584
+
585
+ @typing.final
586
+ class ApmProcessStreamResponse(google.protobuf.message.Message):
587
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
588
+
589
+ ERROR_FIELD_NUMBER: builtins.int
590
+ error: builtins.str
591
+ def __init__(
592
+ self,
593
+ *,
594
+ error: builtins.str | None = ...,
595
+ ) -> None: ...
596
+ def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ...
597
+ def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ...
598
+
599
+ global___ApmProcessStreamResponse = ApmProcessStreamResponse
600
+
601
+ @typing.final
602
+ class ApmProcessReverseStreamRequest(google.protobuf.message.Message):
603
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
604
+
605
+ APM_HANDLE_FIELD_NUMBER: builtins.int
606
+ DATA_PTR_FIELD_NUMBER: builtins.int
607
+ SIZE_FIELD_NUMBER: builtins.int
608
+ SAMPLE_RATE_FIELD_NUMBER: builtins.int
609
+ NUM_CHANNELS_FIELD_NUMBER: builtins.int
610
+ apm_handle: builtins.int
611
+ data_ptr: builtins.int
612
+ """*mut i16"""
613
+ size: builtins.int
614
+ """in bytes"""
615
+ sample_rate: builtins.int
616
+ num_channels: builtins.int
617
+ def __init__(
618
+ self,
619
+ *,
620
+ apm_handle: builtins.int | None = ...,
621
+ data_ptr: builtins.int | None = ...,
622
+ size: builtins.int | None = ...,
623
+ sample_rate: builtins.int | None = ...,
624
+ num_channels: builtins.int | None = ...,
625
+ ) -> None: ...
626
+ def HasField(self, field_name: typing.Literal["apm_handle", b"apm_handle", "data_ptr", b"data_ptr", "num_channels", b"num_channels", "sample_rate", b"sample_rate", "size", b"size"]) -> builtins.bool: ...
627
+ def ClearField(self, field_name: typing.Literal["apm_handle", b"apm_handle", "data_ptr", b"data_ptr", "num_channels", b"num_channels", "sample_rate", b"sample_rate", "size", b"size"]) -> None: ...
628
+
629
+ global___ApmProcessReverseStreamRequest = ApmProcessReverseStreamRequest
630
+
631
+ @typing.final
632
+ class ApmProcessReverseStreamResponse(google.protobuf.message.Message):
633
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
634
+
635
+ ERROR_FIELD_NUMBER: builtins.int
636
+ error: builtins.str
637
+ def __init__(
638
+ self,
639
+ *,
640
+ error: builtins.str | None = ...,
641
+ ) -> None: ...
642
+ def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ...
643
+ def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ...
644
+
645
+ global___ApmProcessReverseStreamResponse = ApmProcessReverseStreamResponse
646
+
647
+ @typing.final
648
+ class ApmSetStreamDelayRequest(google.protobuf.message.Message):
649
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
650
+
651
+ APM_HANDLE_FIELD_NUMBER: builtins.int
652
+ DELAY_MS_FIELD_NUMBER: builtins.int
653
+ apm_handle: builtins.int
654
+ delay_ms: builtins.int
655
+ def __init__(
656
+ self,
657
+ *,
658
+ apm_handle: builtins.int | None = ...,
659
+ delay_ms: builtins.int | None = ...,
660
+ ) -> None: ...
661
+ def HasField(self, field_name: typing.Literal["apm_handle", b"apm_handle", "delay_ms", b"delay_ms"]) -> builtins.bool: ...
662
+ def ClearField(self, field_name: typing.Literal["apm_handle", b"apm_handle", "delay_ms", b"delay_ms"]) -> None: ...
663
+
664
+ global___ApmSetStreamDelayRequest = ApmSetStreamDelayRequest
665
+
666
+ @typing.final
667
+ class ApmSetStreamDelayResponse(google.protobuf.message.Message):
668
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
669
+
670
+ ERROR_FIELD_NUMBER: builtins.int
671
+ error: builtins.str
672
+ def __init__(
673
+ self,
674
+ *,
675
+ error: builtins.str | None = ...,
676
+ ) -> None: ...
677
+ def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ...
678
+ def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ...
679
+
680
+ global___ApmSetStreamDelayResponse = ApmSetStreamDelayResponse
681
+
682
+ @typing.final
683
+ class NewSoxResamplerRequest(google.protobuf.message.Message):
684
+ """New resampler using SoX (much better quality)"""
685
+
686
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
687
+
688
+ INPUT_RATE_FIELD_NUMBER: builtins.int
689
+ OUTPUT_RATE_FIELD_NUMBER: builtins.int
690
+ NUM_CHANNELS_FIELD_NUMBER: builtins.int
691
+ INPUT_DATA_TYPE_FIELD_NUMBER: builtins.int
692
+ OUTPUT_DATA_TYPE_FIELD_NUMBER: builtins.int
693
+ QUALITY_RECIPE_FIELD_NUMBER: builtins.int
694
+ FLAGS_FIELD_NUMBER: builtins.int
695
+ input_rate: builtins.float
696
+ output_rate: builtins.float
697
+ num_channels: builtins.int
698
+ input_data_type: global___SoxResamplerDataType.ValueType
699
+ output_data_type: global___SoxResamplerDataType.ValueType
700
+ quality_recipe: global___SoxQualityRecipe.ValueType
701
+ flags: builtins.int
702
+ def __init__(
703
+ self,
704
+ *,
705
+ input_rate: builtins.float | None = ...,
706
+ output_rate: builtins.float | None = ...,
707
+ num_channels: builtins.int | None = ...,
708
+ input_data_type: global___SoxResamplerDataType.ValueType | None = ...,
709
+ output_data_type: global___SoxResamplerDataType.ValueType | None = ...,
710
+ quality_recipe: global___SoxQualityRecipe.ValueType | None = ...,
711
+ flags: builtins.int | None = ...,
712
+ ) -> None: ...
713
+ def HasField(self, field_name: typing.Literal["flags", b"flags", "input_data_type", b"input_data_type", "input_rate", b"input_rate", "num_channels", b"num_channels", "output_data_type", b"output_data_type", "output_rate", b"output_rate", "quality_recipe", b"quality_recipe"]) -> builtins.bool: ...
714
+ def ClearField(self, field_name: typing.Literal["flags", b"flags", "input_data_type", b"input_data_type", "input_rate", b"input_rate", "num_channels", b"num_channels", "output_data_type", b"output_data_type", "output_rate", b"output_rate", "quality_recipe", b"quality_recipe"]) -> None: ...
715
+
716
+ global___NewSoxResamplerRequest = NewSoxResamplerRequest
717
+
718
+ @typing.final
719
+ class NewSoxResamplerResponse(google.protobuf.message.Message):
720
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
721
+
722
+ RESAMPLER_FIELD_NUMBER: builtins.int
723
+ ERROR_FIELD_NUMBER: builtins.int
724
+ error: builtins.str
725
+ @property
726
+ def resampler(self) -> global___OwnedSoxResampler: ...
727
+ def __init__(
728
+ self,
729
+ *,
730
+ resampler: global___OwnedSoxResampler | None = ...,
731
+ error: builtins.str | None = ...,
732
+ ) -> None: ...
733
+ def HasField(self, field_name: typing.Literal["error", b"error", "message", b"message", "resampler", b"resampler"]) -> builtins.bool: ...
734
+ def ClearField(self, field_name: typing.Literal["error", b"error", "message", b"message", "resampler", b"resampler"]) -> None: ...
735
+ def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.Literal["resampler", "error"] | None: ...
736
+
737
+ global___NewSoxResamplerResponse = NewSoxResamplerResponse
738
+
739
+ @typing.final
740
+ class PushSoxResamplerRequest(google.protobuf.message.Message):
741
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
742
+
743
+ RESAMPLER_HANDLE_FIELD_NUMBER: builtins.int
744
+ DATA_PTR_FIELD_NUMBER: builtins.int
745
+ SIZE_FIELD_NUMBER: builtins.int
746
+ resampler_handle: builtins.int
747
+ data_ptr: builtins.int
748
+ """*const i16"""
749
+ size: builtins.int
750
+ """in bytes"""
751
+ def __init__(
752
+ self,
753
+ *,
754
+ resampler_handle: builtins.int | None = ...,
755
+ data_ptr: builtins.int | None = ...,
756
+ size: builtins.int | None = ...,
757
+ ) -> None: ...
758
+ def HasField(self, field_name: typing.Literal["data_ptr", b"data_ptr", "resampler_handle", b"resampler_handle", "size", b"size"]) -> builtins.bool: ...
759
+ def ClearField(self, field_name: typing.Literal["data_ptr", b"data_ptr", "resampler_handle", b"resampler_handle", "size", b"size"]) -> None: ...
760
+
761
+ global___PushSoxResamplerRequest = PushSoxResamplerRequest
762
+
763
+ @typing.final
764
+ class PushSoxResamplerResponse(google.protobuf.message.Message):
765
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
766
+
767
+ OUTPUT_PTR_FIELD_NUMBER: builtins.int
768
+ SIZE_FIELD_NUMBER: builtins.int
769
+ ERROR_FIELD_NUMBER: builtins.int
770
+ output_ptr: builtins.int
771
+ """*const i16 (could be null)"""
772
+ size: builtins.int
773
+ """in bytes"""
774
+ error: builtins.str
775
+ def __init__(
776
+ self,
777
+ *,
778
+ output_ptr: builtins.int | None = ...,
779
+ size: builtins.int | None = ...,
780
+ error: builtins.str | None = ...,
781
+ ) -> None: ...
782
+ def HasField(self, field_name: typing.Literal["error", b"error", "output_ptr", b"output_ptr", "size", b"size"]) -> builtins.bool: ...
783
+ def ClearField(self, field_name: typing.Literal["error", b"error", "output_ptr", b"output_ptr", "size", b"size"]) -> None: ...
784
+
785
+ global___PushSoxResamplerResponse = PushSoxResamplerResponse
786
+
787
+ @typing.final
788
+ class FlushSoxResamplerRequest(google.protobuf.message.Message):
789
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
790
+
791
+ RESAMPLER_HANDLE_FIELD_NUMBER: builtins.int
792
+ resampler_handle: builtins.int
793
+ def __init__(
794
+ self,
795
+ *,
796
+ resampler_handle: builtins.int | None = ...,
797
+ ) -> None: ...
798
+ def HasField(self, field_name: typing.Literal["resampler_handle", b"resampler_handle"]) -> builtins.bool: ...
799
+ def ClearField(self, field_name: typing.Literal["resampler_handle", b"resampler_handle"]) -> None: ...
800
+
801
+ global___FlushSoxResamplerRequest = FlushSoxResamplerRequest
802
+
803
+ @typing.final
804
+ class FlushSoxResamplerResponse(google.protobuf.message.Message):
805
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
806
+
807
+ OUTPUT_PTR_FIELD_NUMBER: builtins.int
808
+ SIZE_FIELD_NUMBER: builtins.int
809
+ ERROR_FIELD_NUMBER: builtins.int
810
+ output_ptr: builtins.int
811
+ """*const i16 (could be null)"""
812
+ size: builtins.int
813
+ """in bytes"""
814
+ error: builtins.str
815
+ def __init__(
816
+ self,
817
+ *,
818
+ output_ptr: builtins.int | None = ...,
819
+ size: builtins.int | None = ...,
820
+ error: builtins.str | None = ...,
821
+ ) -> None: ...
822
+ def HasField(self, field_name: typing.Literal["error", b"error", "output_ptr", b"output_ptr", "size", b"size"]) -> builtins.bool: ...
823
+ def ClearField(self, field_name: typing.Literal["error", b"error", "output_ptr", b"output_ptr", "size", b"size"]) -> None: ...
824
+
825
+ global___FlushSoxResamplerResponse = FlushSoxResamplerResponse
826
+
827
+ @typing.final
828
+ class AudioFrameBufferInfo(google.protobuf.message.Message):
829
+ """
830
+ AudioFrame buffer
831
+ """
832
+
833
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
834
+
835
+ DATA_PTR_FIELD_NUMBER: builtins.int
836
+ NUM_CHANNELS_FIELD_NUMBER: builtins.int
837
+ SAMPLE_RATE_FIELD_NUMBER: builtins.int
838
+ SAMPLES_PER_CHANNEL_FIELD_NUMBER: builtins.int
839
+ data_ptr: builtins.int
840
+ """*const i16"""
841
+ num_channels: builtins.int
842
+ sample_rate: builtins.int
843
+ samples_per_channel: builtins.int
844
+ def __init__(
845
+ self,
846
+ *,
847
+ data_ptr: builtins.int | None = ...,
848
+ num_channels: builtins.int | None = ...,
849
+ sample_rate: builtins.int | None = ...,
850
+ samples_per_channel: builtins.int | None = ...,
851
+ ) -> None: ...
852
+ def HasField(self, field_name: typing.Literal["data_ptr", b"data_ptr", "num_channels", b"num_channels", "sample_rate", b"sample_rate", "samples_per_channel", b"samples_per_channel"]) -> builtins.bool: ...
853
+ def ClearField(self, field_name: typing.Literal["data_ptr", b"data_ptr", "num_channels", b"num_channels", "sample_rate", b"sample_rate", "samples_per_channel", b"samples_per_channel"]) -> None: ...
854
+
855
+ global___AudioFrameBufferInfo = AudioFrameBufferInfo
856
+
857
+ @typing.final
858
+ class OwnedAudioFrameBuffer(google.protobuf.message.Message):
859
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
860
+
861
+ HANDLE_FIELD_NUMBER: builtins.int
862
+ INFO_FIELD_NUMBER: builtins.int
863
+ @property
864
+ def handle(self) -> handle_pb2.FfiOwnedHandle: ...
865
+ @property
866
+ def info(self) -> global___AudioFrameBufferInfo: ...
867
+ def __init__(
868
+ self,
869
+ *,
870
+ handle: handle_pb2.FfiOwnedHandle | None = ...,
871
+ info: global___AudioFrameBufferInfo | None = ...,
872
+ ) -> None: ...
873
+ def HasField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> builtins.bool: ...
874
+ def ClearField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> None: ...
875
+
876
+ global___OwnedAudioFrameBuffer = OwnedAudioFrameBuffer
877
+
878
+ @typing.final
879
+ class AudioStreamInfo(google.protobuf.message.Message):
880
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
881
+
882
+ TYPE_FIELD_NUMBER: builtins.int
883
+ type: global___AudioStreamType.ValueType
884
+ def __init__(
885
+ self,
886
+ *,
887
+ type: global___AudioStreamType.ValueType | None = ...,
888
+ ) -> None: ...
889
+ def HasField(self, field_name: typing.Literal["type", b"type"]) -> builtins.bool: ...
890
+ def ClearField(self, field_name: typing.Literal["type", b"type"]) -> None: ...
891
+
892
+ global___AudioStreamInfo = AudioStreamInfo
893
+
894
+ @typing.final
895
+ class OwnedAudioStream(google.protobuf.message.Message):
896
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
897
+
898
+ HANDLE_FIELD_NUMBER: builtins.int
899
+ INFO_FIELD_NUMBER: builtins.int
900
+ @property
901
+ def handle(self) -> handle_pb2.FfiOwnedHandle: ...
902
+ @property
903
+ def info(self) -> global___AudioStreamInfo: ...
904
+ def __init__(
905
+ self,
906
+ *,
907
+ handle: handle_pb2.FfiOwnedHandle | None = ...,
908
+ info: global___AudioStreamInfo | None = ...,
909
+ ) -> None: ...
910
+ def HasField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> builtins.bool: ...
911
+ def ClearField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> None: ...
912
+
913
+ global___OwnedAudioStream = OwnedAudioStream
914
+
915
+ @typing.final
916
+ class AudioStreamEvent(google.protobuf.message.Message):
917
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
918
+
919
+ STREAM_HANDLE_FIELD_NUMBER: builtins.int
920
+ FRAME_RECEIVED_FIELD_NUMBER: builtins.int
921
+ EOS_FIELD_NUMBER: builtins.int
922
+ stream_handle: builtins.int
923
+ @property
924
+ def frame_received(self) -> global___AudioFrameReceived: ...
925
+ @property
926
+ def eos(self) -> global___AudioStreamEOS: ...
927
+ def __init__(
928
+ self,
929
+ *,
930
+ stream_handle: builtins.int | None = ...,
931
+ frame_received: global___AudioFrameReceived | None = ...,
932
+ eos: global___AudioStreamEOS | None = ...,
933
+ ) -> None: ...
934
+ def HasField(self, field_name: typing.Literal["eos", b"eos", "frame_received", b"frame_received", "message", b"message", "stream_handle", b"stream_handle"]) -> builtins.bool: ...
935
+ def ClearField(self, field_name: typing.Literal["eos", b"eos", "frame_received", b"frame_received", "message", b"message", "stream_handle", b"stream_handle"]) -> None: ...
936
+ def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.Literal["frame_received", "eos"] | None: ...
937
+
938
+ global___AudioStreamEvent = AudioStreamEvent
939
+
940
+ @typing.final
941
+ class AudioFrameReceived(google.protobuf.message.Message):
942
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
943
+
944
+ FRAME_FIELD_NUMBER: builtins.int
945
+ @property
946
+ def frame(self) -> global___OwnedAudioFrameBuffer: ...
947
+ def __init__(
948
+ self,
949
+ *,
950
+ frame: global___OwnedAudioFrameBuffer | None = ...,
951
+ ) -> None: ...
952
+ def HasField(self, field_name: typing.Literal["frame", b"frame"]) -> builtins.bool: ...
953
+ def ClearField(self, field_name: typing.Literal["frame", b"frame"]) -> None: ...
954
+
955
+ global___AudioFrameReceived = AudioFrameReceived
956
+
957
+ @typing.final
958
+ class AudioStreamEOS(google.protobuf.message.Message):
959
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
960
+
961
+ def __init__(
962
+ self,
963
+ ) -> None: ...
964
+
965
+ global___AudioStreamEOS = AudioStreamEOS
966
+
967
+ @typing.final
968
+ class AudioSourceOptions(google.protobuf.message.Message):
969
+ """
970
+ AudioSource
971
+ """
972
+
973
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
974
+
975
+ ECHO_CANCELLATION_FIELD_NUMBER: builtins.int
976
+ NOISE_SUPPRESSION_FIELD_NUMBER: builtins.int
977
+ AUTO_GAIN_CONTROL_FIELD_NUMBER: builtins.int
978
+ PREFER_HARDWARE_FIELD_NUMBER: builtins.int
979
+ echo_cancellation: builtins.bool
980
+ noise_suppression: builtins.bool
981
+ auto_gain_control: builtins.bool
982
+ prefer_hardware: builtins.bool
983
+ """Prefer hardware audio processing (e.g., iOS VPIO). Lower latency.
984
+ Only applies to AudioSourcePlatform. Default: true.
985
+ """
986
+ def __init__(
987
+ self,
988
+ *,
989
+ echo_cancellation: builtins.bool | None = ...,
990
+ noise_suppression: builtins.bool | None = ...,
991
+ auto_gain_control: builtins.bool | None = ...,
992
+ prefer_hardware: builtins.bool | None = ...,
993
+ ) -> None: ...
994
+ def HasField(self, field_name: typing.Literal["auto_gain_control", b"auto_gain_control", "echo_cancellation", b"echo_cancellation", "noise_suppression", b"noise_suppression", "prefer_hardware", b"prefer_hardware"]) -> builtins.bool: ...
995
+ def ClearField(self, field_name: typing.Literal["auto_gain_control", b"auto_gain_control", "echo_cancellation", b"echo_cancellation", "noise_suppression", b"noise_suppression", "prefer_hardware", b"prefer_hardware"]) -> None: ...
996
+
997
+ global___AudioSourceOptions = AudioSourceOptions
998
+
999
+ @typing.final
1000
+ class AudioSourceInfo(google.protobuf.message.Message):
1001
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1002
+
1003
+ TYPE_FIELD_NUMBER: builtins.int
1004
+ type: global___AudioSourceType.ValueType
1005
+ def __init__(
1006
+ self,
1007
+ *,
1008
+ type: global___AudioSourceType.ValueType | None = ...,
1009
+ ) -> None: ...
1010
+ def HasField(self, field_name: typing.Literal["type", b"type"]) -> builtins.bool: ...
1011
+ def ClearField(self, field_name: typing.Literal["type", b"type"]) -> None: ...
1012
+
1013
+ global___AudioSourceInfo = AudioSourceInfo
1014
+
1015
+ @typing.final
1016
+ class OwnedAudioSource(google.protobuf.message.Message):
1017
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1018
+
1019
+ HANDLE_FIELD_NUMBER: builtins.int
1020
+ INFO_FIELD_NUMBER: builtins.int
1021
+ @property
1022
+ def handle(self) -> handle_pb2.FfiOwnedHandle: ...
1023
+ @property
1024
+ def info(self) -> global___AudioSourceInfo: ...
1025
+ def __init__(
1026
+ self,
1027
+ *,
1028
+ handle: handle_pb2.FfiOwnedHandle | None = ...,
1029
+ info: global___AudioSourceInfo | None = ...,
1030
+ ) -> None: ...
1031
+ def HasField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> builtins.bool: ...
1032
+ def ClearField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> None: ...
1033
+
1034
+ global___OwnedAudioSource = OwnedAudioSource
1035
+
1036
+ @typing.final
1037
+ class AudioResamplerInfo(google.protobuf.message.Message):
1038
+ """
1039
+ AudioResampler
1040
+ """
1041
+
1042
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1043
+
1044
+ def __init__(
1045
+ self,
1046
+ ) -> None: ...
1047
+
1048
+ global___AudioResamplerInfo = AudioResamplerInfo
1049
+
1050
+ @typing.final
1051
+ class OwnedAudioResampler(google.protobuf.message.Message):
1052
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1053
+
1054
+ HANDLE_FIELD_NUMBER: builtins.int
1055
+ INFO_FIELD_NUMBER: builtins.int
1056
+ @property
1057
+ def handle(self) -> handle_pb2.FfiOwnedHandle: ...
1058
+ @property
1059
+ def info(self) -> global___AudioResamplerInfo: ...
1060
+ def __init__(
1061
+ self,
1062
+ *,
1063
+ handle: handle_pb2.FfiOwnedHandle | None = ...,
1064
+ info: global___AudioResamplerInfo | None = ...,
1065
+ ) -> None: ...
1066
+ def HasField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> builtins.bool: ...
1067
+ def ClearField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> None: ...
1068
+
1069
+ global___OwnedAudioResampler = OwnedAudioResampler
1070
+
1071
+ @typing.final
1072
+ class OwnedApm(google.protobuf.message.Message):
1073
+ """
1074
+ AEC
1075
+ """
1076
+
1077
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1078
+
1079
+ HANDLE_FIELD_NUMBER: builtins.int
1080
+ @property
1081
+ def handle(self) -> handle_pb2.FfiOwnedHandle: ...
1082
+ def __init__(
1083
+ self,
1084
+ *,
1085
+ handle: handle_pb2.FfiOwnedHandle | None = ...,
1086
+ ) -> None: ...
1087
+ def HasField(self, field_name: typing.Literal["handle", b"handle"]) -> builtins.bool: ...
1088
+ def ClearField(self, field_name: typing.Literal["handle", b"handle"]) -> None: ...
1089
+
1090
+ global___OwnedApm = OwnedApm
1091
+
1092
+ @typing.final
1093
+ class SoxResamplerInfo(google.protobuf.message.Message):
1094
+ """
1095
+ Sox AudioResampler
1096
+ """
1097
+
1098
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1099
+
1100
+ def __init__(
1101
+ self,
1102
+ ) -> None: ...
1103
+
1104
+ global___SoxResamplerInfo = SoxResamplerInfo
1105
+
1106
+ @typing.final
1107
+ class OwnedSoxResampler(google.protobuf.message.Message):
1108
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1109
+
1110
+ HANDLE_FIELD_NUMBER: builtins.int
1111
+ INFO_FIELD_NUMBER: builtins.int
1112
+ @property
1113
+ def handle(self) -> handle_pb2.FfiOwnedHandle: ...
1114
+ @property
1115
+ def info(self) -> global___SoxResamplerInfo: ...
1116
+ def __init__(
1117
+ self,
1118
+ *,
1119
+ handle: handle_pb2.FfiOwnedHandle | None = ...,
1120
+ info: global___SoxResamplerInfo | None = ...,
1121
+ ) -> None: ...
1122
+ def HasField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> builtins.bool: ...
1123
+ def ClearField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> None: ...
1124
+
1125
+ global___OwnedSoxResampler = OwnedSoxResampler
1126
+
1127
+ @typing.final
1128
+ class LoadAudioFilterPluginRequest(google.protobuf.message.Message):
1129
+ """Audio Filter Plugin"""
1130
+
1131
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1132
+
1133
+ PLUGIN_PATH_FIELD_NUMBER: builtins.int
1134
+ DEPENDENCIES_FIELD_NUMBER: builtins.int
1135
+ MODULE_ID_FIELD_NUMBER: builtins.int
1136
+ plugin_path: builtins.str
1137
+ """path for ffi audio filter plugin"""
1138
+ module_id: builtins.str
1139
+ """Unique identifier of the plugin"""
1140
+ @property
1141
+ def dependencies(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
1142
+ """Optional: paths for dependency dylibs"""
1143
+
1144
+ def __init__(
1145
+ self,
1146
+ *,
1147
+ plugin_path: builtins.str | None = ...,
1148
+ dependencies: collections.abc.Iterable[builtins.str] | None = ...,
1149
+ module_id: builtins.str | None = ...,
1150
+ ) -> None: ...
1151
+ def HasField(self, field_name: typing.Literal["module_id", b"module_id", "plugin_path", b"plugin_path"]) -> builtins.bool: ...
1152
+ def ClearField(self, field_name: typing.Literal["dependencies", b"dependencies", "module_id", b"module_id", "plugin_path", b"plugin_path"]) -> None: ...
1153
+
1154
+ global___LoadAudioFilterPluginRequest = LoadAudioFilterPluginRequest
1155
+
1156
+ @typing.final
1157
+ class LoadAudioFilterPluginResponse(google.protobuf.message.Message):
1158
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1159
+
1160
+ ERROR_FIELD_NUMBER: builtins.int
1161
+ error: builtins.str
1162
+ def __init__(
1163
+ self,
1164
+ *,
1165
+ error: builtins.str | None = ...,
1166
+ ) -> None: ...
1167
+ def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ...
1168
+ def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ...
1169
+
1170
+ global___LoadAudioFilterPluginResponse = LoadAudioFilterPluginResponse
1171
+
1172
+ @typing.final
1173
+ class AudioDeviceInfo(google.protobuf.message.Message):
1174
+ """
1175
+ PlatformAudio - Platform audio device management via WebRTC's ADM
1176
+
1177
+ PlatformAudio provides access to the platform's audio devices (microphones and
1178
+ speakers) via WebRTC's Audio Device Module (ADM). Use it to:
1179
+
1180
+ - Capture audio from the microphone for publishing
1181
+ - Play received audio through the speakers
1182
+ - Enumerate and select audio devices
1183
+
1184
+ # Usage
1185
+
1186
+ 1. Create a PlatformAudio handle with NewPlatformAudioRequest
1187
+ 2. Enumerate devices with GetAudioDevicesRequest (optional)
1188
+ 3. Select devices with SetRecordingDeviceRequest/SetPlayoutDeviceRequest (optional)
1189
+ 4. Create an audio track using AudioSourcePlatform type
1190
+ 5. When done, drop the handle (the ADM is disabled when all handles are released)
1191
+
1192
+ Information about an audio device.
1193
+ """
1194
+
1195
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1196
+
1197
+ INDEX_FIELD_NUMBER: builtins.int
1198
+ NAME_FIELD_NUMBER: builtins.int
1199
+ GUID_FIELD_NUMBER: builtins.int
1200
+ index: builtins.int
1201
+ """Device index (0-based). Note: indices can change when devices are added/removed."""
1202
+ name: builtins.str
1203
+ """Device name as reported by the operating system."""
1204
+ guid: builtins.str
1205
+ """Platform-specific unique device identifier (GUID).
1206
+ This is stable across device additions/removals and should be preferred
1207
+ over index for device selection. Format varies by platform:
1208
+ - Windows: Device interface path
1209
+ - macOS: AudioObjectID as string
1210
+ - Linux: ALSA/PulseAudio device identifier
1211
+ """
1212
+ def __init__(
1213
+ self,
1214
+ *,
1215
+ index: builtins.int | None = ...,
1216
+ name: builtins.str | None = ...,
1217
+ guid: builtins.str | None = ...,
1218
+ ) -> None: ...
1219
+ def HasField(self, field_name: typing.Literal["guid", b"guid", "index", b"index", "name", b"name"]) -> builtins.bool: ...
1220
+ def ClearField(self, field_name: typing.Literal["guid", b"guid", "index", b"index", "name", b"name"]) -> None: ...
1221
+
1222
+ global___AudioDeviceInfo = AudioDeviceInfo
1223
+
1224
+ @typing.final
1225
+ class PlatformAudioInfo(google.protobuf.message.Message):
1226
+ """Information about a PlatformAudio instance."""
1227
+
1228
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1229
+
1230
+ RECORDING_DEVICE_COUNT_FIELD_NUMBER: builtins.int
1231
+ PLAYOUT_DEVICE_COUNT_FIELD_NUMBER: builtins.int
1232
+ recording_device_count: builtins.int
1233
+ """Number of available recording (microphone) devices."""
1234
+ playout_device_count: builtins.int
1235
+ """Number of available playout (speaker) devices."""
1236
+ def __init__(
1237
+ self,
1238
+ *,
1239
+ recording_device_count: builtins.int | None = ...,
1240
+ playout_device_count: builtins.int | None = ...,
1241
+ ) -> None: ...
1242
+ def HasField(self, field_name: typing.Literal["playout_device_count", b"playout_device_count", "recording_device_count", b"recording_device_count"]) -> builtins.bool: ...
1243
+ def ClearField(self, field_name: typing.Literal["playout_device_count", b"playout_device_count", "recording_device_count", b"recording_device_count"]) -> None: ...
1244
+
1245
+ global___PlatformAudioInfo = PlatformAudioInfo
1246
+
1247
+ @typing.final
1248
+ class OwnedPlatformAudio(google.protobuf.message.Message):
1249
+ """Owned PlatformAudio handle with info."""
1250
+
1251
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1252
+
1253
+ HANDLE_FIELD_NUMBER: builtins.int
1254
+ INFO_FIELD_NUMBER: builtins.int
1255
+ @property
1256
+ def handle(self) -> handle_pb2.FfiOwnedHandle: ...
1257
+ @property
1258
+ def info(self) -> global___PlatformAudioInfo: ...
1259
+ def __init__(
1260
+ self,
1261
+ *,
1262
+ handle: handle_pb2.FfiOwnedHandle | None = ...,
1263
+ info: global___PlatformAudioInfo | None = ...,
1264
+ ) -> None: ...
1265
+ def HasField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> builtins.bool: ...
1266
+ def ClearField(self, field_name: typing.Literal["handle", b"handle", "info", b"info"]) -> None: ...
1267
+
1268
+ global___OwnedPlatformAudio = OwnedPlatformAudio
1269
+
1270
+ @typing.final
1271
+ class NewPlatformAudioRequest(google.protobuf.message.Message):
1272
+ """Create a new PlatformAudio instance.
1273
+
1274
+ This enables the platform ADM for microphone capture and speaker playout.
1275
+ If another PlatformAudio instance exists, this reuses the same underlying ADM.
1276
+
1277
+ The returned handle must be kept alive while platform audio is needed.
1278
+ When all handles are released, the ADM is automatically disabled.
1279
+ """
1280
+
1281
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1282
+
1283
+ def __init__(
1284
+ self,
1285
+ ) -> None: ...
1286
+
1287
+ global___NewPlatformAudioRequest = NewPlatformAudioRequest
1288
+
1289
+ @typing.final
1290
+ class NewPlatformAudioResponse(google.protobuf.message.Message):
1291
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1292
+
1293
+ PLATFORM_AUDIO_FIELD_NUMBER: builtins.int
1294
+ ERROR_FIELD_NUMBER: builtins.int
1295
+ error: builtins.str
1296
+ """Error message if creation failed."""
1297
+ @property
1298
+ def platform_audio(self) -> global___OwnedPlatformAudio:
1299
+ """The PlatformAudio handle on success."""
1300
+
1301
+ def __init__(
1302
+ self,
1303
+ *,
1304
+ platform_audio: global___OwnedPlatformAudio | None = ...,
1305
+ error: builtins.str | None = ...,
1306
+ ) -> None: ...
1307
+ def HasField(self, field_name: typing.Literal["error", b"error", "message", b"message", "platform_audio", b"platform_audio"]) -> builtins.bool: ...
1308
+ def ClearField(self, field_name: typing.Literal["error", b"error", "message", b"message", "platform_audio", b"platform_audio"]) -> None: ...
1309
+ def WhichOneof(self, oneof_group: typing.Literal["message", b"message"]) -> typing.Literal["platform_audio", "error"] | None: ...
1310
+
1311
+ global___NewPlatformAudioResponse = NewPlatformAudioResponse
1312
+
1313
+ @typing.final
1314
+ class GetAudioDevicesRequest(google.protobuf.message.Message):
1315
+ """Get available audio devices.
1316
+
1317
+ Returns lists of available recording (microphone) and playout (speaker) devices.
1318
+
1319
+ # Platform Notes
1320
+
1321
+ - Desktop (Windows/macOS/Linux): Returns all available devices with names and GUIDs.
1322
+ - Mobile (iOS/Android): Returns only one "default" device with empty name and GUID.
1323
+ Device enumeration is not meaningful on mobile - use for device count only.
1324
+ """
1325
+
1326
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1327
+
1328
+ PLATFORM_AUDIO_HANDLE_FIELD_NUMBER: builtins.int
1329
+ platform_audio_handle: builtins.int
1330
+ """The PlatformAudio handle."""
1331
+ def __init__(
1332
+ self,
1333
+ *,
1334
+ platform_audio_handle: builtins.int | None = ...,
1335
+ ) -> None: ...
1336
+ def HasField(self, field_name: typing.Literal["platform_audio_handle", b"platform_audio_handle"]) -> builtins.bool: ...
1337
+ def ClearField(self, field_name: typing.Literal["platform_audio_handle", b"platform_audio_handle"]) -> None: ...
1338
+
1339
+ global___GetAudioDevicesRequest = GetAudioDevicesRequest
1340
+
1341
+ @typing.final
1342
+ class GetAudioDevicesResponse(google.protobuf.message.Message):
1343
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1344
+
1345
+ PLAYOUT_DEVICES_FIELD_NUMBER: builtins.int
1346
+ RECORDING_DEVICES_FIELD_NUMBER: builtins.int
1347
+ ERROR_FIELD_NUMBER: builtins.int
1348
+ error: builtins.str
1349
+ """Error message if enumeration failed, empty/absent on success."""
1350
+ @property
1351
+ def playout_devices(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___AudioDeviceInfo]:
1352
+ """Available playout devices (speakers/headphones)."""
1353
+
1354
+ @property
1355
+ def recording_devices(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___AudioDeviceInfo]:
1356
+ """Available recording devices (microphones)."""
1357
+
1358
+ def __init__(
1359
+ self,
1360
+ *,
1361
+ playout_devices: collections.abc.Iterable[global___AudioDeviceInfo] | None = ...,
1362
+ recording_devices: collections.abc.Iterable[global___AudioDeviceInfo] | None = ...,
1363
+ error: builtins.str | None = ...,
1364
+ ) -> None: ...
1365
+ def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ...
1366
+ def ClearField(self, field_name: typing.Literal["error", b"error", "playout_devices", b"playout_devices", "recording_devices", b"recording_devices"]) -> None: ...
1367
+
1368
+ global___GetAudioDevicesResponse = GetAudioDevicesResponse
1369
+
1370
+ @typing.final
1371
+ class SetRecordingDeviceRequest(google.protobuf.message.Message):
1372
+ """Set the recording device (microphone).
1373
+
1374
+ Call this before creating audio tracks to select which microphone to use.
1375
+ Use the GUID from AudioDeviceInfo for stable device selection across hot-plug events.
1376
+
1377
+ # Platform Notes
1378
+
1379
+ - Desktop: Works as expected - selects from enumerated devices.
1380
+ - Mobile (iOS/Android): No-op. Mobile platforms handle microphone selection at the
1381
+ system level. This will succeed but has no effect. Skip calling on mobile.
1382
+ """
1383
+
1384
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1385
+
1386
+ PLATFORM_AUDIO_HANDLE_FIELD_NUMBER: builtins.int
1387
+ DEVICE_ID_FIELD_NUMBER: builtins.int
1388
+ platform_audio_handle: builtins.int
1389
+ """The PlatformAudio handle."""
1390
+ device_id: builtins.str
1391
+ """Device GUID from AudioDeviceInfo.guid - stable across device additions/removals."""
1392
+ def __init__(
1393
+ self,
1394
+ *,
1395
+ platform_audio_handle: builtins.int | None = ...,
1396
+ device_id: builtins.str | None = ...,
1397
+ ) -> None: ...
1398
+ def HasField(self, field_name: typing.Literal["device_id", b"device_id", "platform_audio_handle", b"platform_audio_handle"]) -> builtins.bool: ...
1399
+ def ClearField(self, field_name: typing.Literal["device_id", b"device_id", "platform_audio_handle", b"platform_audio_handle"]) -> None: ...
1400
+
1401
+ global___SetRecordingDeviceRequest = SetRecordingDeviceRequest
1402
+
1403
+ @typing.final
1404
+ class SetRecordingDeviceResponse(google.protobuf.message.Message):
1405
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1406
+
1407
+ ERROR_FIELD_NUMBER: builtins.int
1408
+ error: builtins.str
1409
+ """Error message if the operation failed.
1410
+ Empty/absent on success (including no-op success on mobile).
1411
+ """
1412
+ def __init__(
1413
+ self,
1414
+ *,
1415
+ error: builtins.str | None = ...,
1416
+ ) -> None: ...
1417
+ def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ...
1418
+ def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ...
1419
+
1420
+ global___SetRecordingDeviceResponse = SetRecordingDeviceResponse
1421
+
1422
+ @typing.final
1423
+ class SetPlayoutDeviceRequest(google.protobuf.message.Message):
1424
+ """Set the playout device (speaker/headphones).
1425
+
1426
+ Call this before connecting to select which speaker to use for audio output.
1427
+ Use the GUID from AudioDeviceInfo for stable device selection across hot-plug events.
1428
+
1429
+ # Platform Notes
1430
+
1431
+ - Desktop: Works as expected - selects from enumerated devices.
1432
+ - Mobile (iOS/Android): No-op. Mobile platforms handle audio routing at the system level.
1433
+ This will succeed but has no effect. For audio routing on mobile:
1434
+ - iOS: Use AVAudioSession to control speaker/earpiece/Bluetooth routing
1435
+ - Android: Use AudioManager.setSpeakerphoneOn() to switch outputs
1436
+ """
1437
+
1438
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1439
+
1440
+ PLATFORM_AUDIO_HANDLE_FIELD_NUMBER: builtins.int
1441
+ DEVICE_ID_FIELD_NUMBER: builtins.int
1442
+ platform_audio_handle: builtins.int
1443
+ """The PlatformAudio handle."""
1444
+ device_id: builtins.str
1445
+ """Device GUID from AudioDeviceInfo.guid - stable across device additions/removals."""
1446
+ def __init__(
1447
+ self,
1448
+ *,
1449
+ platform_audio_handle: builtins.int | None = ...,
1450
+ device_id: builtins.str | None = ...,
1451
+ ) -> None: ...
1452
+ def HasField(self, field_name: typing.Literal["device_id", b"device_id", "platform_audio_handle", b"platform_audio_handle"]) -> builtins.bool: ...
1453
+ def ClearField(self, field_name: typing.Literal["device_id", b"device_id", "platform_audio_handle", b"platform_audio_handle"]) -> None: ...
1454
+
1455
+ global___SetPlayoutDeviceRequest = SetPlayoutDeviceRequest
1456
+
1457
+ @typing.final
1458
+ class SetPlayoutDeviceResponse(google.protobuf.message.Message):
1459
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1460
+
1461
+ ERROR_FIELD_NUMBER: builtins.int
1462
+ error: builtins.str
1463
+ """Error message if the operation failed.
1464
+ Empty/absent on success (including no-op success on mobile).
1465
+ """
1466
+ def __init__(
1467
+ self,
1468
+ *,
1469
+ error: builtins.str | None = ...,
1470
+ ) -> None: ...
1471
+ def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ...
1472
+ def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ...
1473
+
1474
+ global___SetPlayoutDeviceResponse = SetPlayoutDeviceResponse
1475
+
1476
+ @typing.final
1477
+ class StartRecordingRequest(google.protobuf.message.Message):
1478
+ """Start recording from the microphone.
1479
+
1480
+ Recording is started automatically when PlatformAudio is created.
1481
+ Use this to resume recording after calling StopRecording.
1482
+ This also turns on the system's recording privacy indicator.
1483
+ """
1484
+
1485
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1486
+
1487
+ PLATFORM_AUDIO_HANDLE_FIELD_NUMBER: builtins.int
1488
+ platform_audio_handle: builtins.int
1489
+ """The PlatformAudio handle."""
1490
+ def __init__(
1491
+ self,
1492
+ *,
1493
+ platform_audio_handle: builtins.int | None = ...,
1494
+ ) -> None: ...
1495
+ def HasField(self, field_name: typing.Literal["platform_audio_handle", b"platform_audio_handle"]) -> builtins.bool: ...
1496
+ def ClearField(self, field_name: typing.Literal["platform_audio_handle", b"platform_audio_handle"]) -> None: ...
1497
+
1498
+ global___StartRecordingRequest = StartRecordingRequest
1499
+
1500
+ @typing.final
1501
+ class StartRecordingResponse(google.protobuf.message.Message):
1502
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1503
+
1504
+ ERROR_FIELD_NUMBER: builtins.int
1505
+ error: builtins.str
1506
+ """Error message if the operation failed.
1507
+ Empty/absent on success.
1508
+ """
1509
+ def __init__(
1510
+ self,
1511
+ *,
1512
+ error: builtins.str | None = ...,
1513
+ ) -> None: ...
1514
+ def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ...
1515
+ def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ...
1516
+
1517
+ global___StartRecordingResponse = StartRecordingResponse
1518
+
1519
+ @typing.final
1520
+ class StopRecordingRequest(google.protobuf.message.Message):
1521
+ """Stop recording from the microphone.
1522
+
1523
+ Use this to temporarily stop recording without disposing PlatformAudio.
1524
+ This will turn off the system's recording privacy indicator (e.g., on macOS/iOS).
1525
+ Call StartRecording to resume recording.
1526
+ """
1527
+
1528
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1529
+
1530
+ PLATFORM_AUDIO_HANDLE_FIELD_NUMBER: builtins.int
1531
+ platform_audio_handle: builtins.int
1532
+ """The PlatformAudio handle."""
1533
+ def __init__(
1534
+ self,
1535
+ *,
1536
+ platform_audio_handle: builtins.int | None = ...,
1537
+ ) -> None: ...
1538
+ def HasField(self, field_name: typing.Literal["platform_audio_handle", b"platform_audio_handle"]) -> builtins.bool: ...
1539
+ def ClearField(self, field_name: typing.Literal["platform_audio_handle", b"platform_audio_handle"]) -> None: ...
1540
+
1541
+ global___StopRecordingRequest = StopRecordingRequest
1542
+
1543
+ @typing.final
1544
+ class StopRecordingResponse(google.protobuf.message.Message):
1545
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
1546
+
1547
+ ERROR_FIELD_NUMBER: builtins.int
1548
+ error: builtins.str
1549
+ """Error message if the operation failed.
1550
+ Empty/absent on success.
1551
+ """
1552
+ def __init__(
1553
+ self,
1554
+ *,
1555
+ error: builtins.str | None = ...,
1556
+ ) -> None: ...
1557
+ def HasField(self, field_name: typing.Literal["error", b"error"]) -> builtins.bool: ...
1558
+ def ClearField(self, field_name: typing.Literal["error", b"error"]) -> None: ...
1559
+
1560
+ global___StopRecordingResponse = StopRecordingResponse