基于 Python 的音乐流派分类

这篇具有很好参考价值的文章主要介绍了基于 Python 的音乐流派分类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

音乐就像一面镜子,它可以告诉人们很多关于你是谁,你关心什么,不管你喜欢与否。我们喜欢说“you are what you stream” - Spotify

Spotify 拥有 260 亿美元的净资产,是如今很受欢迎的音乐流媒体平台。它目前在其数据库中拥有数百万首歌曲,并声称拥有适合所有人的乐谱。Spotify 的 Discover Weekly 服务已成为千禧一代的热门话题。毋庸置疑,Spotify 已投入大量研究来改进用户查找和收听音乐的方式。机器学习是他们研究的核心,从 NLP 到协同过滤再到深度学习。根据歌曲的数字签名对一些因素进行分析,包括节奏、曲调、力度、可跳舞性等,以回答那个不可能的古老的第一次约会问题:你喜欢什么样的音乐?

公司现在使用音乐分类,要么能够向他们的客户推荐(例如 Spotify、Soundcloud),要么只是作为一种产品(例如 Shazam)。确定音乐流派是朝着这个方向迈出的第一步。机器学习技术已被证明在从大型数据池中提取趋势和模式方面非常成功。同样的原则也适用于音乐分析。

在本文中,我们将研究如何使用 Python 分析音频/音乐信号。然后,我们将利用学到的技能将音乐片段分类为不同的流派。

使用 Python 进行音频处理

声音以具有频率、频宽、分贝等参数的音频信号形式表示。典型的音频信号可以表示为振幅和时间的函数。

基于 Python 的音乐流派分类,python,分类,开发语言

这些声音有多种格式,使计算机可以读取和分析它们。比如:

  • mp3格式

  • WMA(Windows 媒体音频)格式

  • wav(波形音频文件)格式

音频库

Python 有一些很棒的音频处理库,例如 Librosa 和 PyAudio。还有用于一些基本音频功能的内置模块。

我们将主要使用两个库进行音频采集和播放:

1. Librosa

它是一个 Python 第三方库,用于分析一般的音频信号,但更适合音乐。它包括构建 MIR(音乐信息检索)系统的具体细节。它有很好的文档记录,还有很多示例和教程。

安装

pip install librosa``or``conda install -c conda-forge librosa

如果想要更多音频解码能力,您可以安装 FFmpeg,它附带许多音频解码器。

2.IPython.display.Audio

IPython.display.Audio 可让您直接在 jupyter notebook 中播放音频。

加载音频文件

import librosa``audio_path = '../``   ``T08-violin.wav'``x , sr = librosa.load(audio_path)print(type(x), type(sr))``<class 'numpy.ndarray'> <class 'int'>print(x.shape, sr)``(396688,) 22050


  

这将返回一个音频时间序列作为一个 numpy 数组,默认采样率为 22KHZ 单声道。我们可以通过以下语句进行修改:  





librosa.load(audio_path, sr=44100)


将采样率设置为 44.1KHz   

  





librosa.load(audio_path, sr=None)


禁用重采样功能  


采样率是每秒传输的音频样本数,以 Hz 或 kHz 为单位。

播放音频

使用 IPython.display.Audio 播放音频

import IPython.display as ipd``ipd.Audio(audio_path)

这会在 jupyter notebook 中返回一个音频小部件,如下所示:

基于 Python 的音乐流派分类,python,分类,开发语言

音频小部件的屏幕截图

这个小部件在这里不起作用,但它会在你的笔记本上起作用。有兴趣的话,可以通过下述链接查看:https://soundcloud.com/parul-pandey-323138580/t08-violin?utm_source=cdn.embedly.com&utm_campaign=wtshare&utm_medium=widget&utm_content=https%253A%252F%252Fsoundcloud.com%252Fparul-pandey-323138580%252Ft08-violin

您甚至可以为音频示例使用 mp3 或 WMA 格式。

可视化音频

波形

我们可以使用 librosa.display.waveplot 绘制音频:



%matplotlib inlineimport matplotlib.pyplot as pltimport librosa.displayplt.figure(figsize=(14, 5))librosa.display.waveplot(x, sr=sr)



基于 Python 的音乐流派分类,python,分类,开发语言

Spectrogram

Spectrogram是声音或其他信号随时间变化的频率频谱的直观表示。频谱图有时称为声谱图、声纹或语音图。当数据以 3D 图表表示时,它们可能被称为瀑布图。在二维数组中,第一个轴是频率,第二个轴是时间。

我们可以使用 librosa.display.specshow 显示频谱图。



X = librosa.stft(x)Xdb = librosa.amplitude_to_db(abs(X))plt.figure(figsize=(14, 5))librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')plt.colorbar()


  



基于 Python 的音乐流派分类,python,分类,开发语言

