使用 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 pcmC0D0c
和 cat 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
文件复制到与参考实现相同的目录中。
如果没有捕获设备 运行,似乎会出现错误的文件描述符错误消息。目前捕获还是不行
我正在尝试使用 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
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 pcmC0D0c
和 cat 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
文件复制到与参考实现相同的目录中。
如果没有捕获设备 运行,似乎会出现错误的文件描述符错误消息。目前捕获还是不行