百木园-与人分享,
就是让自己快乐。

Python 用3行代码提取音乐高潮部分

很多时候一首音乐大家都只记得高潮部分,很多人在听歌的时候也只喜欢听高潮部分。但是,我们不可能对每一段音乐都进行高潮部分的剪辑吧,听着 我都累了。所以,教大家怎么怎么提取音乐的高潮部分。

在这里插入图片描述

1.原理

不知道大家有没有这样的体会,大部分时候,歌曲的高潮部分通常是重复次数最多的部分。因此我们可以根据这一个特征,提出我们的算法:

**1.遍历整首歌曲。**

**2.将选定长度的部分与其他部分比较并计算相似度,以查看是否重复。**

**3.寻找重复次数较大、且间隔长的片段。**

在这里插入图片描述

2.代码实现

为了避免造轮子,我找到了别人已经做过的类似的项目:https://github.com/vivjay30/pychorus

我们只需要分析这个源代码中最核心的部分,即求相似区段的源代码,就能知道它是不是符合我们的项目需求了:

在这里插入图片描述

可以看到,这部分代码就是做了我们算法的第二步,进行了片段与片段之间的相似度计算。检测时用到的相似函数是这样的:

在这里插入图片描述

这主要是因为歌曲由12个基本音符的帧的集合而组成,v1和v2是任意两段音乐的音符矢量,如果说两段音乐非常相似,那么右边的式子将接近于0. 如果说 1-右边的式子 得分非常高,则说明两段音乐非常相似。

在这里插入图片描述

下面我们看看怎么使用这个项目求音乐高潮部分,其实非常简单。

2.1 安装所需要的项目

你可以通过pip安装该项目,如果你还没有安装好Python相关环境,建议阅读这篇文章:Python超详细安装指南,PIP安装指令如下:

pip install pychorus

 

在这里插入图片描述

2.2 编写代码

实际上,这个包用起来可是相当简单,如果我们只是想单纯提取歌曲高潮部分:

from pychorus import find_and_output_chorus

chorus_start_sec = find_and_output_chorus(\"你的音乐文件\", \"提取结果的目标路径\", 要多少秒的高潮部分)

 

没错,两行代码就解决了。如果你想知道一些详细的细节,比如说输出相似矩阵或者结果可视化,建议阅读github中该项目的操作指令。

在这里插入图片描述

3.效果展示

以《孤芳自赏》 为例,让我们试试这个提取器的功力。

 

####Python学习交流Q群:906715085
#
提取音乐高潮部分 from pychorus import find_and_output_chorus chorus_start_sec = find_and_output_chorus(\"孤芳自赏.mp3\", \"孤芳自赏_high.wav\", 40)

 

大家也可以根据我今天的教程,试着提取一下自己喜欢的音乐的高潮部分哦!

4.批量提取

刚刚,只是完成了单首歌曲的高潮提取,如果你想提取整个文件夹下的音乐的高潮部分,可以这样做:

在这里插入图片描述

文字版代码:

#提取音乐高潮部分
import os
import sys
from pychorus import find_and_output_chorus
def extract_all_file(files_path):
    \"\"\"

    Args:
        files_path (str): 文件夹路径
    \"\"\"

    modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
    for filepath in os.listdir(files_path):
   
        datapath = os.path.join(modpath, files_path + filepath)
       
        targets = f\"{modpath}\\\\output\\\\\"
        if not os.path.exists(targets):
            os.makedirs(targets)
        
        find_and_output_chorus(
            datapath, f\"{targets}{filepath.split(\'.\')[0]}_high.wav\", 40
        )
extract_all_file(\"F:\\\\push\\\\20200611\\\\music\\\\\")

 

来吧,展示一下你提取的音乐。这个教程还是轻轻松松、有手就行那种,有没有学会呀,没有学会要记得呼唤我。今天的分享到这里就要结束了,下一期再见。

在这里插入图片描述


来源:https://www.cnblogs.com/123456feng/p/16056884.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Python 用3行代码提取音乐高潮部分

相关推荐

  • 暂无文章