垂直轴显示频率(从 0 到 10kHz),水平轴显示剪辑的时间。由于所有动作都发生在频谱底部,我们可以将频率轴转换为对数轴。



librosa.display.specshow(Xdb, sr=sr, x_axis=‘time’, y_axis=‘log’)``plt.colorbar()


![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKwovykARab9tojVQXNccCrPGn4pNI9CMPXNflyxUib2eSheaibqHVxXBA/640?wx_fmt=png)

  

**写入音频文件**  


librosa.output.write_wav 可以将 NumPy 数组保存到 WAV 文件。



librosa.output.write_wav(‘example.wav’, x, sr)


  



创建音频信号

现在让我们创建一个 220Hz 的音频信号。音频信号可以是一个 numpy 数组,因此我们将创建一个数组并将其传递给音频函数。



import numpy as npsr = 22050 # sample rateT = 5.0 # secondst = np.linspace(0, T, int(T*sr), endpoint=False) # time variablex = 0.5np.sin(2np.pi220t)# pure sine wave at 220 HzPlaying the audioipd.Audio(x, rate=sr) # load a NumPy arraySaving the audio``librosa.output.write_wav(‘tone_220.wav’, x, sr)


所以,此处我们便创建好了第一个声音信号。  



特征提取

每个音频信号都包含许多特征。但是,我们必须提取与我们要解决的问题相关的特征。提取特征以将其用于分析的过程称为特征提取。让我们详细研究一些功能。

Zero-Crossing Rate

Zero-Crossing Rate 是符号随信号变化的速率,即信号从正变为负或反向的速率。此功能已大量用于语音识别和音乐信息检索。对于金属和摇滚中的高打击乐声音,它通常具有更高的值。

基于 Python 的音乐流派分类,python,分类,开发语言



Load the signalx, sr = librosa.load('../T08-violin.wav')#Plot the signal:plt.figure(figsize=(14, 5))librosa.display.waveplot(x, sr=sr)


![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKYbQMwqdcr4N3pZibShn8rna9RCZPzXk7xM7FRwWGKHHQ6ia0oWwXjurA/640?wx_fmt=png)




Zooming inn0 = 9000n1 = 9100plt.figure(figsize=(14, 5))plt.plot(x[n0:n1])``plt.grid()


上述显示有 6 个零交叉点。让我们用 librosa 验证一下。  





zero_crossings = librosa.zero_crossings(x[n0:n1], pad=False)print(sum(zero_crossings))6


  



Spectral Centroid

它代表了声音的“质心”所在位置,并计算声音中存在的频率的加权平均值。考虑两首歌曲,一首来自蓝调类型,另一首属于金属。现在,与整个长度相同的布鲁斯风格歌曲相比,金属歌曲在结尾处有更高的频率。因此,布鲁斯歌曲的频谱质心将位于其频谱中间附近的某个位置,而金属歌曲的频谱质心将接近其末端。

librosa.feature.spectral_centroid 函数可以计算每个帧的Spectral Centroid:



spectral_centroids = librosa.feature.spectral_centroid(x, sr=sr)[0]spectral_centroids.shape(775,)# Computing the time variable for visualizationframes = range(len(spectral_centroids))t = librosa.frames_to_time(frames)# Normalising the spectral centroid for visualisationdef normalize(x, axis=0): return sklearn.preprocessing.minmax_scale(x, axis=axis)#Plotting the Spectral Centroid along the waveformlibrosa.display.waveplot(x, sr=sr, alpha=0.4)plt.plot(t, normalize(spectral_centroids), color=‘r’)


![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKzvIDvgLlhYQsic0bdxfia5GQTB8d49KY8nLT1sUWvanPJu0VV74AogJg/640?wx_fmt=png)

  

**Spectral Rolloff**  



它是信号形状的度量。它表示总频谱能量的百分比(例如 85%)低于该频率。

librosa.feature.spectral_rolloff 可以计算每一帧的Spectral Rolloff:



spectral_rolloff = librosa.feature.spectral_rolloff(x+0.01, sr=sr)[0]librosa.display.waveplot(x, sr=sr, alpha=0.4)plt.plot(t, normalize(spectral_rolloff), color=‘r’)


![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKUnNVribibltNic6giamSVL0SC3tnwqYtcNIp4Dakml6BqibuqjVkDxrRiaFA/640?wx_fmt=png)

  



Mel-Frequency Cepstral Coefficients

MFCC 是一小组特征(通常约为 10-20),简明地描述了频谱包络的整体形状。它可以模拟人声的特征。

基于 Python 的音乐流派分类,python,分类,开发语言



x, fs = librosa.load(‘…/simple_loop.wav’)``librosa.display.waveplot(x, sr=sr)


  

librosa.feature.mfcc 可以计算音频信号的 MFCC:  





