layout: posttitle: Python3.7 读取 mp3 音频文件生成波形图
subtitle: Python3.7 读取 mp3 音频文件生成波形图
date: 2019-11-04
author: he xiaodong
header-img: img/default-post-bg.jpg
catalog: true
tags:
- Python3.7
- ffmpeg
- MP3 转成 wav
- matplotlib
- 生成波形图
- wav waveforms

测试环境为Windows 10 系统,Python3.7,转换需要提前安装pydub、ffmpeg,安装和加入环境变量配置方法自行解决,至于缺少的包直接 pip install xx 搞定。

主要是 mp3 转成 wav 格式的文件,因为 mp3 格式为了减小体积牺牲了音质,转成无损的 wav 格式之后,可以读取到更详细的信息。然后读取 wav 的信息,利用 matlotlib 绘图即可。

mp3towavaform.py 代码:

  1. #coding=utf8
  2. from pydub import AudioSegment
  3. import wave
  4. import io
  5. import numpy as np
  6. import matplotlib.pyplot as plt #专业绘图库
  7. from PIL import Image
  8. import pylab
  9. from scipy.io import wavfile
  10. # 先从本地获取 mp3 的 bytestring 作为数据样本
  11. filename = "b.mp3"
  12. fp=open(filename, 'rb')
  13. data=fp.read()
  14. fp.close()
  15. # 读取
  16. aud=io.BytesIO(data)
  17. sound=AudioSegment.from_file(aud, format='mp3')
  18. raw_data = sound._data
  19. # 写入到文件
  20. l=len(raw_data)
  21. f = wave.open(filename + ".wav",'wb')
  22. f.setnchannels(1)
  23. f.setsampwidth(2)
  24. f.setframerate(16000)
  25. f.setnframes(l)
  26. f.writeframes(raw_data)
  27. f.close()
  28. # 读取生成波形图
  29. samplerate, data = wavfile.read(filename + ".wav")
  30. times = np.arange(len(data))/float(samplerate)
  31. # print(len(data), samplerate, times)
  32. # 可以以寸为单位自定义宽高 frameon=False 为关闭边框
  33. fig = plt.figure(figsize=(20, 5), facecolor="white")
  34. # plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')
  35. ax = fig.add_axes([0, 0, 1, 1])
  36. ax.axis('off')
  37. plt.fill_between(times, data, linewidth = '1', color='green')
  38. plt.xticks([])
  39. plt.yticks([])
  40. plt.savefig(filename + '.png', dpi=100, transparent=False, bbox_inches='tight', edgecolor='w')
  41. #plt.show()

最终就可以生成一个无边框的波形图,matplotlib 的可选参数非常多,至于生成的波形图想要什么边框,颜色,图例,坐标轴信息等,可以查阅 matplotlib 社区文档。

最终效果图:

2019-11-04-Python3.7 读取 mp3 音频文件生成波形图 - 图1

参考链接:

  1. SF社区关于mp3转wav的问答
  2. 百度百科 wav 词条
  3. matplotlib 中文社区
  4. 音频格式:MP3, WAV的对比与实现

© 半原创文章

最后恰饭 阿里云全系列产品/短信包特惠购买 中小企业上云最佳选择 阿里云内部优惠券