@Drizzel try this
import ui
import os
import time
import threading
class my_thread(threading.Thread):
def __init__(self,my_view):
threading.Thread.__init__(self)
self.my_view = my_view
def run(self):
while not self.stop:
time.sleep(1)
try:
d = webview.eval_js('document.getElementById("myaudio").duration;')
if d == 'NaN':
continue
c = webview.eval_js('document.getElementById("myaudio").currentTime;')
c = float(c)
d = float(d)
self.my_view['currentTime'].value = c/d
self.my_view['timers'].text = str(int(c)) + '/' + str(int(d)) + ' sec.'
except Exception as e:
pass
paths = os.listdir()
musics = []
for path in paths:
if path[-4:].lower() in ('.mp3','.m4a'):
musics.append(path)
#print(musics)
i_music = 0
TEMPLATE='''
<audio id="myaudio" autoplay preload="auto">
<source src="file://{{FPATH}}" type="audio/mp3">
</audio>
'''
webview = ui.WebView(name='webview')
def set_music():
path = musics[i_music]
absfilepath=os.path.abspath(path)
html = TEMPLATE.replace('{{FPATH}}', absfilepath)
webview.load_html(html)
webview.name = path
bplay = ui.ButtonItem()
bplay.image = ui.Image.named('iob:play_32')
def bplay_action(sender):
webview.eval_js('document.getElementById("myaudio").play();')
bplay.action = bplay_action
bpause = ui.ButtonItem()
bpause.image = ui.Image.named('iob:ios7_pause_32')
def bpause_action(sender):
webview.eval_js('document.getElementById("myaudio").pause();')
bpause.action = bpause_action
bstop = ui.ButtonItem()
bstop.image = ui.Image.named('iob:stop_32')
def bstop_action(sender):
# audio player of html5 does not have a stop function
webview.eval_js('document.getElementById("myaudio").pause();')
webview.eval_js('document.getElementById("myaudio").currentTime = 0;')
bstop.action = bstop_action
bnext = ui.ButtonItem()
bnext.image = ui.Image.named('iob:ios7_skipforward_32')
def bnext_action(sender):
global i_music
bstop_action('simulate')
i_music = i_music + 1
if i_music >= len(musics):
i_music = 0
set_music()
bnext.action = bnext_action
webview.right_button_items = [bplay,bpause,bstop,bnext]
currentTime = ui.Slider(name='currentTime')
currentTime.frame = (10,10,200,32)
def currentTime_action(sender):
d = webview.eval_js('document.getElementById("myaudio").duration;')
c = currentTime.value * float(d)
webview.eval_js('document.getElementById("myaudio").currentTime = ' + str(c) + ';')
currentTime.action = currentTime_action
webview.add_subview(currentTime)
timers = ui.Label(name='timers')
timers.frame = (220,10,370,32)
webview.add_subview(timers)
webview.frame = (0,0,600,100)
set_music()
webview.present('sheet')
#time.sleep(0.5)
t = my_thread(webview)
t.stop = False
t.start()
webview.wait_modal()
# force stop player if not done
webview.eval_js('document.getElementById("myaudio").pause();')
webview.eval_js('document.getElementById("myaudio").currentTime = 0;')
t.stop = True # force end of thread