有时候,为了设置手机铃声或者发送抖音视频,我们会花很多时间来编辑音乐高潮。那么这个音乐高潮的提取能不能自动化呢?当然。先来看看,自我欣赏高潮过后的部分如何摘录:怎么样,是不是迫不及待想看完了?别着急,我们从原理上慢慢说起。一、原理介绍不知道大家有没有这样的经历。大多数时候,歌曲的高潮部分通常是重复次数最多的部分。因此,我们可以根据这个特点提出我们的算法:1.遍历整首歌曲。2.将所选长度的部分与其他部分进行比较,计算相似度,看是否重复。3.寻找重复次数多、间隔长的片段。2.代码编写为了避免造轮子,我们找了别人做过类似的项目。我们只需要分析这段源码的核心部分,也就是找到类似章节的源码,就可以知道是否符合我们的要求。项目需求:可以看到,这部分代码是我们算法的第二步,计算片段之间的相似度。检测中使用的相似度函数如下:这主要是因为歌曲是由一组12个基本音符的帧组成的。v1和v2是任意两首音乐的音符向量。如果两首乐曲非常相似,那么右边的公式就会接近于0。如果1-score右边的公式非常高,说明两首乐曲非常相似。下面我们就来看看如何利用这个项目来寻找音乐的高潮,其实很简单。2.1可以通过pip安装项目。如果没有安装Python相关环境,建议先安装。pip安装说明如下:pipinstallpychorus2.2编写代码其实这个包使用起来还是挺简单的,如果我们只是想简单的提取歌曲的高潮部分:frompychorusimportfind_and_output_choruschorus_start_sec=find_and_output_chorus("yourmusicfile","提取结果的目标路径",高潮部分多少秒)对,两行代码就解决了。如果想了解一些详细的细节,比如输出相似度矩阵或者结果可视化,建议阅读github中本项目的操作说明。下面我们来看看效果。3.效果测试以《孤芳自赏》为例,让我们来试试这款抽油烟机的威力。写代码:#提取音乐的高潮部分frompychorusimportfind_and_output_choruschorus_start_sec=find_and_output_chorus("Gufangzizhi.mp3","Gufangzizhi_high.wav",40)很好!提取了我想到的部分。你也可以按照我们今天的教程,尝试把你喜欢的音乐的高潮部分提取出来!4.批量提取刚刚完成单曲的高潮提取。如果想提取整个文件夹中的音乐高潮部分,可以这样做:文本版代码:#Python实战宝典#提取音乐高潮部分#2020/06/11importosimportsysfrompychorusimportfind_and_output_chorusdefextract_all_file(files_path):"""批量提取音乐合唱Args:files_path(str):文件夹路径"""#spafolderpathmodpath=iros.path.d(sys.argv[0]))forfilepathinos.listdir(files_path):#路径处理datapath=os.path.join(modpath,files_path+filepath)#输出文件夹是否存在targets=f"{modpath}\output\"ifnotos.path.exists(targets):os.makedirs(targets)#提取音乐高潮到当前输出文件夹find_and_output_chorus(datapath,f"{targets.')plit(filepath.')plit(filepath]}_high.wav",40)extract_all_file("F:\push\20200611\music\")如果喜欢今天的Python教程,请继续关注我,如果对你有帮助,请在下方点赞/关注,有问题可以留言欢迎在下方留言,我们会耐心为您解答!
