pcm使用alsa捕捉

时间:2016-05-03 13:51:33

标签: audio capture alsa

我是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的重要性是什么?是否必须要打电话给那些

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

    提前致谢。

1 个答案:

答案 0 :(得分:1)

周期时间描述与周期大小相同的参数。如果费率尚不清楚可能会有用。

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

读取您想要处理的帧数。

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

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