【发布时间】:2016-01-11 13:14:14
【问题描述】:
我正在尝试使用 ALSA 库在 SoC 上实现音频捕获。
我有一个预编译的 libasound.so.2.0.0 和一个 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_strerror(returnCode) of 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 上失败。这是否表明声音设备未正确安装?
更新::
我在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 pcmC0D0c 和cat 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
【问题讨论】:
-
在任何现代发行版上都不需要 snddevices 脚本。您可以访问
/dev/snd/中的文件吗? -
@CL。谢谢你的兴趣。关于发行版是否“现代”,我无话可说。由于它是片上系统,因此操作系统仅限于绝对必要的部分,并且确实可能缺少一些东西。我之前在视频捕获中遇到了类似的问题,其中一些节点丢失了。在
/dev/snd/中有条目controlC0 pcmC0D0c pcmC0D0p pcmC0D1c pcmC0D2c pcmC0D3c pcmC0D4c,每个条目的大小为116。如果我尝试cat pcmC0D0c,它会告诉我File descriptor in bad state,pcmC0D1c 和controlC0 相同,而其他返回No such device -
“116”不是尺寸。无论如何,你是如何安装其他需要的 alsa-lib 文件的?
-
我刚刚拥有该硬件平台的预编译库和二进制文件。在该平台上安装操作系统的人可能已经添加了一些驱动程序。所以基本上我必须找出当前系统状态中缺少哪些安装步骤,如果可能的话。
-
我刚刚编辑了问题以添加更多
/proc/asound/cards的信息