6

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

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

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

4

4 回答 4

7

使用 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 以开始使用。

于 2009-12-31T01:16:12.360 回答
0

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

这是:

aplay -l

现在我所做的只是制作一个程序来像这样由 alsa 发出。

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

我的图书馆的输出就像 -

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

该库还可以捕获和播放实时音频数据。

与 Duplex Alsa Audio 的 IdeaAudio 库中的文档一起提供

于 2013-08-01T10:43:36.610 回答
0

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

于 2021-10-27T06:40:29.300 回答
-1

前提是您可以执行 shell 命令。那么aplay是你的朋友。

http://alsa.opensrc.org/Aplay

播放 -l

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

于 2009-12-08T12:48:19.743 回答