Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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 可录制多小时音频_Python_Pyaudio - Fatal编程技术网

Python 可录制多小时音频

Python 可录制多小时音频,python,pyaudio,Python,Pyaudio,我试图一次录制多个(约12)小时的麦克风。当我试图关闭流时,我得到了一个struct错误,但它只在长时间录制后发生 这是我的密码: 导入pyaudio 输入波 导入系统 输入键盘 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 打印('记录') 区块=1024 格式=pyaudio.paInt16 通道=2 费率=44100 记录时间=5秒 WAVE\u OUTPUT\u FILENAME=“raw\u radio.wav” p=pyaudio.pyaud

我试图一次录制多个(约12)小时的麦克风。当我试图关闭流时,我得到了一个struct错误,但它只在长时间录制后发生

这是我的密码:

导入pyaudio
输入波
导入系统
输入键盘
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
打印('记录')
区块=1024
格式=pyaudio.paInt16
通道=2
费率=44100
记录时间=5秒
WAVE\u OUTPUT\u FILENAME=“raw\u radio.wav”
p=pyaudio.pyaudio()
流=p.open(格式=格式,
频道=频道,
比率=比率,
输入=真,
帧(每帧缓冲区=块)
帧=[]
flag=False
尝试:
while(非标志和sys.getsizeof(frames)
下面是stdout:

recording
ended recording, now saving
Traceback (most recent call last):
  File ".\record_mic.py", line 54, in <module>
    wf.writeframes(b''.join(frames))
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py", line 427, in writeframes
    self.writeframesraw(data)
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py", line 416, in writeframesraw
    self._ensure_header_written(len(data))
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py", line 457, in _ensure_header_written
    self._write_header(datasize)
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py", line 474, in _write_header
    self._sampwidth * 8, b'data'))
struct.error: argument out of range
Exception ignored in: <bound method Wave_write.__del__ of <wave.Wave_write object at 0x000001CA028A5FD0>>
Traceback (most recent call last):
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py", line 316, in __del__
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py", line 434, in close
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py", line 457, in _ensure_header_written
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py", line 474, in _write_header
struct.error: argument out of range
录制
已结束录制,现在正在保存
回溯(最近一次呼叫最后一次):
文件“\record_mic.py”,第54行,在
wf.writeframes(b.)。连接(帧))
文件“C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py”,第427行,writeframes格式
self.writeframesraw(数据)
文件“C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py”,第416行,writeframesraw格式
自我确认?标题?已写入(len(数据))
文件“C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py”,第457行,在头中写入
自写头(数据大小)
文件“C:\Users\Ben\AppData\Local\Programs\Python\36\lib\wave.py”,第474行,在写入头中
self._sampwidth*8,b'data'))
struct.error:参数超出范围
在中忽略异常:
回溯(最近一次呼叫最后一次):
文件“C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py”,第316行,在__
文件“C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py”,第434行,关闭
文件“C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\wave.py”,第457行,在头中写入
文件“C:\Users\Ben\AppData\Local\Programs\Python\36\lib\wave.py”,第474行,在写入头中
struct.error:参数超出范围

我在想,因为我必须按住Ctrl+C键两次才能引发键盘输入错误,所以我正在做一些错误编辑帧列表的事情。

您正在尝试编写一个波形文件,其长度超过了波形格式在一个波形块中所能代表的长度

(我不确定一个RIFF文件是否允许包含多个波形块,也不确定是否允许支持包含多个波形块的RIFF文件。但波形模块可以读取它们。它只是不能写入它们。如果是这样的话,波形文件的长度将没有实际限制。)


您正在尝试立即写入2*44100*2*(12*3600)==7620480000或7.3GB

发生异常的代码是:

        self._file.write(struct.pack('<L4s4sLHHLLHH4s',
            36 + self._datalength, b'WAVE', b'fmt ', 16,
            WAVE_FORMAT_PCM, self._nchannels, self._framerate,
            self._nchannels * self._framerate * self._sampwidth,
            self._nchannels * self._sampwidth,
            self._sampwidth * 8, b'data'))

self.\u file.write(struct.pack)('您不在循环中写入,但尝试保存所有数据(12小时数据)最后,它可能是每一个大数据,它可能会造成问题。我宁愿在
中写入
而在
循环中,并且只在按下Ctrl+C时关闭它。在循环中,我会不时创建新文件,将数据拆分为较小的文件。