关于python:Python-超简单3行代码提取音乐高潮部分

6次阅读

共计 1859 个字符,预计需要花费 5 分钟才能阅读完成。

有些时候,为了设定手机铃声或者发抖音视频,咱们会消耗大量工夫在剪辑音乐低潮局部上。那么这个音乐低潮的提取能不能自动化呢?当然能够。

先来看看,怎么样来提取打成一片提取低潮后的局部:

怎么样,是不是急不可待想往下读了?不要急,让咱们从原理开始缓缓讲起。

1. 原理简介

不晓得大家有没有这样的领会,大部分时候,歌曲的低潮局部通常是反复次数最多的局部。因而咱们能够依据这一个特色,提出咱们的算法:

 1. 遍历整首歌曲。

 2. 将选定长度的局部与其余局部比拟并计算类似度,以查看是否反复。

 3. 寻找反复次数较大、且距离长的片段。

2. 代码编写

为了防止造轮子,咱们找到了他人曾经做过的相似的我的项目

咱们只须要剖析这个源代码中最外围的局部,即求类似区段的源代码,就能晓得它是不是合乎咱们的我的项目需要了:

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

这次要是因为歌曲由 12 个根本音符的帧的汇合而组成,v1 和 v2 是任意两段音乐的音符矢量,如果说两段音乐十分类似,那么左边的式子将靠近于 0.  如果说 1- 左边的式子 得分十分高,则阐明两段音乐十分类似

上面咱们看看怎么应用这个我的项目求音乐低潮局部,其实非常简单。

2.1 装置所须要的我的项目

你能够通过 pip 装置该我的项目,如果你还没有装置好 Python 相干环境,倡议先装置,PIP 装置指令如下:

pip install pychorus

2.2 编写代码

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

from pychorus import find_and_output_chorus

chorus_start_sec = find_and_output_chorus("你的音乐文件", "提取后果的指标门路", 要多少秒的低潮局部)

没错,两行代码就解决了。如果你想晓得一些具体的细节,比如说输入相似矩阵或者后果可视化,倡议浏览 github 中该项目标操作指令。上面让咱们测验一下成果。

3. 成果测验

以《打成一片》为例,让咱们试试这个提取器的功力。
编写代码:

# 提取音乐低潮局部
from pychorus import find_and_output_chorus
chorus_start_sec = find_and_output_chorus("打成一片.mp3", "打成一片_high.wav", 40)

十分优良!提取了我心目中想要的局部。大家也能够依据咱们明天的教程,试着提取一下本人喜爱的音乐的低潮局部哦!

4. 批量提取

刚刚,只是实现了单首歌曲的低潮提取,如果你想提取整个文件夹下的音乐的低潮局部,能够这样做:

文字版代码:

# Python 实用宝典
# 提取音乐低潮局部
# 2020/06/11
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)
        # output 文件夹是否存在
        targets = f"{modpath}\output\"
        if not os.path.exists(targets):
            os.makedirs(targets)
        # 提取音乐低潮至以后 output 文件夹下
        find_and_output_chorus(datapath, f"{targets}{filepath.split('.')[0]}_high.wav", 40
        )
extract_all_file("F:\push\20200611\music\")

如果你喜爱明天的 Python 教程,请继续关注我,如果对你有帮忙,麻烦在上面点一个赞 / 关注 ,有任何问题都能够在下方留言,咱们会急躁解答的!

正文完
 0