鱼C论坛

 找回密码
 立即注册
查看: 1297|回复: 1

pyaudio报错

[复制链接]
发表于 2020-9-5 12:02:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
系统:windows
代码:
##coding=utf-8
import pyaudio, wave
from tkinter import *
import threading
import tkinter.filedialog, tkinter.messagebox

class RecordVoice(threading.Thread):
    def __init__(self):
        self.CHUNK = 1024
        self.FORMAT = pyaudio.paInt16
        print(pyaudio.paInt16)
        self.CHANNELS = 2
        self.RATE = 44100
        self.RECORD_SECONDS = 15
        self.FLAG = True

        self.root = Tk()
        self.root.title(u"录音工具")
        self.sourcefile = StringVar(self.root)

    def openpath(self):
        #选择录音文件保存的路径
        filename = tkinter.filedialog.asksaveasfilename(title=u"保存音频文件", defaultextension='wav', filetypes=[("wav file", ".wav")])
        print("filename:", filename)
        self.sourcefile.set(filename)
        if self.sourcefile.get() != '':
            self.startbutton.config(state="active")

    def startRecord(self):
        self.startbutton.config(state="disabled")

        #启动录音线程
        self.FLAG = True  #将FLAG恢复默认值
        threading.Thread.__init__(self)  #每次重新录音都新起一个线程
        threading.Thread.start(self)

        self.stopbutton.config(state="active")

    def run(self):
        #开始录音
        self.audio = pyaudio.PyAudio()
        #捕获当未选择保存位置时的异常
        try:
            self.wf = wave.open(self.sourcefile.get(), 'wb')
            self.wf.setnchannels(self.CHANNELS)
            self.wf.setsampwidth(self.audio.get_sample_size(self.FORMAT))
            self.wf.setframerate(self.RATE)
            self.stream = self.audio.open(format=self.FORMAT,
                            channels=self.CHANNELS,
                            rate=self.RATE,
                            input=True,
                            frames_per_buffer=self.CHUNK)
            print('* start recording *')
            while self.FLAG:
                self.wf.writeframes(self.stream.read(self.CHUNK))
        except FileNotFoundError:
            #当未选择保存位置时,弹出提示框,并将录音按钮置灰
            tkinter.messagebox.showerror("错误", "请选择保存位置")
            self.stopbutton.config(state="disabled")
            self.startbutton.config(state="disabled")

    def stopRecord(self):
        # 停止录音
        print('* done recording *')
        self.FLAG = False   #需要另起一个线程,在录音过程中监控该flag,一旦为false则停止录音

        self.stream.stop_stream()
        self.stream.close()
        self.audio.terminate()
        self.wf.close()

        self.stopbutton.config(state="disabled")
        self.startbutton.config(state="active")

    def recordUI(self):
        self.frame = Frame(self.root, padx=10, pady=10)
        self.frame.pack()

        self.frame2 = Frame(self.root, padx=10, pady=10)
        self.frame2.pack()

        Label(self.frame, text="保存位置").grid(row=0, column=0,padx=5)
        Entry(self.frame, textvariable=self.sourcefile, state="readonly").grid(row=0, column=1,padx=5)
        Button(self.frame, text="打开", command=self.openpath).grid(row=0, column=2,padx=5)

        self.startbutton = Button(self.frame2, text="开始录音", command=self.startRecord, state="disabled")
        self.startbutton.grid(row=0, column=0,padx=10)
        self.stopbutton = Button(self.frame2, text="停止录音", command=self.stopRecord, state="disabled")
        self.stopbutton.grid(row=0, column=1,padx=10)

        self.root.mainloop()


if __name__ == "__main__":
    p = RecordVoice()
    p.recordUI()

报错:
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\x4\AppData\Local\Programs\Python\Python38\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
  File "d:\runc\fishc.py", line 47, in run
    self.stream = self.audio.open(format=self.FORMAT,
  File "C:\Users\x4\AppData\Local\Programs\Python\Python38\lib\site-packages\pyaudio.py", line 750, in open
    stream = Stream(self, *args, **kwargs)
  File "C:\Users\x4\AppData\Local\Programs\Python\Python38\lib\site-packages\pyaudio.py", line 441, in __init__
    self._stream = pa.open(**arguments)
OSError: [Errno -9998] Invalid number of channels
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-5 21:33:30 | 显示全部楼层
没人?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 20:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表