ALSA PCM非阻塞捕获产生静态

时间:2016-06-28 07:11:43

标签: linux alsa pcm

每当我在ALSA中构建一个非阻塞PCM捕获流时,当我调用snd_pcm_readi()时,我有时会得到垃圾样本(意味着数据被填充,我告诉我只读了N个样本) ,但只有M是有效的,其余的只是垃圾)。这告诉我样品实际上没有准备好,所以我不明白ALSA为什么会退回它们。

对于那些在某个地方有ALSA提供的latency工具的人,我可以通过运行latency -P <playback-device> -C <capture-device> -r 48000来重现此静态。对于我来说,ALSA开始在16ms的往返时间内正常化,但它只是听起来非常糟糕。

我能够捕获一些不良数据,然后我将它加载到Audacity中进行可视化: https://drive.google.com/file/d/0B-1aumGKQcQTcUJoZzIwRWhYSFE/view?usp=sharing

看起来内部缓冲区偶尔会向我发送比实际捕获的数据更多的数据,我最终要么从内部环形缓冲区读取旧的PCM数据,要么(在一开始)读取一堆零。

任何人都可以帮我理解发生了什么吗?

如果有帮助:

  • 硬件:Samson Meteor Mic(USB音频,USB调音台)[虽然,它甚至可以用我的内置麦克风]
  • ALSA版本:高级Linux声音架构驱动程序版本k4.4.0-28-generic。
  • apt-cache策略(已安装的alsa-lib版本):1.1.0-0ubuntu1

编辑: 我的投票结果是偏离主题的,我不同意......我认为API不符合文档所说的内容,并且不理解为什么。我已经改写了这个问题,或许可以让它更清晰一点,但如果它看起来仍然偏离主题,请告诉我为什么这样我可以纠正它或者自己关闭它。

0 个答案:

没有答案