【发布时间】:2023-04-01 14:06:01
【问题描述】:
我似乎无法弄清楚为什么我的代码不会产生 fft 由 sounddevice.rec() 制成的 numpy 数组 我能够使代码与音频文件一起使用,但不能与 数据形式 sounddevice
这是我的代码:
import sounddevice as sd
import numpy as np
import matplotlib.pyplot as plt
duration = 1 #sec
fs = 44100
def record():
"""records from the mic"""
recording = sd.rec(int(duration * fs), samplerate = fs, channels =1,
dtype='float64')
#waits till ur finished recording
sd.wait(duration)
return recording
def play(recording):
"""plays recording"""
sd.play(recording, fs)
sd.wait(duration)
def plot_signal_freq(ys):
N = ys.size
print(N)
L = N/fs
yk = np.fft.fft_freq(ys)
k = np.arange(N)
freqs = k/L
fig, ax = plt.subplots()
ax.plot(freqs, np.abs(yk))
while True:
recording = record()
print(type(recording.dtype))
print(recording)
play(recording)
plot_signal_freq(recording)`
这是 fft 在钢琴和弦文件上的图片: enter image description here
这是我录音中 fft 的照片 enter image description here
【问题讨论】:
-
欢迎来到 SO!您能否提供有关该错误的更多详细信息?您提到它适用于文件中的数据,但不适用于设备。它是如何“不起作用”的?
-
我将它应用于钢琴音符的基本录音,并获得了正常的频率响应作为回报。当我将它应用到我的声音录音中时,该图是极端着色的。我无法想象我以这些频率说话。
-
我在原帖中添加了图片
-
你应该先用一个非常简单的声音来测试它,比如正弦波。您的声音完全有可能(甚至可能)包含很大范围的频率。也可能有环境声音。如果可以,一个好的测试将播放您录制到文件中的相同声音。这样你就可以验证你在这两种情况下得到的结果是一样的。
-
感谢您的推荐。所以我使用中间 c 用一个简单的正弦波尝试了它,并得到了与我之前描述的相同的结果。我目前不相信这是噪音。不知何故,当我使用录音时,它正在时域而不是频域中绘制一些东西