C++ 使用ALSA库捕获音频-snd_pcm_open=>;没有这样的文件或目录
我正在尝试使用ALSA库在SoC上实现音频捕获。 我有一个预编译的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
libasound.so.2.0.0
aasoundlib.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我找不到一个解决方案来捕获音频,所以我取消了这个项目,它还没有获得任何新的优先级。此外,我记不起细节:-(