3

我正在尝试在 Python 中绘制音频文件的波形。

这是我的代码(我正在使用 Librosa 库):

import plot as plt

def save_plot(filename):
    y, sr = librosa.load(filename)        
    plt.plot(y, 'audio', 'time', 'amplitude')

plot.py 文件在哪里:

import matplotlib.pylab as plt

def plot(vector, name, xlabel=None, ylabel=None):
    plt.figure()
    plt.plot(vector)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    plt.plot()
    plt.savefig('static/plots/' + name)

奇怪的是,即使我得到一个看起来像有效波形的图: 波形

音频文件只有 5 秒长。因此,我不明白 x 轴在说什么;好像涨到了90000?

谢谢

4

2 回答 2

4

每次对音频文件进行采样时,波形都会有一个数据点,可以从 8000 Hz 到 48 kHz 采样。90,000/5 = 18000 赫兹。

查看您当前从 librosa.load 中忽略的变量,即采样率,它可以让您计算出时间尺度。

于 2017-05-07T18:36:45.613 回答
0

这就是您matplotlib.pyplot用来绘制向量的原因,该向量包含许多术语,因为它(可能)每秒采样 22050 个数据点。如果你得到一个 5 秒的音频文件,那么你会得到 5 * 22050 = 110250 个数据点,这些数据点将绘制在图中。而不是使用matplotlib.pyplot你可以使用正确的方法来做到这一点librosa

import librosa
import librosa.display

y, sr = librosa.load(<path_audio_file>, sr=<sample_rate>)
fig, ax = librosa.display.waveplot(y, sr=sr)

由于它将采样率作为信息保留,因此它将以正确的时间长度对时间序列进行归一化!

请注意,要使用librosa.display您需要显式导入它。

如果您对更多详细信息感兴趣,请查看librosa.display.waveplot

于 2022-01-31T13:32:13.300 回答