首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python sounddevice.rec(),dtype =‘int8 8’量化为零问题

Python sounddevice.rec(),dtype =‘int8 8’量化为零问题
EN

Stack Overflow用户
提问于 2021-12-07 18:24:54
回答 1查看 280关注 0票数 0

我试图用不同的dtype(位/样本很明显)来绘制我的语音信号。所以我试着用dtype = 'int16‘来捕捉我的声音,这个情节很有意义。但是我试着用dtype = 'int8‘在相同的声音水平上说话,我的情节是零线。

为什么会发生这种事

一种想法是,可能8位的量化器有一个更大的死区,所以对于相同的输入语音级别,量化器会降低0的值。当然,我为量化器的类型做了一个假设。我还没有看到量化器是否是均匀的死区。下面是我的代码和情节

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

发布于 2021-12-08 19:21:22

这是底层PortAudio库和/或所使用的主机API的一个问题。根据从设备列表中选择的设备,它可能工作,也可能不工作。对我来说,有些设备可以创建垃圾值,而其他设备则可以正常工作。对我来说(在Linux上),uint8似乎比int8工作得更好。

如果您想解决问题,您应该在https://github.com/PortAudio/portaudio上创建一个问题。

正如注释中提到的,无论如何都很少使用8位示例,这可能解释了它们为什么受到如此严重的支持。如果您只想玩一玩,可能最容易使用默认的dtype,它在-1.0到1.0之间提供浮点数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70265185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档