1

我在 Windows 7 上使用此处可用的 64 位 PyAudio 构建。当我导入 pyaudio 并执行pyaudio.PyAudio()时,它工作正常,但大量似乎是调试信息的内容被打印到 stderr。Stackoverflow 上有一个关于此问题的先前问题但它已经一年多没有活动并且似乎未解决。

正如该问题的提问者在对答案的回复中指出的那样,重定向标准错误(通过做sys.stderr = somethingelse)不会阻止错误消息进入标准错误。即使是这样,我也不想重定向所有的 stderr 来处理 PyAudio。

我怀疑问题在于 PyAudio 和/或 PortAudio 的这个构建是用某种调试标志编译的,导致调试信息在 C 扩展代码中的某处“原始”打印,绕过Python IO 流。所以我要问的是:

  1. 任何人都可以确认这种行为,和/或确认在 Win64 的不同版本的 PyAudio 中不会发生这种情况吗?(我没有编译 PyAudio 的设置。)
  2. 有没有办法在不重新编译 PyAudio 的情况下修复它?通过“修复它”,我的意思是仅从PyAudio 抑制此调试输出(不完全重定向 stderr)。

(如果这只是这个版本的问题,我可能会尝试联系提供这些 64 位版本的人,并询问他是否故意提供调试版本,因为他可能只是在编译时忘记关闭调试。)


编辑:这是我收到的消息。我会尽量压缩它们,因为它们有数百行长。我还应该注意,这些看起来不像错误消息。它们似乎只是有关各种设备的状态消息。我首先得到:

before paHostApiInitializers[0].
after paHostApiInitializers[0].
before paHostApiInitializers[1].
WASAPI: device idx: 00
WASAPI: ---------------
WASAPI:0| name[Realtek Digital Output (Realtek High Definition Audio)]
WASAPI:0| form-factor[8]
WASAPI:0| def.SR[48000] max.CH[2] latency{hi[0.010000] lo[0.003000]}
WASAPI: device idx: 01

然后是一系列以 WASAPI 开头并提及其他设备(线路输入、麦克风等)的其他类似消息。然后:

WASAPI: initialized ok
after paHostApiInitializers[1].
before paHostApiInitializers[2].
Setup called
Enum called
noError = 0
Enum called
noError = 1
Device 1 has render alias
Device 1 has capture alias

. . . 又是一堆关于“枚举调用”和“捕获别名”等的类似消息。然后:

Interfaces found: 7
Device 1 has render alias
Device 1 has capture alias
Interface 1, Name: ATI HD Audio rear output
Creating pin 0:
No standard streaming
Creating pin 1:
Not source/sink
Filter NOT created

. . . 以及其他设备编号的一系列类似消息块。然后在最后:

after paHostApiInitializers[2].

这就是我看到的pyaudio.PyAudio()

4

0 回答 0