应用python实现一个音乐的分类器

音乐分类器 :将时域连续转换为频域离散

import numpy as np
from scipy import fft
from scipy.io import wavfile
from tqdm import tqdm

# 准备音乐数据

def create_fit(g ,n):
    # zfill 返回指定长度的字符串,原字符串右对齐,前面填充0
    rad = "./genres/" + g + "/converted/" + g + "." + str(n).zfill(5) + ".au.wav"
    # sample_rate:采样率
    # 模电(连续的信号)变数电(数字的表达)
    # 采样率越高,如果单位时间采样点越多,信息损失的越少
    # X 就是音乐文件
    sample_rate, X = wavfile.read(rad)
    # 用傅立叶变化处理1000以下的赫兹
    fft_features = abs(fft(X)[:1000])
    sad = "./trainset/" + g + "." + str(n).zfill(5) + ".fft"
    # 把特征存到某个具体的路径下面去
    np.save(sad, fft_features)

if __name__ == '__main__':
    # 把wav格式做fft转换
    # genre_list = ["classical", "jazz", "country", "pop", "rock", "metal"]
    # for g in genre_list:
    #     for n in tqdm(range(100)):
    #         create_fit(g, n)

# 加载训练集数据,分割训练集以及测试集,进行分类器的训练
# 构造训练集
genre_list = ["classical", "jazz", "country", "pop", "rock", "metal"]
X = []
Y = []
for g in genre_list:
    for n in range(100):
        rad = "./trainset/" + g + '.' + str(n).zfill(5) + ".fft.npy"
        # 一个声音文件的0-1000的频率
        fft_features = np.load(rad)
        X.append(fft_features)
        Y.append(genre_list.index(g))

X = np.array(X)
Y = np.array(Y)
# print(X.shape)
print(X)
print(Y)

"""
训练模型
"""
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, Y)

"""
预测
"""
print('Starting read wavfile...')
sample_rate, test = wavfile.read("./genres/metal/converted/metal.00080.au.wav")
# sample_rate, test = wavfile.read("./genres/heibao-wudizirong-remix.wav")
testdata_fft_features = abs(fft(test))[:1000]
# print(sample_rate, testdata_fft_features, len(testdata_fft_features))
type_index = model.predict([testdata_fft_features])
print(type_index)
print(genre_list[type_index[0]])
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值