Skip to content

Commit 2f0cec4

Browse files
authored
Merge pull request #492 from JaskRendix/patch-1
set_sound_volume (Sound)
2 parents 20ed046 + 8d0226f commit 2f0cec4

File tree

2 files changed

+48
-20
lines changed

2 files changed

+48
-20
lines changed

pygame_menu/sound.py

+38-20
Original file line numberDiff line numberDiff line change
@@ -407,95 +407,96 @@ def _play_sound(self, sound: Optional[Dict[str, Any]]) -> bool:
407407
self._last_time = sound_time
408408
return True
409409

410+
def play_sound_type(self, sound_type: str) -> 'Sound':
411+
"""
412+
Play a sound based on its type.
413+
414+
:param sound_type: The type of sound to play.
415+
:return: Self reference.
416+
"""
417+
if sound_type in self._sound:
418+
self._play_sound(self._sound[sound_type])
419+
return self
420+
410421
def play_click_mouse(self) -> 'Sound':
411422
"""
412423
Play click mouse sound.
413424
414425
:return: Self reference
415426
"""
416-
self._play_sound(self._sound[SOUND_TYPE_CLICK_MOUSE])
417-
return self
427+
return self.play_sound_type(SOUND_TYPE_CLICK_MOUSE)
418428

419429
def play_click_touch(self) -> 'Sound':
420430
"""
421431
Play click touch sound.
422432
423433
:return: Self reference
424434
"""
425-
self._play_sound(self._sound[SOUND_TYPE_CLICK_TOUCH])
426-
return self
435+
return self.play_sound_type(SOUND_TYPE_CLICK_TOUCH)
427436

428437
def play_error(self) -> 'Sound':
429438
"""
430439
Play error sound.
431440
432441
:return: Self reference
433442
"""
434-
self._play_sound(self._sound[SOUND_TYPE_ERROR])
435-
return self
443+
return self.play_sound_type(SOUND_TYPE_ERROR)
436444

437445
def play_event(self) -> 'Sound':
438446
"""
439447
Play event sound.
440448
441449
:return: Self reference
442450
"""
443-
self._play_sound(self._sound[SOUND_TYPE_EVENT])
444-
return self
451+
return self.play_sound_type(SOUND_TYPE_EVENT)
445452

446453
def play_event_error(self) -> 'Sound':
447454
"""
448455
Play event error sound.
449456
450457
:return: Self reference
451458
"""
452-
self._play_sound(self._sound[SOUND_TYPE_EVENT_ERROR])
453-
return self
459+
return self.play_sound_type(SOUND_TYPE_EVENT_ERROR)
454460

455461
def play_key_add(self) -> 'Sound':
456462
"""
457463
Play key addition sound.
458464
459465
:return: Self reference
460466
"""
461-
self._play_sound(self._sound[SOUND_TYPE_KEY_ADDITION])
462-
return self
467+
return self.play_sound_type(SOUND_TYPE_KEY_ADDITION)
463468

464469
def play_key_del(self) -> 'Sound':
465470
"""
466471
Play key deletion sound.
467472
468473
:return: Self reference
469474
"""
470-
self._play_sound(self._sound[SOUND_TYPE_KEY_DELETION])
471-
return self
475+
return self.play_sound_type(SOUND_TYPE_KEY_DELETION)
472476

473477
def play_open_menu(self) -> 'Sound':
474478
"""
475479
Play open Menu sound.
476480
477481
:return: Self reference
478482
"""
479-
self._play_sound(self._sound[SOUND_TYPE_OPEN_MENU])
480-
return self
483+
return self.play_sound_type(SOUND_TYPE_OPEN_MENU)
481484

482485
def play_close_menu(self) -> 'Sound':
483486
"""
484487
Play close Menu sound.
485488
486489
:return: Self reference
487490
"""
488-
self._play_sound(self._sound[SOUND_TYPE_CLOSE_MENU])
489-
return self
491+
return self.play_sound_type(SOUND_TYPE_CLOSE_MENU)
490492

491493
def play_widget_selection(self) -> 'Sound':
492494
"""
493495
Play widget selection sound.
494496
495497
:return: Self reference
496498
"""
497-
self._play_sound(self._sound[SOUND_TYPE_WIDGET_SELECTION])
498-
return self
499+
return self.play_sound_type(SOUND_TYPE_WIDGET_SELECTION)
499500

500501
def stop(self) -> 'Sound':
501502
"""
@@ -558,3 +559,20 @@ def get_channel_info(self) -> Dict[str, Any]:
558559
data['sound'] = channel.get_sound()
559560
data['volume'] = channel.get_volume()
560561
return data
562+
563+
def set_sound_volume(self, sound_type: str, volume: float) -> bool:
564+
"""
565+
Set the volume of a specific sound type.
566+
567+
:param sound_type: Sound type
568+
:param volume: Volume of the sound, from ``0.0`` to ``1.0``
569+
:return: ``True`` if the volume was set, ``False`` otherwise
570+
"""
571+
if sound_type not in SOUND_TYPES:
572+
return False
573+
sound_data = self._sound.get(sound_type)
574+
if sound_data:
575+
sound_data['file'].set_volume(volume)
576+
sound_data['volume'] = volume
577+
return True
578+
return False

test/test_sound.py

+10
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,13 @@ def test_sound_menu(self) -> None:
104104
menu.set_sound(None, True)
105105
self.assertNotEqual(button.get_sound(), self.sound)
106106
self.assertEqual(menu.get_sound(), menu._sound)
107+
108+
def test_set_sound_volume(self) -> None:
109+
self.sound.load_example_sounds()
110+
self.assertTrue(self.sound.set_sound_volume(pygame_menu.sound.SOUND_TYPE_CLICK_MOUSE, 0.5))
111+
self.assertEqual(self.sound._sound[pygame_menu.sound.SOUND_TYPE_CLICK_MOUSE]['volume'], 0.5)
112+
self.assertFalse(self.sound.set_sound_volume('bad_sound', 0.5))
113+
self.assertTrue(self.sound.set_sound_volume(pygame_menu.sound.SOUND_TYPE_CLICK_MOUSE, 1.0))
114+
self.assertEqual(self.sound._sound[pygame_menu.sound.SOUND_TYPE_CLICK_MOUSE]['volume'], 1.0)
115+
self.assertTrue(self.sound.set_sound_volume(pygame_menu.sound.SOUND_TYPE_CLICK_MOUSE, 0.0))
116+
self.assertEqual(self.sound._sound[pygame_menu.sound.SOUND_TYPE_CLICK_MOUSE]['volume'], 0.0)

0 commit comments

Comments
 (0)