from typing import Dict, Optional, Tuple, Callable

def play_effect(
    name: str,
    volume: Optional[float] = None,
    pitch: Optional[float] = 1.0,
    pan: Optional[float] = 0.0,
    looping: Optional[bool] = False,
) -> Optional[Effect]: ...
def stop_all_effects() -> None: ...
def stop_effect(effect: Effect) -> None: ...
def set_volume(vol: float) -> None: ...
def set_honors_silent_switch(flag: bool) -> None: ...

class Effect:
    looping: bool
    pan: float
    pitch: float = 1.0
    position: Tuple[float, float, float]
    volume: float
    def stop(self) -> None: ...

class Player:
    current_time: float
    duration: float
    finished_handler: Callable
    number_of_loops: int
    playing: bool
    pan: float
    def __init__(self, file_path: str) -> None: ...
    def play(self): ...
    def stop(self): ...
    def pause(self): ...

class Recorder:
    current_time: float
    recording: bool
    meters: Dict[str, Tuple[float, float]]
    def __init__(self, file_path: str) -> None: ...
    def record(self, duration: Optional[int] = None) -> None: ...
    def stop(self) -> None: ...
    def pause(self) -> None: ...

class MIDIPlayer:
    current_time: float
    duration: float
    rate: float
    def __init__(self, file_path: str, sound_bank_path: Optional[str]) -> None: ...
    def play(self) -> None: ...
    def stop(self) -> None: ...
