def check_sound(): """ Update the sound queue. """ now = datetime.datetime.now() for voice in range(4): while music_queue[voice] and now >= music_queue[voice][0]: music_queue[voice].pop(0) # remove the notes that have been played backend.sound_done(voice, len(music_queue[voice]))
def check_sound(): """ Update the sound queue and play sounds. """ global loop_sound current_chunk = [ None, None, None, None ] if sound_queue == [ [], [], [], [] ] and loop_sound == [ None, None, None, None ]: return check_init_mixer() for voice in range(4): # if there is a sound queue, stop looping sound if sound_queue[voice] and loop_sound[voice]: stop_channel(voice) loop_sound[voice] = None if mixer.Channel(voice).get_queue() == None: if loop_sound[voice]: # loop the current playing sound; ok to interrupt it with play cos it's the same sound as is playing current_chunk[voice] = loop_sound[voice].build_chunk() elif sound_queue[voice]: current_chunk[voice] = sound_queue[voice][0].build_chunk() if not current_chunk[voice]: sound_queue[voice].pop(0) try: current_chunk[voice] = sound_queue[voice][0].build_chunk() except IndexError: # sound_queue is empty continue if sound_queue[voice][0].loop: loop_sound[voice] = sound_queue[voice].pop(0) # any next sound in the sound queue will stop this looping sound else: loop_sound[voice] = None for voice in range(4): if current_chunk[voice]: mixer.Channel(voice).queue(current_chunk[voice]) for voice in range(4): # remove the notes that have been sent to mixer backend.sound_done(voice, len(sound_queue[voice]))