读/写同一设备时,Portaudio挂起

时间:2016-10-20 16:35:55

标签: c++ linux audio arm portaudio

问题:

我似乎无法在使用ARM v7l处理器的32位Ubuntu系统上同时实现工作音频输入和输出,我不明白为什么。

要点:

我编写了PortAudio代码,可以在主要平台和架构(Windows,Linux,OS X,x32和x64)上运行的几个不同硬件设备上成功初始化,记录,处理和播放实时音频。

出于某种原因,在ARM v7l平台上我最需要工作(NVIDIA Jetson),音频回调在正常运行一段非常短暂的时间后停止发生。它总是在一些任意数量的帧之后,在运行和不同的Jetson(具有不同的操作系统)之间是恒定的。

我发现只有当我为输入和输出初始化PortAudio流时才会发生这种情况,但如果我为outputParams传递grep,则一切正常。

我尝试了什么:

  • 每个可用的后端(Jack,OSS,ALSA等)
  • 更改采样率,输入和输出通道。
  • 删除我们正在执行的音频处理步骤以消除延迟问题,将设备转变为简单的环回设置。
  • 各种硬件设备,例如iO4XMOS板,以及来自不同制造商的众多计算机上的外部和内置麦克风和扬声器。
  • 添加并删除PortAudio源代码中的一些代码,提到某些平台上存在潜在的死锁问题(抱歉模糊不清,但不记得确切的地方--- {{1}}显示了许多可能的地方,但是绝对没有用尽这个选项)。

诊断:

这似乎是PortAudio中的一个错误,我发现bug reports记录了类似的行为。我正在遵循非常简单的文档化程序来识别我想要使用的硬件设备,提取相关属性,并相应地准备我的流。同样,它几乎几乎无处可用。

是否有人需要更多信息才能对此进行对比,或者有可能解释实验临时解决方法

1 个答案:

答案 0 :(得分:0)

经过一周的实验并最终在这里发布,我自然在发布后的几分钟内解决了这个问题。

我正在LowLatency通过参数,但硬件并没有跟上。乘以常数立即解决问题。

虽然由于神秘的原因它仍然会定期挂起,但它不再是一个永远不变的情况。我猜测玩游戏会让我更接近永久解决方案。

<强>解决方案:

调整输入/输出延迟。