使用ALSA库进行音频捕获 - snd_pcm_open =>没有相应的文件和目录

时间:2015-10-13 17:07:17

标签: c++ audio capture alsa

我尝试使用ALSA库在SoC上实现音频捕获。 我预先编译了libasound.so.2.0.0asoundlib.h以及其他标题。

现在我有

int returnCode;
snd_pcm_t *pcm_Handle;
char *pcm_device_name = "hw:0,0";

returnCode = snd_pcm_open(&pcm_Handle, pcm_device_name, SND_PCM_STREAM_CAPTURE, 0);

返回snd_strerror(returnCode)

No such file or directory

这是否表示捕捉设备未正确安装(例如司机或其他东西)?

如何找出错误/缺失的内容?

我可以列出是否安装了任何alsa可访问的声音设备?

更新

我发现了如何扫描设备:Finding available sound cards on Linux programmatically

snd_card_next找到一个cardNum : 0但我仍然在snd_ctl_open(&cardHandle, "hw:0", 0)snd_pcm_open(&pcm_Handle, "hw:0,0", SND_PCM_STREAM_CAPTURE, 0) No such file or directory上失败。这是否表明声音设备没有正确安装?

UPDATE ::

我在http://www.tldp.org/HOWTO/Alsa-sound-4.html

上找到了更多信息
  

" 4.6准备设备驱动程序目录中有一个脚本   这将在您的/ dev目录中安装ALSA-sound-devices。类型   来自驱动程序目录的./snddevices。应该有/ dev / snd   现在的子目录(如果它在那里测试。如果你不熟悉   即使是" ls"命令,请考虑先阅读其他HOWTO。   你应该有一些基本的Linux知识来安装这些驱动程序)。   现在您已准备好插入驱动程序,请转到下一个   。段落"

我记得我已经运行了随SoC alsa版本提供的snddevices脚本,但我不确定它是否成功或是否它没有显示错误。但链接说我之后必须安装驱动程序?不幸的是我明天才能测试。

更新

来自CL。和http://www.tldp.org/HOWTO/Alsa-sound-6.html我测试了以下内容: dev/snd/包含以下条目:

crw-rw----    1 root     audio     116,   0 Mar 11 04:44 controlC0
crw-rw----    1 root     audio     116,  24 Mar 11 04:44 pcmC0D0c
crw-rw----    1 root     audio     116,  16 Mar 11 04:44 pcmC0D0p
crw-rw----    1 root     audio     116,  25 Mar 11 04:44 pcmC0D1c
crw-rw----    1 root     audio     116,  26 Mar 11 04:44 pcmC0D2c
crw-rw----    1 root     audio     116,  27 Mar 11 04:44 pcmC0D3c
crw-rw----    1 root     audio     116,  28 Mar 11 04:44 pcmC0D4c

其中cat controlC0 cat pcmC0D0ccat pcmC0D1c返回cat: read error: File descriptor in bad state而其他人返回cat: can't open 'pcmC0D2c': No such device

虽然cat /proc/asound/cards给出了

 0 [VPL_AUDIO      ]: VPL AUDIO - VPL Audio TW2866 Driver
                      VPL Audio Codec Driver, TW2866.
 1 [Mozart_SSM2603 ]: I2S - I2S driver
                      I2S driver

以下是一些更多信息。由于我没有任何音频方面的经验,我不知道它们是重要的还是帮助...

cat /proc/asound/pcm
00-00: tw2866#0 : VPL Audio TW2866 Driver : capture 1
00-01: tw2866#1 : VPL Audio TW2866 Driver : playback 1 : capture 1
01-00: I2S AIC23 PCM : I2S driver : playback 1 : capture 1

2 个答案:

答案 0 :(得分:2)

您的问题是alsa-lib软件包未正确安装(看起来好像没有硬件包)。

要找出您需要的文件,请获取alsa-lib源包,编译它,并使用

将其安装到临时目录中
make install DESTDIR=/tmp/test

然后看看/tmp/test/;如果您没有使用正确的交叉编译器,则无法使用已编译的库文件本身(libasound.so*),但其他文件是适用于任何体系结构的文本文件。

答案 1 :(得分:2)

CL的答案。没有解决问题。我有snddevices脚本的不同版本。我必须在右侧目录中使用正确的脚本才能使snd_pcm_open正常工作。我不得不将脚本复制到SoC的驱动程序目录中。

.conf文件复制到与参考实现中相同的目录。

如果没有正在运行的捕获设备,则似乎存在错误的文件描述符错误消息。

捕捉仍然无效,但我会添加一个新问题......