以下是一个实现该功能的Python示例代码:

import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile as wavfile
import scipy.signal as signal

# 读取两个wav文件
rate1, data1 = wavfile.read('audio1.wav')
rate2, data2 = wavfile.read('audio2.wav')

# 计算时间序列
time1 = np.arange(0, len(data1)) / rate1
time2 = np.arange(0, len(data2)) / rate2

# 绘制波形图
plt.subplot(2, 2, 1)
plt.plot(time1, data1)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Waveform of audio1')

plt.subplot(2, 2, 2)
plt.plot(time2, data2)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Waveform of audio2')

# 计算频谱图
freq1, spec1 = signal.welch(data1, fs=rate1)
freq2, spec2 = signal.welch(data2, fs=rate2)

# 绘制频谱图
plt.subplot(2, 2, 3)
plt.semilogy(freq1, spec1)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Power')
plt.title('Spectrum of audio1')

plt.subplot(2, 2, 4)
plt.semilogy(freq2, spec2)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Power')
plt.title('Spectrum of audio2')

# 计算语谱图
f, t, Sxx1 = signal.spectrogram(data1, fs=rate1)
f, t, Sxx2 = signal.spectrogram(data2, fs=rate2)

# 绘制语谱图
plt.figure()
plt.subplot(2, 1, 1)
plt.pcolormesh(t, f, 10 * np.log10(Sxx1))
plt.ylabel('Frequency (Hz)')
plt.title('Spectrogram of audio1')

plt.subplot(2, 1, 2)
plt.pcolormesh(t, f, 10 * np.log10(Sxx2))
plt.ylabel('Frequency (Hz)')
plt.title('Spectrogram of audio2')

plt.show()

在该示例中,我们首先使用scipy.io.wavfile.read函数读取两个wav文件,并计算出它们的时间序列。然后,我们分别绘制了两个音频文件的波形图。接下来,我们使用scipy.signal.welch函数计算了两个音频文件的频谱图,并使用semilogy函数绘制了它们。最后,我们使用scipy.signal.spectrogram函数计算了两个音频文件的语谱图,并使用pcolormesh函数绘制了它们。

运行该代码将生成两个波形图、两个频谱图和两个语谱图,以便我们可以比较这两个音频文件在不同方面的特征

python读取两个wav文件并生成波形图、频谱图、语谱图的对比

原文地址: https://www.cveoy.top/t/topic/cdPp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录