python - Python多处理pyaudio错误(输入用完)
问题描述
代码:
从多处理导入 Process、Queue、Pipe、freeze_support 从 PyQt5.QtCore 导入 pyqtSignal,QThread 导入pyaudio 从时间导入睡眠 Papinhio_Player_Child_Proc 类(进程): def __init__(self,to_emitter,process_input_queue): 超级().__init__() self.to_emitter = to_emitter self.process_input_queue = process_input_queue #QoS设置 bit_rate = 128*1024 #128 kb/秒 数据包时间 = 744 数据包大小 = 4104 new_sample_rate = 44100 格式 = pyaudio.paInt16 频道 = 2 p = pyaudio.PyAudio() #self.stream = p.open(format=pyaudio.paInt16,channels=channels,output=True,input=True,rate=new_sample_rate,frames_per_buffer=packet_size) #self.stream.start_stream() 定义运行(自我): 经过 ''' 而(真): 麦克风数据 = self.stream.read(8*int(4104))#744msec 麦克风切片=音频段(麦克风数据,样本宽度=2,帧速率=44100,通道=1) 麦克风切片 = AudioSegment.from_mono_audiosegments(麦克风切片,麦克风切片) self.stream.write(microphone_slice.raw_data) self.to_emitter.send("读取麦克风数据包,并写入输出。") ''' 类 Papinhio_Player_Emitter(QThread): a_signal = pyqtSignal(str) def __init__(self, from_process: Pipe): 超级().__init__() self.data_from_process = from_process 定义运行(自我): 而真: 尝试: 数据 = self.data_from_process.recv() self.a_signal.emit(数据) 除了 EOFError 为 e: 打印(e) def a_signal_handler(self,string_data): 打印(字符串数据) 如果 __name__ == '__main__': 冻结支持() #papinhio_player_child_process = Papinhio_Player_Child_Proc() #papinhio_player_child_process.start() papinhio_player_mother_pipe, papinhio_player_child_pipe = Pipe() papinhio_player_queue = 队列() papinhio_player_emitter = Papinhio_Player_Emitter(papinhio_player_mother_pipe) papinhio_player_emitter.start() papinhio_player_emitter.a_signal.connect(a_signal_handler) #papinhio_player_queue.put(流) papinhio_player_child_process = Papinhio_Player_Child_Proc(papinhio_player_child_pipe, papinhio_player_queue) papinhio_player_child_process.start() 而(真): 睡觉(1)
up代码问题:无
什么时候出现问题?如果您取消注释这两行:
#self.stream = p.open(format=pyaudio.paInt16,channels=channels,output=True,input=True,rate=new_sample_rate,frames_per_buffer=packet_size) #self.stream.start_stream()
会发生什么问题?
回溯(最近一次通话最后): 文件“pyaudio_2.py”,第 71 行,在 papinhio_player_child_process.start() 文件“C:/msys64/mingw64/lib/python3.8/multiprocessing/process.py”,第 121 行,我 n 开始 self._popen = self._Popen(self) 文件“C:/msys64/mingw64/lib/python3.8/multiprocessing/context.py”,第 224 行,我 n _Popen 返回 _default_context.get_context().Process._Popen(process_obj) 文件“C:/msys64/mingw64/lib/python3.8/multiprocessing/context.py”,第 327 行,我 n _Popen 返回 Popen(process_obj) 文件“C:/msys64/mingw64/lib/python3.8/multiprocessing/popen_spawn_win32.py”,l ine 93,在__init__ 减少。转储(process_obj,to_child) 文件“C:/msys64/mingw64/lib/python3.8/multiprocessing/reduction.py”,第 60 行, 在转储 ForkingPickler(文件,协议).dump(obj) TypeError:无法腌制“_portaudio.Stream”对象 回溯(最近一次通话最后): 文件“”,第 1 行,在 文件“C:/msys64/mingw64/lib/python3.8/multiprocessing/spawn.py”,第 116 行,在 spawn_main exitcode = _main(fd, parent_sentinel) 文件“C:/msys64/mingw64/lib/python3.8/multiprocessing/spawn.py”,第 126 行,在 _主要的 self = reduction.pickle.load(from_parent) EOFError:用尽输入
问题:如何在进程中使用 pyaudio 流?
提前致谢, 克里斯·帕帕斯
解决方案
推荐阅读
- scala - 如何将 GetResponse 从 elastic4s 转换为特定案例类?
- google-cloud-platform - 使用 Podman 向 Google Container Registry 进行身份验证
- reactjs - 使用 React 钩子防止不正确的状态
- internet-explorer - Office 加载项未显示在 IE 11 中的 Powerpoint 应用程序上
- migration - 关于 ObjectBox 数据模型重命名的问题
- c++ - main 中的非可移植 const
- c# - 这是正确的..在执行'dbContext.SaveChanges()'命令时EF比较本地和上下文值以生成查询
- python - 如何将数据框中的列映射到另一个数据框的两个不同列并检索映射项?
- javascript - 我可以使用 Laravel 框架自动执行计算过程并直接更新表格吗?
- android - 将解析的数据添加到列表