sounds.tin
- sounds.tin
#python from pyLib import sounds sound = sounds.Sounds() #gts #action {^*%+{Orc|Troll|Man|Woman|Elf|Half-Elf|Dwarf|Hobbit|Bear|Numenorean|N\xFAmen\xF3rean}*%*{standing|sitting|resting|sleeping|fighting|riding|nocks a missile|begins some strange|arrived|leaves}%+{((north|south|east|west|up|down|above|below|hiding place).*)?}$} { #if {("%2" == "Numenorean") || ("%2" == "N\xFAmen\xF3rean") || ("%2" == "Woman")} {#var {tmpPlayer} {Man}}; #else {#var {tmpPlayer} {%2}}; #if {"%4" == "nocks a missile"} {#var {tmpAction} {shooting}}; #elseif {"%4" == "begins some strange"} { #var {tmpAction} {casting}; #line gag; #showme {*%1%2* is casting!} }; #else {#var {tmpAction} {%4}}; #var {tmpLocation} {%8}; #if {("$tmpAction" == "leaves") && ("$tmpLocation" == "hiding place")} { #nop Maybe we do something with this later }; #else { #nop {Ugly hack! We need this because TinTin isn't clearing %8.}; #if {"$tmpLocation" == "hiding place"} { #var {tmpLocation} {} }; playsound ${tmpPlayer}${tmpAction}${tmpLocation}\.wav }; #unvar {tmpPlayer}; #unvar {tmpAction}; #unvar {tmpLocation} } #action {^You begin to feel {hungry|thirsty}.$} { playsound %1.wav } #action {^You gain a level!$} { playsound tada.wav } #action {^You {feel a hidden presence|smell blood}.$} { playsound hidden.wav } #alias {playsound} {#python sound.play("%0", "${volume}")} #alias {stopsound} {#python sound.stop("%0")} #alias {mutesound} {#python sound.mute()} #alias {vol} { #if {"%1" == "up"} { #if {$volume < 81} { #math {volume} {$volume + 20}; #echo {Increasing volume.} }; #else { #var {volume} {100}; #echo {Maximum volume!} } }; #elseif {"%1" == "down"} { #if {$volume > 21} { #math {volume} {$volume - 20}; #echo {Decreasing volume.} }; #else { #var {volume} {1}; #echo {Minimum volume!} } }; #else {#showme Syntax: vol [up|down]} } #var {volume} {100}
- sounds.py
import os import random from .tintin import TinTin try: from pygame import mixer except ImportError: TinTin.echo("Unable to import pyGame: please make sure it is installed.", "gts") mixer = None SOUNDS_DIRECTORY = "sounds" class Sounds(object): def __init__(self): self.soundObjects = {} self.muted = False def play(self, fileName="", volume="100"): fileName = fileName.strip() if self.muted or not fileName or mixer is None: return if not volume.isdigit(): return TinTin.echo("Invalid volume: only numbers 1-100 are allowed.", "mume") volume = int(volume) / 100.0 path = os.path.join(SOUNDS_DIRECTORY, fileName) if os.path.isdir(path): fileName = random.choice(os.listdir(path)) path = os.path.join(path, fileName) if not fileName in self.soundObjects: if os.path.exists(path): self.soundObjects[fileName] = mixer.Sound(path) else: return TinTin.echo("No such sound", "mume") self.soundObjects[fileName].set_volume(volume) self.soundObjects[fileName].play() def stop(self, fileName=""): if mixer is None: return fileName = fileName.strip() if fileName: if fileName in self.soundObjects: self.soundObjects[fileName].stop() del self.soundObjects[fileName] else: TinTin.echo("that sound has not been loaded!", "mume") else: for soundObj in self.soundObjects: self.soundObjects[soundObj].stop() self.soundObjects.clear() def mute(self): if mixer is None: return self.muted = self.muted == False if self.muted: self.stop() TinTin.echo("sound {0}.".format("muted" if self.muted else "unmuted"), "mume") def load(self): if mixer is not None: mixer.init(frequency=44100, size=-16, channels=2, buffer=1024) def unload(self): if mixer is not None: mixer.quit()