問題
在做音樂播放器的時候,我采用 pygame.mixer.music 來播放音樂,但是,我做播放進度條時,出現了問題,

| 代碼 | 描述 |
|---|---|
| ischanging | 是否正在拖動進度條(bool) |
| var.get() | 獲取進度條當前值 |
| var.set(value) | 設定進度條當前值 |
| pygame.mixer.music.get_pos() | 設定播放進度(單位:毫秒) |
| pygame.mixer.music.set_pos(sec) | 獲取播放時長(mp3的單位:秒) |
但是問題來了:.get_pos() 只能獲取已播放的時長,而不是當前播放進度,
舉個例子,你聽歌聽了兩分鐘后,切換到三分鐘的位置,.get_pos() 獲取到的還是兩分鐘,為什么?因為它獲取的是播放音樂的總時長,而總共只播放了兩分鐘音樂,
def timer():
# 如果正在拖動進度條則更改進度,否則使進度條同步播放進度
if ischanging:
pygame.mixer.music.set_pos(var.get())
else:
var.set(pygame.mixer.music.get_pos() / 1000) # 單位為毫秒
解決辦法
定義一個 flag 變數,
當拖動進度條后,則 .get_pos() 獲取到的就不是當前進度了,但是,當前的時長減去更改后的時長便是更改后增長的時長 flag,再用 flag 加上更改后的進度便是當前的播放進度了,

def timer():
global flag
if ischanging:
flag = var.get() - player.get_pos() / 1000 # 毫秒轉秒
pygame.mixer.music.set_pos(var.get())
else:
var.set(pygame.mixer.music.get_pos() / 1000 + flag) # 毫秒轉秒后加上 flag
音樂播放器
順便說一下,我的 tkinter 做的音樂播放器 完成了,它支持:
- 酷我音樂搜索、下載
- 進度條查看、控制(本文)
- 滾動歌詞
問題解決:
- pygame 播放網路音樂
點擊上面超鏈接可以查看對應講解和代碼,
這是一些解決播放器問題的,用于播放器中一些復雜部分的講解,
作者博客:https://blog.csdn.net/weixin_48448842
點個贊支持一下作者謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293261.html
標籤:其他
上一篇:C++迷宮小游戲
