c - ALSA snd_pcm_sw_params_set_stop_threshold() 设置为较低的值会导致欠载

标签 c linux alsa

对于麦克风,我将停止阈值理解为:如果声卡硬件环形缓冲区中的填充样本超过此阈值,则硬件停止从麦克风的模数转换器读取数据。因此环形缓冲区不会被覆盖。

对于扬声器,它是应该导致声卡的数模转换器停止播放音频的最大数据。任何进一步的数据都会导致溢出。

(如果我在上述假设中有误,请纠正我)

对于扬声器,当我将 ALSA snd_pcm_sw_params_set_stop_threshold() 设置为较低的值时,我可以看到欠载。我预计会有更多的超支。这是为什么?

谢谢

最佳答案

对于捕获设备,当可用帧数(即捕获但尚未从缓冲区中读取的帧)达到停止阈值时,就会发生溢出。 只有捕获设备才会发生超限。

对于播放设备,当可用帧数(即缓冲区中的可用空间)达到停止阈值时,就会发生数据不足。 Underrun 只会发生在播放设备上。

降低停止阈值将使 xruns 更有可能。

关于c - ALSA snd_pcm_sw_params_set_stop_threshold() 设置为较低的值会导致欠载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15814986/

相关文章:

mysql - perl: 符号查找错误:/usr/local/lib/perl/5.10.1/auto/DBD/mysql/mysql.so: undefined symbol: mysql_init

c - snd_pcm_writei 延迟后不工作

c - 如何在 struct in_addr 中存储人类可读的 IP?

C - 生成输入数量的随机数及其定位标签

c - 如何启动一个进程并等待其子进程完成

ubuntu - 如何使用 alsa API 获取麦克风输入的音量(或 dB)?

audio - ALSA应用程序可在Raspberry Pi上读取和播放WAV文件

c++ - 如何使用 Make 构建与一些 C++ 代码混合的 C 项目?

linux - 如何在ansible中获取自定义环境变量?

Linux 密码管理器修剪密码中的尾随空格