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

c - ALSA Lib 1.1.2 编译错误

我正在尝试为基于 linux-arm 的处理器交叉编译 ALSA Lib 应用程序。我正在使用 eclipse 为我进行构建。应用程序的构建阶段是成功的,但是当 gcc 链接器尝试完成时出现错误。

我收到以下错误

构建目标:声音调用:Cross GCC Linker arm-linux-gnueabihf-gcc -L/proc/asound -L/srv/nfs/rootfs/usr/lib -Wl,-rpath-link,/srv/nfs/rootfs/usr /lib -L/srv/nfs/rootfs/lib -Wl,-rpath-link,/srv/nfs/rootfs/lib -o "sound" ./play.o
./play.o: 在函数main': /home/neonws/sound/Debug/../play.c:13: undefined reference tosnd_pcm_open' 生成文件中: 29:目标“声音”的配方失败 /home/neonws/sound/Debug/../play.c:14:未定义对snd_strerror' /home/neonws/sound/Debug/../play.c:20: undefined reference tosnd_pcm_hw_params_malloc 的引用'/home/neonws/sound/Debug/../play.c:21:对snd_strerror' /home/neonws/sound/Debug/../play.c:26: undefined reference tosnd_pcm_hw_params_any' 的未定义引用'/home/neonws/sound/Debug/../play.c:27: 对 snd_pcm_hw_params_set_access' 的未定义引用'/home/neonws/sound/Debug/../play.c:33: 对snd_pcm_hw_params_set_formatsnd_strerror' /home/neonws/sound/Debug/../play.c:32: undefined reference to的未定义引用snd_strerror' /home/neonws/sound/Debug/../play.c:38: undefined reference to' /home/neonws/sound/Debug/../play.c:39:未定义的引用snd_strerror' /home/neonws/sound/Debug/../play.c:44: undefined reference tosnd_pcm_hw_params_set_rate_near' /home/neonws/sound/Debug/../play.c:45: 未定义引用snd_strerror' /home/neonws/sound/Debug/../play.c:50: undefined reference tosnd_pcm_hw_params_set_channels' /home/neonws/sound/Debug/../play.c:51: 未定义引用snd_strerror' /home/neonws/sound/Debug/../play.c:56: undefined reference tosnd_pcm_hw_params' /home /neonws/sound/Debug/../play.c:57: 未定义引用snd_strerror' /home/neonws/sound/Debug/../play.c:62: undefined reference tosnd_pcm_hw_params_free' /home/neonws/sound/Debug/../play.c:64: 未定义引用snd_pcm_prepare' /home/neonws/sound/Debug/../play.c:65: undefined reference tosnd_strerror' /home/neonws/sound /Debug/../play.c:71:未定义引用snd_pcm_writei' /home/neonws/sound/Debug/../play.c:72: undefined reference tosnd_strerror' /home/neonws/sound/Debug/../play.c:78:未定义引用 `snd_pcm_close' collect2:错误:ld 返回 1 个退出状态make: *** [声音] 错误 1

11:15:58 构建完成(耗时 75 毫秒)

我正在使用来自 ASLA-LIB api 的示例播放程序。

我想知道是什么导致链接器失败?

0 投票
0 回答
640 浏览

alsa - ALSA:如何将不同的音频流同时路由到单个声卡上的不同播放硬件设备?

在这里,我想要不同的音频流,同时在两个硬件播放设备(hw:0,0 和 hw:0,1)上。目前我可以单独收听它们,但是如果我尝试同时播放它们,声音会从 hw:0,1 停止并且仅从 hw:0,0 播放(Alsa 调试日志说:资源暂时不可用),即使我已经改变了我的默认设备为 hw:0,1。这些实际上是混合后的从属 pcms,后来在我的 asound.conf 中插入 pulgin。

当最初创建这些接收器时,alsa 会发出 Unknown PCM 和 Unknown 参数的警告,但音频呈现良好(这就是为什么忽略在论坛上阅读的错误)。

因此,分别播放 aplay -D default /tone.wav 和 aplay -D device1 /tone.wav 之类的东西,效果很好,但是当一起执行时,只播放 device1(hw:0,0) 而我的默认 hw:0,1 一直阻塞我可以通过 cat /dev/snd/pcmC0D1p 进行检查。

有人可以指导如何做吗,我想只用 alsa 做(不是用脉冲)?

请找到以下内容:

$播放-l

$ cat /proc/asound/设备

其中 hw:2,0 不可用。

0 投票
1 回答
1094 浏览

c++ - 无法在 ALSA 覆盆子 pic 应用程序上配置硬件参数

我尝试编写用于录制音频的 ALSA 应用程序,当我尝试设置一些参数然后将它们打印到屏幕上时,我得到了一些我无法更改的默认数字

这是我在运行树莓派时得到的:

这就是我在台式电脑上运行它时得到的结果:

如您所见,我正在尝试将周期大小设置为 64 并返回 341,此值仅在我更改速率时才会更改,假设我将速率设置为 44100,这就是我得到的:

在台式电脑上,这不会发生我试图在 alsa-lib 中追踪这个函数,但我迷路了,也尝试了不同的声卡,但仍然得到相同的结果。

0 投票
1 回答
1341 浏览

c - Alsa Lib 硬件参数设置

我正在尝试使用 alsa 库在我的 linux(debian)嵌入式设备上录制声音。我的嵌入式硬件是这个 [1],根据其数据表第 33 页 [2],

模拟音频信号由 on-SOM TLV320AIC3106 音频编解码器提供。

以及此 Texas Instruments 音频编解码器的数据表 [3],

支持 8 kHz 至 96 kHz 的速率

我使用 alsa lib 的示例应用程序代码,对于初始工作我没有更改代码。在示例代码中,采样率设置为 44100Hz。我成功录制了声音并播放了。现在,我认为,我可以根据数据表使用 alsa-lib 以 8000Hz 的采样率录制声音。我将采样率设置为 8000Hz,但在 alsa 配置中,它更改为 16000Hz。我将采样率设置为 8000Hz;

但是在调用这个方法之后;

它更改为 16000。上面之间没有其他方法调用。是我的设置错误还是编解码器不支持 8kHz?

更新:当我将速率设置为 16000 时,它变为 8000。我真的很困惑。

[1] = http://www.variscite.com/products/system-on-module-som/cortex-a9/dart-mx6-cpu-freescale-imx6

[2] = http://www.variscite.com/images/stories/DataSheets/DART-MX6/DART-MX6_v1_2_datasheet_v2_1.pdf

[3] = http://www.ti.com/lit/ds/symlink/tlv320aic3106.pdf

0 投票
1 回答
1249 浏览

linux - 将字节流式传输到 ALSA 播放设备

我在使用libasound. 最终,我的目标是能够通过网络路由播放流并在远程设备上播放。

此问题中提供的代码将WAV 文件读入内存并将其写入驱动程序并通过snd_pcm_writei它工作。然而,这段代码所做的事情和我正在尝试做的事情之间的一个关键区别是,我没有立即获得所有可用的数据。我希望在数据可用时对其进行流式传输。

调整上面的示例代码以满足我的需要,我最终得到了这个:

这段代码可以用gcc playback.c -o playback -lasound. 我正在使用的 WAV 文件可以在这里找到。

bufsize当我运行此代码片段时,我根据块大小在播放中重复的音频片段对传入数据进行分块。大块大小比小块大小产生更少的重复。结合音频听起来,我相信每个块末尾的一个小片段正在重复。

我使用的参数是:

  • 采样率:44100
  • 频道:2

为什么一次性发送整个 WAV 文件有效,而发送部分文件无效?如何向驱动程序发送音频数据块并使其正常播放?

0 投票
1 回答
5315 浏览

c - 在几个标题中重新定义“struct timeval”

我在编译 C 程序以将声音从 Intel Edison 流式传输到设备(iOS 和 Android)时遇到了几个问题。

我做了一个 C 程序:我在我的程序中使用 alsa/asoundlib.h 和 pthread.h 我不包括 sys/time.h 因为 ALSA 不允许这样做。

我在我的程序中使用了很多 timeval,当我在我的计算机上编译它时,它编译得很好,但是在我的爱迪生上,当我:

我怎样才能阻止这些重新定义?!谢谢您的帮助 !

额外信息:

我包括:

我删除了 sched.h,没有任何反应

0 投票
1 回答
424 浏览

c - Alsa 库配置

我正在使用 Alsa 库从立体声输出中查找声音样本的最大值。我正在使用 S32_LE pcm 格式。从我的 python 代码中,我可以立即获得最大值。但是从 C Alsa Lib 中,无法获得即时值。请帮我解决这个问题。我附上了我的python脚本和c代码供您参考。

蟒蛇代码:

C代码:

问候拉吉

0 投票
1 回答
392 浏览

alsa - 是否可以获得有关繁忙的 Alsa 设备的信息?

目前,我正在尝试通过调用snd_pcm_open函数来获取有关 Alsa 设备的信息,然后将其传递给以snd_pcm_info获取有关设备的信息。我计划专门从snd_pcm_query_chmaps. 我得到的错误代码是:Device or resource busy。我很好奇是否有另一种方式来获取这些信息,或者以某种方式打开 pcm,使其永远不会被其他应用程序“忙碌”。如果可能的话,我如何以即使设备繁忙也能正常工作的方式获取这些信息?

我的代码的相关片段是

0 投票
0 回答
166 浏览

linux - 如何在 Linux 中使用 ALSA 获得瞬时音量或播放时间

我正在用 ALSA 在 Reapberry Pi 上编写一个“播放声音”程序。

我每 1280 个样本调用一次 snd_pcm_writei。

我想加一个小LED,让它“声音越大越亮,声音越小越暗”。

我的飞机是,如果每隔很短的时间段(例如:100ms)有一个回调,我可以在回调中获得瞬时音量,我可以控制其中的 LED。

在android中,有AudioTrack.setPositionNotificationPeriod。但是,我不知道如何在带有 ALSA 的 Linux 下做到这一点。

谁能给我一些建议?

播放功能如下所示:

我尝试在 snd_pcm_writei() 之前的 while 循环中计算 RMS,设置 LED 亮度和睡眠,以确保在播放这 1280 个样本时 LED 可以亮起。但这会导致声音不连续。

所以我会为 LED 控件创建另一个线程,我可以在该线程中休眠而不会影响播放。

0 投票
1 回答
2497 浏览

linux - 如何在 ALSA 中获取 PCM 设备路径?

ALSA 库中从 pcm 句柄或名称获取物理播放设备的文件名的最简单方法是什么?

例如对于 pcm 设备hw:0,0,我想获得/dev/snd/pcmC0D0p. 这相当简单(只需传输索引),但对于“默认”或任何其他别名,它并不那么明显。