日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

librosa实现音频格式转换(单曲批量) | MP3转wav

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 librosa实现音频格式转换(单曲批量) | MP3转wav 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • step1:環境要求
    • ①安裝ffmpeg
    • ②安裝librosa
    • ③安裝soundfile
  • step2:4行代碼完成一首歌的格式轉換
    • ①導包
    • ②讀入需要處理的MP3文件
    • ③用soundfile重寫成wav
    • 綜上,完整代碼如下:
  • 注:MP3批量轉WAV(保持源文件名不變)
    • step1:編寫轉換函數
    • step2:調用轉換函數
    • step3:運行
  • 擴展
    • 解決報錯小故事1
    • 更多報錯故事待更……

step1:環境要求

①安裝ffmpeg

這一步很關鍵。如果沒有ffmpeg,librosa讀取MP3文件時就會報錯。

見筆者的文章:ffmpeg安裝

②安裝librosa

pip install librosa

③安裝soundfile

pip install soundfile

step2:4行代碼完成一首歌的格式轉換

①導包

import librosa import soundfile

②讀入需要處理的MP3文件

y,sr = librosa.load("./dataset/sample_data/Sakamoto_MerryChristmasMr_Lawrence.mp3")

③用soundfile重寫成wav

soundfile.write("./dataset/sample_data/Sakamoto_MerryChristmasMr_Lawrence.wav",y,sr)

綜上,完整代碼如下:

import librosa y,sr = librosa.load("./dataset/sample_data/Sakamoto_MerryChristmasMr_Lawrence.mp3")import soundfile soundfile.write("./dataset/sample_data/Sakamoto_MerryChristmasMr_Lawrence.wav",y,sr)

注:MP3批量轉WAV(保持源文件名不變)

批量保存文件夾中的文件名,參見筆者的文章。

step1:編寫轉換函數

def audio_mp3_to_wav():# 原MP3文件所在的文件夾audio_path = "C:/Users/24061/Desktop/MERcode/EMOPIA_cls-main/emopia_retrain/dataset/EMOPIA_1.0/EMOPIA_1.0/song"# WAV想要保存的文件夾save_path = "C:/Users/24061/Desktop/MERcode/EMOPIA_cls-main/emopia_retrain/dataset/EMOPIA_1.0/EMOPIA_1.0/song_wav"# 把MP3文件名存儲在csv文件中,并將文件名存入列表中songs_id_all = pd.read_csv("C:/Users/24061/Desktop/MERcode/EMOPIA_cls-main/emopia_retrain/dataset/EMOPIA_1.0/EMOPIA_1.0/songs_lists/metadata_by_song_new.csv",index_col=0)songs_id_all_list = []for i in songs_id_all.index:songs_id_all_list.append(i)# 遍歷文件夾for fn in tqdm(songs_id_all_list):# 加載文件waveform, source_sr = librosa.load(Path(audio_path, fn + ".mp3"))# 想要保存的文件名pt_path = Path(save_path, fn + ".wav")# 采樣后數據的保存位置。如果沒有此文件夾,就創建一個文件夾if not os.path.exists(os.path.dirname(pt_path)):os.makedirs(os.path.dirname(pt_path))# 將音頻寫成WAVsoundfile.write((pt_path),waveform,source_sr)

step2:調用轉換函數

import os from pathlib import Path from tqdm.notebook import tqdm import librosa import soundfileaudio_mp3_to_wav()

step3:運行

等待寫入:

寫好的文件如圖所示:

轉換完成:


擴展

使用此方法進行mp3轉wav,可以解決很多報錯問題,如:

解決報錯小故事1

  • 報錯
    筆者在做實驗時,遇到如下報錯:raise RuntimeError(prefix + _ffi.string(err_str).decode('utf-8', 'replace'))
    ……
    RuntimeError: Error opening 'D:\\xxx.wav': File contains data in an unknown format.

  • 分析網絡上的解決方法

    搜索了很多資料,很多博主給出的解決方法是:

  • 安裝ffmpeg
  • 卸載librosa😭
    ……
  • BUT!筆者想說,安裝ffmpeg確實是一個方法,它適用于你的音頻均是MP3,想要讓代碼讀取的情況。如果正確安裝ffmpeg后依舊沒有解決問題,很可能是因為 你的音頻源文件有問題(一些你尚未發現的小問題)。

  • 筆者的方法
    不過不要擔心,這里筆者想提出一個通用的解決辦法,不妨試試~。
    方法就是:對音頻源文件進行處理。采用本文提出的方法,將音頻全部重新生成新的WAV文件。

  • 筆者的報錯解決故事
    從上述報錯中,細心的讀者可能已經發現了,筆者報錯代碼提示“無法識別wav格式”,欸?有點奇怪了吼!無法識別mp3我理解,無法識別wav我就黑人問號了(因為現有音頻處理軟件幾乎都是支持WAV的,幾乎不存在不識別WAV的情況)。于是,筆者打開音頻源文件查看了一下:

    誰家WAV就幾kB呀?這個音頻應該是個假wav【所謂“假wav”:即,你將一個MP3文件通過修改后綴的方式,得到一個WAV后綴的音頻文件,但音頻實質上還是MP3】【筆者的音頻是由pydub的AudioSegment得來的,查了查,這個包輸出的音頻是MP3格式,而筆者的命名是xxx.wav,報錯原因可能就出在這里】。
    使用本文提出的方法,將音頻全部重新生成新的WAV文件,再次實驗,果然,報錯解決了!

  • 更多報錯故事待更……

    總結

    以上是生活随笔為你收集整理的librosa实现音频格式转换(单曲批量) | MP3转wav的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。