PyAudio.write SystemError:必须为“#”格式定义 PY_SSIZE_T_CLEAN 宏

新手上路,请多包涵

当我尝试在 python-3.10.1 virtualenv(使用 python-3.9.0 venv 创建并升级)中使用 PyAudio-0.2.11 播放一个 wave 文件时,我收到一个异常并且没有播放任何内容,其他的一切顺利。

 Exception in thread WavPlayer:rsrc/sound.wav:
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1009, in _bootstrap_inner
    self.run()
  File "/Code/py/tetris/tetris.py", line 39, in run
    self.play()
  File "/Code/py/tetris/tetris.py", line 35, in play
    self.stream.write(data)
  File "/Code/py/tetris/.venv/lib/python3.10/site-packages/pyaudio.py", line 584, in write
    pa.write_stream(self._stream, frames, num_frames,
SystemError: PY_SSIZE_T_CLEAN macro must be defined for '#' formats

我不知道 '#' format 代表什么,我确信我的代码与 C API 无关,但它在 python-3.9.x 下运行良好,是 PyAudio 库本身的问题?我该如何解决?

原文由 gynamics 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 4.6k
1 个回答

不幸的是,Python 3.10 中引入了重大更改(请参阅 bpo-40943PEP-0353 ),因此 PyAudio 需要更新。

我已经在上游提交了一个修复,但由于该项目自 2017 年以来没有更新,我不太确定它能多快得到审查。

同时,您可以自由地从源代码构建 我的分支 并使用它:)

原文由 skeh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题