mfccs = librosa.feature.mfcc(x, sr=fs)print mfccs.shape(20, 97)#Displaying the MFCCs:librosa.display.specshow(mfccs, sr=sr, x_axis=‘time’)


  

![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKspxKnqM2rOzMR2ViaLGtYR6o5gWOBvkuiav5aEW7Bso2VBicDcejMXUTg/640?wx_fmt=png)

这里 mfcc 在 97 帧上计算了 20 个 MFCC 。  



我们还可以执行特征缩放,使得每个系数维度具有零均值和单位方差:



import sklearnmfccs = sklearn.preprocessing.scale(mfccs, axis=1)print(mfccs.mean(axis=1))print(mfccs.var(axis=1))librosa.display.specshow(mfccs, sr=sr, x_axis=‘time’)


  

![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKCZyRN2Z59icIqONicUpqLbQic7Ec1fvRmtwhfLQACLibxDITgMvsnZribMA/640?wx_fmt=png)

  

**Chroma features**  



Chroma features 是音乐音频的一种有趣而强大的表示,其中整个频谱被投射到 12 个 bins 上,代表音乐八度音阶的 12 个不同的半音(或色度)。

librosa.feature.chroma_stft 可以帮我们计算:



Loadign the filex, sr = librosa.load('../simple_piano.wav')hop_length = 512chromagram = librosa.feature.chroma_stft(x, sr=sr, hop_length=hop_length)plt.figure(figsize=(15, 5))``librosa.display.specshow(chromagram, x_axis=‘time’, y_axis=‘chroma’, hop_length=hop_length, cmap=‘coolwarm’)


![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKAdicl0pW0tEVQ3wBvLHMZibR2A4ZBIhQJibd8VS8hEY4pG05GkubwibXvA/640?wx_fmt=png)

  

**案例研究:将歌曲分为不同的流派。**  



在对声学信号、其特征及其特征提取过程进行了概述之后,是时候利用我们新开发的技能来处理机器学习问题了。

我们将尝试建立一个分类器模型来将歌曲分类为不同的流派。让我们假设一个场景,由于某种原因,我们在硬盘上发现了一堆随机命名的 MP3 文件,这些文件被认为包含音乐。我们的任务是根据音乐流派将它们分类到不同的文件夹中,例如爵士、古典、乡村、流行、摇滚和金属类。

数据集

我们将使用著名的 GITZAN 数据集进行案例研究。该数据集被 G. Tzanetakis 和 P. Cook 在 IEEE Transactions on Audio and Speech Processing 2002 中发表的著名流派分类论文“音频信号的音乐流派分类”中使用。

该数据集包含 1000 个音轨,每个音轨长 30 秒。它包含十种流派:蓝调、古典、乡村、迪斯科、嘻哈、爵士、雷鬼、摇滚、金属和流行。每个流派包含 100 个声音片段。

数据预处理

在训练分类模型之前,我们必须将原始数据从音频样本转换为更有意义的表示形式。音频片段需要从 .au 格式转换为 .wav 格式,使其兼容 python 的 wave 模块读取音频文件。我使用开源 SoX 库进行转换。



sox input.au output.wav


  



分类

特征提取

然后我们需要从音频文件中提取有意义的特征。我们将选择五个特征来对我们的音频剪辑进行分类,即Mel-Frequency Cepstral Coefficients, Spectral Centroid, Zero Crossing Rate, Chroma Frequencies, Spectral Roll-off.。然后将所有特征附加到 .csv 文件中,以便可以使用分类算法。

分类

一旦提取了特征,我们就可以使用现有的分类算法将歌曲分类为不同的流派。您可以直接使用频谱图图像进行分类,也可以提取特征并在其上使用分类模型。

尾记

音乐流派分类是音乐信息检索的众多分支之一。从这里,您可以对音乐数据执行其他任务,例如节拍跟踪、音乐生成、推荐系统、音轨分离和乐器识别等。音乐分析是一个多元化的领域,也是一个有趣的领域。音乐会话以某种方式代表用户的时刻。找到这些时刻并描述它们是数据科学领域的一项有趣挑战。

---------------------------END---------------------------

题外话

基于 Python 的音乐流派分类,python,分类,开发语言

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

基于 Python 的音乐流派分类,python,分类,开发语言
基于 Python 的音乐流派分类,python,分类,开发语言

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!基于 Python 的音乐流派分类,python,分类,开发语言

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

基于 Python 的音乐流派分类,python,分类,开发语言

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

基于 Python 的音乐流派分类,python,分类,开发语言

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

基于 Python 的音乐流派分类,python,分类,开发语言

六、面试宝典

基于 Python 的音乐流派分类,python,分类,开发语言

基于 Python 的音乐流派分类,python,分类,开发语言

