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

c - 如何使用 Alsa 库更改扬声器的音量?

我在 Linux 上使用 Alsa amixer 库控制扬声器的音量。我遇到的问题是它没有在 [0,100] 百分比之间以适当的比例控制音量。我从这里得到的这个示例代码 从 C 代码中设置 ALSA 主音量

上面的程序没有以我作为参数传递的适当百分比设置音量。

给体积程序的百分比 -> 实际设定体积

0->0

10->2

20->6

30->10

40->15

50->22

60->31

70->41

80->56

90->75

100->100

如上所示,当我在 [0,100]% 范围内设置音量时,我得到不同比例的结果音量。例如。对于值 40,它将音量设置为 15%。

如何在 [0,100] 百分比之间以适当的比例设置音量?

0 投票
0 回答
1634 浏览

c++ - alsamixer 中的自动静音功能用于什么?

我现在正在 ubuntu 上使用 alsamixer 编写程序(c 和 c++)。但我有一个问题,有时我的 alsamixer 会重新静音。我认为原因是alsamixer的自动静音功能。但是我不知道alsamixer的自动静音功能是做什么用的?以及何时发生“自动静音”?
我想也许我的程序做了一些使“自动静音”发生的活动。

0 投票
1 回答
152 浏览

c - 有没有办法通过epoll机制等待alsa事件?

我通过由 snd_pcm_poll_descriptors 填充的 struct pollfd 结构的 fd 字段获取 alsa 设备 fd ......但是当涉及来自 epoll_wait 的“demangle”事件时,snd_pcm_poll_descriptors_revents 没有帮助,因为只有 struct pollfd 适合它的参数。

0 投票
1 回答
342 浏览

audio - ALSA-Sound:捕获线路输入

我正在使用 asoundlib 库在我的树莓派 4 上读取声音(在我的另一台 PC 上播放并插入我的 外部声卡),首先我尝试使用麦克风输入,但显然不应该与放大的信号(我的读数失真得厉害),显然我应该使用端口中的线路。

当我进入我的 Pi 的音频设备设置时,我看到它可以识别线路输入,但我只能在 alsa 库中使用“hw:1,0”,所有其他硬件代码“hw:1,1”、“hw: 1,2", "hw:1,3" 产生“没有这样的文件或目录。

终端还说只有一个设备(尽管我不确定它想告诉我什么):

0 投票
1 回答
220 浏览

alsa - ALSA 异步模式不调用回调函数

我编写了一个简单的 C++ 包装器,表示基于 ALSA API 的 AudioStream。在我看来,使用异步模式非常方便。不幸的是,为异步模式注册的回调函数没有被调用。

alsa 文档指出snd_async_add_handler()

此函数将回调函数与给定文件相关联,并将此关联保存在 snd_async_handler_t 对象中。每当为文件 fd 引发 SIGIO 信号时,将调用回调函数,其参数指向此函数返回的异步处理程序对象。SIGIO 信号的 ALSA sigaction 处理程序自动将通知多路复用到已注册的异步回调。但是,应用程序负责指示设备驱动程序生成 SIGIO 信号。 SIGIO 信号可能已被另一个信号替换,请参阅 snd_async_handler_get_signo。

尤其是粗体部分很有趣。这是否意味着用户必须以某种方式配置驱动程序才能生成这些 SIGIO?我猜 SIGIO 只是某种中断,所以必须启用驱动程序生成中断???我希望这是通过hw_params配置左右 ALSA 的责任。

我唯一能找到的是在下面的链接中,其中的答案指出,ASYNC 已被弃用,但是,从 ALSA 文档来看,这似乎不是真的。

ALSA - 管理异步 IO

ALSA 文档供参考: https ://www.alsa-project.org/alsa-doc/alsa-lib/group___global.html#gafd936c40505997bb659b74bd368636b8

0 投票
1 回答
221 浏览

alsa - ALSA 音序器:使用高速 MIDI 避免输入缓冲区溢出

我想通过 ALSA 定序器发送大型 SysEx 消息(可以是几兆字节):目前我将它们分成几个 ALSA 事件,并像这样在一个循环中发送它们:

此循环确保所有事件都从发送客户端/端口发送。但是一旦 snd_seq_event_output_direct 返回 -EAGAIN,接收客户端的输入池就会被清空,无条件地丢弃大约 70 个事件,而不仅仅是被拒绝的数据包。由于发送客户端没有关于发送到接收客户端的事件的信息,它无法知道有多少数据包丢失并重新传输。

有人建议将传输速率限制为 MIDI 1.0 硬件规范定义的 31.25 kbit/s。但这不一定是一个好主意,因为 MIDI 协议和传输速度实际上已经被更快的以太网、蓝牙和 USB 硬件层的支持所分割。MIDI 2.0 规范明确独立于传输速率,并建议开发/使用具有更高传输速率的硬件层。

所以我的问题是:如何在不人为限制传输的情况下可靠地将大量 MIDI 数据至少传输到软件客户端?

我想偷看接收客户端的输入池,但我不知道该怎么做。到目前为止,我可以找到有关接收端口的输入队列的信息,但我不知道如何处理。

0 投票
2 回答
375 浏览

c++ - 在 c++ 中与 alsa-lib 同时播放“.wav”音频的简单示例?

我正在用电脑键盘制作钢琴,我需要同时播放“.wav”音频。

我设法使用 SFML/Audio.hpp 和 SDL2/SDL_mixer.h 库完美地做到了这一点,但是下面代码的 PlayAudio :: play () 函数需要几毫秒来播放音频,但是延迟几乎无法察觉,当钢琴高速弹奏时,我注意到存在的小延迟。

例子:

所以我考虑做同样的过程,但使用似乎更快的 alsa-lib,但我设法一次发出一个声音,我不能同时发出音频。我尝试使用线程,但只有在另一个声音结束后才会发出声音。

0 投票
1 回答
325 浏览

go - Go - int16 切片到字节切片

我正在编写一个与 libalsa 交互的 Go 程序。我将 PCM 数据存储在 []int16 切片中,但要调用 libalsa,我需要将其存储在 []byte 切片中。

如何将 []int16 切片转换为 []byte来完成此操作?

0 投票
0 回答
90 浏览

audio-recording - 如何使用 ALSA 实现静音/取消静音麦克风录音功能

我是 alsa 的新手,正在尝试从麦克风实现录音。我想实现静音功能并写在api下面。我不确定使用 snd_pcm_pause 进行静音是否是实现静音的正确方法。我可以停止录音,但在尝试恢复音频时没有录音。

这是示例代码。

0 投票
2 回答
128 浏览

c - 为什么在 ALSA 中声音会跳过?

我正在尝试使用下面的程序播放此声音,但声音有点快并且会跳过。声音文件的采样率为 11025 Hz,立体声,采样大小为 16 位。由于参数无效,问题似乎是snd_pcm_hw_params_set_buffer_size()and snd_pcm_hw_params_set_period_size()(两者都是我正在研究的函数),但我不知道为什么它们无效并且将它们注释掉并不能解决跳过效果。我究竟做错了什么?