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