希望点击上方  编程学习者社区,选择 创建星标

回复关键字 资源  获取编程资源

很多时候我们想提取某首歌的副歌部分(俗称 高潮部分),只能手动直接卡点剪切,但是对于大批量的获取就很头疼,如何解决?怎么样,是不是迫不及待想往下读了?不要急,让我们从原理开始慢慢讲起。

一、原理简介

不知道大家有没有这样的体会,大部分时候,歌曲的高潮部分通常是重复次数最多的部分。因此我们可以根据这一个特征,提出我们的算法:1.遍历整首歌曲。2.将选定长度的部分与其他部分比较并计算相似度,以查看是否重复。3.寻找重复次数较大、且间隔长的片段。

二、代码编写

为了避免造轮子,我们找到了别人已经做过的类似的项目:https://github.com/vivjay30/pychorus我们只需要分析这个源代码中最核心的部分,即求相似区段的源代码,就能知道它是不是符合我们的项目需求了:
可以看到,这部分代码就是做了我们算法的第二步,进行了片段与片段之间的相似度计算。检测时用到的相似函数是这样的:这主要是因为歌曲由12个基本音符的帧的集合而组成,v1和v2是任意两段音乐的音符矢量,如果说两段音乐非常相似,那么右边的式子将接近于0. 如果说 1-右边的式子 得分非常高,则说明两段音乐非常相似。下面我们看看怎么使用这个项目求音乐高潮部分,其实非常简单。

2.1 安装所需要的项目

你可以通过pip安装该项目,PIP安装指令如下:pip install pychorus

2.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/11import osimport sysfrom pychorus import find_and_output_chorusdef 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库分享

lisp 批量文字求差值_Python 超简单 提取音乐高潮(附批量提取)相关推荐

  1. python怎么实现音乐快进_Python 超简单3行代码提取音乐高潮(附批量提取)

    有些时候,为了设定手机铃声或者发抖音视频,我们会耗费大量时间在剪辑音乐高潮部分上.那么这个音乐高潮的提取能不能自动化呢?当然可以. 先来听听效果,孤芳自赏提取高潮后的部分: 怎么样,是不是迫不及待想往 ...

  2. Python 超简单3行代码提取音乐高潮(附批量提取)!

    怎么样,是不是迫不及待想往下读了?不要急,让我们从原理开始慢慢讲起. 1.原理简介 不知道大家有没有这样的体会,大部分时候,歌曲的高潮部分通常是重复次数最多的部分.因此我们可以根据这一个特征,提出我们 ...

  3. lisp 批量文字求差值_lisp语言对立体测量数据进行高程处理的实现

    摘要:本文结合航测工作实际生产案例,利用lisp程序语言,编写程序,实现对Z坐标进行整提调整功能. 关键词:lisp程序 Z坐标 调整 中图分类号: O4-34文献标识码:A 文章编号: 0 前言 与 ...

  4. python怎么输入两个数然后求差值_python两个日期之间天差值获取

    因为我也刚刚接触python,这个原则上也是百度找到的,原来那位我也找不到了...... 主要就是使用datetime进行转化然后进行相减,获得如[diff_days] : 00:00:00形式的结果 ...

  5. excel减法函数_发现EXCEL隐藏功能,SUMIFS函数居然可以多条件求差值看了不后悔...

    在EXCEL中,SUMIFS函数是"多条件求和"函数,但是我们工作需要完成多条件求差,EXCEL里是没有"多条件求差值"函数的,所以我们可以逆向利用多条件求和函 ...

  6. 2021牛客第一场H.Hash Function—FFT求差值的卷

    https://ac.nowcoder.com/acm/contest/11166/H 官方题解. 比赛时,我们都是用暴力写的,数据太弱了,今天突然想起来,用fft写了一下. 主要使用fft求差值的卷 ...

  7. 计算机求差值公式,excel怎么求差值 excel减法公式使用教程

    在ecxel表格中处理数据时,我们经常会用到加减乘除的公式,本文主要便是为大家讲述excel求差值的使用,那么大家知道有几种求差值的方法?下面小编为大家介绍两种快速求差值的方法,不懂的朋友可以多看几遍 ...

  8. Python 超简单3行代码提取音乐高潮部分

    有些时候,为了设定手机铃声或者发抖音视频,我们会耗费大量时间在剪辑音乐高潮部分上.那么这个音乐高潮的提取能不能自动化呢?当然可以. 先来看看,怎么样来提取孤芳自赏提取高潮后的部分: 怎么样,是不是迫不 ...

  9. python背景怎么自定义铃声_Python 制作音乐高潮副歌提取器

    有些时候,我们为了设定手机铃声或者发抖音视频时,会耗费大量时间在音乐剪辑上.尤其是想发布大量抖音视频的时候,我们得收集大量的短音乐,这是一个相当耗费时间的工作.那么,这个音乐高潮的提取能不能自动化呢? ...

最新文章

  1. audio标签的controls属性_HTML5 之视频 video新标签
  2. python简单代码input-python简单基础代码
  3. leetcode 73 矩阵置零 Python
  4. LNSYOJ201小胖的奇偶【并查集+离散化】【做题报告】
  5. BrainFuck——C实现BrainFuck解释器
  6. AI专家一席谈:复用算法、模型、案例,AI Gallery带你快速上手应用开发
  7. Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法
  8. java在工厂自动化的应用_java 工厂的变形模拟的各种应用
  9. SmartBusinessDevFramework架构设计-2:结构图示
  10. arduino nano引脚_使用直流电机和RF模块nRF24L01制作Arduino遥控小车
  11. qq群管+引流+娱乐机器人
  12. Echarts基本图表
  13. linux est 时间,Linux 时间标准简介
  14. 明日之后说正在连接服务器,手游明日之后一直正在连接服务器
  15. W806 基于Arduino开发的GPIO操作示例,勇于尝新
  16. 提示no php怎么绕过,PHP-Nuke绕过SQL注入保护及多个SQL注入漏洞
  17. Free2022春节虎年微信祝福语拜年分享小程序源码
  18. 苹果livp格式如何转换为jpg,livp格式转换器怎么使用
  19. linux shell 读取文件的三种方式
  20. QA:MEID号申请、什么是MEID号、怎么申请MEID号、MEID号获取

热门文章

  1. wxWidgets:wxSplitterWindow类用法
  2. wxWidgets:wxDir类用法
  3. boost::timer::progress_display相关的测试程序
  4. boost::detail::sp_convertible相关的测试程序
  5. boost::proto模块实现在外部指定转换的示例的测试程序
  6. boost::hana::permutations用法的测试程序
  7. boost::function模块实现contains的测试程序
  8. boost::contract模块实现customer and manager的测试程序
  9. OpenCV使用MSER检测末端区域的实例(附完整代码)
  10. C语言求阶乘(附完整源码)