Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 使用pyaudio录音,即使麦克风静音或针落静音,也会给出垃圾值_Python 2.7_Matplotlib_Audio Recording_Pyaudio - Fatal编程技术网

Python 2.7 使用pyaudio录音,即使麦克风静音或针落静音,也会给出垃圾值

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

我正在windows上使用pyaudio进行录制。我正在使用matplotlib绘制录制的声音

录音长度为60秒

缓冲区大小为1024

我得到的是,在录制时,对于最初的几个迭代,我得到的是垃圾值。之后,它开始录制实际的声音

我还发现,即使麦克风是静音的,它也会给出垃圾值

这些垃圾值正在影响我的计算结果

你知道为什么会录制这些垃圾值/声音吗??有什么快速的解决办法吗

代码:

简单代码:

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()