问题标签 [libasound]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2497 浏览

linux - 如何在 ALSA 中获取 PCM 设备路径?

ALSA 库中从 pcm 句柄或名称获取物理播放设备的文件名的最简单方法是什么?

例如对于 pcm 设备hw:0,0,我想获得/dev/snd/pcmC0D0p. 这相当简单(只需传输索引),但对于“默认”或任何其他别名,它并不那么明显。

0 投票
1 回答
3948 浏览

python - PyAudio 在 Raspberry Pi 上引发警告

由于我在较早的帖子和其他论坛中都找不到我的问题的答案,因此我想向 stackoverflow 社区寻求建议。

我正在使用带有内核版本 4.14.71-v7 的树莓派版本 9(拉伸)。它应该是可用的最新图像。

我想使用 pyaudio 来播放和录制音频流。在我的 Windows 家用电脑上,一切正常,没有任何问题。但即使在树莓派上创建一个 pyaudio 对象也会引发一些奇怪的警告。

首先,我安装了以下东西来使用 pyaudio:

树莓派自动选择 libasound2-dev

如果我运行以下 python 代码:

我收到这些警告:

对我来说,看起来 pyaudio 想要使用 hdmi(带有环绕声)、插孔和蓝牙(bluealsa)。似乎pyaudio不使用portaudio。但我不确定。

也许有人知道,为什么只创建一个对象就会引发这些警告。在这些警告旁边,pyaudio 库似乎可以工作。我可以播放和录制音频流,但每次都会出现这些警告。

0 投票
1 回答
1361 浏览

linux - 为我的嵌入式设备定义一个干净且有效的 asound.conf

我目前正在使用来自参考设计 BSP 的非常复杂的 asound.conf 文件。我想定义我自己的 asound.conf。

我目前对嵌入式设备的需求:仅以 44100 Hz 的速率播放单声道文件。在扬声器模式下,我只有一个输出扬声器。当我插入一个插孔时,我必须能够听到两个耳机上的声音。我还需要能够以 11500 Hz 的速率从麦克风录制声音。

我可用的声卡:

我没有在输出和输入之间使用相同的速率。但是ASRC设备允许我以不同的速率保持良好的性能。这就是为什么我想使用设备 1 而不是设备 0。

我试图定义我的配置如下:

它与扬声器配合得很好(所以只有一个扬声器),cpu 性能非常好。我使用out_mono pcm 播放声音。但是当我使用in_mono pcm时,我只能在插孔模式下听到一个耳机的声音。在 asound.conf 中,我试图说我想在两个输出上重定向单声道声音,但它不起作用:

第二行绑定正在擦除第一行......所以我正在寻找一种能够在两个输出端听到声音的方法。当然,如果我使用默认pcm 而不是out_mono,则声音在两个输出上都可以正常工作。

我是否误解了合理的 conf 定义中的某些内容?

0 投票
1 回答
41 浏览

c - C: 为什么我的库中的全局变量不会更新?(使用 ALSA 库)

前言:我看过其他答案,我相信这是一个不同类型的问题。它可能与指针有关,但其他答案都没有帮助。我也可能只是错过了一些东西。

我设法制作了一个工作程序,使用 ALSA 库将原始音频数据流式传输到标准输出。我现在正在尝试将此代码推广到库中,并且库的 .c 文件中的全局变量没有更新。据我所知,设置与原始程序没有什么不同,所以我认为它应该可以工作......但它没有。我真的很感谢有人解释我是如何搞砸的。先谢谢了!

编辑1:

调用顶部的所有全局变量都wm8782.c无法设置。wm8782_open_audio()例如,当在snd_pcm_hw_params_get_period_time(params, &val, &dir);被调用wm8782_us_to_loops()后被wm8782_open_audio()调用时,它会因为params没有被初始化而失败。但是,wm8782_open_audio()完成没有错误!

编辑2:

extern在标题中添加了声明,没有骰子。请参阅下面的更新文件。

编辑 3:

我在一个没有标题的 C 文件中重现了这个问题。只需将代码分解为函数就足以破坏它。我已经用这个单片 C 文件替换了 2 个库文件,以消除链接器错误等。

这是我试图概括为库的原始程序。这确实像我想要的那样工作。

现在这里是最终将成为库的模块化版本。这失败了ERROR: Failed to get number of loops.

0 投票
0 回答
145 浏览

libasound - 来自 libasound 函数 snd_pcm_hw_params 的令人困惑的错误

