Python 2.7 使用pyaudio录音,即使麦克风静音或针落静音,也会给出垃圾值
我正在windows上使用pyaudio进行录制。我正在使用matplotlib绘制录制的声音 录音长度为60秒 缓冲区大小为1024 我得到的是,在录制时,对于最初的几个迭代,我得到的是垃圾值。之后,它开始录制实际的声音 我还发现,即使麦克风是静音的,它也会给出垃圾值 这些垃圾值正在影响我的计算结果 你知道为什么会录制这些垃圾值/声音吗??有什么快速的解决办法吗 代码: 简单代码:Python 2.7 使用pyaudio录音,即使麦克风静音或针落静音,也会给出垃圾值,python-2.7,matplotlib,audio-recording,pyaudio,Python 2.7,Matplotlib,Audio Recording,Pyaudio,我正在windows上使用pyaudio进行录制。我正在使用matplotlib绘制录制的声音 录音长度为60秒 缓冲区大小为1024 我得到的是,在录制时,对于最初的几个迭代,我得到的是垃圾值。之后,它开始录制实际的声音 我还发现,即使麦克风是静音的,它也会给出垃圾值 这些垃圾值正在影响我的计算结果 你知道为什么会录制这些垃圾值/声音吗??有什么快速的解决办法吗 代码: 简单代码: import pyaudio import wave import struct val = [] def r
import pyaudio
import wave
import struct
val = []
def record(out_file):
duration = 60 #record for 1 second. Pretty long duration don't you think
buffer=1024
pin = pyaudio.PyAudio()
channels=2
rate=8820
format=pyaudio.paInt16
inStream = pin.open(format=format, channels=channels, rate=rate,input=True, frames_per_buffer=buffer)
out = []
upper_lim = rate / buffer * duration
val=[]
x=[]
if not inStream:
return
data = inStream.read(buffer)
x=list(struct.unpack("%dh"%(len(data)/2),data))
val=val+list(x)
out.append(data)
for i in xrange(1, upper_lim):
x=[]
if not inStream:
break
data = inStream.read(buffer)
x=list(struct.unpack("%dh"%(len(data)/2),data))
val=val+list(x)
out.append(data)
if inStream:
inStream.stop_stream()
inStream.close()
pin.terminate()
存储在“val”变量中的值将使用matplotlib绘制在不同的线程中 你能用任何代码或工作示例演示吗?
matplotlib
实际上是问题的一部分吗?你能把这段代码简化成一个可以被其他人测试的最小示例吗?我添加了简单版本的代码
import pyaudio
import wave
import struct
val = []
def record(out_file):
duration = 60 #record for 1 second. Pretty long duration don't you think
buffer=1024
pin = pyaudio.PyAudio()
channels=2
rate=8820
format=pyaudio.paInt16
inStream = pin.open(format=format, channels=channels, rate=rate,input=True, frames_per_buffer=buffer)
out = []
upper_lim = rate / buffer * duration
val=[]
x=[]
if not inStream:
return
data = inStream.read(buffer)
x=list(struct.unpack("%dh"%(len(data)/2),data))
val=val+list(x)
out.append(data)
for i in xrange(1, upper_lim):
x=[]
if not inStream:
break
data = inStream.read(buffer)
x=list(struct.unpack("%dh"%(len(data)/2),data))
val=val+list(x)
out.append(data)
if inStream:
inStream.stop_stream()
inStream.close()
pin.terminate()