如何处理 gnome 扩展中的麦克风音量更新事件?
How to handle microphone sound level update event in gnome extensions?
我有一些全局快捷方式来更新麦克风声音输入电平。因此,我正在创建一个 gnome 扩展,在顶部栏中添加一个标签,显示当前麦克风音量百分比。
extension.js
中的代码是这样的:
const Microphone = new Lang.Class({
Name: 'Microphone',
_init: function() {
this.active = null;
this.stream = null;
this.muted_changed_id = 0;
this.mixer_control = new Gvc.MixerControl({name: 'Some random name'});
this.mixer_control.open();
this.mixer_control.connect('default-source-changed', Lang.bind(this, this.refresh));
this.mixer_control.connect('stream-added', Lang.bind(this, this.refresh));
this.mixer_control.connect('stream-removed', Lang.bind(this, this.refresh));
this.stream = this.mixer_control.get_default_source();
},
// ...
get level() {
return 100 * this.stream.get_volume() / this.mixer_control.get_vol_max_norm();
}
});
function enable() {
// ...
microphone = new Microphone();
let panel_button_label = new St.Label({
y_expand: true,
y_align: Clutter.ActorAlign.CENTER
});
panel_button_label.text = microphone.level + '%';
Main.panel._rightBox.insert_child_at_index(panel_button_label, 0);
}
function disable() {
// ...
Main.panel._rightBox.remove_child(panel_button_label);
panel_button_label.destroy();
panel_button_label = null;
}
但是,我不知道如何在每次通过全局快捷方式更新麦克风级别时更新microphone.label
标签文本。截至目前,它始终显示 0%。我检查了 journalctl
中的日志,没有警告或错误。
我在 上找到了 Whosebug link,但是,我不希望它被 link 编辑到特定的键盘事件。相反,即使通过其他方式更改了麦克风级别,标签也应该更新。
我想我需要将其连接到信号或使用类似的东西,但是,我不知道如何操作。我是 gnome 扩展的新手,所以详细的解释可能会有所帮助。
您可能想连接到 notify
signal of Gvc.MixerStream
for the volume
属性:
stream.connect('notify::volume', (stream) => {
log(`New volume is ${stream.volume}`);
});
如果需要,您可以将其添加到包装器 class 中,也许可以将其设为 GObject subclass。
我有一些全局快捷方式来更新麦克风声音输入电平。因此,我正在创建一个 gnome 扩展,在顶部栏中添加一个标签,显示当前麦克风音量百分比。
extension.js
中的代码是这样的:
const Microphone = new Lang.Class({
Name: 'Microphone',
_init: function() {
this.active = null;
this.stream = null;
this.muted_changed_id = 0;
this.mixer_control = new Gvc.MixerControl({name: 'Some random name'});
this.mixer_control.open();
this.mixer_control.connect('default-source-changed', Lang.bind(this, this.refresh));
this.mixer_control.connect('stream-added', Lang.bind(this, this.refresh));
this.mixer_control.connect('stream-removed', Lang.bind(this, this.refresh));
this.stream = this.mixer_control.get_default_source();
},
// ...
get level() {
return 100 * this.stream.get_volume() / this.mixer_control.get_vol_max_norm();
}
});
function enable() {
// ...
microphone = new Microphone();
let panel_button_label = new St.Label({
y_expand: true,
y_align: Clutter.ActorAlign.CENTER
});
panel_button_label.text = microphone.level + '%';
Main.panel._rightBox.insert_child_at_index(panel_button_label, 0);
}
function disable() {
// ...
Main.panel._rightBox.remove_child(panel_button_label);
panel_button_label.destroy();
panel_button_label = null;
}
但是,我不知道如何在每次通过全局快捷方式更新麦克风级别时更新microphone.label
标签文本。截至目前,它始终显示 0%。我检查了 journalctl
中的日志,没有警告或错误。
我在
我想我需要将其连接到信号或使用类似的东西,但是,我不知道如何操作。我是 gnome 扩展的新手,所以详细的解释可能会有所帮助。
您可能想连接到 notify
signal of Gvc.MixerStream
for the volume
属性:
stream.connect('notify::volume', (stream) => {
log(`New volume is ${stream.volume}`);
});
如果需要,您可以将其添加到包装器 class 中,也许可以将其设为 GObject subclass。