Python 可录制多小时音频
我试图一次录制多个(约12)小时的麦克风。当我试图关闭流时,我得到了一个struct错误,但它只在长时间录制后发生 这是我的密码: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
导入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时关闭它。在循环中,我会不时创建新文件,将数据拆分为较小的文件。