ya2 · news · projects · code · about

housekeeping: pmachines.audio.music
[pmachines.git] / pmachines / audio / music.py
CommitLineData
f62d6fc5 1from os.path import basename
54a1397e
FC
2from glob import glob
3from random import choice
4from logging import info
55efcb0a 5from panda3d.core import AudioSound, Filename
f62d6fc5
FC
6from ya2.utils.audio import AudioTools
7from ya2.utils.logics import LogicsTools
54a1397e
FC
8
9
f62d6fc5 10class MusicManager:
54a1397e 11
f62d6fc5
FC
12 def __init__(self, volume, app_name):
13 self.__current_path = LogicsTools.current_path(app_name)
14 musics = self.__current_path + 'assets/audio/music/*.ogg'
15 self.__start_music(glob(musics))
16 AudioTools.set_volume(volume)
17 taskMgr.add(self.__on_frame, 'on frame music')
54a1397e 18
f62d6fc5
FC
19 def __start_music(self, file_names):
20 self.__music = loader.load_music(choice(file_names))
21 info('playing music ' + self.__music.get_name())
22 self.__music.play()
55efcb0a 23
f62d6fc5
FC
24 def __on_frame(self, task):
25 if self.__music.status() == AudioSound.READY: self.__restart_music()
54a1397e 26 return task.cont
f62d6fc5
FC
27
28 def __restart_music(self):
29 ogg_files = Filename(self.__current_path + 'assets/audio/music/*.ogg').to_os_specific()
30 file_names = glob(ogg_files)
31 music_to_remove = Filename(
32 self.__current_path + 'assets/audio/music/' +
33 basename(self.__music.get_name())).to_os_specific()
34 # basename is needed in windows
35 file_names.remove(music_to_remove)
36 self.__start_music(file_names)