首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:录制可以工作,但只有一次,然后我必须重新启动脚本

Python:录制可以工作,但只有一次,然后我必须重新启动脚本
EN

Stack Overflow用户
提问于 2014-09-16 18:28:53
回答 1查看 1K关注 0票数 2

基本上我正在尝试做的是录制音频(使用pyaudio)几秒钟并保存它,它工作得很好,没有问题,除了录制3秒后,它将保持麦克风在使用中几乎一分钟,同时我不能录制,同时我会得到一个错误。代码如下。提前感谢您的任何答复。

代码语言:javascript
复制
def startrecordingnow():
print ("Recording Now")
global p
stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)
frames = []
for i in range(0, int(RATE / CHUNK * 3)):
    data = stream.read(CHUNK)
    frames.append(data)
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
progress.stop()
print ("Not recording anymore")
saveandsend("None")
sys.exit()

这是我在第一次录制后按下按钮时得到的错误,而且录制使用了一个线程,不确定这是否与问题有关,这就是为什么在函数的末尾有sys exit()。

代码语言:javascript
复制
    Exception in thread Thread-3:
Traceback (most recent call last):
  File "C:\Python27\lib\threading.py", line 810, in __bootstrap_inner
    self.run()
  File "C:\Python27\lib\threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "C:\Users\Liam\Desktop\NXT-Python\examples\voice-recognition.py", line 70, in startrecordingnow
    stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)
  File "C:\Python27\lib\site-packages\pyaudio.py", line 747, in open
    stream = Stream(self, *args, **kwargs)
  File "C:\Python27\lib\site-packages\pyaudio.py", line 442, in __init__
    self._stream = pa.open(**arguments)
IOError: [Errno Invalid input device (no default output device)] -9996

编辑:脚本只工作一次,之后必须重新启动程序,否则上面的错误就会出现,所以它可能不是程序正在使用的麦克风的问题。

EN

回答 1

Stack Overflow用户

发布于 2014-09-16 19:32:31

答案非常简单,我没有使用p作为全局变量,而是使用它作为局部变量,如下所示:

代码语言:javascript
复制
def startrecordingnow():
print ("Recording Now")
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)
frames = []
for i in range(0, int(RATE / CHUNK * 3)):
    data = stream.read(CHUNK)
    frames.append(data) 
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
progress.stop()
print ("Not recording anymore")
saveandsend("None")
sys.exit()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25866398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档