【发布时间】:2021-08-19 17:42:07
【问题描述】:
我发现使用 soundfile 和 wavefile 读取 wav 文件之间的幅度响应存在问题。以下是不同的情节:
你能告诉我我需要在wavefile.read 中进行哪些调整才能获得与soundfile.read 相同的幅度吗?
这是我使用的代码:
import os
import matplotlib.pyplot as plt
from matplotlib import transforms
import numpy as np
import soundfile as sf
import scipy.io.wavfile as wavfile
from matplotlib.gridspec import GridSpec
input_file1 = (r'G:/file.wav')
plt.subplot(211)
a, b = sf.read(input_file1);
pxx, fs = plt.psd(a, 512, b)
plt.semilogx(fs, 10*np.log10(pxx))
plt.title('Sound File Read')
plt.grid(which='major', axis='both', color='g', linestyle='-', alpha=0.4)
plt.grid(which='minor', axis='x', color='g', linestyle='-', alpha=0.1)
plt.subplot(212)
sample_rate, signal1 = wavfile.read(input_file1)
Pxx, freq = plt.psd(signal1, 512, sample_rate)
plt.semilogx(freq, 10*np.log10(Pxx))
plt.grid(which='major', axis='both', color='g', linestyle='-', alpha=0.4)
plt.grid(which='minor', axis='x', color='g', linestyle='-', alpha=0.1)
plt.title('Wavfile File Read')
plt.ylabel('PSD')
plt.xlabel('Frequency (Hz)')
# set the spacing between subplots
plt.tight_layout()
plt.show()
Here is a link to an example .wav file.
谢谢!
【问题讨论】:
-
据我所知,wavfile.io.read 和 soundfile.read 做的事情几乎相同,除了一个默认行为:wavfile 从文件中确定其数组的 dtype,而 soundfile 有一个默认 @ 987654329@。通常,声音的
float_数组在-1 和1 之间进行归一化,而int_数组将信号保持在整数的最小值和最大值之间。检查您的阵列的.dtype以及.min()和.max()值。 -
@BatWannaBe,感谢您的意见。我确实看到 ndarray(使用第一个数据点),对于
soundfile,值是 -0.00225866,而对于wavfile,数字是 -4850432。有没有办法将这些wavfile数字转换为float_?