コード例 #1
0
    def __init__(self, filename):
        if not os.path.isfile(filename):
            raise IOError("No such file: " + filename)
        # TODO check if file is actual sound file

        # internal state
        self.loaded = False

        # attributes
        self.volume = 1.0
        self.length = None

        # commands
        self.cstop = False
        self.cstart = False
        self.cvolume = False

        # internal sound object
        self.sobj = None

        # init lock around object
        self.lock = Lock()

        # remember own filename
        self.filename = filename

        LOGGER.logDebug("loading: " + filename)

        # load the sound
        Thread(target=self.__load).start()
コード例 #2
0
    def __update(self):
        if not self.running:
            return
        LOGGER.logDebug("'{}' update".format(self.name))

        for sound in self.sounds:
            sound.adaptVolume()

        Timer(self.urate, self.__update).start()
コード例 #3
0
    def __update(self):
        if not self.loaded:
            return

        self.lock.acquire()
        #LOGGER.logDebug("acquired lock", self)

        if self.cstart:
            LOGGER.logDebug("start", self)
            self.sobj.play(-1)
            self.cstart = False

        if self.cstop:
            LOGGER.logDebug("stop", self)
            self.sobj.stop()
            self.cstop = False

        if self.cvolume:
            LOGGER.logDebug("set volume to {} %".format(self.volume * 100),
                            self)
            self.sobj.set_volume(self.volume)
            self.cvolume = False

        #LOGGER.logDebug("releasing lock", self)
        self.lock.release()
コード例 #4
0
    def __init__(self, configfile):

        # check if mixer is already initialized
        if mixer.get_init() == True:
            raise RuntimeError("pygame.mixer already initialized, abort")

        LOGGER.logDebug("initialize pygame.mixer")

        # set parameters of mixer before init, TODO check values again
        mixer.pre_init(44100, -16, 2, 2048)
        mixer.init()

        # load configuration file
        with open(configfile, "r") as f:
            data = f.read()
        root = XmlEt.fromstring(data)

        # setup ambient dictionary
        self.ambients = dict()
        for elem in root.findall("AmbientConfig"):
            self.ambients[elem.get("id")] = Ambient(elem.get("file"))

        # set current ambient to none
        self.ambient = None