只想聽歌曲的高潮部分?讓我用python來教你作個音樂高潮提取器!

有些時候,咱們爲了設定手機鈴聲或者發抖音視頻時,會耗費大量時間在音樂剪輯上。尤爲是想發佈大量抖音視頻的時候,咱們得收集大量的短音樂,這是一個至關耗費時間的工做。那麼,這個音樂高潮的提取能不能自動化呢?答案是:能夠。javascript

1.原理簡介

不知道你們有沒有這樣的體會,大部分時候,歌曲的高潮部分一般是重複次數最多的部分。所以咱們能夠根據這一個特徵,提出咱們的算法java

1.遍歷整首歌曲。python

2.將選定長度的部分與其餘部分比較並計算類似度,以查看是否重複。git

3.尋找重複次數較大、且間隔長的片斷。github

2.代碼編寫

爲了不造輪子,咱們找到了別人已經作過的相似的項目:算法

https://github.com/vivjay30/pychorus函數

咱們只須要分析這個源代碼中最核心的部分,即求類似區段的源代碼:網站

def compute_similarity_matrix_slow(self, chroma): """ 雖然慢,可是直接的方法來計算區段類似矩陣 """ num_samples = chroma.shape[1] time_time_similarity = np.zeros((num_samples, num_samples)) for i in range(num_samples): for j in range(num_samples): # 檢測每一段的類似度 time_time_similarity[i, j] = 1 - (np.linalg.norm(chroma[:, i] - chroma[:, j]) / sqrt(12)) return time_time_similarity 

能夠看到,這部分代碼就是作了咱們算法的第二步,進行了片斷與片斷之間的類似度計算。檢測時用到的類似函數是這樣的:url

能夠看到,這部分代碼就是作了咱們算法的第二步,進行了片斷與片斷之間的類似度計算。檢測時用到的類似函數是這樣的:spa

這主要是由於歌曲由12個基本音符的幀的集合而組成,v1和v2是任意兩段音樂的音符矢量,若是說兩段音樂很是類似,那麼右邊的式子將接近於0. 若是說 1-右邊的式子 得分很是高,則說明兩段音樂很是類似。

下面咱們看看怎麼使用這個項目求音樂高潮部分,其實很是簡單。

2.1 安裝所須要的項目

你能夠經過pip安裝該項目,若是你尚未安裝好Python相關環境,建議閱讀這篇文章:Python安裝

pip install pychorus

2.2 編寫代碼

實際上,這個包用起來但是至關簡單,若是咱們只是想單純提取歌曲高潮部分:

from pychorus import find_and_output_chorus chorus_start_sec = find_and_output_chorus("你的音樂文件", "輸出高潮部分文件", 要多少秒的高潮部分) 

沒錯,兩行代碼就解決了。下面讓咱們檢驗一下效果。

3.效果檢驗

以《孤芳自賞》 爲例,讓咱們試試這個提取器的功力。

原曲:

編寫代碼:

# 提取音樂高潮部分 from pychorus import find_and_output_chorus chorus_start_sec = find_and_output_chorus("孤芳自賞.mp3", "孤芳自賞_high.wav", 40) 

效果以下:

 

很是優秀!提取了我心目中想要的部分。你們也能夠根據咱們今天的教程,試着提取一下本身喜歡的音樂的高潮部分哦!(網站自己的緣由上傳不了音樂  只能截個圖)

相關文章
相關標籤/搜索