【问题标题】:How to find out ALSA audio device capabilities programmatically in Linux without opening the device如何在不打开设备的情况下在 Linux 中以编程方式找出 ALSA 音频设备功能
【发布时间】:2010-12-24 09:54:00
【问题描述】:

如何在不先打开设备的情况下了解 ALSA 设备的功能?问题是,我需要向snd_pcm_open() 函数提供参数以使用对我来说很愚蠢的测试函数。如果我必须先告诉它打开功能,为什么还要问这是播放设备还是录音设备?

例如,我想列出所有播放设备,但我能想到的唯一方法是尝试打开我找到的所有设备(使用snd_device_name_hint())并尝试在播放模式下打开它们,如果我设法打开它们打开,一切正常。

问题是,对于所有可能的变化(采样率、通道等),我需要执行大量的 open() 来找出参数。

【问题讨论】:

    标签: c linux audio alsa


    【解决方案1】:

    如果您可以执行 shell 命令。那么 aplay 就是你的朋友。

    http://alsa.opensrc.org/Aplay

    播放 -l

    列出所有声卡和数字音频 设备

    【讨论】:

    • 这并没有告诉我任何我不知道的 snd_device_name_hint()。例如,它似乎没有说明每个设备支持的采样率。另外,我不会说从 C 代码调用它并处理输出非常简单,即使它确实产生了我需要的信息......
    【解决方案2】:

    使用 snd_ctl_next 遍历所有设备,然后使用 snd_ctl_open 获取有关设备的信息 - 这与 snd_pcm_open 不同,如果另一个程序打开了设备或您的设置错误,则可能会失败。

    它非常密集,但这里有一些开源代码可以迭代您可以查看的所有 ALSA 设备:https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/alsa/pa_linux_alsa.c - 搜索 BuildDeviceList 以开始使用。

    【讨论】:

    • 不幸的是,该代码确实打开 pcm 设备以检查最大通道、采样率等。我认为无论如何都无法解决这个问题。
    【解决方案3】:

    这是我对 linux/unix 项目的第一个要求,我需要了解所有可用的音频设备功能。然后我需要使用这些设备来捕获和播放音频。我所做的很简单。有一个 linux/unix 命令,用于通过 linux 中的 alsa 实用程序查找设备。

    它是:

    aplay -l
    

    现在我所做的只是制作一个程序,让 alsa 像这样发布。

    为了大家的帮助,我制作了一个 (.so) 库和一个示例应用程序,演示了该库在 c++ 中的使用。

    我的库的输出是这样的-

    [root@~]# ./IdeaAudioEngineTest
    HDA Intel plughw:0,0
    HDA Intel plughw:0,2
    

    这个库还可以捕捉和播放实时音频数据。

    它与IdeaAudio library with Duplex Alsa Audio 中的文档一起提供

    【讨论】:

      【解决方案4】:

      不可以,除了用snd_pcm_open开卡外,没有其他方法可以查询通道数、采样率等。

      【讨论】:

        猜你喜欢
        • 2016-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 2022-04-04
        相关资源
        最近更新 更多