简介

绘制和可视化音频文件是音频分析中最重要的过程之一。音频分析是对数字设备记录的音频信号进行转换、探索和解释的过程,以便从音频数据中提取洞察力。

在本文中,我们将使用 matplotlib 绘制音频文件的波形。

先决条件

  • Python 已安装

  • Numpy 已安装

  • Matplotlib 已安装

  • 数据分析背景

导入模块和库

作为第一步,让我们导入我们需要的模块和库。

import wave
import matplotlib.pyplot as plt 
import numpy as np

进入全屏模式 退出全屏模式

我们将使用 wave 模块和 numpy 来预处理音频。我们将使用 matplotlib 来绘制音频。

加载音频文件

我们将使用的音频文件是一个波形文件。

让我们加载我们想要绘制的波形文件

obj = wave.open('audio_file.wav', 'rb')

进入全屏模式 退出全屏模式

获取音频参数

让我们打印出音频参数,例如通道数、样本宽度等。

我们将使用wave模块的.getparams()方法

print('Parameters:', obj.getparams())

进入全屏模式 退出全屏模式

输出: 参数:_wave_params(nchannelsu003d1,sampwidthu003d2,framerateu003d22050,nframesu003d81585,comptypeu003d'NONE',compnameu003d'未压缩')

现在让我们获取绘制音频所需的参数。

  • 采样频率,这是每秒的采样数
sample_freq = obj.getframerate()

进入全屏模式 退出全屏模式

  • 样本数,这是音频文件中样本或帧的总数
n_samples = obj.getnframes()

进入全屏模式 退出全屏模式

  • 信号波,这是波幅,也就是声音的强度。
signal_wave = obj.readframes(-1)

进入全屏模式 退出全屏模式

  • 音频长度,这是音频的持续时间。
duration = n_samples/sample_freq

进入全屏模式 退出全屏模式

创建numpy对象

让我们从 signal_wave 创建一个 numpy 对象。这将绘制在 y 轴上。

signal_array = np.frombuffer(signal_wave, dtype=np.int16)

进入全屏模式 退出全屏模式

让我们从持续时间创建一个 numpy 对象。这将绘制在 x 轴上

time = np.linspace(0, duration, num=n_samples)

进入全屏模式 退出全屏模式

创建音频图

plt.figure(figsize=(15, 5))
plt.plot(time, signal_array)
plt.title('Audio Plot')
plt.ylabel(' signal wave')
plt.xlabel('time (s)')
plt.xlim(0, time) #limiting the x axis to the audio time
plt.show()

进入全屏模式 退出全屏模式

输出:

[绘图输出](https://res.cloudinary.com/practicaldev/image/fetch/s--bfzstc4P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/rqiev0iw5017dve5ixg.PNG)

结论

在本文中,我们学习了如何绘制音频文件的波形。除了绘制波形之外,我们可以从音频文件中获得的另一个图是频谱。对于频谱,我们绘制了采样频率与时间的关系。要了解如何绘制频谱,请查看此链接。

积分

音频处理基础(Assembly AI)

音频分析(altexsoft)

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