在寫一個Widget 顯示當前播放音樂的資料 (因為Windows 那個不給我固定!!)
-artist - title -thumbnail 這三個都順利抓到 亦跟Foobar2000成功同步 唯獨是專輯名字無法順利更新 / 抓不到 求高手解救Q_Q 先謝謝
情況1:
Foobar2000 抓不到專輯名字 但同步率(? 基本是一致
情況2:
Windows 11 的播放器:
放進播放清單 竟然直接什麼資料都沒有讀取
但將檔案拖進擋放器又抓到資料 而且經常不能同步更新 (FOOBAR2000卻可以?)(這是要我手動播放嗎!?)
重開Python 程序 10次大概有3/4次抓到完整資料(Windows11那個播放器) 之後沒有了 我完全不知道那裡出錯Q_Q
抓取檔案部份:
def get_current_media_info(self):
try:
paths = [
r"Software\Microsoft\MediaPlayer\Player\CurrentMedia",
r"Software\Microsoft\Windows\CurrentVersion\Media Center\MediaExperience",
r"Software\Microsoft\Windows\CurrentVersion\Media Player"
]
for reg_path in paths:
try:
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, reg_path)
for i in range(0, winreg.QueryInfoKey(key)[1]):
name, value, _ = winreg.EnumValue(key, i)
if isinstance(value, str) and value.lower().endswith('.flac'):
if value.startswith('file:///'):
value = value.replace('file:///', '')
return value
winreg.CloseKey(key)
except:
continue
music_path = os.path.expanduser('~\\Music')
for flac_file in glob.glob(os.path.join(music_path, '**', '*.flac'), recursive=True):
return flac_file
API 部份:
current_file = self.get_current_media_info()
if current_file and os.path.exists(current_file):
from mutagen import File
audio = File(current_file)
if audio:
if hasattr(audio, 'pictures') and audio.pictures:
return audio.pictures[0].data
if audio.tags and 'APIC:' in audio.tags:
return audio.tags['APIC:'].data
except Exception as e:
print(f"本地文件縮略圖獲取失敗: {str(e)}")
return None
except Exception as e:
print(f"縮略圖處理錯誤: {str(e)}")
return None
async def update_media_info(self):
while True:
try:
sessions = await MediaManager.request_async()
current_session = sessions.get_current_session()
if current_session:
info = await current_session.try_get_media_properties_async()
thumbnail_bytes = await self.get_thumbnail_bytes(current_session)
print(f"專輯信息: {info.album_title}")
self.root.after(0, self.update_ui, {
'title': info.title,
'artist': info.artist,
'album': info.album_title, # 這個我是 properties 我想應該沒有錯才對
'thumbnail': thumbnail_bytes,****
```