ALSA:扬声器和麦克风的周期大小之间的关系

Posted

技术标签:

【中文标题】ALSA:扬声器和麦克风的周期大小之间的关系【英文标题】:ALSA: Relation between period size of speaker and mic 【发布时间】:2013-03-27 23:26:44 【问题描述】:

我有一个带有麦克风和扬声器的音频会议设备。麦克风和扬声器都具有由snd_pcm_hw_params_set_rate_near() 设置的相同采样率,例如 8000 Hz。我是否需要将两者的周期大小和周期数设置为相同(两个这样的设备相互通信)?

或者我可以为扬声器选择不同的周期/周期大小而不是为麦克风配置的周期/周期大小吗? 如何决定使用哪个周期和周期大小?

我正在使用snd_pcm_hw_params_set_period_size_near()snd_pcm_hw_params_set_periods_near() API 来设置扬声器和麦克风的周期大小和周期。

(我是 ALSA 新手)。

【问题讨论】:

【参考方案1】:

支持的周期大小和缓冲区大小取决于驱动程序,但如果是同一设备,则播放和捕获设备可能支持相同的参数。

参数是否需要相同取决于您的应用程序如何访问这些设备。就驱动而言,这些设备是独立工作的。

要使用的缓冲区/周期大小取决于您希望如何平衡延迟、电源使用和过载/欠载安全性。 延迟与播放设备上的缓冲区大小或捕获设备上的周期大小成正比。 用电量会因较短的时间而略有增加。 Xrun 安全性会因缓冲区的增大而提高,而周期会因周期较短而提高。

【讨论】:

您如何确定您的设备支持的缓冲区/周期大小?是否没有一种通用的编程方式来设置适用于任何驱动程序的 alsa 周期/缓冲区大小?

以上是关于ALSA:扬声器和麦克风的周期大小之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

Manjaro设置声音

如何使用 Alsa 库更改扬声器的音量?

如何使用 alsa 库 API 与耳机和扬声器一起使用?

iOS 是不是会降低使用麦克风的应用程序的扬声器音量?

ALSA:防止扬声器欠载的方法

音频信号的延时