@@ -255,42 +255,65 @@ def enable_voice_transmission(self, enabled: bool) -> bool:
255
255
return success
256
256
257
257
def get_input_volume (self ) -> int :
258
- """Gets the current input sound gain level (scaled 0- 100).
258
+ """Gets the current input gain level (100=SDK default ).
259
259
260
- Reads the SDK gain and scales it via (sdk_gain / 20).
260
+ Retrieves the raw SDK gain and scales it so the SDK default gain level
261
+ (SOUND_GAIN_DEFAULT) corresponds to 100.
261
262
262
263
Returns:
263
- The volume level (0-100 scale, potentially higher).
264
+ int: The volume level where 100 is the SDK default gain. Values
265
+ above 100 represent gain higher than the SDK default. Returns
266
+ 0 if the SDK call fails.
264
267
"""
265
268
sdk_gain = sdk ._GetSoundInputGainLevel (self ._tt )
266
269
if sdk_gain < 0 :
267
270
_log .warning (f"Could not get input gain for instance { self .server_info .host } , SDK returned { sdk_gain } " )
268
271
return 0
269
272
270
- scaled_volume = round (sdk_gain / 20.0 )
271
- return max (0 , scaled_volume )
273
+ sdk_default = float (sdk .SoundLevel .SOUND_GAIN_DEFAULT )
274
+ sdk_max = float (sdk .SoundLevel .SOUND_GAIN_MAX )
275
+
276
+ if sdk_default == 0 :
277
+ scaled_volume = round ((sdk_gain / sdk_max ) * 100.0 ) if sdk_max != 0 else 0
278
+ max_possible_scaled = 100
279
+ else :
280
+ scaled_volume = round ((sdk_gain / sdk_default ) * 100.0 )
281
+ max_possible_scaled = round ((sdk_max / sdk_default ) * 100.0 )
282
+
283
+ return max (0 , min (int (scaled_volume ), int (max_possible_scaled )))
272
284
273
285
def set_input_volume (self , volume : int ) -> bool :
274
- """Sets the input sound gain level using a 0- 100 scale .
286
+ """Sets the input gain level ( 100=SDK default) .
275
287
276
- Uses a simple linear scale (volume * 20) where 50% maps to 1000 SDK gain.
288
+ Scales the input volume (where 100 is the SDK default gain) to the
289
+ SDK's raw gain range [0, 32000] and applies it, clamping the value.
277
290
278
291
Args:
279
- volume: The desired volume level (0-100 recommended).
292
+ volume (int): The desired volume level, where 100 corresponds to
293
+ the SDK default gain.
280
294
281
295
Returns:
282
- True on success, False otherwise.
296
+ bool: True on success, False otherwise.
283
297
284
298
Raises:
285
- ValueError: If volume is less than 0 .
299
+ ValueError: If volume is negative .
286
300
"""
287
301
if volume < 0 :
288
- raise ValueError ("Volume must be non-negative." )
302
+ raise ValueError ("Volume cannot be negative." )
303
+
304
+ sdk_default = float (sdk .SoundLevel .SOUND_GAIN_DEFAULT )
305
+ sdk_max = float (sdk .SoundLevel .SOUND_GAIN_MAX )
306
+ sdk_min = float (sdk .SoundLevel .SOUND_GAIN_MIN )
307
+
308
+ if sdk_default == 0 :
309
+ sdk_gain_float = (volume / 100.0 ) * sdk_max
310
+ else :
311
+ sdk_gain_float = (volume / 100.0 ) * sdk_default
289
312
290
- sdk_gain = int (volume * 20.0 )
291
- sdk_gain = max (0 , min (sdk_gain , 32000 ))
313
+ sdk_gain = int (round ( sdk_gain_float ) )
314
+ sdk_gain = max (int ( sdk_min ) , min (sdk_gain , int ( sdk_max ) ))
292
315
293
- _log .debug (f"Setting input volume for instance { self .server_info .host } to { volume } % (SDK level: { sdk_gain } )" )
316
+ _log .debug (f"Setting input volume for instance { self .server_info .host } to { volume } (SDK level: { sdk_gain } )" )
294
317
success = sdk ._SetSoundInputGainLevel (self ._tt , sdk_gain )
295
318
if not success :
296
319
_log .error (f"Failed to set input volume for instance { self .server_info .host } " )
0 commit comments