我的问题与名为“snd_pcm_hw_params”的 libasound 函数有关,该函数与播放声音文件的代码有关。我是 ALSA 编程的新手。使用我在互联网上找到的一个编码示例,我编写了一个小程序来播放一个 7 秒的 .wav 文件到默认声卡。当我连续多次运行此代码时,偶尔(但不总是)对 snd_pcm_hw_params 的必要调用以将先前填充的 snd_hw_params_t 结构写入驱动程序,我得到一个错误代码 -2 (ENOENT)。我不知道这意味着什么,也不知道如何处理或防止它。我的代码只是发出一条错误消息并退出。通常,如果我再次运行它,代码运行良好。对我来说很好,但最终,这段代码应该交给非程序员使用,我想要么防止错误,或在不涉及所述非编程用户的情况下在内部解决它。我注意到用户应该能够通过单击按钮来导致程序提前中止,当这种情况发生时,我的代码调用 snd_pcm_drop,然后调用 snd_pcm_close。如果程序运行完成,并播放了所有 7 秒的 wav 文件,则它通过调用 snd_pcm_drain 结束,然后调用 snd_pcm_close。任何帮助或建议将不胜感激。:) 任何帮助或建议将不胜感激。:) 任何帮助或建议将不胜感激。:)

0 投票
0 回答
101 浏览

c - 如何使用内存映射 IO 在 Alsa 中开始播放?

当我调用 snd_pcm_start 时出现 EPIPE 错误。预计因为没有数据,我应该先填写初始样本。

当我调用 snd_pcm_status_dump 时,我正在写入以下文件:

在接收到第一帧(来自 Alsa 外部的源)后片刻,我调用snd_pcm_avail_updatesnd_pcm_avail_update返回 0 告诉我没有可用空间进行解码。

如何开始音频播放?为了完整起见,这里是snd_pcm_dump调试函数的输出:

0 投票
0 回答
67 浏览

linux - asoundrc文件中“类型循环”的含义是什么?

我是 ALSA 及其用户空间配置的新手。我在我的 asoundrc 中看到了一个 pcm 设备,如下所示

插件类型“循环”是什么意思?我检查了这份文件,但我看不到任何补偿。

我知道下面的配置是什么意思。这里他们使用snd-aloop Linux驱动来实现一个loopback设备,和hw:Loopback,0,0一样。如果我的理解有误,请指正。

两者的配置是否相同,只是另一种表示方式?提前致谢!

0 投票
1 回答
343 浏览

pygame - Pygame Midi libasound_module_conf_pulse.so 错误 + 无法打开从站

当我尝试运行 pygame.midi 代码时出现此错误:

我发现 Python 正在搜索的路径不存在。由于某种原因,libasound_module_conf_pulse.so位于 中/usr/lib/x86_64-linux-gnu/alsa-lib,所以我在其中创建了alsa-lib目录/usr/lib/并复制了其中的内容usr/lib/x86_64-linux-gnu/alsa-lib

这解决了第一个错误。现在,我遇到了另一个错误,我认为这与我上面应用的真正阴暗的修复有关(为什么我将它们都包含在同一个问题中)。运行时pygame.init()出现此错误:

ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave

我在网上搜索过,只发现一个相关的问题,但遗憾的是没有得到答案。我的理解是使用 pygame.midi 中的方法有效,但使用 pygame 中的方法(如 init)会引发错误。

所以,这段代码工作正常:

但添加pygame.init()会引发从属错误。

我在 PyCharm 中使用 Ubuntu 20.04 和 Python 3.8。

编辑:从终端直接在 Python 中运行上述代码不会给出从属错误,pygame.init()但有时会给出(snd_pcm_recover) underrun occurred错误。

0 投票
1 回答
234 浏览

linux - ALSA snd_pcm_hw_params_any crashed when run the application from startup script

I downloaded the ALSA sample source codes (https://gist.github.com/ghedo/963382) and test running under putty window, it works. However when put into the startup script (eg. rc.local) with or without "sudo", it crashed.

Note: The application only crashes after auto-run from power on; if run the script in putty (command line), no problem.

After added logging before each snd_xxx function calls, found the application stop after call snd_pcm_hw_params_any, meaning it crashes after snd_pcm_open and snd_pcm_hw_params_alloca. Following is code:

After collect the core dump file and use gdb "bt full" to check, the result is:

Note "snd_pcm_hw_refine" is not called directly from the application.

I am wondering what the difference is between running in putty and running from power-on startup script, and how to solve this failure. Appreciate if you can advise...

0 投票
0 回答
80 浏览

usb - 在基于 linux 的 asound.conf 上配置 USB 音频输出

如何为 USB 端口输出设置 alsa(高级 linux 声音架构)配置以进行播放。我们已经在 asound.conf 文件中定义了一个编解码器,它工作正常。现在我们也希望在 USB 端口上输出音频。那么如何定义两个PCM设备或声卡同时工作。

我们的卡 0 是带有设备 0 的 UAC,我们的编解码器是带有 1 个设备的卡 1。

这里添加的图像是 aplay -l 的输出