c++ - 使用 ALSA 库的音频捕获 - snd_pcm_open => No such file or directory

标签 c++ audio capture alsa

我正在尝试使用 ALSA 库在 SoC 上实现音频捕获。 我有一个预编译的 libasound.so.2.0.0 和一个 asoundlib.h 以及其他 header 。

现在我有

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)No such file or directory

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

我如何找出问题/遗漏的内容?

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

更新:

我发现了如何通过以下方式扫描设备: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) 没有这样的文件或目录。这是否表明声音设备未正确安装?

更新::

我在 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 脚本,但我不确定它是否成功,或者只是没有显示错误。但是链接说我之后必须安装驱动程序?很遗憾,我无法在明天之前进行测试。

更新:

来自 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 返回 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

最佳答案

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

要找到你需要的文件,获取alsa-lib 源码包,编译它,然后将它安装到一个临时目录中

make install DESTDIR=/tmp/test

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

关于c++ - 使用 ALSA 库的音频捕获 - snd_pcm_open => No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33108558/

相关文章:

c++ - 编译器不编译以下行 (C++)

c++ - 有没有一种优雅的方法可以将一个双端队列的子集转移到另一个?

c# - 如何以可移植的方式在 C# 中播放压缩的声音文件?

Python捕获子进程输出

c - 如何使用 C 捕获另一个进程的输出?

C++ 分配 vector 所花费的时间

c++ - 使用默认模板参数引入派生类型

xcode - 录音语义问题

stata - 鉴于其中一些变量可能不存在,如何保留变量列表?

regex - 计算 qr 正则表达式中的捕获组?