溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么提取音樂高潮部分

發布時間:2022-01-05 11:09:44 來源:億速云 閱讀:354 作者:iii 欄目:開發技術

本篇內容介紹了“Python怎么提取音樂高潮部分”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    1.原理簡介

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

    •  1.遍歷整首歌曲。

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

    •  3.尋找重復次數較大、且間隔長的片段。

    2.代碼編寫

    為了避免造輪子,我們找到了別人已經做過的類似的項目

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

    Python怎么提取音樂高潮部分

    可以看到,這部分代碼就是做了我們算法的第二步,進行了片段與片段之間的相似度計算。

    檢測時用到的相似函數是這樣的:

    Python怎么提取音樂高潮部分

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

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

    2.1 安裝所需要的項目

    你可以通過pip安裝該項目,如果你還沒有安裝好Python相關環境,建議先安裝,PIP安裝指令如下:

    pip install pychorus

    2.2 編寫代碼

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

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

    沒錯,兩行代碼就解決了。如果你想知道一些詳細的細節,比如說輸出相似矩陣或者結果可視化,建議閱讀github中該項目的操作指令。下面讓我們檢驗一下效果。

    3.效果檢驗

    以《孤芳自賞》 為例,讓我們試試這個提取器的功力。 編寫代碼:

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

    非常優秀!提取了我心目中想要的部分。大家也可以根據我們今天的教程,試著提取一下自己喜歡的音樂的高潮部分哦!

    4.批量提取

    剛剛,只是完成了單首歌曲的高潮提取,如果你想提取整個文件夾下的音樂的高潮部分,可以這樣做:

    Python怎么提取音樂高潮部分

    文字版代碼:

    # 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怎么提取音樂高潮部分”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女