123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #shuvit.org
- #mp3 player
-
- import bge
- import os
- import aud
- import random
- import glob
- from tinytag import TinyTag
-
- # dict
- dict = bge.logic.globalDict
- dict['mu_current_song'] = ''
- dict['mu_stopped'] = 1
- dict['change_track'] = 0
- dict['mu_track_time'] = 0
-
- # create file path
- directory = bge.logic.expandPath("//")
- file_name = directory + "Music\\*.mp3" # Test directory "Test\\Music\\*.mp3"
- file_list = glob.glob(file_name)
- selected = random.choice(file_list)
- full_path = os.path.join(directory, selected)
- dict['mu_playlist'] = file_list
- dict['mu_lib'] = file_list
-
- # inputs
- keyboard = bge.logic.keyboard
- JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED
-
- def initer(cont):
- own = cont.owner
- dict = bge.logic.globalDict
- if 'mplayback' not in dict:
- dict['mplayback'] = True
- if 'mp_inited' not in own:
- own['mp_inited'] = True
- print('Initializing music player')
-
- dict['mu_lib'] = file_list
- dict['mu_playlist'] = file_list
- dict['change_track'] = 0
- selected = random.choice(file_list)
- dict['mu_current_song'] = selected
- print('Current Track: ', dict['mu_current_song'])
- full_path = os.path.join(directory, selected)
-
- try:
- tag = TinyTag.get(full_path)
- print('Artist: %s' % tag.artist, 'Track: %s' % tag.title)
- dict['mu_artist'] = tag.artist
- dict['mu_title'] = tag.title
- except:
- print("Track has no tag.")
-
- def stop_music(sound):
-
- print("Stop music")
- sound.pauseSound()
- dict['mu_stopped'] = 1
- dict['music_player'] = 0
-
- def play_music():
-
- print("Play music")
- full_path = os.path.join(directory, dict['mu_current_song'])
- sound = bge.logic.getCurrentController().actuators['music_player']
- sound.sound = aud.Factory(full_path)
- sound.stopSound()
- sound.startSound()
- dict['mu_stopped'] = 0
- dict['change_track'] = 0
- dict['mu_track_time'] = 0
- dict['music_player'] = 1
- try:
- tag = TinyTag.get(full_path)
- print('Playing: ', 'Artist: %s' % tag.artist, 'Track: %s' % tag.title)
- dict['mu_artist'] = tag.artist
- dict['mu_title'] = tag.title
- info = ('Music > ', 'Artist: %s' % tag.artist, 'Track: %s' % tag.title)
- dict['music_info'] = info
- except:
- print("Track has no tag.")
- print(dict['mu_title'], 'mu_title')
-
- def next_track():
-
- print("next track")
- dict = bge.logic.globalDict
- plist = dict['mu_playlist']
- cur_song = dict['mu_current_song']
- pl_length = len(dict['mu_playlist'])
-
- if pl_length > 1:
- try:
- plist.remove(cur_song)
- except:
- pass
-
- if pl_length == 1:
- print('rebuilding playlist')
- file_list = glob.glob(file_name)
- plist = file_list
-
- selected = random.choice(plist)
- dict['mu_last_track'] = dict['mu_current_song']
- dict['mu_current_song'] = selected
- dict['mu_playlist'] = plist
- dict['change_track'] = 0
- dict['mu_track_time'] = 0
- play_music()
-
- def previous_track():
-
- print("previous track")
- dict['mu_current_song'] = dict['mu_last_track']
- play_music()
-
- def check_status():
-
- sound = bge.logic.getCurrentController().actuators['music_player']
- cur_song = dict['mu_current_song']
- full_path = os.path.join(directory, dict['mu_current_song'])
- sound = bge.logic.getCurrentController().actuators['music_player']
- sound.sound = aud.Factory(full_path)
-
- if sound.time < dict['mu_track_time'] and dict['mu_stopped'] == 0 and dict['change_track'] == 0:
- print('song over, getting new one')
- dict['change_track'] = 1
- dict['mu_track_time'] = 0
- else:
- dict['change_track'] = 0
- dict['mu_track_time'] = sound.time
-
- def main(cont):
-
- dict = bge.logic.globalDict
- cur_song = dict['mu_current_song']
- full_path = os.path.join(directory, dict['mu_current_song'])
- sound = bge.logic.getCurrentController().actuators['music_player']
- sound.sound = aud.Factory(full_path)
- sound.mode = 1
- initer(cont)
- if dict['music_player'] != 0:
- if dict['mu_stopped'] == 1:
- play_music()
- if dict['change_track'] == 1:
- dict['change_track'] = 0
- next_track()
-
- plist = dict['mu_playlist']
- pl_length = len(dict['mu_playlist'])
- if pl_length == 0:
- dict['mu_playlist'] = dict['mu_lib']
-
- #allow controlls while paused or in replay
- if dict['npause'] == 1 or dict['playback'] == True:
- if dict['yBut'] == False and dict['last_yBut'] == True:
- if dict['mu_stopped'] == 1:
- play_music()
- else:
- stop_music(sound)
- if dict['lBump'] == False and dict['last_lBump'] == True:
- previous_track()
- if dict['rBump'] == False and dict['last_rBump'] == True:
- next_track()
|