歌曲文件特征处理

将歌曲.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. UCloud全年营收 11.9 亿元,净利润 7715 万元
  2. 450g吐司烘烤温度_教你一手如何判断吐司面包是否烤熟
  3. 学习笔记整理之对象的转型
  4. GODOT 3.0 开发进度汇报 #6
  5. Mac OS X 在Finder新建文本文件
  6. 群晖linux怎么进入u盘,黑群辉直接更改启动u盘的sn、mac等信息
  7. 究竟是什么在影响着我?
  8. encodeURI、encodeURIComponent、btoa及其应用场景
  9. 【MySQL查询】复杂查询:别名、外键join
  10. Windows使用msi安装MySQL安装教程
  11. linux 批量部署 pdf,Linux服务之批量部署篇
  12. Qt工作笔记-QGraphicsProxyWidget放自定义界面实现拖动
  13. 并行计算(一)——初步认识
  14. ruby和python比较_为什么说Ruby比Python容易阅读
  15. Java知识导航总图
  16. python成绩管理系统设计 gui csdn_用golang简单编写学生信息管理系统
  17. Hyperledger Fabric教程(10)-- peer命令-链码chaincode
  18. 实验11——指针的基础应用
  19. 【知识图谱】Louvain、LPA等5类经典社区发现算法 Python 实战
  20. c语言常见头文件大全,C语言头文件大全(free)

热门文章

  1. 计算机考研推荐学校211张雪峰,考研该如何选择学校?张雪峰老师妙语连珠
  2. ECharts 顶部 label 换行
  3. fill函数与memset函数比较
  4. Windows下Qt for Android开发之环境搭建
  5. 【XJC-1/3 DC220V静态冲击继电器】
  6. MySQL 第六章-多表查询+课后练习
  7. SSD-MobileNetv2之Ubuntu18.04训练VOC格式数据集-超详细
  8. 网站设计如何适合用户的操作习惯?
  9. 【运维安全】Linux下rootkit把木马程序的使用
  10. 阿里云服务器使用+OSS的使用