我试图用不同的dtype(位/样本很明显)来绘制我的语音信号。所以我试着用dtype = 'int16
‘来捕捉我的声音,这个情节很有意义。但是我试着用dtype = 'int8
‘在相同的声音水平上说话,我的情节是零线。
为什么会发生这种事
一种想法是,可能8位的量化器有一个更大的死区,所以对于相同的输入语音级别,量化器会降低0
的值。当然,我为量化器的类型做了一个假设。我还没有看到量化器是否是均匀的死区。下面是我的代码和情节
import matplotlib.pyplot as plt
import numpy as np
import sounddevice as sd
Fs = 8000 # Sampling frequency
duration = 5 # Recording duration in seconds
voice = sd.rec(frames=duration * Fs, samplerate=Fs, channels=1, dtype='int16') # Capture the voice
# frames indicate indirectly the duration of record, dtype is 16 bits per sample.
sd.wait() # close after recording finish
time = np.linspace(0, len(voice - 1) / Fs, len(voice - 1)) # split x axis in voice-1 points
print(voice) # points have 1/Fs distance each other
plt.plot(time, voice) # plot in seconds
plt.title("Voice Signal")
plt.xlabel("Time [seconds]")
plt.ylabel("Voice amplitude")
plt.show()
这是我的语音数组https://www.mediafire.com/file/7bbfbz0jltszmb6/16bit.csv/file https://www.mediafire.com/file/k627wmbeayutc20/8bit.csv/file
发布于 2021-12-08 19:21:22
这是底层PortAudio库和/或所使用的主机API的一个问题。根据从设备列表中选择的设备,它可能工作,也可能不工作。对我来说,有些设备可以创建垃圾值,而其他设备则可以正常工作。对我来说(在Linux上),uint8
似乎比int8
工作得更好。
如果您想解决问题,您应该在https://github.com/PortAudio/portaudio上创建一个问题。
正如注释中提到的,无论如何都很少使用8位示例,这可能解释了它们为什么受到如此严重的支持。如果您只想玩一玩,可能最容易使用默认的dtype
,它在-1.0到1.0之间提供浮点数。
https://stackoverflow.com/questions/70265185
复制相似问题