iT邦幫忙

0

[求解]Python Mutagen 抓取音樂專輯名字問題

  • 分享至 

  • xImage
  •  

在寫一個Widget 顯示當前播放音樂的資料 (因為Windows 那個不給我固定!!)

-artist - title -thumbnail 這三個都順利抓到 亦跟Foobar2000成功同步 唯獨是專輯名字無法順利更新 / 抓不到 求高手解救Q_Q 先謝謝

情況1:
Foobar2000 抓不到專輯名字 但同步率(? 基本是一致
https://ithelp.ithome.com.tw/upload/images/20241217/20171060JhM577SmqE.png

情況2:
Windows 11 的播放器:
放進播放清單 竟然直接什麼資料都沒有讀取

但將檔案拖進擋放器又抓到資料 而且經常不能同步更新 (FOOBAR2000卻可以?)(這是要我手動播放嗎!?)
https://ithelp.ithome.com.tw/upload/images/20241217/20171060Cn9bA7Q0TT.png

重開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,****
                       ```

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言