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

Audio capturing using ALSA library - snd_pcm_open => No such file or directory

我正在尝试使用 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);

No such file or directory

中的 return 个 snd_strerror(returnCode)

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

我怎样才能找出什么是 wrong/missing?

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

更新:

我发现了如何通过以下方式扫描设备: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 上仍然失败。这是否表明声音设备未正确安装?

更新::

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

上找到了更多信息

"4.6 Preparing the devices There is a script in the driver-directory that will install the ALSA-sound-devices in your /dev directory. Type ./snddevices from the driver-directory. There should be a /dev/snd subdirectory now (test if it is there. If you are not familiar with even the "ls" command, please consider reading other HOWTO's first. You should have some basic Linux knowledge to install these drivers). Now you're ready to insert the driver, so please turn over to the next paragraph."

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

更新:

来自 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 return cat: read error: File descriptor in bad state 而其他 return 喜欢 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

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

要找出您需要的文件,请获取 alsa-lib 源码包,编译它,然后将其安装到带有

的临时目录中
make install DESTDIR=/tmp/test

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

我有不同版本的 snddevices 脚本。我必须在正确的目录中使用正确的脚本才能使 snd_pcm_open 正常工作。我不得不将脚本复制到SoC的驱动程序目录中。

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

如果没有捕获设备 运行,似乎会出现错误的文件描述符错误消息。目前捕获还是不行