reading/writing 到同一设备时 Portaudio 挂起
Portaudio hangs when reading/writing to same device
问题:
我似乎无法在带有 ARM v7l 处理器的 32 位 Ubuntu 系统上同时实现有效的音频输入和输出,我不明白为什么。
总结:
我编写了 PortAudio 代码,可以在主要平台和架构(Windows、Linux, OS X,x32 和 x64)。
出于某种原因,在我最需要工作的 ARM v7l 平台上 (NVIDIA Jetson),音频回调在正常运行很短的一段时间后就停止了。它总是在任意数量的帧之后,这在运行和不同的 Jetsons(具有不同的 OSes)之间是恒定的。
我发现只有当我为输入和输出初始化 PortAudio 流时才会发生这种情况,但是如果我为 outputParams
传递 nullptr
,一切正常。
我试过的:
- 每个可用的后端(Jack、OSS、ALSA 等)
- 正在更改采样率、输入和输出通道。
- 删除我们正在执行的音频处理步骤以消除延迟问题,将设备变成一个简单的环回设置。
- 来自不同制造商的大量计算机上的各种硬件设备,例如 iO4, an XMOS 板,以及外部和内置麦克风和扬声器。
- 在 PortAudio 源代码中添加和删除一些代码,这些代码提到了某些平台上的潜在死锁问题(抱歉含糊不清,但不记得确切的位置---
grep
'ing 揭示了许多可能的地方,但肯定还没有用尽这个选项)。
诊断:
这似乎是 PortAudio 中的错误,我发现 bug reports 记录了类似的行为。我正在遵循非常简单的记录程序来识别我要使用的硬件设备、提取相关属性并相应地准备我的流。同样,它 几乎 无处不在。
是否有人需要更多信息来对此进行诊断或有可能的解释、实验或临时解决方法?
经过一个星期的实验,终于在这里发帖,我自然在发帖几分钟内解决了这个问题。
我在参数中传递了 LowLatency
,但硬件跟不上。乘以一个常数立即解决了问题。
虽然由于神秘的原因它仍然周期性地挂起,但它不再是总是挂起的情况。我猜玩延迟会使我更接近永久解决方案。
解法:
调整input/output延迟。
问题:
我似乎无法在带有 ARM v7l 处理器的 32 位 Ubuntu 系统上同时实现有效的音频输入和输出,我不明白为什么。
总结:
我编写了 PortAudio 代码,可以在主要平台和架构(Windows、Linux, OS X,x32 和 x64)。
出于某种原因,在我最需要工作的 ARM v7l 平台上 (NVIDIA Jetson),音频回调在正常运行很短的一段时间后就停止了。它总是在任意数量的帧之后,这在运行和不同的 Jetsons(具有不同的 OSes)之间是恒定的。
我发现只有当我为输入和输出初始化 PortAudio 流时才会发生这种情况,但是如果我为 outputParams
传递 nullptr
,一切正常。
我试过的:
- 每个可用的后端(Jack、OSS、ALSA 等)
- 正在更改采样率、输入和输出通道。
- 删除我们正在执行的音频处理步骤以消除延迟问题,将设备变成一个简单的环回设置。
- 来自不同制造商的大量计算机上的各种硬件设备,例如 iO4, an XMOS 板,以及外部和内置麦克风和扬声器。
- 在 PortAudio 源代码中添加和删除一些代码,这些代码提到了某些平台上的潜在死锁问题(抱歉含糊不清,但不记得确切的位置---
grep
'ing 揭示了许多可能的地方,但肯定还没有用尽这个选项)。
诊断:
这似乎是 PortAudio 中的错误,我发现 bug reports 记录了类似的行为。我正在遵循非常简单的记录程序来识别我要使用的硬件设备、提取相关属性并相应地准备我的流。同样,它 几乎 无处不在。
是否有人需要更多信息来对此进行诊断或有可能的解释、实验或临时解决方法?
经过一个星期的实验,终于在这里发帖,我自然在发帖几分钟内解决了这个问题。
我在参数中传递了 LowLatency
,但硬件跟不上。乘以一个常数立即解决了问题。
虽然由于神秘的原因它仍然周期性地挂起,但它不再是总是挂起的情况。我猜玩延迟会使我更接近永久解决方案。
解法:
调整input/output延迟。