歌曲文件特征处理

将歌曲.MP3格式文件转化成.wav格式文件,然后做傅里叶变换

  1. 安装pydub包,在anaconda3环境中:pip install pydub
  2. 安装ffmpeg包,在anaconda3环境中:pip install ffmpeg ,也可以在官网下载后配置环境变量http://ffmpeg.org/
    安装后运行demo发现一直报这样错误:

    然后根据错误描述去相应文件夹下找到utils.py文件,加入下面图片中的一行代码:

    但是Jupyter还是提示找不到系统文件,遂放弃,用Pycharm运行几个demo都成功(真是醉了)。


    (多说一句,歌曲文件在网易云音乐等音乐类软件按分类下载就行)

3、将每种类别的歌曲都转成.wav模式

from pydub import AudioSegment
import wave#将每种类别的歌曲.mp3格式转化为.wav格式
def trans_awv(class_name,n):path = "E:/CloudMusic/" + class_name + "/" + str(n).zfill(2) + ".mp3"song = AudioSegment.from_file(path, format='mp3')ex_path = "E:/CloudMusic/" + class_name + "/" + str(n).zfill(2) + ".wav"song.export(ex_path, format='wav')class_namelist = ["ballad", "classical", "metal", "pop", "rock"]
for list in class_namelist:for n in range(10):trans_awv(list, n)

4、 将歌曲.wav格式文件做fft转换(傅里叶变换)

def trans_fft(class_name ,n):path = "E:/CloudMusic/" + class_name + "/" + str(n).zfill(2) + ".wav"# sample_rate:采样率(采样率越高,如果单位时间采样点越多,信息损失的越少)# X 就是音乐文件sample_rate, X = wavfile.read(path)# 用傅立叶变化处理头1000的赫兹fft_data = abs(fft.fft(X)[:1000])ex_path = "E:/CloudMusic/" + class_name + "/" + str(n).zfill(2) + ".fft"# 把特征存到某个具体的路径下面去np.save(ex_path, fft_data)class_namelist = ["ballad", "classical", "metal", "pop", "rock"]
for list in class_namelist:for n in range(10):trans_fft(list, n)

构造训练集

"""
构造训练集
"""
X = []
Y = []
for list in class_namelist:for n in range(10):#转换后会有后缀.npypath = "E:/CloudMusic/" + list + "/" + str(n).zfill(2) + ".fft.npy"# 加载声音文件的前1000频率fft_data = np.load(path)X.append(fft_data[:,0])#取每种类别歌曲的索引号作为标签Y.append(class_namelist.index(list))#sklearn处理数组,所以将list转为数组
X = np.array(X)
Y = np.array(Y)

模型训练

"""
用逻辑回归训练模型
"""
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(multi_class="ovr",solver="liblinear",max_iter=10000)
model.fit(X, Y)

构建测试集并做预测

"""
构建测试集(这里只取一个歌曲作为测试集)
"""
#同样的先做mp3转wav处理,再进行傅里叶变换处理
song = AudioSegment.from_file("E:/CloudMusic/test/test.mp3", format='mp3')
song.export("E:/CloudMusic/test/test.wav", format='wav')
sample_rate, test = wavfile.read("E:/CloudMusic/test/test.wav")
test_data = abs(fft.fft(test)[:1000])
np.save("E:/CloudMusic/test/test.fft", test_data)
t = np.load("E:/CloudMusic/test/test.fft.npy")
new_testdata = []
new_testdata.append(t[:,0])
new_testdata = np.array(new_testdata)
#print(new_testdata)
#print(new_testdata.shape)
type_index = model.predict(new_testdata)
print(type_index)
print(class_namelist[type_index[0]])
E:\Users\Byan\anaconda3\python.exe E:/pycharm/test.py
[3]
popProcess finished with exit code 0

训练集测试集都很小很小 (小到都不能称为训练测试集),但分类结果竟然是对的 (只是运气比较好),所以只是学习过程中小小的实验一下,准确率的什么的就不测了哈哈哈。

补个所有导入的包,pycharm直接导入anaconda3的环境即可。可参考我另一篇博文:pycharm导入Anaconda3环境

from pydub import AudioSegment
import wave
import numpy as np
from scipy import fft
from scipy.io import wavfile

