Mercurial > skaapsteker
view skaapsteker/sound.py @ 634:20d6aef11249 default tip
Fix iCCC profiles in PNGs to avoid verbose warnings from libpng.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Fri, 27 Jan 2023 23:32:07 +0100 |
parents | 0675f390653c |
children |
line wrap: on
line source
"""Support for playing sounds and music""" from pygame import mixer import pygame from . import data from .constants import FREQ, BITSIZE, CHANNELS, BUFFER _GLOBAL_SOUND = None def load_sound(key, track_name, volume=None): if _GLOBAL_SOUND is not None: _GLOBAL_SOUND.load_sound(key, track_name, volume) def play_sound(key): if _GLOBAL_SOUND is not None: _GLOBAL_SOUND.play_sound(key) class SoundSystem(object): def __init__(self, want_sound): global _GLOBAL_SOUND if want_sound: # See if we can actually enabled sound try: mixer.init(FREQ, BITSIZE, CHANNELS, BUFFER) test_sound = mixer.Sound(data.filepath('sounds/silence.ogg')) test_sound.play() self.sound_enabled = True except pygame.error: print('Unable to enable sound') self.sound_enabled = False else: self.sound_enabled = False self._sounds = {} _GLOBAL_SOUND = self def play_background_music(self, track_name, volume=1.0): if self.sound_enabled: try: mixer.music.load(data.filepath(track_name)) mixer.music.play(-1) # Loop forever mixer.music.set_volume(volume) except pygame.error: print('Unable to load track') def stop_music(self): if self.sound_enabled: mixer.music.stop() def load_sound(self, key, track_name, volume=None): if key in self._sounds: # First caller wins on duplicate keys return if not self.sound_enabled: self._sounds[key] = None else: self._sounds[key] = pygame.mixer.Sound(data.filepath(track_name)) if volume is not None: self._sounds[key].set_volume(volume) def play_sound(self, key): sound = self._sounds.get(key, None) if sound: sound.play() def stop_all_sounds(self): if self.sound_enabled: mixer.stop() def pause(self): if self.sound_enabled: mixer.music.pause() def unpause(self): if self.sound_enabled: mixer.music.unpause()