audio - 使用 alsa 捕获 pcm

标签 audio capture alsa

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

访问:SND_PCM_ACCESS_RW_INTERLEAVED

格式:S16_LE

费率:16000

channel :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 之间做出决定?
  • 如何确定周期大小值?我相信在 snd_pcm_sw_params_set_avail_min() 调用中使用了相同的值。
  • 中要读取的帧数应该使用什么值snd_pcm_readi() ?
  • snd_pcm_sw_params_set_avail_min() 和 snd_pcm_start_threshold() API 的重要性是什么?是否必须调用

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

    提前致谢。

    最佳答案

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

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

    读取尽可能多的帧来处理。

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

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

    关于audio - 使用 alsa 捕获 pcm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37006160/

    相关文章:

    javascript - 捕获所有的 <a> 点击事件

    android - 如何在 Activity 中显示相机预览?

    C#:创建一个事件,每当另一个具有监听器的事件被触发时,该事件就会被触发,也许可以通过反射动态地触发?

    c - 对C代码注释风格的一些疑惑

    ios - 即使双击按钮,VoiceOver 也会读取标签

    xcode - 从Sprite套件中的类调用方法?

    ios - 当我重新定义回调函数的时间间隔时,speakhere 示例无法正常工作

    ios - 如何在 iOS 中播放声音?

    linux - 通过环境变量选择默认的 alsa PCM(不是卡)

    linux - Ubuntu 中的 ChucK 音频输入/输出错误