从 linux 主机控制 Jabra 710 USB 扬声器音量
Controlling Jabra 710 USB speaker volume from linux host
我正在使用 Linux(2.6.39 内核)并试图找到一种方法允许我从我的主机 Linux [=26= 发送音量 increment/decrement 命令] 到 Jabra 设备。我看到此功能在 Windows 和 Ubuntu 中都是可行的,其中从 PC 控制音量会改变 Jabra 音量。
我能够接受从 Jabra 到主机 OS 的 Consumer HID volume increment/decrement 命令,但反之则不行。此外,我可以使用 HIDIOCSUSAGE ioctl 向 Jabra 发送静音或摘机命令,但我无法在官方 USB 用法中找到音量控制的相应用法 ID table document。
我不确定来自主机的音量命令是否确实是通过 HID 或其他一些 API 发送的,例如 snd-usb-audio 内核模块。
非常感谢您的见解。
找出那个混音器控件的名称和有效范围,然后
只需执行:
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(2.6.39 内核)并试图找到一种方法允许我从我的主机 Linux [=26= 发送音量 increment/decrement 命令] 到 Jabra 设备。我看到此功能在 Windows 和 Ubuntu 中都是可行的,其中从 PC 控制音量会改变 Jabra 音量。
我能够接受从 Jabra 到主机 OS 的 Consumer HID volume increment/decrement 命令,但反之则不行。此外,我可以使用 HIDIOCSUSAGE ioctl 向 Jabra 发送静音或摘机命令,但我无法在官方 USB 用法中找到音量控制的相应用法 ID table document。
我不确定来自主机的音量命令是否确实是通过 HID 或其他一些 API 发送的,例如 snd-usb-audio 内核模块。
非常感谢您的见解。
找出那个混音器控件的名称和有效范围,然后 只需执行:
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;
}