【发布时间】:2013-01-23 08:10:57
【问题描述】:
我一直在尝试通过 adb shell 在 Android 设备上运行的本机 linux 程序中捕获音频。
因为我似乎只得到(非常安静的)噪音,即没有实际信号(有趣的是,执行类似操作的 Android/Java 程序确实显示该输入上有信号), 我执行了 alsa_amixer,它有一个看起来像正确的条目:
Simple mixer control 'Capture',0
Capabilities: cvolume cswitch penum
Capture channels: Front Left - Front Right
Limits: Capture 0 - 63
Front Left: Capture 31 [49%] [0.00dB] [off]
Front Right: Capture 31 [49%] [0.00dB] [off]
“关闭”。这可以解释噪音。 所以我寻找了如何使用 alsa_amixer 取消静音通道的示例,我发现了不同的参数建议,如“49% on”或“49% unmute”,或者只是“unmute”,这些都不起作用。 (如果省略音量%,则显示“无效命令!”,否则,设置音量,但忽略开启/取消静音)
我还搜索了如何以编程方式执行此操作(我最终需要这样做,尽管现在手动方法会有所帮助),但在那里并不太幸运。 我发现的唯一 ALSA lib 命令听起来像它可以做类似的事情是“snd_mixer_selem_set_capture_switch_all”,但文档并没有说明参数的作用(1/0 不是开/关,我试过了;))
【问题讨论】:
-
这一切都适用于常规 Linux。也许 Android 有一个残废的 alsa 版本。
-
...set_capture_switch_all ?我将其称为“Capture”,值为 1。程序崩溃,我将其作为控制台输出:ALSA lib external/alsa-lib/src/conf.c:4487:(parse_args) Unknown parameter 1, ALSA lib external/ alsa-lib/src/conf.c:4620:(snd_config_expand) Parse arguments error: No such file or directory, ALSA lib external/alsa-lib/src/control/control.c:902(snd_ctl_open_noupdate) Invalid CTL hw:0 ,0
-
This here program 为我工作。
-
啊,谢谢!如果我设置为 1,它现在是 [on],当使用“默认”设备时,“hw:0,0”会导致崩溃,为什么?显然仍然没有得到有意义的输入,所以搜索继续......好吧,因为标题是关于取消静音设备的,所以它已经回答了 - 我应该回答自己发布您的代码,以便能够将此问题标记为“已回答”吗?
-
顺便说一句,我不能使用“默认”设备进行录制 - 它只会让我设置 POT + 帧大小的缓冲区大小,例如而不是 16384,我只会得到 16386,而播放通道则相反,但我需要两者相同。这是一个相当奇怪的驱动程序......