Python?3行代碼提取音樂高潮部分
前言:
有些時候,為了設(shè)定手機鈴聲或者發(fā)抖音視頻,我們會耗費大量時間在剪輯音樂高潮部分上。那么這個音樂高潮的提取能不能自動化呢?當(dāng)然可以。
先來看看,怎么樣來提取孤芳自賞提取高潮后的部分:
1.原理簡介
不知道大家有沒有這樣的體會,大部分時候,歌曲的高潮部分通常是重復(fù)次數(shù)最多的部分。因此我們可以根據(jù)這一個特征,提出我們的算法:
- 1.遍歷整首歌曲。
- 2.將選定長度的部分與其他部分比較并計算相似度,以查看是否重復(fù)。
- 3.尋找重復(fù)次數(shù)較大、且間隔長的片段。
2.代碼編寫
為了避免造輪子,我們找到了別人已經(jīng)做過的類似的項目
我們只需要分析這個源代碼中最核心的部分,即求相似區(qū)段的源代碼,就能知道它是不是符合我們的項目需求了:

可以看到,這部分代碼就是做了我們算法的第二步,進行了片段與片段之間的相似度計算。
檢測時用到的相似函數(shù)是這樣的:
這主要是因為歌曲由12個基本音符的幀的集合而組成,v1和v2是任意兩段音樂的音符矢量,如果說兩段音樂非常相似,那么右邊的式子將接近于0. 如果說 1-右邊的式子 得分非常高,則說明兩段音樂非常相似。
下面我們看看怎么使用這個項目求音樂高潮部分,其實非常簡單。
2.1 安裝所需要的項目
你可以通過pip安裝該項目,如果你還沒有安裝好Python相關(guān)環(huán)境,建議先安裝,PIP安裝指令如下:
pip install pychorus
2.2 編寫代碼
實際上,這個包用起來可是相當(dāng)簡單,如果我們只是想單純提取歌曲高潮部分:
from pychorus import find_and_output_chorus
chorus_start_sec = find_and_output_chorus("你的音樂文件", "提取結(jié)果的目標(biāo)路徑", 要多少秒的高潮部分)沒錯,兩行代碼就解決了。如果你想知道一些詳細(xì)的細(xì)節(jié),比如說輸出相似矩陣或者結(jié)果可視化,建議閱讀github中該項目的操作指令。下面讓我們檢驗一下效果。
3.效果檢驗
以《孤芳自賞》 為例,讓我們試試這個提取器的功力。 編寫代碼:
# 提取音樂高潮部分
from pychorus import find_and_output_chorus
chorus_start_sec = find_and_output_chorus("孤芳自賞.mp3", "孤芳自賞_high.wav", 40)
非常優(yōu)秀!提取了我心目中想要的部分。大家也可以根據(jù)我們今天的教程,試著提取一下自己喜歡的音樂的高潮部分哦!
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)
# 提取音樂高潮至當(dāng)前output文件夾下
find_and_output_chorus(
datapath, f"{targets}{filepath.split('.')[0]}_high.wav", 40
)
extract_all_file("F:\push\20200611\music\")到此這篇關(guān)于Python 3行代碼提取音樂高潮部分的文章就介紹到這了,更多相關(guān)Python代碼提取音樂高潮部分內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python激活A(yù)naconda環(huán)境變量的詳細(xì)步驟
今天給大家分享Python激活A(yù)naconda環(huán)境變量的詳細(xì)步驟,激活A(yù)naconda環(huán)境變量分為簡潔版和詳細(xì)版,簡潔版只需要通過輸入命令進行配置即可,詳細(xì)版本文通過圖文步驟給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06
Python大數(shù)據(jù)用Numpy Array的原因解讀
一個Numpy數(shù)組由許多值組成,所有值的類型是相同的,Numpy 是Python科學(xué)計算的一個核心模塊,本文重點給大家介紹Python大數(shù)據(jù)Numpy Array的相關(guān)知識,感興趣的朋友一起看看吧2022-02-02
Python練習(xí)之操作SQLite數(shù)據(jù)庫
這篇文章主要介紹了Python練習(xí)之操作SQLite數(shù)據(jù)庫,主要通過三個問題如何創(chuàng)建SQLite數(shù)據(jù)庫?如何向SQLite表中插入數(shù)據(jù)?如何查詢SQLite表中的數(shù)據(jù)?展開文章主題詳情,需要的朋友可以參考一下2022-06-06

