请先安装 pip install flet, tinytag 组件
tinytag 是用来读取音频文件的信息的
测试用最好找一个有封面的音频的文件, 我是windows电脑,打开预览模式,选中文件时候能够右边显示图片, 如下,我电脑上某个音频文件的封面
import flet as ft
from tinytag import TinyTag
import base64
def main(page: ft.Page):
page.window_width = 600
page.window_height = 600
# bytes 转 base64
def byte_to_base64(data):
encoded_data = base64.b64encode(data)
return encoded_data.decode("utf-8")
def ms_to_time(ms):
# 毫秒转换为时间格式
ms = int(ms)
minute, second = divmod(ms / 1000, 60)
minute = min(99, minute)
return "%02d:%02d" % (minute, second)
# 音频文件路径
# 这是我本地的歌曲,请确认自己的文件路径
song_url = "E:/music/从不后悔爱上你-姜育恒.mp3"
# 首先我们给这个图片载入一个没有图片的默认图片,我这里是设置了默认图片
# 我这是放在 项目目录 assets/album.png的 一张图片
song_cover = ft.Image(width=200, height=200, src="album.png")
# 读取音频文件
song_info = TinyTag.get(song_url, image=True)
# 获取文件内图片(一般为专辑封面)
img = song_info.get_image()
# 这里注意, img 是一个bytes格式的,所以要把他转成base64位
# flet Image控件,有两个属性src和src_base64, 第一个是接收一个图片的路径(本地文件或者网络文件的url)
# 这样我们需要把img的格式转换成src_base64用来显示图片 byte_to_base64函数就是这个作用
# 这里测试的结果 Image 会优先显示 src_base64的内容
if img:
song_cover.src_base64 = byte_to_base64(img)
print(song_info)
song_name = ft.Text(value=f"歌名:{song_info.title}")
song_artist = ft.Text(value=f"歌手:{song_info.artist}")
song_duration = ft.Text(value=f"歌曲长度:{ms_to_time(song_info.duration*1000)}")
cont = ft.Row(
[
song_name,
song_artist,
song_duration,
song_cover,
]
)
page.add(cont)
ft.app(target=main, assets_dir="assets")
下面是运行界面,我这里只是演示,没有进行美化