问题标签 [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 投票
0 回答
66 浏览

c++ - 从 ALSA 驱动程序中分离音频流

我在我的 Raspberry Pi 上使用带有 16 个麦克风的 USB 声卡(设备是 UMA 16)。目前,我正在收集所有 16 个通道数据,并根据指定要使用哪些通道的配置文件,通过以编程方式为需要实时音频输入的应用程序分离它们的内容,最多使用其中的 8 个。有什么方法可以使用 alsa 驱动程序 API 来提供来自用户在运行时指定的多达 8 个麦克风的数据,这样我就可以避免额外的 8 个麦克风输入?

我附上了我为 UMA 16 编写的 .asoundrc 文件:

编辑:

目前我正在使用snd_pcm_open(&handle, deviceName, SND_PCM_STREAM_CAPTURE, 0);从默认设备名称捕获音频。如果我将所有麦克风声明为单独的设备,我是否仍然能够并行获取它们的数据?

0 投票
0 回答
53 浏览

libasound - Aplay 示例格式不可用

我正在尝试在一个小型 IOT 项目中使用 Rockpi S 单板计算机,它需要能够播放音频。该设备的音频驱动程序确实存在已知问题,但现在似乎已修复。按照维基上的一些步骤(https://forum.radxa.com/t/audio-support-rock-pi-s/1686/13)我只能得到这个错误:

我也遵循了 asound.conf 文件的指南

0 投票
0 回答
143 浏览

c++ - 如何在 C++ 中使用 asoundlib ALSA API 生成 1kHz 纯音?

我正在按照此处的示例代码在 Linux 中使用 C++ 中的 ALSA API 生成纯音正弦波:http: //equalarea.com/paul/alsa-audio.html

我正在使用的代码位于“A Minimal Interrupt-Driven Program”下。原样的代码无法编译,我对实际编译的代码的修改版本发出了一些声音,如下所示:

程序发出连续音,但不是 1 kHz。我不确定这是因为输出饱和(它非常响亮,我还没有弄清楚如何降低音量),或者我是否错误地生成/发送正弦波样本到硬件。

我的问题如下:

  1. snd_pcm_writei() 的音频缓冲区 (buf[]) 参数是否应该包含交错的 2 通道数据?它是否应该包含以下格式的音频样本:buf[0] = Ch_A_0, buf[1] = Ch_B_0, buf[2] = Ch_A_1, buf[3] = Ch_B_1, buf[4] = Ch_A_2, buf[ 5] = Ch_B_2, ...,还是应该只包含通道 A 的数据,而硬件将相同的数据复制到通道 B?

  2. snd_pcm_writei() 是阻塞函数吗?这个程序return err;只有在 buf[] 中的所有内容都发送到播放硬件后才能到达吗?

  3. 在 ALSA api 中减少音量的正确方法是什么?我尝试通过计算降低正弦波的幅度,tempSin = sin(2.0*M_PI*1000*i/48000)*0.1;但输出仍然是失真的音调,只是小了很多。什么是用于减小音量的 ALSA 功能?

  4. 是否有可用的清晰示例代码显示如何从/向记录/播放硬件逐帧读取/写入音频数据?我还需要它具有某种中断机制,当一帧数据准备好接收/发送时,将调用回调函数。

这专门针对运行树莓派操作系统的树莓派零 W(如果相关)。

0 投票
1 回答
41 浏览

c - ALSA Kernel API 与 asoundlib API 不同?

当我在这些内核文档中遇到 ALSA(高级 linux 声音架构)及其 api 时,我正在阅读如何从 linux 内核播放音频:https ://www.kernel.org/doc/html/latest/sound /kernel-api/alsa-driver-api.html

然而,似乎大多数尝试在 linux 中播放音频的人都使用 asound 库,通常包括在内。

但是当我在asoundlib这里查看 api 时:https ://www.alsa-project.org/alsa-doc/alsa-lib/它似乎没有与我上面链接的内核 api 相同的功能。此时我很困惑,因为我不确定在播放音频时何时调用内核 api 与 asoundlib api。

一个很好的例子是asoundlibapi 有一个调用函数snd_pcm_open来创建句柄和连接到音频接口。我无法在内核文档中找到此功能。所以我想知道,是asoundlib调用内核api函数还是这两个api都是正交的?如果它们是正交的,那么内核调用会asoundlib做什么?