Quellcode für miniworlds.worlds.manager.sound_manager
from typing import Optional
import logging
import miniworlds.base.app as app_mod
logger = logging.getLogger(__name__)
[Doku]
class SoundManager:
"""Manages short sound-effect playback for a world.
Access via `world.sound`.
Unlike `world.music`, sounds can overlap and are designed for short
in-game effects.
Examples:
::
world.sound.play("assets/explosion.wav")
world.sound.play("assets/jump.wav", volume=80)
"""
def __init__(self, app: "app_mod.App"):
self.app: "app_mod.App" = app
self.sound_manager = self.app.sound_manager
[Doku]
def play(self, path: str, volume: int = 100) -> None:
"""Play a sound.
Args:
path: Path to the sound.
volume: Volume between `0` and `100`.
Raises:
ValueError: If path is empty or volume is out of range.
Examples:
::
world.sound.play("sounds/explosion.wav", volume=80)
"""
if not path:
raise ValueError("Sound path must not be empty.")
if not (0 <= volume <= 100):
raise ValueError("Volume must be between 0 and 100.")
logger.debug(f"Playing sound: {path} at volume {volume}")
self.sound_manager.play_sound(path, volume=volume)
[Doku]
def register(self, path: str) -> None:
"""Register a sound for later use.
Args:
path: Path to the sound.
Raises:
ValueError: If path is empty.
Examples:
::
world.sound.register("sounds/explosion.wav")
"""
if not path:
raise ValueError("Sound path must not be empty.")
logger.debug(f"Registering sound: {path}")
self.sound_manager.register_sound(path)
[Doku]
def is_registered(self, path: str) -> bool:
"""Return whether a sound is already registered.
Args:
path: Path to the sound.
Returns:
`True` if the sound is registered.
Raises:
ValueError: If path is empty.
Examples:
::
if not world.sound.is_registered("sounds/explosion.wav"):
world.sound.register("sounds/explosion.wav")
"""
if not path:
raise ValueError("Sound path must not be empty.")
return self.sound_manager.is_sound_registered(path)
[Doku]
def stop(self, path: str) -> None:
"""Stop a playing sound.
Args:
path: Path to the sound to stop.
Raises:
ValueError: If path is empty.
Examples:
::
world.sound.stop("sounds/explosion.wav")
"""
if not path:
raise ValueError("Sound path must not be empty.")
logger.debug(f"Stopping sound: {path}")
self.sound_manager.stop_sound(path)
[Doku]
def is_playing(self, path: str) -> bool:
"""Return whether the given sound is currently playing.
Args:
path: Path to the sound.
Returns:
`True` if the sound is playing.
Raises:
ValueError: If path is empty.
Examples:
::
if world.sound.is_playing("sounds/explosion.wav"):
world.sound.stop("sounds/explosion.wav")
"""
if not path:
raise ValueError("Sound path must not be empty.")
return self.sound_manager.is_sound_playing(path)