欢迎访问宙启技术站
智能推送

使用librosalogamplitude()函数将音频转换为对数幅度表示图像

发布时间:2024-01-12 10:15:22

import librosa

import librosa.display

import matplotlib.pyplot as plt

import numpy as np

# 加载音频文件

audio_path = 'audio.wav'

y, sr = librosa.load(audio_path)

# 计算音频的时频表示

D = np.abs(librosa.stft(y))

# 将幅度转换为对数幅度表示

log_D = librosa.amplitude_to_db(D, ref=np.max)

# 绘制音频的对数幅度表示图像

plt.figure(figsize=(12, 8))

librosa.display.specshow(log_D, sr=sr, x_axis='time', y_axis='log')

plt.colorbar(format='%+2.0f dB')

plt.title('Log-Amplitude Spectrogram')

plt.show()

在上面的代码中,我们首先使用librosa库的load()函数加载了一个音频文件。接下来,我们使用stft()函数计算了音频的时频表示。然后,使用amplitude_to_db()函数将幅度转换为对数幅度表示。最后,通过specshow()函数将对数幅度表示图像绘制出来。

请注意,load()函数返回两个参数, 个参数y是一个包含音频数据的一维数组,第二个参数sr是音频的采样率。stft()函数的计算结果D是一个复数类型的二维数组,表示音频的时频表示。amplitude_to_db()函数将复数幅度转换为对数幅度,并返回一个与D相同形状的二维数组。 specshow()函数将对数幅度表示图像显示在画布上。

在绘制图像之前,我们使用plt.figure()函数设置了画布的大小。接下来,使用librosa.display.specshow()函数绘制了对数幅度表示图像。该函数接受多个参数,其中sr参数表示音频的采样率,x_axis参数表示图像的横轴表示时间,y_axis参数表示图像的纵轴表示频率。colorbar()函数用于添加一个颜色刻度标尺,title()函数用于设置图像的标题。最后,使用plt.show()函数显示图像。

你可以将上述代码保存为一个.py文件,并将其中的audio.wav替换为你自己的音频文件路径。运行脚本后,将会显示音频的对数幅度表示图像。