【问题标题】:pcm capture using alsa使用 alsa 捕获 pcm
【发布时间】:2016-08-28 14:50:24
【问题描述】:

我是 alsa 声音编程的新手。我正在开发一个应用程序来将音频录制到 c 语言的 wav 文件中。我在网上做了一些研究,但对许多主题仍然不是很清楚。请帮忙。 这是我设置的配置。

访问:SND_PCM_ACCESS_RW_INTERLEAVED

格式:S16_LE

费率:16000

频道:1

我有几个疑问:

  1. 我对周期大小和周期时间设置感到非常困惑。 snd_pcm_hw_params_set_period_time_near() 和 snd_pcm_hw_params_set_period_size_near() 有什么区别。应该调用哪个 API 进行捕获?类似的还有 snd_pcm_hw_params_set_buffer_time_near() 和 snd_pcm_hw_params_set_buffer_size_near()。如何在这两个 API 之间做出选择?

  2. 如何确定周期大小值?我相信在 snd_pcm_sw_params_set_avail_min() 调用中使用了相同的值。

  3. snd_pcm_readi()中要读取的帧数应该使用什么值?

  4. snd_pcm_sw_params_set_avail_min() 和 snd_pcm_start_threshold() API 的重要性是什么?是不是必须打电话给那些

我指的是 arecord 实现和另一个示例 code 用于捕获。

提前致谢。

【问题讨论】:

    标签: audio capture alsa


    【解决方案1】:

    周期时间描述与周期大小相同的参数。如果速率未知,它可能会很有用。

    在每个周期结束时,您会遇到中断(即,如果您正在等待数据,则有机会被唤醒)。如果您知道每次要读取多少数据,请尝试将其用作周期大小。

    读取尽可能多的帧。

    avail_min 参数指定在中断导致您的应用程序实际被唤醒之前必须有多少帧可用。

    启动阈值指定设备在您尝试读取那么多帧时自动启动。

    【讨论】:

      猜你喜欢
      • 2013-11-17
      • 2012-03-12
      • 2011-10-23
      • 2019-04-27
      • 2023-04-09
      • 2020-06-26
      • 2020-04-20
      • 2012-03-18
      • 2013-11-10
      相关资源
      最近更新 更多