问题标签 [libalsa]

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 回答
366 浏览

c++ - pcm_plug.c:67: snd_pcm_plug_close: 断言 `plug->gen.slave == plug->req_slave' 失败

我第一次使用 ALSA 并看到错误:

pcm_plug.c:67: snd_pcm_plug_close: 断言 `plug->gen.slave == plug->req_slave' 失败。

当我尝试关闭 PCM 时会发生这种情况:

什么可能导致此错误?

0 投票
1 回答
7174 浏览

audio - 用于在 Raspberry Pi 上读取和播放 WAV 文件的 ALSA 应用程序

尝试学习 ALSA 音频层,最终为 Raspberry Pi 平台编写 ALSA 设备驱动程序。从简单的开始,我将来自 ALSA 项目站点和其他在线资源的各种样本粘合在一起,以做最简单的事情:读取 WAV 文件并在默认声音设备上播放它。我无法让这个简单的 C 示例工作。

我正在使用 libsndfile 进行所有 WAV 文件读取/标题解码。我验证了我读入缓冲区的样本是正确的(针对将样本值转储到文本文件的 sndfile-to-text 应用程序验证了程序读取的前 400K 样本)。所以我知道我的缓冲区包含正确的数据,问题一定出在我将它传递给 ALSA API 的方式上。

运行时,它仅在正确的通道中产生声音,并且失真/泥泞 - 几乎无法辨认。顺便说一句,“aplay”应用程序可以完美地播放相同的 WAV 文件,并报告该文件是 16 位签名 LE、44100Hz、立体声,这也与我的应用程序报告的内容相匹配。在树莓派上运行它。

为了节省空间,我将 C 程序精简到最低限度,但我验证了所有 API 调用的正确返回码。为什么这个简单的 ALSA 应用程序不能产生正确的声音?

0 投票
1 回答
1314 浏览

c - 通过 ALSA 捕捉声音

我正在尝试通过 ALSA 在 linux 系统中从声卡中捕获声音。它以 PCM 格式从向量中读取数据。我需要一种方法来找出正确的捕获方法并将其保存到文件中并播放以检查接收到的数据是否正确。

0 投票
2 回答
497 浏览

midi - 如何在不阅读“/proc/asound/seq/clients”的情况下列出 ALSA MIDI 客户端?

有没有一种已知的方法可以仅使用 ALSA API 列出现有的 MIDI 客户端,而不读取特殊文件/proc/asound/seq/clients

我搜索了ALSA MIDI API 参考,但找不到任何匹配项。我相信一定有一种方法可以使用 API 来实现这一点,否则那就太令人惊讶了。

0 投票
1 回答
231 浏览

midi - 如何理解看似默认/隐式的 ALSA MIDI 默认队列?

背景

在下面的片段中,我将一个带有持续时间的 MIDI 音符发送到合成器端口。为此,我需要分配并启动一个队列,否则我会得到一个“无效参数”。(错误代码 -22)来自 ALSA。

发送事件的操作,正确地,没有引用队列,这似乎是隐式引用的。但是,一个 MIDI 应用程序可能有多个队列,我也想知道。

据我了解,队列不像缓冲区,而是需要管理定时事件(需要队列来发送具有持续时间的便笺的原因),所以我知道需要发送带有特定演示文稿的一些事件(带有开始和/或结束时间)。

问题

当发送事件没有明确引用队列时,看似默认的队列是如何确定的?

在上述问题的上下文中,当应用程序创建多个队列时会发生什么?是隐式的,还是第一个?

甚至在我创建一个默认队列之前是否已经有一个默认队列,我可以开始它而不是一个(和唯一的)新创建的队列?

附件

上面提到的片段:

0 投票
1 回答
438 浏览

midi - 如何在不轮询的情况下从 ALSA MIDI 队列中获取时间事件?

ALSA MIDI 音序器 API 定义snd_seq_queue_status_get_tick_time,它允许获取正在运行的 MIDI 队列的基于当前速度的时间。

我可以定期轮询此信息,但觉得从队列中接收时间事件会更干净,无论是否基于速度,基于回调都可以。

有没有办法通过 ALSA 音序器定期且不轮询地通知 MIDI 队列的时间事件?

— 编辑 —</p>

当我说“轮询”时,我的意思是使用SIGALRM信号处理程序和足够小分辨率(1/50 秒)的计时器。

0 投票
1 回答
1551 浏览

linux - ALSA 配置 如何在 asound.conf 中结合 MMAP 仿真和 Ladspa 插件

我使用 rpi dac 在 Raspberry Pi 计算模块 ( Linux ) 上有一个工作正常的 PCM 输出和良好的声音。'aplay -l' 命令输出显示如下:

为了让音频完全正常工作,我必须将我的 /etc/asound.conf 文件更改为如下所示:

当我播放 .wav 文件时,输出听起来很棒,但它有点安静,而且 alsamixer 不允许使用此驱动程序控制音量。

我想获得更多的音量,所以我研究了 Ladspa 项目软件放大器插件。以下示例代码提高了普通 Pi 上 3.5 毫米插孔的音量:

我一直在阅读这里的文档:http: //alsa.opensrc.org/Asoundrc,但我正在努力理解如何结合 2 - 我想要 MMAP 仿真和放大。我怎样才能做到这一点?谢谢你。

0 投票
1 回答
17661 浏览

ubuntu - ALSA lib pcm_hw.c:1667:(_snd_pcm_hw_open) 卡 arecord 的值无效:main:722: audio open error: No such file or directory

我正在研究语音识别。为此我使用“alsa-utils”但是当我尝试使用这个脚本时

我收到这个错误

请帮忙 :(

0 投票
0 回答
1310 浏览

audio - ALSA 错误的文件描述符和机器人声音

我在一个 linux 嵌入式设备上工作,每次我开始播放音频流时,对 snd_pcm_start 的调用都会返回 -77:这意味着“文件描述符处于错误状态”。

我用一些 printf 重建了 alsa lib,我发现使用命令 aplay 不会产生该错误。

即使出现这个错误,我也可以播放声音,但每 10 次我就会听到一种粗糙的、金属的、类似机器人的声音。

问题的原因可能是什么?我按照打开声音设备时发现的所有指示进行操作。

这里是我的代码的相关部分:

在捕获/播放线程之前,我以这种方式启动音频,这里出现错误:

在我初始化设备之前,如下所示:

0 投票
1 回答
1325 浏览

alsa - Alsa snd_pcm_avail 总是返回 0

我正在尝试从我的编解码器中读取数据。由于我的项目中的原因,我想做非阻塞,但每次我读取编解码器上可用的字节数时,它都会显示为零。

该算法非常简单:等待 1 毫秒,然后检查编解码器中是否有 160 多个样本可供读取,然后再读取样本。但是每次我阅读时,它都会说样本计数为零。

有人可以帮我理解为什么“rc = snd_pcm_avail(inputCodecHandle);” 总是返回零?

这是其中包含代码的线程。

这是打开编解码器的代码。

谢谢!