机器学习——简单歌曲分类相关推荐

  1. 基于统计概率和机器学习的文本分类技术

    基于统计概率和机器学习的文本分类技术 -- 社区产品机器审核机制 一.现状 目前,所在公司社区类产品(论坛.博客.百科)每天都会接收到大量的垃圾.灌水信息,高峰期16小时内(晚6点以后到第二天9点前) ...

  2. Paper:《Multimodal Machine Learning: A Survey and Taxonomy,多模态机器学习:综述与分类》翻译与解读

    Paper:<Multimodal Machine Learning: A Survey and Taxonomy,多模态机器学习:综述与分类>翻译与解读 目录 <Multimoda ...

  3. 基于scikit-learn机器学习库的分类预测

    一旦你在scikit-learn中选择好机器学习模型,就可以用它来预测新的数据实例.初学者经常会有这样的疑问: 如何在scikit-learn中用我自己的模型进行预测? 在本教程中,你将会发现如何在P ...

  4. NLP(新闻文本分类)——基于机器学习的文本分类

    文本表示方法 在机器学习算法的训练过程中,假设给定NNN个样本,每个样本有MMM个特征,这样组成了N×MN×MN×M的样本矩阵,然后完成算法的训练和预测.同样的在计算机视觉中可以将图片的像素看作特征, ...

  5. 基于Keras机器学习库的分类预测

    在前面的博文中,我们分享了<基于scikit-learn机器学习库的分类预测>,本文将分享Keras机器学习库的分类预测. 一旦你在Keras中选择好机器学习模型,就可以用它来预测新的数据 ...

  6. 【机器学习】多分类学习的拆分策略

    [机器学习]多分类学习 现实中常遇到多分类学习任务.有些二分类学习方法可直接推广到多分类,但在更多情形下,我们是基于一些基本策略,利用二分类学习器来解决多分类问题.所以多分类问题的根本方法依然是二分类 ...

  7. 机器学习的五大分类,监督学习 无监督学习 半监督学习 迁移学习 增强学习

    机器学习的五大分类,监督学习 无监督学习 半监督学习 迁移学习 增强学习@监督学习 无监督学习 半监督学习 监督学习 在监督学习中,给定一组数据,我们知道正确的输出结果应该是什么样子,并且知道在输入和 ...

  8. 机器学习中的分类算法

    机器学习中的分类算法 机器学习,模式识别中很重要的一环,就是分类,因为计算机其实无法深层次地理解文字图片目标的意思,只能回答是或者不是.当然现在卷积神经网络正在希望计算机能够看懂东西,这次我们先来看一 ...

  9. 在托马斯·哈代的五月中学习机器学习之新闻分类

    先送上一首托马斯·哈代的诗 Growth in May I enter a daisy-and-buttercup land, And thence thread a jungle of grass: ...

最新文章

  1. 最新消息!阿里四舍五入无限期延迟复工,字节跳动、腾讯......等企业也再次延迟!...
  2. tuple 方法总结整理
  3. Daily Scrum02 12.04
  4. 解决: Intellij IDEA 运行报错 Command line is too long
  5. Numpy数据分析数值范围调整、计算
  6. CentOS7救援模式以及救援模式的网络配置
  7. 完美C语言通讯录(含代码)
  8. JZ2440.jflash配置
  9. 哈工大计算机系统大作业:程序人生-Hello’s P2P
  10. matlab提取电压基波分量,有源电力滤波器三种基波提取方法的对比分析
  11. jsp实现简单用户登录(用户7天内免登录)
  12. web前端基础——实现动画效果
  13. 红米手机5获取Root超级权限的步骤
  14. 三针重叠问题算法整理
  15. 【Android】Activity详解
  16. 生成酷炫代码注释(根据图片生成)
  17. python 自动生成word文档,用 Python 自动生成 Word 文档
  18. 网站会员与动网论坛会员同步整合非官方方法
  19. UCML.NET开发平台 - 产品简介
  20. 全新的松松软文平台上线公告

热门文章

  1. 阿里钉钉免费电话电脑版 v0.3.3 官方版​
  2. 服务器显示发送时间为送达,拉黑还会显示已送达吗
  3. 64位主机编译32位交叉编译器
  4. openstack是什么?openstack的主要功能组件有哪些
  5. 软件公司及开发流程图
  6. JDK自带JVM分析工具详解
  7. 软件测试笔记2——什么是软件测试及软件测试分类
  8. 预测分析:R语言实现2.3 多元线性回归
  9. 基于模板匹配的车牌识别系统实例
  10. 2017.7.5训练赛 反思加总结