从 linux 主机控制 Jabra 710 USB 扬声器音量
Posted
技术标签:
【中文标题】从 linux 主机控制 Jabra 710 USB 扬声器音量【英文标题】:Controlling Jabra 710 USB speaker volume from linux host 【发布时间】:2017-09-28 05:46:09 【问题描述】:我正在使用 Linux(2.6.39 内核)并试图找到一种方法,让我可以从我的主机 Linux 操作系统向 Jabra 设备发送音量递增/递减命令。我看到这个功能在 Windows 和 Ubuntu 中都是可行的,从 PC 控制音量会改变 Jabra 的音量。
我能够接受从 Jabra 到主机操作系统的 Consumer HID 音量递增/递减命令,但反之则不行。另外,我可以使用 HIDIOCSUSAGE ioctl 向 Jabra 发送静音或摘机命令,但在官方 USB 使用表document 中找不到音量控件的相应使用 ID。
我不确定来自主机的音量命令是否确实是通过 HID 或其他一些 API(例如 snd-usb-audio 内核模块)发送的。
非常感谢您的见解。
【问题讨论】:
显示此设备的amixer scontrols
的输出。
$amixer -c 1 scontrols
Simple mixer control 'PCM',0
Simple mixer control 'Headset',0
现在你知道的足够写一个答案了。 ??????
嗨,很抱歉,我没有关注.. 你能详细说明一下吗?我的主要问题是从我的 linux 操作系统代码中找出控制耳机音量的正确方法。 (我没有使用 alsamixer/amixer)。我认为来自主机端的音量增加/减少不会作为 HID 命令发送到耳机,与摘机或静音命令相反,而是不同的。任何想法?谢谢!
【参考方案1】:
找出该混音器控件的名称和有效范围,然后 执行:
system("amixer cset name='Master Playback Volume' 42");
或者像这样直接访问控件:
#include <stdio.h>
#include <stdlib.h>
#include <alsa/asoundlib.h>
static void check(int err, const char *f)
if (err < 0)
fprintf(stderr, "%s failed: %s\n", f, snd_strerror(err));
exit(EXIT_FAILURE);
#define CHECK(f) check(f, #f)
int main()
snd_ctl_t *ctl;
snd_ctl_elem_value_t *value;
CHECK(snd_ctl_open(&ctl, "hw:1", 0)); // card number
snd_ctl_elem_value_alloca(&value);
snd_ctl_elem_value_set_interface(value, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_value_set_name(value, "Master Playback Volume");
snd_ctl_elem_value_set_integer(value, 0, 42);
CHECK(snd_ctl_elem_write(ctl, value));
snd_ctl_close(ctl);
return 0;
【讨论】:
谢谢!正是我想要的以上是关于从 linux 主机控制 Jabra 710 USB 扬声器音量的主要内容,如果未能解决你的问题,请参考以下文章
戴尔PowerEdge RAID控制卡使用示例(PERC H710P为例)
从主机 Windows 上无法远程访问 Linux 的 Tomcat 服务器解决方法