我目前正在开发一个项目,要求我对Alsa进行一些抽样。我正在尝试正确配置所有内容,但我一直在坚持如何正确调整阅读大小。正确调整Alsa缓冲区的大小,奇怪的API
有两个原语,似乎是对我的任务有趣:
snd_pcm_hw_params_get_period_time
snd_pcm_hw_params_get_buffer_size
第一个的名字所暗示的输出将是一个采样周期的时间长度,但是这是奇怪的:如果我设置采样率为f = 44100Hz
采样周期(以纳秒为单位)应为T0 = 1e9/44100 ~= 22676 ns
,而函数将回答T1 = 725 us = 725000 ns
。与此同时,即使我被要求使用非锁定原语,我试图分析锁定'readi'所需的时间,事实证明,在最佳情况下样本需要T2 = 8028603 ns
,并且在最佳情况下需要T2 = 8028603 ns
T3 = 12436217 ns
在最坏的情况下。
最后,我无法找出什么是以下两个含义:
snd_pcm_hw_params_get_buffer_time
snd_pcm_hw_params_get_period_size
我不明白我怎么能衡量时间的缓冲和大小的时期,但前者的回报与get_buffer_size
相同的值,而后者返回与get_period_time
相同的值。
任何提示?
他们回到什么是返回类型,这是'snd_uframe_t'为* _size和'unsigned'为* _time明确获得“真正的”采样率,但我没有得到什么“缓冲时间”和“周期大小”的含义。 – Dacav 2010-07-27 15:34:33
期大小:在帧 VAL返回周期近似尺寸 缓冲时间(当然这取决于当前配置):在 VAL返回的缓冲区时我们 – ninjalj 2010-07-27 15:40:35
是,该文件具有的功能名称的相同信息内容,但什么是一个缓冲时间?缓冲区有一定的*大小*,而不是*时间*。 – Dacav 2010-07-27 15:43:04