有没有一种方法可以监听任何按键并静音麦克风?

我不熟悉LUA或者Hammerspoon,但我想监听键盘上的任何按钮被按下。

我相信我可以使用 hs.eventtap.event.newKeyEvent 进行操作,但是我不确定如何捕捉任何和所有按键的按下。我不关心按了什么键,我只想将麦克风静音,并在没有按键按下 x 秒后取消静音。

这在 Hammerspoon 中是否可行?请指点我方向。

点赞
用户893099
用户893099

我使用以下方法在我的音频输入设备之间切换静音和取消静音。

function toggleMute()
  local mic = hs.audiodevice.defaultInputDevice();
  local state = not mic:muted()
  hs.fnutils.each(hs.audiodevice.allInputDevices(), function(device)
    device:setInputMuted(state)
  end)
  if mic:muted() then
    hs.alert('Muted')
  else
    hs.alert('Unmuted')
  end
end

local hyper = {"⌥", "⌃"}
hs.hotkey.bind(hyper, "m", function() toggleMute() end)

当您按下 ⌥+⌃+m 时,它将在静音和取消静音之间切换。

如果您希望在 X 秒无键盘活动后自动静音,则请查看 hs.eventtap 文档。

https://www.hammerspoon.org/docs/hs.eventtap.event.html

你可以设置一个监听器来监听 keyUp(键盘抬起)或 keyDown(键盘按下)事件。

keyboardTracker = hs.eventtap.new({ events.keyDown }, function (e)
  ...
end
keyboardTracker:start() // 开始监听键盘
keyboardTracker:stop() // 停止监听键盘

要实现此目标:

  • 为 X 秒创建一个计时器(请参见 hs.timer
  • 启动计时器
  • 设置一个 keyDown 事件类型的事件监听器
  • 启动事件监听器
  • 每当检测到键按下事件时,重新设置计时器
  • 当计时器触发时,静音音频输入设备并停止计时器

一旦计时器触发,它将静音音频输入设备并停止计时器。此后,只要您按下键盘上的任意键,计时器就会重新启动。

例如:

local timer = hs.timer.new(5, mute)

function mute()
  hs.fnutils.each(hs.audiodevice.allInputDevices(), function(device)
    device:setInputMuted(false)
  end)
  hs.alert('Muted')
  timer:stop()
end

timer:start()
local events = hs.eventtap.event.types
keyboardTracker = hs.eventtap.new({ events.keyDown }, function (e)
  timer:stop()
  timer:start()
end)
keyboardTracker:start()

响应鼠标事件类似。

2022-07-03 14:38:00