问题标签 [alsa]
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.
c++ - 此参数的正确类型是什么?
这个适合所有 ALSA 人。我需要在这里进行健全性检查。我正在使用 alsa-lib api 来播放声音,而我用来将数据写入驱动程序的函数是
对于第三个参数,应该是帧数还是缓冲区大小(以字节为单位)?我之所以问,是因为我已经看到了很多以字节为单位的大小的示例。文档中包含一个示例。
c++ - ALSA:循环声音问题
我编写了一个小程序,在嵌入式 Linux 板上测试 ALSA 库。程序配置 ALSA,播放单个声音,然后等待 1 分钟后退出。
这是我观察到的:播放声音后,有静默停顿,然后再次播放声音。我 100% 肯定该程序本身不会再次播放它。
为了进一步研究,我做了另一个实验:在同一块板上使用 aplay,我播放了不同的声音。这工作得很好。接下来,我再次执行了我的 hello world 程序。这一次除了周期性的声音,我听到了aplay播放的其他声音。
我怀疑 alsa-lib 或声音驱动程序中的缓冲区没有被清除。或者我可能没有正确配置软件参数。snd_pcm_dump 吐出以下信息:
我还应该提到,我没有看到任何这些是我在 Ubuntu 下运行的。
audio - 在 ALSA 中每 20 毫秒获取一次音频数据?
我想每 20 毫秒或每 40 毫秒调用 snd_pcm_readi() 并获取音频数据。我想知道如何同步获取我的数据......即每 X 毫秒......
感谢您的任何回复。
c - Makefile 条件包含
我正在尝试编写一个需要 ALSA 或 OSS 标头的应用程序。基本上,如果 /etc/oss.conf 不存在,我想将定义传递给编译器,因为这可能意味着 soundcard.h 标头不存在(请随时纠正我,我还是新手与 OSS 合作)。根据 OSS 文档,您可以像这样使用 include 指令:
一个问题。OSS 支持是可选的,所以我想检查头文件是否存在,如果存在,将定义传递给编译器。问题是,AFAIK 无法检查文件是否存在于 makefile规则之外。在规则内部,如果我使用 if 语句,出于某种原因,尝试设置 CFLAGS 不会改变它:
(上面只是输出 CFLAGS 的原始值,即使${OSS_CONFIG}
存在。)当然,这非常丑陋,我想知道是否有更清洁的方法来做到这一点。还是我打算这样做会引发一场涉及小猫种族灭绝的全球灾难性事件?
哦,请不要告诉我使用 autoconf。
c - 使用 ALSA api - 在缓冲区填满之前不会开始声音
我正在使用的应用程序仅在生成足够的声音后才播放声音。假设我点击鼠标 10 次,没有声音,然后在这十次点击之后我会听到十次鼠标点击声音(例如)
我发现缓解这个问题的唯一方法是设置一个非常短的缓冲区大小,我不想这样做。
我一直在尝试使用 start_threshold sw 参数,但这没有效果。
似乎我应该能够在写入指定数量的小于缓冲区大小的数据时强制它播放,这是正确的吗?这就是 start_threshold 似乎表明的,因为周期长度可能比缓冲区短得多(或者我在示例中看到过)。
我的代码是这样的:
调用硬件参数设置
获取包含数据的字节数组
循环并写入缓冲区,每次加上一个字节偏移量
调用 start (这应该强制它播放,对吗??)
如果有 -EPIPE,请调用 prepare 并将 0 添加到偏移量(我认为这是唯一一次播放。)
谢谢!
c++ - ALSA:如何判断声音何时播放完毕
我有一个接受声音请求并使用 ALSA 播放它们的 c++ 对象。有处理声音请求的线程。有些声音是周期性的,并在 wav 文件内容写入 ALSA 库后重新安排。有没有办法可以找出所有数据何时播放?函数snd_pcm_writei是一个阻塞写函数,但并不一定意味着文件已经播放过了。
我正在考虑的一个选项是在播放每个声音文件后调用 snd_pcm_drain,然后在播放下一个文件时调用 snd_pcm_prepare。这会是一个很好的解决方案吗?或者这是低效的?
更新: “排水解决方案”似乎有效,但效率不高。调用需要一段时间才能返回(也许它会清理一些资源)并增加程序的延迟。当我连续播放许多小文件时,延迟效果最好。每个文件之间可以听到几秒钟的沉默;这是 snd_pcm_drain 执行。
linux - ALSA:节能指南
有谁知道任何地方的 ALSA 节能指南?例如...
- 当不播放声音时,将 PCM 流置于什么状态?
- 有什么可以在库中禁用以节省电力的东西吗?
- 什么不该做?
audio - Linux ALSA/Sound-API 问题 - 你如何静音?
如何使用 C 静音?有 ALSA 函数调用吗?
是否有任何其他可以使麦克风静音的函数调用/API?
我已经编写了一些代码来使用 ALSA 进行音频播放,并且我注意到在声音开始播放之前有一个延迟......如何减少声音播放的延迟或延迟?
X
linux - 设置 ALSA 流的音量
我需要能够设置我的 ALSA 流的音量(来自 PCM 接口的 snd_pcm_t)。这是一个常见的操作,我不明白为什么没有简单的方法?我怎样才能做到这一点?流式传输衰减数据不是一种选择,因为这将导致不稳定的音量调整,因为数据是缓冲的。在 DirectSound 和 WinMM 中,这是一个简单的函数调用。我错过了什么吗?我应该使用混音器界面吗?控制界面?我看到 snd_pcm_t 和控制接口之间没有任何联系。我是否使用了错误的 API?
linux - 连接到 ALSA
当我尝试在我们的一台机器上以另一个用户身份连接到 ALSA 声音系统时,我收到以下消息-“ALSA lib pcm_dmix.c:975:(snd_pcm_dmix_open) 无法创建 IPC 信号量”。该机器已作为我们系统中的另一个用户登录。无论我使用 aplay 还是我的应用程序,我都会收到相同的消息。如果我以 root 身份运行,应用程序将连接到 ALSA 系统并播放声音。如果我 su 到登录控制台的用户,我会遇到同样的失败。
有没有人有任何想法?我曾尝试在我的程序上使用 setcap,但由于“不支持操作”而失败。这可能是因为我的应用程序位于 NFS 挂载分区上。