问题标签 [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.
audio - 如何在需要时加快音频速度,然后在 ALSA 下恢复正常速度?
我在启用了 ALSA 的 Linux 上有一个嵌入式软件——它只是一个 WIFI 扬声器。我用ALSA做声音控制。
现在我想实现一些逻辑如下,但我不确定我是否可以在 ALSA 中解决它或需要一些其他框架。
- 手机使用WIFI连接WIFI音箱成功。
- 手机播放一些音乐,会通过WIFI传输数据,让WIFI音箱播放出来。
- 理想情况下网络稳定,WIFI音箱播放的音乐稳定。
- 突然网络不稳定,假设数据停了1秒。但请注意,手机仍在向 WIFI 扬声器发送数据(这是手机中 WIFI 扬声器应用程序的默认行为,作为缓冲)。所以在这1秒内,数据缓存在手机中,WIFI音箱没有收到任何数据。所以WIFI音箱没有声音。
- 1秒后,一切恢复正常,手机将“1秒”数据加上“现在”数据发送到WIFI音箱。
- WIFI音箱可以接收到步骤5中的所有数据,并按时间顺序播放。
- 这会带来一个问题,WIFI音箱总是落后手机1秒。
- 我想要什么 - 在这种情况下(从 #4 到 #7),我想加快“1 秒”数据的速度以进行追赶,然后进行正常的速度播放。
现在确定如何实现这一点,所以任何建议都将不胜感激!再次感谢!
alsa - ALSA lib pcm_hw.c:1829:(_snd_pcm_hw_open) 卡的值无效
我目前正在尝试使用 ALSA 库来发出声音。但是,我收到以下错误:
我想我确实有一张声卡,如下所示:
那么有一个 是什么意思invalid value for the card
?有没有办法可以编辑它以使值有效?
我不确定以下内容是否相关,但很多 stackOverflow 帖子建议 OPs run aplay -l
。我的结果是
c - 在现代内核版本中注册 Midi 设备
我目前正在编写一个 Linux 内核模块,该模块将创建一个虚拟 Midi 设备,以便用户空间程序可以将 midi 信号发送到任何类似 DAW 的软件。我发现了一个很棒的功能来帮助我完成我的任务:int register_sound_midi(const struct file_operations * fops, int dev)
. 问题是这个函数在 Kernel Version 4.15 之后就不再存在了。从V15到V16,注册和取消注册功能就消失了。我现在对如何在 4.15 之后的版本中从内核注册一个假的 midi 设备感到目瞪口呆。如何在 Kernel post 4.15 版本中注册 midi 设备?是否可以使模块向后兼容旧内核版本?
当前代码:
audio - PCM 通道映射到物理扬声器/麦克风(ALSA 库)
我的要求是:
- 在播放界面读取通道数
- 读取每个捕获接口中的通道数
- 将 WAV 通道映射到特定的扬声器输入/输出
对于扬声器,可以通过检查 alsa-info 命令的输出来实现:
正如我所理解的,这是 PCI Express 之间的映射,它的名称由声卡驱动程序提供商提供。以下输出可以说明:
- 声卡中的 IO 数量
- 播放 IO 的数量(这是通过检查其名称以搜索“麦克风”)
有什么办法可以参考:
/devices/pci0000:00/0000:00:1b.0/sound/card2/input13
...直接通过播放一个单声道WAV进去吗?
一般来说,我希望能够列出所有声音接口并收集允许我通过 SDL 播放到任何物理扬声器并从任何物理麦克风在特定 WAV 通道上录制的参数。我设法通过以下方式部分实现了这一目标:
- 确定 aplay -l 将使用的设备。在我的例子中:
- 确定回放捕获通道的数量(到目前为止,通过检查物理设备 - 有一个 Line-In 和一个 MIC)但是输出
cat /proc/asound/card0/stream0
给了我:
捕获:状态:停止接口 2 Altset 1 格式:S16_LE 通道:2 端点:5 IN (ASYNC) 速率:44100、48000 位:16
所以它告诉我我有一个带有 2 个通道的捕获接口(但我希望有 2 个捕获 - 一个用于线路输入,第二个用于立体声麦克风)
- 所以我知道如果麦克风连接到接口,那么我应该期待 2 通道 WAV,每个通道对应一个麦克风通道
非常相似的故事是播放界面。这是cat /proc/asound/card0/stream0
播放:
在那种情况下,我有用于 7.1 扬声器设置 + 耳机的物理连接器输入。所以我希望控制超过 10 个频道,但我有超过 8 个(耳机总是重复的,就像有 2.1 一样)有没有办法单独访问这些频道?还有一个 SPDIF 输入/输出物理接口。我是否应该期望在每个物理接口上都有重复的 PCM,或者有什么方法可以分离这些流?我想从这辆有声汽车中挤出尽可能多的 I/O :)
c++ - 在树莓派零中编译 ALSA 项目的 pcm.c 示例时出现问题
我正在使用带有最新树莓派操作系统的树莓派零 W
我已经安装了 libasound2 和 libasound2-dev,并且我从树莓派论坛上下载的用于测试 alsa 库的代码编译并正确运行:
我正在尝试在此处编译 ALSA 项目网站中提供的正弦波生成示例代码:https ://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_8c-example.html
这在他们的示例页面中列为 pcm.c
我已将此代码保存在 main.cpp 中,并且我已更改#include "../include/asoundlib.h"
(这会导致编译时找不到文件错误)为#include <alsa/asoundlib.h>
我使用gcc main.cpp -o main -lasound -fpermissive
. 我收到一系列警告,但最后for (format = 0; format < SND_PCM_FORMAT_LAST; format++) {
在它说有的行出现错误,no match for operator++
并且operand type is 'snd_pcm_format_t' {aka '_snd_pcm_format'})
. 但是根据他们的文档format
已被声明为static snd_pcm_format_t format = SND_PCM_FORMAT_S16;
并且snd_pcm_format_t
是一个枚举。
我需要做什么才能编译这个基本示例?或者是否有一个更简单的示例展示如何使用 C++ 在 ALSA 中生成正弦音,或者有一些博客或教程解释了 ALSA 的这个示例代码是如何工作的?