def periodic(self): """ This is the periodic call that causes this channel to load new stuff into its queues, if necessary. """ # This should be set from something that checks to see if our # mixer is muted. force_stop = self.context.force_stop or (renpy.game.preferences.mute[self.mixer] and self.stop_on_mute) if self.playing and force_stop: pss.stop(self.number) self.playing = False self.wait_stop = False if force_stop: if self.loop: self.queue = self.queue[-len(self.loop):] else: self.queue = [ ] return # Should we do the callback? do_callback = False # This has been modified so we only queue a single sound file # per call, to prevent memory leaks with really short sound # files. So this loop will only execute once, in practice. while True: depth = pss.queue_depth(self.number) if depth == 0: self.wait_stop = False self.playing = False # Need to check this, so we don't do pointless work. if not self.queue: break # If the pcm_queue is full, then we can't queue # anything, regardless of if it is midi or pcm. if depth >= 2: break # If we can't buffer things, and we're playing something # give up here. if not self.buffer_queue and depth >= 1: break # We can't queue anything if the depth is > 0 and we're # waiting for a synchro_start. if self.synchro_start and depth: break # If the queue is full, return. if pss.queue_depth(self.number) >= 2: break # Otherwise, we might be able to enqueue something. topq = self.queue.pop(0) # Blacklist of old file formats we used to support, but we now # ignore. lfn = topq.filename.lower() + self.file_suffix.lower() for i in (".mod", ".xm", ".mid", ".midi"): if lfn.endswith(i): topq = None if not topq: continue try: topf = load(self.file_prefix + topq.filename + self.file_suffix) if depth == 0: pss.play(self.number, topf, topq.filename, paused=self.synchro_start, fadein=topq.fadein, tight=topq.tight) else: pss.queue(self.number, topf, topq.filename, fadein=topq.fadein, tight=topq.tight) self.playing = True except: # If playing failed, remove topq.filename from self.loop # so we don't keep trying. while topq.filename in self.loop: self.loop.remove(topq.filename) if renpy.config.debug_sound: raise else: return break if self.loop and not self.queue: for i in self.loop: newq = QueueEntry(i, 0, topq.tight) self.queue.append(newq) else: do_callback = True # Queue empty callback. if do_callback and self.callback: self.callback() # E1102
def periodic(self): """ This is the periodic call that causes this channel to load new stuff into its queues, if necessary. """ # This should be set from something that checks to see if our # mixer is muted. force_stop = self.context.force_stop or ( renpy.game.preferences.mute[self.mixer] and self.stop_on_mute) if self.playing and force_stop: pss.stop(self.number) self.playing = False self.wait_stop = False if force_stop: if self.loop: self.queue = self.queue[-len(self.loop):] else: self.queue = [] return # Should we do the callback? do_callback = False # This has been modified so we only queue a single sound file # per call, to prevent memory leaks with really short sound # files. So this loop will only execute once, in practice. while True: depth = pss.queue_depth(self.number) if depth == 0: self.wait_stop = False self.playing = False # Need to check this, so we don't do pointless work. if not self.queue: break # If the pcm_queue is full, then we can't queue # anything, regardless of if it is midi or pcm. if depth >= 2: break # If we can't buffer things, and we're playing something # give up here. if not self.buffer_queue and depth >= 1: break # We can't queue anything if the depth is > 0 and we're # waiting for a synchro_start. if self.synchro_start and depth: break # If the queue is full, return. if pss.queue_depth(self.number) >= 2: break # Otherwise, we might be able to enqueue something. topq = self.queue.pop(0) # Blacklist of old file formats we used to support, but we now # ignore. lfn = topq.filename.lower() + self.file_suffix.lower() for i in (".mod", ".xm", ".mid", ".midi"): if lfn.endswith(i): topq = None if not topq: continue try: topf = load(self.file_prefix + topq.filename + self.file_suffix) if depth == 0: pss.play(self.number, topf, topq.filename, paused=self.synchro_start, fadein=topq.fadein, tight=topq.tight) else: pss.queue(self.number, topf, topq.filename, fadein=topq.fadein, tight=topq.tight) self.playing = True except: # If playing failed, remove topq.filename from self.loop # so we don't keep trying. while topq.filename in self.loop: self.loop.remove(topq.filename) if renpy.config.debug_sound: raise else: return break if self.loop and not self.queue: for i in self.loop: newq = QueueEntry(i, 0, topq.tight) self.queue.append(newq) else: do_callback = True # Queue empty callback. if do_callback and self.callback: self.callback() # E1102