获取mp3部分信息的python代码
Posted SDY_JS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取mp3部分信息的python代码相关的知识,希望对你有一定的参考价值。
import os,base64,struct
#这是python代码,用于获取mp3部分信息。
#编写者:SDY
#判断IDV2是否存在
def IDV2_exsist(mp3_file):
b_data=mp3_file.read(3)
a_data=b_data.decode('ASCII')
if a_data=='ID3':
return True
else:
return False
#获取IDV2大小
def get_IDV_Size(mp3_file):
mp3_file.seek(6)
data=mp3_file.read(4)
int_data=struct.unpack('>BBBB',data)
all_size=int_data[0]*2*16**5+int_data[1]*4*4*16**2+int_data[2]*8*16+int_data[3]+10
return all_size
#判断信息是否有价值
def judge_value(mp3_file,N):
mp3_file.seek(N)
value=mp3_file.read(4)
if value==b'\\x00\\x00\\x00\\x00':
return True
else:
return False
#获取数据种类
def get_type(mp3_file,N):
mp3_file.seek(N)
b_type=mp3_file.read(4)
a_type=b_type.decode('ASCII')
return a_type
#获取数据帧大小
def get_size(mp3_file,N):
mp3_file.seek(N+4)
b_size=mp3_file.read(4)
number=struct.unpack('>BBBB',b_size)
size=number[0]*16**8+number[1]*16**4+number[2]*16**2+number[3]+10
return size
#获取数据编码方式
def get_code_style(mp3_file,N):
mp3_file.seek(N+10)
temp=mp3_file.read(1)
temp=struct.unpack('>B',temp)
if temp[0]==0:
code_style='ISO-8859-1'
elif temp[0]==1:
code_style='UTF-16'
elif temp[0]==2:
code_style='UTF-16BE'
elif temp[0]==3:
code_style='UTF-8'
return code_style
#获取具体信息
def get_message(mp3_file,code_style,N,size):
mp3_file.seek(N+11)
eb_data=mp3_file.read(size-11)
ea_data=eb_data.decode(code_style)
return ea_data
#获取mp3信息
def IDV2_GET_MESSAGE(mp3_file,file_name):
ms_dic='TIT2':'未知','TPE1':'未知','TALB':'未知','TYER':'未知'
global B
B=0
lis=['TIT2','TPE1','TALB','TYER']
N,size=10,0
if not IDV2_exsist(mp3_file):
print('error')
global A
A=file_name
B=1
else:
all_size=get_IDV_Size(mp3_file)
while True:
N=size+N
if judge_value(mp3_file,N):
break
kind=get_type(mp3_file,N)
size=get_size(mp3_file,N)
if kind in lis:
code_style=get_code_style(mp3_file,N)
message=get_message(mp3_file,code_style,N,size)
ms_dic[kind]=message
return ms_dic
#错误文件处理
def error_delete(error_list1,error_list2,delete_X,path):
if delete_X=='Y':
for file in os.listdir(path):
if file in error_list1:
file_path=path+'\\\\'+file
print(f"delete file succeed.")
os.remove(file_path)
if file in error_list2:
file_path=path+'\\\\'+file
print(f"file delete successfully.")
os.remove(file_path)
#主函数
print('TLT2:标题,TPE1:作者,TALB:专辑,TYER:年代')
n,m,mn=0,0,0
error_list1=[]
error_list2=[]
#文件路径获取
path='F:\\\\Temp'
for file in os.listdir(path):
address=path+'\\\\'+file
mp3_file=open(address,'rb')
try:
dic=IDV2_GET_MESSAGE(mp3_file,file)
except:
error_list2.append(file)
else:
a1=dic['TIT2']
a2=dic['TPE1']
a3=dic['TALB']
a4=dic['TYER']
value=a1+','+a2+','+a3+','+a4+','+address
print(value)
n+=1
m+=1
if B==1:
error_list1.append(A)
B=0
mn+=1
mp3_file.close()
print(f'成功录入 n 首;共 m 首 ')
if error_list1:
print('以下歌曲不存在IDV2标签:')
print(error_list1)
if error_list2:
print('以下歌曲解析失败:')
print(error_list2)
if error_list1 or error_list2:
delete_X=input('如果你想删除有问题的歌曲,请输入 Y :')
error_delete(error_list1,error_list2,delete_X,path)
os.system('pause')
symbian V3 如何从 MP3 文件中获取 id3 信息
【中文标题】symbian V3 如何从 MP3 文件中获取 id3 信息【英文标题】:How symbian V3 get id3 info from a MP3 file 【发布时间】:2011-08-05 07:39:55 【问题描述】:我正在 Symbian v3 上编写音乐播放器。但我找不到如何从 mp3 文件中获取 id3 信息。是否有任何 API 可以做到这一点?我该如何使用它?
【问题讨论】:
【参考方案1】:您可以使用 CMetaDataUtility API 从 MP3 获取 ID3 数据。它不是公共 SDK 的一部分,但您可以通过此 Nokia Developer 页面下载 SDK API 插件,该页面也有示例代码。
这适用于 S60 第 3 版、第 5 版和 Symbian^3。
【讨论】:
以上是关于获取mp3部分信息的python代码的主要内容,如果未能解决你的问题,请参考以下文章