问题:

我似乎无法在具有ARM v7l处理器的32位Ubuntu系统上同时实现正常的音频输入和输出,而且我也不明白为什么。

摘要:

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

出于某种原因,在ARM v7l平台上,我最需要工作(NVIDIA Jetson),音频回调会在短暂的正常运行后停止。它总是在任意数量的帧之后,在运行和不同的Jetson(具有不同的OS)之间保持恒定。

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

我尝试了什么:

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

  • 诊断:

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

    是否有人需要更多信息来解决这个问题,或者是否有说明实验临时解决方法

    最佳答案

    经过一周的试验并最终在此处发布,我自然在发布后的几分钟内解决了此问题。

    我在参数中传递了LowLatency,但是硬件跟不上。乘以一个常数可以立即解决该问题。

    尽管由于神秘原因它仍然定期挂起,但它不再是永远挂起的情况。我猜想延迟将使我更接近永久解决方案。

    解决方案:

    调整输入/输出延迟。

    关于c++ - 读/写同一设备时,Portaudio挂起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40159912/

    10-15 01:35