问题标签 [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 回答
122 浏览

c - alloca 代替 alsa 中的局部变量

我使用示例 C ALSA 程序作为参考,并运行以下代码:

基于 ALSA 源代码,snd_ctl_event_alloca是一个宏,调用__snd_allocawhich 是一个宏,最终扩展为以下等效行snd_ctl_event_alloca(&event);(经过一些简单的简化):

wheresnd_ctl_event_sizeof()在整个库中只实现一次,如下所示:

所以我的问题是,这整个过程不等同于简单地做:

作为参考,这些是宏:

说明:

  • 上面的第一个代码块位于函数体的开头,而不是嵌套块中

编辑

事实证明(据我了解),做:

给出一个storage size of 'event' isn't known错误,因为snd_ctl_event_t显然是一个私有定义的不透明结构。因此,唯一的选择是动态分配。

0 投票
0 回答
45 浏览

linux-kernel - 为什么Alsa库有不同版本的读取和驱动交互功能?

我正在浏览 alsa 库代码,我想知道正在使用的读取功能。但是我看到有不止一个版本的读取功能。IE

我不确定 alsa 库如何选择使用哪个函数?

什么参数使它选择不同的API(如swparams,hwparams)

0 投票
1 回答
76 浏览

libalsa - 用于转码的 Alsa 库

我可以使用 ALSA 库将音频从一种格式转码为另一种格式吗?

即 S32 2 通道到 S16 1 通道音频从文件作为输入源到文件输出

在我看到的一个链接中, 插件:文件 此插件将 PCM 流的内容存储到文件或将流传输到命令,并可选择使用现有文件作为输入数据源(即“虚拟麦克风”)

如何设置这样的管道文件输入和文件输出,当它从文件输入时,它从哪里选择格式和通道等信息,因为 API“snd_pcm_file_open”不要求格式相关信息?我希望这来自配置文件 .asoundrc 但是,我没有看到任何关于如何做到这一点的文档?

0 投票
1 回答
948 浏览

gcc - gcc 中是否有一个编译标志来克服“错误:无效的存储类”?

我正在做我自己的 alsa 项目。

从更改操作系统(全新安装/未升级)

我另外下载/安装了

没有任何错误!

中间没有触及项目——所有 alsa 源代码在 wheezy 之前都编译得很好!!!

在拉伸下使用相同的“Makefile”,当再次使用 alsa 库/源(包含在 /usr/include/alsa 中)编译项目时,我现在面临以下“无效存储类”错误:

现在的问题 - 在没有任何进一步的项目更改的情况下迁移到伸展时发生了什么变化?

alsa 的变化?拉伸变化?

在此先感谢 - 非常感谢任何帮助!

我不是专业/专家,所以我没有能力更改 alsa 源代码头以适应新情况!

0 投票
1 回答
111 浏览

python-3.x - pyAlsaaudio 在 openSUSE 上安装

我正在尝试在我的 openSUSE 发行版上安装 pyAlsaaudio

我从这个链接下载了源代码,

http://larsimmisch.github.io/pyalsaaudio/pyalsaaudio.html

其中包括一个 py 设置文件。

最初我没有安装 gcc 编译器,所以我只是安装了它。

setup.py 文件仍然给我带来问题,我想是因为我缺少 alsa/asoundlib.h 文件,类似于这个线程:

https://ubuntuforums.org/showthread.php?t=1586707

但是,那里的解决方案不适用于 openSUSE,没有可用于 openSUSE 的 libasound2-dev。

有任何想法吗?

0 投票
0 回答
359 浏览

c - 播放停止时 ALSA PCM 点击/弹出

例如,我有一个简单的 play() 函数,可以很好地播放任意音调。问题是,一旦我决定停止播放音调,ALSA 就会产生咔嗒声/弹出声。我已经尝试过使用 snd_pcm_drain(),当它完成周期时停止音调,在有限循环的情况下甚至尝试逐渐使音调静音。有没有办法避免这种弹出?

0 投票
0 回答
175 浏览

go - xgo 交叉编译不适用于 alsa-lib

注意:我也在这里为 xgo 创建了这个问题,但我认为它可能更适合作为 SO 问题。

我正在尝试交叉编译我的 go 应用程序,其中一个依赖项是 alsa.lib。我无法使用 xgo 成功编译它。

最初我尝试使用此命令:

这产生了这个错误:

因此,我添加了depsargsto get--with-softfloat并将其移至一个新错误:

这就是我现在卡住的地方。我尝试添加更多参数,如对此答案的评论中提到的,但这只是给了我一个警告:

所以现在我真的不知道该怎么办。我只想交叉编译我非常简单的 arm 应用程序,以便可以在 Raspberry pi 上使用它。

0 投票
1 回答
1508 浏览

c - 如何使用 alsa 库 API 与耳机和扬声器一起使用?

我想使用 c 程序为扬声器和耳机实现(静音/取消静音和音量增大/减小)。使用 amixer 命令行实用程序,如此链接所示https://askubuntu.com/questions/371970/how-to-switch-在耳机和扬声器之间手动从命令行它可以工作,我需要使用 C 程序实现相同的东西。

所以我尝试了不同的方法。我看到了这个例子,用于 从 C 代码控制 Master Set ALSA 主音量的音量

对于 Master Linux ALSA/Sound-API 问题的静音/取消静音 - 你如何静音?

这两种解决方案都非常适合主配置。但在我的情况下,我想为扬声器和耳机实现相同的功能。因此,如果我用扬声器或耳机 + L0 替换selem_name而不是“主” ,我发现使用 amixer 命令会引发错误。

在这里,我需要将“扬声器”或“耳机”静音/取消静音。

如果我在下面的代码中使用 *selem_name = "Speaker" 或 "Headphone",则会引发如下所示的错误:

是不是给定的 selem_name 无效?如果是这样,我如何列出扬声器和耳机的有效 selem_name?我使用它从 amixer 命令行实用程序中找到的那个。

我必须为扬声器和耳机使用什么 API?

是否有任何解决方案可以将特定设备(扬声器和耳机)静音/取消静音?感谢所有帮助。

0 投票
1 回答
469 浏览

linux - aplay 在读完整首歌曲之前退出

问题陈述:当转储为文件时,我没有在输出中收到整首歌曲(我无法通过插孔听到歌曲,但我可以转储文件内容)。

摘录:我是 ALSA 编程的新手,我有一块嵌入式板,命令集有限。我已经浏览了这里的链接:需要 ALSA 教程,但我无法弄清楚与时间相关的问题。

设置:

涉及的音频盒具有单独的硬件和单独的 DSP,用于独立处理

信息流:Linux -> DSP 内核

输入歌曲与linux内核通信,将歌曲加载到DMA区域->将DMA读取到DSP使用的单独DMA环形缓冲区并将其写入I2S输出路径到文件中

我可以看到这首歌的大小是 960000 字节,采样率为 48000,S16_LE 格式,2 通道,16 位位深度 -> 计算如下所示 - 根据页面“ https://www.colincrawley. com/audio-duration-calculator/ "

当我输入日志时,我的 DSP 核心仅在大约 10 分钟内处理这首歌。在“aplay”应用程序发送 ioctl 调用以关闭 linux 上的音频接口之前 1 秒。

我的问题是:

  1. aplay如何理解时间?对于 5 秒的时间,我们怎么能确定它已经运行了 5 秒。
  2. 有没有办法理解等到整首歌曲传输到 DSP 内核处理后再发出关闭 IOCTL 命令?

有关我正在输入的输入文件的更多信息:

我很乐意提供更多信息来了解为什么 aplay 应用程序会提前关闭歌曲。但请注意,它是一个闭源项目。

我使用的命令:

关于为什么会发生这种情况的任何提示?如上所示,我可以看到 aplay 应用程序在 0.98 秒内退出。但是这首歌必须播放5秒钟。

0 投票
3 回答
816 浏览

c - C:将整数数组打印为二进制数据

我想使用 alsa 从麦克风记录数据。这个命令:

将麦克风数据写入整数缓冲区 buf。(我不确定 ..._readi 写入的数据是否是整数值,文档没有说明。)

但是,如果我遍历缓冲区,则数字毫无意义。作为一个例子,我得到 buf[60] == -2,600,000,000 所以如果整数是 32 位,它小于最小整数。(请注意,这不是我的代码,但我必须处理它)。我想获取整个缓冲区数组的二进制值并理解这些值并查找它们以何种方式保存到缓冲区中,以便我可以使用这些数据重新创建声波。