C++ 使用ALSA库捕获音频-snd_pcm_open=>;没有这样的文件或目录

C++ 使用ALSA库捕获音频-snd_pcm_open=>;没有这样的文件或目录,c++,audio,capture,alsa,C++,Audio,Capture,Alsa,我正在尝试使用ALSA库在SoC上实现音频捕获。 我有一个预编译的libasound.so.2.0.0aasoundlib.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\u st

我正在尝试使用ALSA库在SoC上实现音频捕获。 我有一个预编译的
libasound.so.2.0.0
a
asoundlib.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\u strerror(returnCode)
没有这样的文件或目录

这是否表示捕获设备未正确安装(例如驱动程序或其他)

我怎样才能找出哪里出了问题/遗漏了什么

我能否列出是否安装了alsa可访问的声音设备

更新:

我通过以下方式了解了如何扫描设备:

snd\u card\u next
找到一个
cardNum:0
但是我仍然在
snd\u ctl\u open(&cardhold,“hw:0”,0)
snd\u pcm\u open(&pcm\u Handle,“hw:0,0”,snd\u pcm\u STREAM\u CAPTURE,0)
上失败,而
没有这样的文件或目录
。这是否表示音响设备安装不正确

更新::

我在网上找到了更多的信息

“4.6准备设备驱动程序目录中有一个脚本 这将在/dev目录中安装ALSA声音设备 ./snd驱动程序目录中的设备。应该有/dev/snd 子目录(如果您不熟悉 即使是“ls”命令,请考虑阅读其他Woto的第一。 您应该具备一些基本的Linux知识来安装这些驱动程序)。 现在可以插入驱动程序了,请转到下一个 段落。”

我记得我运行过一个随SoC alsa版本提供的snddevices脚本,但我不确定它是否成功,或者只是没有显示错误。但是链接上说我以后必须安装驱动程序?不幸的是,我不能在明天之前考试

更新:

从CL.和我测试了以下内容:
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-pcmC0D0c
cat-pcmC0D1c
返回
cat:read-error:文件描述符处于错误状态
,而其他的返回类似
cat:cannot open'pcmC0D2c':无此类设备

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

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

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

make install DESTDIR=/tmp/test

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

我使用了不同版本的
snddevices
脚本。我必须在正确的目录中使用正确的脚本才能使
snd\u pcm\u open
正常工作。我必须将脚本复制到SoC的驱动程序目录中

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


如果没有正在运行的捕获设备,则可能会出现错误的文件描述符错误消息。到目前为止,捕获仍然不起作用。

任何现代发行版都不需要snddevices脚本。您有权访问
/dev/snd/
?@CL中的文件。感谢您的关注。我不能说发行版是否“现代”。因为它是一个芯片上的系统,所以操作系统仅限于绝对必要的部分,可能真的缺少一些东西。我之前在视频捕获方面也遇到了类似的问题,其中一些节点缺失。在
/dev/snd/
中有一些条目
控制C0 pcmC0D0c pcmC0D0p pcmC0D1c pcmC0D2c pcmC0D3c pcmC0D4c
每个条目的大小为116。如果我尝试
cat pcmC0D0c
它会告诉我
文件描述符处于不良状态
,pcmC0D1c和controlC0也是如此,而其他设备返回
无此类设备
则“116”不是大小。不管怎样,你是如何安装alsa lib的其他所需文件的?我刚刚得到了该硬件平台的预编译库和二进制文件。一些驱动程序可能是由在该平台上安装操作系统的人添加的。因此,基本上,如果可能的话,我必须找出当前系统状态中缺少哪些安装步骤。我刚刚编辑了这个问题,添加了一些关于
/proc/asound/cards
的更多信息。我刚刚看到我的交叉编译器有一个makefile,并且还提供了一个源代码。使用交叉编译器将创建4个文件夹:
bin
include
lib
共享
。我应该将
share
文件夹(带有子文件夹
alsa和
aclocal
)的内容复制到我的SoC
usr/share`文件夹,这一假设正确吗?我需要重新启动它吗?是的,但是你不需要本地的。你不需要重新启动。我只是遇到了同样的问题,没有这样的文件或目录。你能再解释一下你是如何跟踪这个问题的吗?对不起,afair我找不到一个解决方案来捕获音频,所以我取消了这个项目,它还没有获得任何新的优先级。此外,我记不起细节:-(