lisp 批量文字求差值_Python 超简单 提取音乐高潮(附批量提取)
希望点击上方编程学习者社区,选择创建星标回复关键字资源获取编程资源很多时候我们想提取某首歌的副歌部分(俗称 高潮部分),只能手动直接卡点剪切,但是对于大批量的获取就很头疼,如何解决?怎么样,是不是迫不及待想往下读了?不要急,让我们从原理开始慢慢讲起。一、原理简介不知道大家有没有这样的体会,大部分时候,歌曲的高潮部分通常是重复次数最多的部分。因此我们可以根据这一个特征,提出我们...
·
希望点击上方 编程学习者社区,选择 创建星标
回复关键字 资源 获取编程资源
很多时候我们想提取某首歌的副歌部分(俗称 高潮部分),只能手动直接卡点剪切,但是对于大批量的获取就很头疼,如何解决?
怎么样,是不是迫不及待想往下读了?不要急,让我们从原理开始慢慢讲起。
一、原理简介
不知道大家有没有这样的体会,大部分时候,歌曲的高潮部分通常是重复次数最多的部分。因此我们可以根据这一个特征,提出我们的算法: 1.遍历整首歌曲。 2.将选定长度的部分与其他部分比较并计算相似度,以查看是否重复。 3.寻找重复次数较大、且间隔长的片段。二、代码编写
为了避免造轮子,我们找到了别人已经做过的类似的项目:https://github.com/vivjay30/pychorus 我们只需要分析这个源代码中最核心的部分,即求相似区段的源代码,就能知道它是不是符合我们的项目需求了:可以看到,这部分代码就是做了我们算法的第二步,进行了片段与片段之间的相似度计算。检测时用到的相似函数是这样的: 这主要是因为歌曲由12个基本音符的帧的集合而组成,v1和v2是任意两段音乐的音符矢量,如果说两段音乐非常相似,那么右边的式子将接近于0. 如果说 1-右边的式子 得分非常高,则说明两段音乐非常相似。 下面我们看看怎么使用这个项目求音乐高潮部分,其实非常简单。
2.1 安装所需要的项目
你可以通过pip安装该项目,PIP安装指令如下: pip install pychorus2.2 编写代码
实际上,这个包用起来可是相当简单,如果我们只是想单纯提取歌曲高潮部分:
from pychorus import find_and_output_choruschorus_start_sec = find_and_output_chorus("你的音乐文件", "输出高潮部分文件", 要多少秒的高潮部分)
没错,两行代码就解决了。如果你想知道一些详细的细节,比如说输出相似矩阵或者结果可视化,建议阅读github中该项目的操作指令。下面让我们检验一下效果。
三、效果检验
以《孤芳自赏》 为例,让我们试试这个提取器的功力。 编写代码:
# 提取音乐高潮部分from pychorus import find_and_output_choruschorus_start_sec = find_and_output_chorus("孤芳自赏.mp3", "孤芳自赏_high.wav", 40)
这样操作后就提取了我心目中想要的部分。大家也可以根据我们今天的教程,试着提取一下自己喜欢的音乐的高潮部分哦!
四、批量提取
刚刚,只是完成了单首歌曲的高潮提取,如果你想提取整个文件夹下的音乐的高潮部分,可以这样做: 图片版代码 文字版代码:# 提取音乐高潮部分
# 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的优势就在于有众多的库,所以大家不必担心很难,多看几遍,然后挑自己感兴趣的案例动手实践,相信你会慢慢爱上Python!
作者 | CKend来源 | Python实用宝典
往期精选
在知乎上学Python-入门篇在知乎上学爬虫大家都用什么背英语单词Python库分享
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献5条内容
所有评论(0)