c++ - 读取/写入同一设备时 Portaudio 挂起

标签 c++ linux audio arm portaudio

问题:

我似乎无法在配备 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/

相关文章:

c++ - 任意类型上的 GDB 条件断点,例如 C++ std::string 相等性

c++ - 这是原子读写 bool 的正确方法吗?

linux - 在汇编中进行除法时出现浮点异常(核心已转储)

javascript - 在背景上播放音乐/声音的方法

c++ - 字符串的哈希函数不适用于某些字符串?

Java Runtime.getRuntime.exec() 返回 null 但在 shell 中返回有效字符串

linux - 正则表达式检查括号是否嵌套

python - 如何仅使用命令行在不创建mp3文件的情况下使用python读取声音中的字符串

ios - 音频在后台播放但没有声音 Cordova 3+ IOS

c++ - 引用成员必须是常量?