【问题标题】:Alsa Lib Hardware Parameters settingAlsa Lib 硬件参数设置
【发布时间】:2017-07-07 00:24:49
【问题描述】:

我正在尝试使用 alsa 库在我的 linux (debian) 嵌入式设备上录制声音。我的嵌入式硬件是这个 [1],根据它的数据表第 33 页 [2],

模拟音频信号由 on-SOM TLV320AIC3106 音频编解码器提供。

以及此德州仪器音频编解码器的数据表 [3],

支持从 8 kHz 到 96 kHz 的速率

我使用 alsa lib 的示例应用程序代码,对于初始工作我没有更改代码。在示例代码中,采样率设置为 44100Hz。我成功录制了声音并播放了。现在,我认为,我可以根据数据表使用 alsa-lib 以 8000Hz 的采样率录制声音。我将采样率设置为 8000Hz,但在 alsa 配置中,它更改为 16000Hz。 我将采样率设置为 8000Hz;

snd_pcm_hw_params_set_rate_near(handle, params, &(record_params->rate), &dir);
snd_pcm_hw_params_set_channels(handle, params, record_params->channel);
rc = snd_pcm_hw_params(handle, params);

但是在调用了这个方法之后;

snd_pcm_hw_params_get_period_time(params, &(record_params->rate), &dir);

它变为16000。上面之间没有其他方法调用。是我的设置错误还是编解码器不支持 8kHz?

更新:当我将 rate 设置为 16000 时,它变为 8000。我真的很困惑。

[1] = http://www.variscite.com/products/system-on-module-som/cortex-a9/dart-mx6-cpu-freescale-imx6

[2] = http://www.variscite.com/images/stories/DataSheets/DART-MX6/DART-MX6_v1_2_datasheet_v2_1.pdf

[3] = http://www.ti.com/lit/ds/symlink/tlv320aic3106.pdf

【问题讨论】:

  • 您必须始终检查错误代码。为什么要问经期?以及调用前后rate和dir的值是多少?
  • dir 是 0,rate 是 8000,正如我在设置时想要的那样。正如我所说,在请求句点后,它变为 16000。我请求句点的原因是决定缓冲区的大小。我会检查我调用的错误代码,如果有任何问题,我会更新帖子
  • 这些值是调用之前还是调用之后,还是两者兼而有之?为什么你会假设利率与周期时间有关?
  • 您为什么要将周期时间存储到字段record_params->rate?
  • @Ctx,我搞砸了我的代码,所以你绝对是对的。我不明白与时期相关的方法发生了什么。我要重新开始了。

标签: c codec alsa libalsa


【解决方案1】:

周期时间和速率是两个不同的东西。

PCM 的周期基本上是在设备中断之间传输的帧数。这样做是因为逐帧向设备传输数据效率极低。

ALSA 库允许以微秒(使用snd_pcm_get_period_time)或帧计数(使用snd_pcm_get_period_size)指定周期大小。

如果您尝试计算为读取或写入 PCM 分配的缓冲区大小,使用snd_pcm_get_period_size(返回一个周期内的帧数)会更直观,然后调用snd_pcm_frames_to_bytes ,它将 PCM 的帧数转换为字节数。

【讨论】:

  • 我对 alsa 库的术语感到困惑,尤其是关于框架和时期。我想用(1通道[单声道],8bit PCM和8000Hz速率)的参数录制声音。使用此参数,我的缓冲区应该是 1(通道)* 8(每个样本的位)* 8000(速率)= 64000 位,一秒 8000 字节,不应该吗?我不完全理解 frame 和 period 参数。
  • @BlackGlix 您的缓冲区大小计算是正确的。在 ALSA 中,一个两通道音频缓冲区的帧是两个样本,对于一个三通道音频缓冲区,它是三个通道。周期大小是在计算机和音频设备之间传输的音频缓冲区的大小。
猜你喜欢
  • 2017-05-21
  • 2014-05-14
  • 2020-04-14
  • 2014-10-13
  • 2013-01-18
  • 2017-01-27
  • 2022-01-25
  • 2012-09-04
  • 2011-05-04
相关资源
最近更新 更多