为什么这个Applecript实际上没有将输入量设置为零?


5

我有这个命令,它构建一个脚本来静音输入音量。但是,输入音量并未完全静音。它似乎接近10%而不是0%。

osacompile -x -e 'tell application "System Events" to set volume input volume 0' -o ~/bin/mute_mic.scpt

这很奇怪,因为滑块尽可能地向左移动,但是从附图中可以看出,声音仍在注册。但是,如果我使用鼠标在零点上滑动滑块,那么它确实会使输入静音。

为什么会这样?我在这里使用Applecript不正确吗?

脚本的证明不是静音。

我甚至可以用基本的AppleScript编辑器复制它,所以我知道它不是编译的问题。

applescript不工作

(注意:我最初从这个问题的答案中得到了解决这个问题的解决方案。)

Answers:


3

据我所知,该脚本按预期工作,问题出在OS X音频输入代码中。当我运行它时,滑块变为0%,通过将鼠标悬停在滑块上进行验证,直到出现工具提示:

提示

这与手动拖动音量滑块相同。

问题似乎是“0%”实际上并不意味着关闭,而是一个非常低的门槛。在一些快速测试中,当音量设置为0时,我可以录制我的手指敲击麦克风附近麦克风套管的声音(在大多数机器上,我相信它在右扬声器格栅周围)。无论我是手动还是通过AppleScript设置滑块,我都可以复制它。它似乎确实足够低,几乎没有任何其他声音被拾取,但显然麦克风并没有真正关闭。

据我所知,没有办法正确静音内置麦克风。如果您的Mac配备了一个线路输入端口,我建议的最好的方法是更改​​音频输入以使用线路输入。不幸的是,通过AppleScript执行此操作需要一些GUI脚本,但这应该这样做(来源):

tell application "System Preferences"
   activate
   set current pane to pane id "com.apple.preference.sound"
end tell
tell application "System Events"
   tell process "System Preferences"
       set frontmost to true
       --get properties of UI element of tab group of window "Sound"
       click radio button "input" of tab group of window "Sound"
       tell row 2 of table 1 of scroll area 1 of tab group 1 of window "Sound" to set selected to true
   end tell
end tell

如果您有两个以上的标准音频输入(麦克风和线路输入),您可能需要row 2根据输入首选项中的顺序将数字更改为适当的数字。


您会从我的屏幕截图中注意到,除了“内置麦克风”之外,我没有任何其他“输入”方法。为什么没有“Line in”?
肯尼

1
对不起,我错过了。我忘记了大多数最近的MacBook都没有线路,只有15“非视网膜MBP。从技术上讲,你仍然可以使用兼容iPhone的麦克风进行麦克风输入,但在这种情况下这并不是真的有用。
robmathers

既然我们正在谈论GUI脚本,有没有办法在我将其设置为零后模拟滑块上的点击?(关于如何做到这一点的我的苹果知识缺乏)
肯尼

(是的,请参阅我的回答)
肯尼于

看起来你有这个,但你的脚本似乎没有改变任何东西,它与通过AppleScript直接设置或手动设置相同 - 它实际上没有被静音的问题仍然存在。也许我误解了你原来的意图?
robichers

1

这构建了@robmathers GUI脚本文件以及我是否可以使用applescript“点击”滑块的问题。我做了一些深入研究AppleScript和UI动作,事实证明你可以

这使用了令人遗憾的GUI脚本,但它很有用。

tell application "System Events"
    set volume input volume 0
end tell
tell application "System Preferences"
    activate
    set current pane to pane id "com.apple.preference.sound"
end tell
tell application "System Events"
    tell process "System Preferences"
        set frontmost to true
        click radio button "input" of tab group 1 of window "Sound"
        perform action "AXDecrement" of slider 1 of group 2 of tab group 1 of window "Sound"
    end tell
end tell
tell application "System Preferences"
    quit
end tell

以下是此脚本中发生的情况:

  1. 将输入音量设置为0 - 这会将滑块一直向左移动
  2. “点击”滑块可以做任何Apple认为必须实际“静音”输入线的幕后伏都教(这太荒谬了)
  3. 退出系统首选项应用程序。

有一点需要注意:在运行此之前,“声音首选项”窗口尚未打开,或者第一个窗口set volume input volume 0不起作用。

编辑脚本以取消静音也是微不足道的(也会遇到同样的问题)。(使用“AXIncrement”进行操作)

@robmathers的巨大道具让我尽可能地想出最后一块。如果其他人有一个更优雅的解决方案,我仍然会等待奖励赏金,但除此之外,这是他的选择。


如果有人想跟踪这个小实用程序的未来变化,请查看我的dotfiles:github.com/kyounger/dotfiles/tree/master/osx/muting-scripts
kenny

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.