gpt4 book ai didi

usb - alsa - 管理非阻塞流

转载 作者:行者123 更新时间:2023-12-04 19:33:27 37 4
gpt4 key购买 nike

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

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

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

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

建议?

最佳答案

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

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

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

关于usb - alsa - 管理非阻塞流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15136089/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com