简历模板基于 Python 的音乐流派分类,python,分类,开发语言

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除文章来源地址https://www.toymoban.com/news/detail-707795.html

到了这里,关于基于 Python 的音乐流派分类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Python语言Django+Layui实现的低代码开发平台

    一款 Python 语言基于Django、Layui、MySQL等框架精心打造的一款模块化、高性能、企业级的敏捷开发框架,本着简化开发、提升开发效率的初衷触发,框架自研了一套个性化的组件,实现了可插拔的组件式开发方式:单图上传、多图上传、下拉选择、开关按钮、单选按钮、多选按

    2024年02月11日
    浏览(90)
  • 基于python的在线音乐系统设计与实现【附源码】

    完整的看企鹅:2-3-8-6-7-0-4-0-3-0 Django音乐系统 本音乐系统借助了当前互联网的发展趋势,近几年,随着网络的快速发展,网络已经融入人们的生活中。互联网给人们的生活带来了许多便利,基本上可以达到足不出户就能完成许多事情。互联网的使用基本实现全覆盖,上至老人

    2024年02月03日
    浏览(37)
  • 基于python+Django深度学习的音乐推荐方法研究系统设计与实现

    摘 要 数字化时代带动着整个社会的信息化发展,随着数字媒体的不断发展,现在通多媒体数字产品的内容越来越丰富,传播影响力越来越强,以音乐为例,现在的音乐文化多样、音乐资源也异常的丰富,在这种大数据的环境下,人们要想找到想要的音乐类型、找到心里所想

    2024年02月09日
    浏览(52)
  • Python 自然语言处理 文本分类 地铁方面留言文本

    将关于地铁的留言文本进行自动分类。 不要着急,一步步来。 导入需要的库。 定义函数,加载用来分词的自定义词典。 定义函数,生成自己的停用词词典,得到一个文件。 我找的4个停用词词典下载地址:https://gitcode.net/mirrors/goto456/stopwords/-/tree/master 后面我会把自己整合好

    2024年02月09日
    浏览(65)
  • 【附源码】基于flask框架的音乐专辑微信小程序 (python+mysql+论文)

    本系统(程序+源码)带文档lw万字以上   文末可获取本课题的源码和程序 选题背景: 在当今数字化时代,音乐作为一种重要的文化娱乐形式,已经深入人们的日常生活。随着互联网技术的快速发展,人们获取和分享音乐的方式也发生了巨大的变化。从传统的实体唱片到在线

    2024年04月25日
    浏览(46)
  • python-大数据分析-基于大数据的QQ音乐数据分析系统设计与实现

    DESIGN DESCRIPTION After hundreds of years of development of digital music market at home and abroad, the total number of music works collected has reached a considerable degree. Faced with such a large number of music works, how to let users hear their favorite music works more conveniently and efficiently is a matter that music platforms must consider, and

    2024年02月03日
    浏览(46)
  • 手把手QQ机器人制作教程,根据官方接口进行开发,基于Python语言制作的详细教程(更新中)

    QQ开放平台官方地址:https://q.qq.com/#/app/bot QQ开放平台包含:QQ机器人、QQ小程序、QQ小游戏,我们这边选择QQ机器人。 机器人类型:设置私域机器人或者公域机器人,当然公域机器人对于服务器的要求过高,我们这边选择 私域机器人 进行开发。 特别注意在选择沙箱频道的时候

    2023年04月08日
    浏览(61)
  • 基于决策树的企鹅分类(python)

    采用决策树算法对企鹅进行分类 你可以在这里找到源代码和数据集。Github地址 样本总数:344 7个特征变量(所在岛屿,嘴巴长度,嘴巴深度,脚蹼长度,身体体积,性别以及年龄) 一个目标分类变量(三种企鹅类别:Adélie, Chinstrap, Gentoo) 部分样本含有缺失值 NA 导入包 有时

    2024年02月09日
    浏览(41)
  • 5.Python数据分析项目之文本分类-自然语言处理

    预测类数据分析项目 流程 具体操作 基本查看 查看缺失值(可以用直接查看方式isnull、图像查看方式查看缺失值missingno)、查看数值类型特征与非数值类型特征、一次性绘制所有特征的分布图像 预处理 缺失值处理(填充)拆分数据(获取有需要的值) 、统一数据格式、特征

    2024年02月03日
    浏览(68)
  • 自然语言处理3——玩转文本分类 - Python NLP高级应用

    随着信息时代的不断发展,海量的文本数据成为我们获取知识和信息的重要来源。如何高效地从这些文本中提取有用的信息,成为数据分析和数据挖掘领域的热门问题之一。本文将介绍文本分类在自然语言处理(NLP)中的高级应用,通过Python实现,让你轻松玩转文本分类。

    2024年02月03日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包