Skip to content

Commit 1d258dd

Browse files
1.4.0 (#42)
1 parent 36d3a37 commit 1d258dd

File tree

4 files changed

+51
-16
lines changed

4 files changed

+51
-16
lines changed

docs/whats-new.rst

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,18 @@ Fixed
2424

2525
- Fixed documentation not being generated correctly.
2626

27+
:version:`1.4.0` - 2025-04-28
28+
---------------------------------
29+
30+
Added new capabilities for managing audio input devices and settings.
31+
32+
Added
33+
~~~~~
34+
35+
- Added the ability to list available sound devices and select the desired input device.
36+
- Added functions to get and set the microphone input gain level.
37+
- Added control to enable or disable voice transmission.
38+
2739
:version:`1.3.1` - 2025-04-12
2840
---------------------------------
2941

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "teamtalk-py"
3-
version = "1.3.1"
3+
version = "1.4.0"
44
description = "a simple but powerful pythonic library for making bots for the TeamTalk5 Conferencing System"
55
readme = "README.md"
66
requires-python = ">=3.11"

teamtalk/instance.py

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -255,42 +255,65 @@ def enable_voice_transmission(self, enabled: bool) -> bool:
255255
return success
256256

257257
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).
259259
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.
261262
262263
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.
264267
"""
265268
sdk_gain = sdk._GetSoundInputGainLevel(self._tt)
266269
if sdk_gain < 0:
267270
_log.warning(f"Could not get input gain for instance {self.server_info.host}, SDK returned {sdk_gain}")
268271
return 0
269272

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)))
272284

273285
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).
275287
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.
277290
278291
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.
280294
281295
Returns:
282-
True on success, False otherwise.
296+
bool: True on success, False otherwise.
283297
284298
Raises:
285-
ValueError: If volume is less than 0.
299+
ValueError: If volume is negative.
286300
"""
287301
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
289312

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)))
292315

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})")
294317
success = sdk._SetSoundInputGainLevel(self._tt, sdk_gain)
295318
if not success:
296319
_log.error(f"Failed to set input volume for instance {self.server_info.host}")

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)