Usb alsa-管理非阻塞流

Usb alsa-管理非阻塞流,usb,centos,alsa,Usb,Centos,Alsa,使用usb音频设备(具有多个通道的HID)不断输出数据 我希望实现的是忽略音频,直到设备发出信号。在这一点上,我将开始监视提要。来自设备的第二个信号将指示我可以返回忽略数据。我已经在非阻塞模式下打开了该设备,所以它不会干扰其他USB信号的输入 这工作正常,只是当我开始读取数据时(通过snd\u pcm\u readi),我收到一个指示缓冲区溢出的EPIPE错误。这可以通过每次调用snd\u pcm\u prepare来解决,但我希望有一种方法可以让缓冲区清空,而我忽略它 我已经查看了snd\u

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

我希望实现的是忽略音频,直到设备发出信号。在这一点上,我将开始监视提要。来自设备的第二个信号将指示我可以返回忽略数据。我已经在非阻塞模式下打开了该设备,所以它不会干扰其他USB信号的输入

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

我已经查看了
snd\u pcm\u排水管
snd\u pcm\u排水管
,但它们会停止pcm,我宁愿让它保持打开状态


建议?

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

发生溢出时,缓冲区包含的数据将超过实际容纳的数据量,即,
snd\u pcm\u avail
将报告比缓冲区大小更多的可用帧


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

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

发生溢出时,缓冲区包含的数据将超过实际容纳的数据量,即,
snd\u pcm\u avail
将报告比缓冲区大小更多的可用帧


当你想真正开始录音时,你应该打电话扔掉所有那些无效的帧。

为什么要让PCM设备保持运行?您是否测量过
snd\u pcm\u start
的延迟太高?好吧,这是一个很好的问题。也许我可以简单地忽略它。。好。。忽略它..为什么要保持PCM设备运行?您是否测量过
snd\u pcm\u start
的延迟太高?好吧,这是一个很好的问题。也许我可以简单地忽略它。。好。。忽略它。。