【问题标题】:alsa code to capture data of single channel only?alsa代码仅捕获单通道数据?
【发布时间】:2015-07-29 17:55:37
【问题描述】:

我需要为 alsa 编写一个仅捕获左通道数据的代码。我曾尝试使用 dsnoop,但我的目标不支持其他插件。我有一个 alsa api 来读取数据:

if ((err = snd_pcm_readi (capture_handle, buf, 128)) != 128) {
                fprintf (stderr, "read from audio interface failed (%s)\n",
                     snd_strerror (err));
                exit (1);
            }

如何配置它以读取单通道?

【问题讨论】:

    标签: alsa


    【解决方案1】:

    ALSA 库提供对设备支持的那些示例格式的访问。

    可以使用插件创建提取单个通道的虚拟设备;像这样:

    pcm.left_channel {
        type plug
        slave.pcm {
            type route
            slave.pcm "hw:0"    # or whatever
            slave.channels 2
            ttable.0.0 1
        }
    }
    

    但如果你不能使用插件,你必须使用硬件设备实际支持的格式。

    【讨论】:

    • 我知道 dsnoop 插件可以创建一个提取单个通道的虚拟设备,但是当我运行 arecord -L 时,我看不到目标中的 dsnoop 支持。你能告诉我如何在 alsa 库中启用 dsnoop 吗?
    • 您不需要dsnoop 来提取频道(dsnoop 用于在多个应用程序之间共享捕获设备)。 aplay -L 未列出所有设备。
    猜你喜欢
    • 2013-01-21
    • 2020-05-16
    • 2016-08-28
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2020-05-25
    • 2010-12-05
    相关资源
    最近更新 更多