I solved your task.
Main problem was not due to MP3 codec problem, but because your music should be loaded/played/paused in order for set_pos() to work, i.e. you need next extra lines before doing fast forward:
mixer.music.load('test.mp3')
mixer.music.play()
mixer.music.pause()
Only then you can use fast forward and it works!
Also you need to do mixer.music.unpause() later in order to start music playing from your fast-forwarded position (set by set_pos()). Also fast forwarding may also work without pause()/unpause(), just music should be playing, so play() should be called if it is not playing now.
Full working code below, it has some other modifications in order to make example fully runnable, but remaining modifications are not necessary to solve your task. One of main modification is that I implemented function get_url_file(...) that I used to load MP3/PNG resources so that example is fully self-contained an runnable without extra files, because StackOverflow doesn't allow attaching file, hence I load them from remote HTTP storage. Use just file path like path/to/test.mp3 in places where I used get_url_file(...).
Also before running next code install python pip modules one time by python -m pip install --upgrade pgzero pygame<2.0 requests.
# Needs: python -m pip install --upgrade pgzero pygame<2.0 requests
import tkinter as tk, datetime, pgzrun
from pygame import mixer
root = tk.Tk()
def fast_forward(event = None):
def func():
global progressbar_music
mixer.music.play()
mixer.music.pause()
current_song_Length = mixer.music.get_pos() // 1000
print(current_song_Length)
# mixer.music.pause()
f = current_song_Length + 10
mixer.music.set_pos(f)
print('{}'.format(str(datetime.timedelta(seconds = f))))
mixer.music.unpause()
#progressbar_music['value'] = f
# mixer.music.progressbar_music(seconds=current_song_Length+10)
#progressbar_music_starttime.configure(text = '{}'.format(str(datetime.timedelta(seconds = f))))
#progressbar_music.after(2, func)
func()
def get_url_file(url, *, fsuf = '', as_ = 'bytes', b64 = False, state = {}):
import requests, io, atexit, base64, tempfile, shutil, secrets, os
res = requests.get(url)
res.raise_for_status()
data = res.content
if b64:
data = base64.b64decode(data)
if as_ == 'bytes':
return data
elif as_ == 'file':
return io.BytesIO(data)
elif as_ == 'path':
if 'td' not in state:
state['td'] = tempfile.TemporaryDirectory()
state['etd'] = state['td'].__enter__()
state['std'] = str(state['etd'])
def cleanup():
state['td'].__exit__(None, None, None)
if os.path.exists(state['std']):
shutil.rmtree(state['std'])
atexit.register(cleanup)
path = state['std'] + '/' + secrets.token_hex(8).upper() + fsuf
with open(path, 'wb') as f:
f.write(data)
return path
else:
assert False, as_
mixer.music.load(get_url_file('https://pastebin.com/raw/8LAeZc1X', as_ = 'file', b64 = True))
fast_forward_icon = tk.PhotoImage(file = get_url_file('https://i.stack.imgur.com/b2wdR.png', as_ = 'path'))
fastForwardBtn = tk.Button(root, bg = '#310A3D', image = fast_forward_icon, command = fast_forward)
fastForwardBtn.place(x = 10, y = 10, relwidth = .7, relheight = .7)
tk.mainloop()
pgzrun.go()
Prints to console:
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
0
0:00:10