Чому цей сценарій не встановлює об'єм вхідного сигналу до нуля?


5

Я маю цю команду, яка створює скрипт, щоб вимкнути вхідний том. Проте вхідний том не повністю вимкнено. Це, здається, ближче до 10%, ніж 0%.

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

Це незвичайно, тому що панель повзунка знаходиться так далеко, як може, але, як ви бачите з прикріпленого зображення, звук все ще реєструється. Однак, якщо я використовую мишу, щоб натиснути на повзунок на нулі, то він фактично відключить вхід.

Чому це відбувається? Чи використовую я неправильно тут?

Proof of script not muting.

Я можу навіть повторити це з базовим редактором AppleScript, тому я знаю, що це не проблема з компіляцією.

applescript not working

(Примітка: я спочатку взяв мою підказку для вирішення цієї проблеми з відповіді на ці питання .)

Відповіді:


3

Наскільки я можу сказати, скрипт працює як слід, проблема в аудіо коді OS X. Коли я запускаю його, повзунок переходить до 0%, перевіряється за допомогою миші над повзунком, доки не з'явиться підказка:

tooltip

Це так само, як якщо б перетягувати повзунок гучності вручну.

Проблема полягає в тому, що "0%" насправді не означає вимкнено , але досить низький поріг. У деяких швидких тестах я міг записати звук мого пальця, натиснувши на корпус мого MacBook Pro біля мікрофона (на більшості машин, я вважаю, що це навколо правого решітки гучномовця) коли обсяг був встановлений в 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

Якщо у вас більше двох стандартних аудіовходів (Mic і Line In), вам може знадобитися змінити число в row 2 відповідно до порядку в налаштуваннях вводу.


Ви побачите з мого скріншота, я не маю ніякого іншого "вхідного" методу, ніж "Внутрішній мікрофон". Чому б не було "лінії в"?
kenny

1
На жаль, я пропустив це. Я забув, що більшість останніх MacBook'ов не мають рядків, тільки 15-дюймові "MBP-пристрої без сітківки".
robmathers

Оскільки ми говоримо про графічні сценарії, чи є спосіб імітувати клацання на повзунку, як тільки я встановлюю його на нуль? (відсутні мої знання з опису, як це зробити)
kenny

(так, це моя відповідь)
kenny

Схоже, ви це зробили, але ваш скрипт нічого не змінює, це те ж саме, що і встановлення його безпосередньо через AppleScript або вручну - питання про те, що він насправді не приглушений, все ще існує. Можливо, я неправильно зрозумів вашу первинну мету?
robmathers

1

Це побудовано на частині сценаріїв графічного інтерфейсу @robmathers і моє запитання про те, чи можна "натиснути" повзунок за допомогою 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 на отримання мене, наскільки мені потрібно, щоб зрозуміти цей останній фрагмент. Я все ще чекаю, щоб нагородити баунті на випадок, якщо хтось має більш елегантне рішення, але в іншому випадку це його для прийняття.


Якщо хтось хоче відстежувати майбутні зміни в цій невеликій утиліті, подивіться на мої файли: github.com/kyounger/dotfiles/tree/master/osx/muting-scripts
kenny

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.