def stop(): """stop(): return None stop the music playback""" check_mixer() sdl.Mix_HaltMusic() global _queue_music if _queue_music: sdl.Mix_FreeMusic(_queue_music) _queue_music = None
def autoquit(): global _channeldata, _numchanneldata, _current_music, \ _queue_music if sdl.SDL_WasInit(sdl.SDL_INIT_AUDIO): sdl.Mix_HaltMusic() # cleanup if _channeldata: _channeldata = None _numchanneldata = 0 if _current_music: sdl.Mix_FreeMusic(_current_music) _current_music = None if _queue_music: sdl.Mix_FreeMusic(_queue_music) _queue_music = None sdl.Mix_CloseAudio() sdl.SDL_QuitSubSystem(sdl.SDL_INIT_AUDIO)
def fadeout(milliseconds): """ fadeout(time) -> None stop music playback after fading out """ check_mixer() milliseconds = int(milliseconds) sdl.Mix_FadeOutMusic(milliseconds) global _queue_music if _queue_music: sdl.Mix_FreeMusic(_queue_music) _queue_music = None
def load(obj): """load(filename): return None load(object): return None Load a music file for playback""" check_mixer() global _current_music, _queue_music if isinstance(obj, (bytes_, unicode_)): filename = rwops_encode_file_path(obj) new_music = sdl.Mix_LoadMUS(filename) else: rwops = rwops_from_file(obj) new_music = sdl.Mix_LoadMUS_RW(rwops) if not new_music: raise SDLError.from_sdl_error() # Cleanup if _current_music: sdl.Mix_FreeMusic(_current_music) if _queue_music: sdl.Mix_FreeMusic(_queue_music) _queue_music = None _current_music = new_music
def _endmusic_callback(): global _current_music, _queue_music, _music_pos, _music_pos_time if _endmusic_event is not None and sdl.SDL_WasInit(sdl.SDL_INIT_AUDIO): event.post(event.Event(_endmusic_event)) if _queue_music: if _current_music: sdl.Mix_FreeMusic(_current_music) _current_music = _queue_music _queue_music = None sdl.Mix_HookMusicFinished(_endmusic_callback) _music_pos = 0 sdl.Mix_PlayMusic(_current_music, 0) else: _music_pos_time = -1 sdl.Mix_SetPostMix(ffi.NULL, ffi.NULL)
def _endmusic_callback(): global _current_music, _queue_music, _music_pos, _music_pos_time if _endmusic_event is not None and sdl.SDL_WasInit(sdl.SDL_INIT_AUDIO): # Pygame doesn't do the same checks for this path as in # event.post, and people rely on that, so we also duplicate # the logic event = ffi.new('SDL_Event*') event.type = _endmusic_event sdl.SDL_PushEvent(event) if _queue_music: if _current_music: sdl.Mix_FreeMusic(_current_music) _current_music = _queue_music _queue_music = None sdl.Mix_HookMusicFinished(_endmusic_callback) _music_pos = 0 sdl.Mix_PlayMusic(_current_music, 0) else: _music_pos_time = -1 sdl.Mix_SetPostMix(ffi.NULL, ffi.NULL)