ALSA 检查 spdif 是否已插入/活动

ALSA 检查 spdif 是否已插入/活动

alsa / libasound 中有什么方法可以检查 SPDIF In 是否确实连接了设备?
我目前正在使用带有 USB 声卡的 Raspberry Pi,将通过 SPDIF 输入的 PC 音频与 Pi 的音频合并,然后将其输出到扬声器。
问题是,如果我关闭电脑或将其设置为睡眠状态,扬声器会开始发出几秒钟的敲击声,然后变得安静,并且我的程序会出现大量捕获缓冲区溢出。
因此,在读取 PCM 输入之前,我需要检查是否确实连接了设备。

答案1

我找到了一种解决方案,尽管不是我希望的最佳解决方案。
如果有人有想法,我很高兴听到。在那之前我会按如下方式处理这个问题:

我注意到,当电缆被移除时,样本进入的速率会下降。我希望计算机关闭时也是如此,但我认为这是相当安全的假设。
不管怎样,为了确定是播放还是忽略流,我使用了 chronohigh_precision_clock来计时 20 个周期之间的间隔。
在每个周期中,我都会收集使用的读取样本量snd_pcm_readi(我使用非阻塞模式和超时来防止在读取过程中卡住的时间超过一个周期应花费的时间)。
最后,我计算采样率,如果它与我的预期采样率相差超过 2kHz,我会忽略该流,直到它再次回到预期范围。

相关内容