import ctypes
from ctypes.util import find_library
import os
_sdl_audio_init=False
_sdl_audio_music=None
_sdl_audio_sounds={}
_libsdl=None
_libsdl_mixer=None
def sdl_audio_load(snd,fn=None,reload=False):
global _sdl_audio_sounds,_libsdl,_libsdl_mixer
if snd not in _sdl_audio_sounds or reload:
sdl_audio_init()
if snd in _sdl_audio_sounds: _libsdl_mixer.Mix_FreeChunk(_sdl_audio_sounds[snd])
rw=_libsdl.SDL_RWFromFile(fn,'rb')
_sdl_audio_sounds[snd]=_libsdl_mixer.Mix_LoadWAV_RW(rw,1)
def sdl_audio_play(snd,loop=0,channel=-1):
global _sdl_audio_sounds,_libsdl_mixer
sdl_audio_load(snd)
_libsdl_mixer.Mix_PlayChannelTimed(channel,_sdl_audio_sounds[snd],loop,-1)
def sdl_audio_stop(channel=-1):
global _libsdl_mixer
return _libsdl_mixer.Mix_HaltChannel(channel)
def sdl_audio_volume(volume=-1,channel=-1):
global _libsdl_mixer
if type(volume) is type(.1): volume=int(volume*128)
return _libsdl_mixer.Mix_Volume(channel,volume)
def sdl_audio_init():
global _sdl_audio_init,_libsdl,_libsdl_mixer
if _sdl_audio_init: return None
try: _libsdl=ctypes.cdll.SDL
except:
name=find_library('SDL')
if name is None: return False
_libsdl=ctypes.cdll.LoadLibrary(name)
try: _libsdl_mixer=ctypes.cdll.SDL_mixer
except:
name=find_library('SDL_mixer')
if name is None: return False
_libsdl_mixer=ctypes.cdll.LoadLibrary(name)
_libsdl.SDL_Init(0)
_libsdl.SDL_InitSubSystem(0x00000010)# Init audio subsystem
_libsdl_mixer.Mix_Init()
_libsdl_mixer.Mix_OpenAudio(44100,0x8010,2,512)
_sdl_audio_init=True
return True
def sdl_audio_playmusic(fn,loop=1):
global _sdl_audio_music,_libsdl_mixer
sdl_audio_init()
sdl_audio_stopmusic()
_sdl_audio_music=_libsdl_mixer.Mix_LoadMUS(os.path.realpath(fn))
_libsdl_mixer.Mix_PlayMusic(_sdl_audio_music,loop)
def sdl_audio_pausemusic():
global _sdl_audio_music,_libsdl_mixer
if _sdl_audio_music is not None:
if _libsdl_mixer.Mix_PlayingMusic(): _libsdl_mixer.Mix_PauseMusic()
def sdl_audio_stopmusic():
global _sdl_audio_music,_libsdl_mixer
sdl_audio_pausemusic()
_libsdl_mixer.Mix_HaltMusic()
_libsdl_mixer.Mix_FreeMusic(_sdl_audio_music)
_sdl_audio_music=None
def sdl_audio_volumemusic(volume=-1):
global _libsdl_mixer
if type(volume) is type(.1): volume=int(volume*128)
return _libsdl_mixer.Mix_VolumeMusic(volume)
def sdl_audio_quit():
global _sdl_audio_init,_sdl_audio_sounds,_libsdl,_libsdl_mixer
if not _sdl_audio_init: return False
sdl_audio_stopmusic()
sdl_audio_stop()
map(lambda chunk: _libsdl_mixer.Mix_FreeChunk(chunk),_sdl_audio_sounds.values())
_libsdl_mixer.Mix_CloseAudio()
_libsdl_mixer.Mix_Quit()
_libsdl.SDL_Quit()
return True
Diff to Previous Revision
--- revision 2 2015-06-29 14:04:14
+++ revision 3 2015-08-17 18:54:17
@@ -1,4 +1,5 @@
import ctypes
+from ctypes.util import find_library
import os
@@ -6,64 +7,87 @@
_sdl_audio_music=None
_sdl_audio_sounds={}
+_libsdl=None
+_libsdl_mixer=None
-def sdl_audio_load(snd,fn=None):
- global _sdl_audio_sounds
- if snd not in _sdl_audio_sounds:
- rw=ctypes.cdll.SDL.SDL_RWFromFile(fn,'rb')
- _sdl_audio_sounds[snd]=ctypes.cdll.SDL_mixer.Mix_LoadWAV_RW(rw,1)
+def sdl_audio_load(snd,fn=None,reload=False):
+ global _sdl_audio_sounds,_libsdl,_libsdl_mixer
+ if snd not in _sdl_audio_sounds or reload:
+ sdl_audio_init()
+ if snd in _sdl_audio_sounds: _libsdl_mixer.Mix_FreeChunk(_sdl_audio_sounds[snd])
+ rw=_libsdl.SDL_RWFromFile(fn,'rb')
+ _sdl_audio_sounds[snd]=_libsdl_mixer.Mix_LoadWAV_RW(rw,1)
def sdl_audio_play(snd,loop=0,channel=-1):
- sdl_audio_init()
+ global _sdl_audio_sounds,_libsdl_mixer
sdl_audio_load(snd)
- ctypes.cdll.SDL_mixer.Mix_PlayChannelTimed(channel,_sdl_audio_sounds[snd],loop,-1)
+ _libsdl_mixer.Mix_PlayChannelTimed(channel,_sdl_audio_sounds[snd],loop,-1)
def sdl_audio_stop(channel=-1):
- return ctypes.cdll.SDL_mixer.Mix_HaltChannel(channel)
+ global _libsdl_mixer
+ return _libsdl_mixer.Mix_HaltChannel(channel)
def sdl_audio_volume(volume=-1,channel=-1):
- return ctypes.cdll.SDL_mixer.Mix_Volume(channel,volume)
+ global _libsdl_mixer
+ if type(volume) is type(.1): volume=int(volume*128)
+ return _libsdl_mixer.Mix_Volume(channel,volume)
def sdl_audio_init():
- global _sdl_audio_init
- if _sdl_audio_init is False:
- ctypes.cdll.SDL.SDL_Init(0)
- ctypes.cdll.SDL.SDL_InitSubSystem(0x00000010)# Init audio subsystem
- ctypes.cdll.SDL_mixer.Mix_Init()
- ctypes.cdll.SDL_mixer.Mix_OpenAudio(44100,0x8010,2,512)
- _sdl_audio_init=True
- return True
- return False
+ global _sdl_audio_init,_libsdl,_libsdl_mixer
+ if _sdl_audio_init: return None
+
+ try: _libsdl=ctypes.cdll.SDL
+ except:
+ name=find_library('SDL')
+ if name is None: return False
+ _libsdl=ctypes.cdll.LoadLibrary(name)
+
+ try: _libsdl_mixer=ctypes.cdll.SDL_mixer
+ except:
+ name=find_library('SDL_mixer')
+ if name is None: return False
+ _libsdl_mixer=ctypes.cdll.LoadLibrary(name)
+
+ _libsdl.SDL_Init(0)
+ _libsdl.SDL_InitSubSystem(0x00000010)# Init audio subsystem
+ _libsdl_mixer.Mix_Init()
+ _libsdl_mixer.Mix_OpenAudio(44100,0x8010,2,512)
+ _sdl_audio_init=True
+ return True
+
def sdl_audio_playmusic(fn,loop=1):
- global _sdl_audio_music
+ global _sdl_audio_music,_libsdl_mixer
sdl_audio_init()
sdl_audio_stopmusic()
- _sdl_audio_music=ctypes.cdll.SDL_mixer.Mix_LoadMUS(os.path.realpath(fn))
- ctypes.cdll.SDL_mixer.Mix_PlayMusic(_sdl_audio_music,loop)
+ _sdl_audio_music=_libsdl_mixer.Mix_LoadMUS(os.path.realpath(fn))
+ _libsdl_mixer.Mix_PlayMusic(_sdl_audio_music,loop)
def sdl_audio_pausemusic():
- global _sdl_audio_music
+ global _sdl_audio_music,_libsdl_mixer
if _sdl_audio_music is not None:
- if ctypes.cdll.SDL_mixer.Mix_PlayingMusic(): ctypes.cdll.SDL_mixer.Mix_PauseMusic()
+ if _libsdl_mixer.Mix_PlayingMusic(): _libsdl_mixer.Mix_PauseMusic()
def sdl_audio_stopmusic():
- global _sdl_audio_music
+ global _sdl_audio_music,_libsdl_mixer
sdl_audio_pausemusic()
- ctypes.cdll.SDL_mixer.Mix_HaltMusic()
- ctypes.cdll.SDL_mixer.Mix_FreeMusic(_sdl_audio_music)
+ _libsdl_mixer.Mix_HaltMusic()
+ _libsdl_mixer.Mix_FreeMusic(_sdl_audio_music)
_sdl_audio_music=None
def sdl_audio_volumemusic(volume=-1):
- return ctypes.cdll.SDL_mixer.Mix_VolumeMusic(volume)
+ global _libsdl_mixer
+ if type(volume) is type(.1): volume=int(volume*128)
+ return _libsdl_mixer.Mix_VolumeMusic(volume)
def sdl_audio_quit():
- global _sdl_audio_init,_sdl_audio_sounds
+ global _sdl_audio_init,_sdl_audio_sounds,_libsdl,_libsdl_mixer
+ if not _sdl_audio_init: return False
sdl_audio_stopmusic()
sdl_audio_stop()
- map(lambda chunk: ctypes.cdll.SDL_mixer.Mix_FreeChunk(chunk),_sdl_audio_sounds.values())
- if _sdl_audio_init:
- ctypes.cdll.SDL_mixer.Mix_CloseAudio()
- ctypes.cdll.SDL_mixer.Mix_Quit()
- ctypes.cdll.SDL.SDL_Quit()
+ map(lambda chunk: _libsdl_mixer.Mix_FreeChunk(chunk),_sdl_audio_sounds.values())
+ _libsdl_mixer.Mix_CloseAudio()
+ _libsdl_mixer.Mix_Quit()
+ _libsdl.SDL_Quit()
+ return True