文章目录

  • 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

  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.

  2. 分析网络上的解决方法

    搜索了很多资料,很多博主给出的解决方法是:

    1. 安装ffmpeg
    2. 卸载librosa

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

      1. wav格式怎么转换?教你这三招实现音频格式转换

        音频格式转换可能对许多人来说是一个陌生的概念.但是,如果你曾经遇到过无法播放或共享音频文件的情况,那么这个问题就不再陌生了.wav是一种常见的音频格式,但它并不是所有设备和应用程序都支持的格式.那么, ...

      2. java aud 转mp3_音频格式转换:微信语音aud格式转成wav格式

        近期遇到音频格式问题,下面就来记录一下,我暂时还没有找到直接从音频格式aud转换成wav的工具或者代码,所以我这里的转换是先把aud转换成mp3格式,然后再从mp3格式转换成aud格式.我是在linu ...

      3. macOS - afconvert 命令(音频格式转换)

        afconvert 命令(音频格式转换) 文章目录 afconvert 命令(音频格式转换) 一.转换示例 1.wav --> acc 2.指定输出名称 3.aac --> caf 4.批 ...

      4. 教你如何用ffmpeg处理音频格式转换(标贝科技)

        文章目录 前言 ffmpeg介绍? 一.下载与安装 1.下载安装包 2.设置环境变量 3.验证是否安装成功 二.命令讲解 1 参数解释 2 音频格式转换命令 三.标贝开放平台介绍 前言 ffmpeg介 ...

      5. Matlab音频格式转换

        所需前置知识 读音频 audioread 语法:   [y,Fs] = audioread(filename);   从名为 filename 的文件中读取数据,并返回样本数据 y 以及该数据的采样率 ...

      6. Java实现音频格式转换 WAV---mp3,可使音频压缩

        最近做的一个小项目中,师兄安排的任务,要实现录音然后保存文件,实现网络传输,然后我用初学的java实现了一个录音机的功能(见前面的博客),但是windows录音默认保存的格式是WAVE,后缀是WAV, ...

      7. Matlab 音频格式转换(wav,ogg,flac,au,aiff,aif,aifc,mp3,m4a,mp4 互转)

        欢迎转载,但请一定要给出原文链接,标注出处,支持原创! 谢谢~ https://blog.csdn.net/qq_29225913/article/details/105445028 目录 1.目标及 ...

      8. Linux下音频格式转换命令行工具

        这里写自定义目录标题 Sox音频转换 使用Mplayer将多种格式的而文件编码至WAV 使用FFmpeg将各种类型文件转换成各种类型文件 使用Lame编码或者已不同的比特率重新编码MP3 以Ogg V ...

      9. 格式工厂 wav 比特率_DRmare Audio Converter Mac(音频格式转换工具)

        DRmare Audio Converter Mac是一款音频格式转换.drmare audio converter mac适合将Apple Music,iTunes歌曲转换为其他格式,突破歌曲本身D ...

      10. amr转mp3 音频格式转换

        微信和QQ导出的amr音频文件,大家可以发现用一般播放器都是无法正常播放的.原因是虽然音频格式是amr,但却不是标准amr编码的,而是采用了Silk v3音频编码,导致很多播放器都播放不了.本工具可以 ...

      最新文章

      1. python表白-520使用Python实现“我爱你”表白
      2. c语言 get post请求,URL GET/POST请求目标-c
      3. 在mybatis用mysql的代码块_关于Mybatis 中使用Mysql存储过程的方法
      4. 对编程人员我想说:多做 多实践 多写代码
      5. 利用 Celery 构建 Web 服务的后台任务调度模块
      6. C++或C 实现AES ECB模式加密解密,支持官方验证
      7. c#之跟踪(c#高级编程系列)
      8. OPPO海外功臣realme将回归国内 目标竞争对手:红米和荣耀
      9. 国产操作系统往事:四十年激变,终再起风云
      10. [转载] Python学习(五)Numpy通用函数汇总
      11. php 随机坐标点,php实现 计算坐标点在某区域
      12. 如何在Mac视频中添加表情符号
      13. 舒尔特方格训练注意力游戏
      14. java弹跳小球程序_用java实现跳动的小球示例代码
      15. neo4j图数据库--Cypher入门
      16. 小说阅读网html+css+JavaScript
      17. Azure 入门文章及动手视频
      18. 虚拟主机做游戏服务器,虚拟主机做游戏服务器
      19. Facebook广告投放的正确姿势:玩转目标定位
      20. 【絮叨.1】同时在写四门语言是怎样一种体验?

      热门文章

      1. 我被美团会员割了韭菜
      2. Mac系统一键下载网页图片
      3. Chrome 无法正常打开站点
      4. Android实践:基于聚合数据的手机号码归属地查询
      5. springboot publish event 事件机制demo
      6. WTL for MFC Programmers, Part VI - Hosting ActiveX Controls
      7. angular 万年历_世界豪华手表
      8. 现在企业常用考勤软件
      9. 项目实训--Unity多人游戏开发(八、3D音效融合AudioMixer、统一的音频播放系统)
      10. mcc460_最新MCC和MNC国家代码运营商对应表