0

使用不断输出数据的 USB 音频设备(它是具有多个通道的 HID)。

我希望实现的是在设备发出信号之前忽略音频。那时我会开始监控提要。来自设备的第二个信号表明我可以重新忽略数据。我已经以非阻塞模式打开了该设备,因此它不会干扰其他 USB 信号进入。

这工作正常,除了当我开始读取数据(通过snd_pcm_readi)时,我收到一个 EPIPE 错误,指示缓冲区溢出。这可以通过snd_pcm_prepare每次调用来解决,但我希望有一种方法可以让缓冲区清空而我忽略它。

我看过snd_pcm_drainsnd_pcm_drop但这些停止了 PCM,我宁愿让它保持打开状态。

建议?

4

1 回答 1

3

要忽略缓冲区溢出,请更改 PCM 设备的软件参数:将停止阈值设置为与边界相同的值。使用该配置,溢出不会导致设备停止,但会让它继续填充缓冲区。(其他错误仍会停止设备;拔下 USB 设备后将很难继续...)

当发生溢出时,缓冲区将包含比实际容量更多的数据,即,snd_pcm_avail将报告比缓冲区大小更多的可用帧。

当您想真正开始录制时,您应该调用snd_pcm_forward以丢弃所有这些无效帧。

于 2013-02-28T20:22:33.867 回答