<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python 超簡單3行代碼提取音樂高潮部分

          共 2210字,需瀏覽 5分鐘

           ·

          2022-01-12 19:08

          有些時候,為了設定手機鈴聲或者發(fā)抖音視頻,我們會耗費大量時間在剪輯音樂高潮部分上。那么這個音樂高潮的提取能不能自動化呢?當然可以。

          先來聽聽效果,孤芳自賞提取高潮后的部分:


          怎么樣,是不是迫不及待想往下讀了?不要急,讓我們從原理開始慢慢講起。

          1.原理簡介



          不知道大家有沒有這樣的體會,大部分時候,歌曲的高潮部分通常是重復次數(shù)最多的部分。因此我們可以根據(jù)這一個特征,提出我們的算法:

          ????1.遍歷整首歌曲。

          ????2.將選定長度的部分與其他部分比較并計算相似度,以查看是否重復。

          ????3.尋找重復次數(shù)較大、且間隔長的片段。

          2.代碼編寫



          為了避免造輪子,我們找到了別人已經(jīng)做過的類似的項目:https://github.com/vivjay30/pychorus

          我們只需要分析這個源代碼中最核心的部分,即求相似區(qū)段的源代碼,就能知道它是不是符合我們的項目需求了:


          可以看到,這部分代碼就是做了我們
          算法的第二步,進行了片段與片段之間的相似度計算。檢測時用到的相似函數(shù)是這樣的:


          這主要是因為歌曲由12個基本音符的幀的集合而組成,v1和v2是任意兩段音樂的音符矢量,如果說兩段音樂非常相似,那么右邊的式子將接近于0.?如果說 1-右邊的式子 得分非常高,則說明兩段音樂非常相似

          下面我們看看怎么使用這個項目求音樂高潮部分,其實非常簡單。

          2.1 安裝所需要的項目

          你可以通過pip安裝該項目,如果你還沒有安裝好Python相關環(huán)境,建議閱讀這篇文章:Python超詳細安裝指南視頻教程:https://www.bilibili.com/video/BV1Rb4y1n7M5,pip安裝指令如下:

          pip install?pychorus

          2.2 編寫代碼

          實際上,這個包用起來可是相當簡單,如果我們只是想單純提取歌曲高潮部分:

          from?pychorus import?find_and_output_chorus

          chorus_start_sec = find_and_output_chorus("你的音樂文件", "提取結果的目標路徑", 要多少秒的高潮部分)


          錯,兩行代碼就解決了。如果你想知道一些詳細的細節(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)
          ????????# 提取音樂高潮至當前output文件夾下
          ????????find_and_output_chorus(
          ????????????datapath, f"{targets}{filepath.split('.')[0]}_high.wav", 40
          ????????)
          extract_all_file("F:\\push\\20200611\\music\\")


          如果你喜歡今天的Python 教程,請持續(xù)關注,如果對你有幫助,麻煩在下面點一個贊/在看,有任何問題都可以在下方留言,我們會耐心解答的!



          近期文章:

          【干貨+贈書】手寫一個 Python "病毒"

          【干貨】Python + folium 制作美美的地圖~

          【干貨】誰說matplotlib做不出好看的可視化


          如何找到我:

          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美午夜精品成人片在线播放 | 国产成人永久免费视频 | jlzz日本 | 91性爱视频 | 日韩黄色电影在线观看 |