Mengapa applescript ini tidak benar-benar mengatur volume input ke nol?

5

Saya memiliki perintah ini yang membuat skrip untuk membisukan volume input. Volume input tidak sepenuhnya dibisukan. Tampaknya lebih dekat ke 10% dari 0%.

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

Ini aneh, karena bilah geser sejauh mungkin, tetapi seperti yang Anda lihat dari gambar terlampir, suara masih mendaftar. Namun, jika saya menggunakan mouse untuk mengklik slider di nol, maka itu benar-benar mematikan input.

Mengapa ini terjadi? Apakah saya menggunakan applescript dengan tidak benar di sini?

Bukti skrip tidak dimatikan.

Saya bahkan dapat meniru ini dengan Editor AppleScript dasar, jadi saya tahu itu bukan masalah dengan kompilasi.

applescript tidak berfungsi

(Catatan: Saya awalnya mengambil petunjuk untuk solusi untuk masalah ini dari jawaban pertanyaan ini .)

kenny
sumber

Jawaban:

3

Sejauh yang saya tahu, skrip berfungsi seperti yang diharapkan, masalahnya ada pada kode input audio OS X. Ketika saya menjalankannya, bilah geser masuk ke 0%, diverifikasi dengan mousing di atas bilah geser hingga ujung alat muncul:

tooltip

Ini sama seperti jika saya menyeret slider volume secara manual.

Masalahnya adalah tampaknya bahwa "0%" tidak benar-benar berarti off , melainkan ambang batas yang sangat rendah. Dalam beberapa pengujian cepat, saya dapat merekam suara ketukan jari saya pada casing MacBook Pro di dekat mic (pada sebagian besar mesin saya percaya ini ada di sekitar panggangan speaker kanan) ketika volume disetel ke 0 . Saya bisa meniru itu terlepas dari apakah saya mengatur slider secara manual atau melalui AppleScript. Tampaknya memang cukup rendah sehingga hampir semua suara lainnya tidak diangkat, tetapi jelas mikrofonnya tidak benar-benar mati.

Sejauh yang saya tahu, tidak ada cara untuk menonaktifkan mikrofon bawaan dengan benar. Yang terbaik yang bisa saya sarankan adalah mengubah input audio untuk menggunakan jalur masuk, jika Mac Anda dilengkapi dengan saluran jalur masuk . Sayangnya, melakukannya melalui AppleScript membutuhkan beberapa skrip GUI, tetapi ini harus dilakukan ( sumber ):

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

Jika Anda memiliki lebih dari dua input audio standar (Mic dan Line In), Anda mungkin perlu mengubah nomor row 2ke mana yang sesuai, sesuai dengan urutan dalam preferensi Input Anda.

perampok
sumber
Anda akan melihat dari tangkapan layar saya, saya tidak memiliki metode "input" selain "Mikrofon internal". Mengapa tidak ada "Line in"?
kenny
1
Maaf, saya melewatkan itu. Saya lupa bahwa sebagian besar MacBook terbaru tidak memiliki sambungan, hanya MBP non-retina 15 "yang berfungsi. Secara teknis Anda masih dapat melakukan mic-in dengan headset yang kompatibel dengan iPhone, tetapi itu tidak terlalu berguna dalam kasus ini.
robmathers
Karena kita berbicara tentang skrip GUI, apakah ada cara untuk mensimulasikan klik pada bilah geser setelah saya mengaturnya menjadi nol? (Pengetahuan applescript saya tentang bagaimana melakukan ini kurang)
kenny
(ya itu, lihat jawaban saya)
kenny
Sepertinya Anda mengerti, tetapi skrip Anda tampaknya tidak mengubah apa pun, itu sama dengan mengaturnya langsung melalui AppleScript atau secara manual — masalah yang sebenarnya tidak dibisukan masih ada. Mungkin saya salah mengerti niat awal Anda?
Robmathers
1

Ini dibangun dari potongan skrip @robmathers GUI dan pertanyaan saya tentang apakah Anda dapat "mengklik" slider dengan applescript. Saya melakukan beberapa penggalian ke dalam tindakan AppleScript dan UI dan ternyata Anda bisa .

Ini menggunakan skrip GUI yang menyedihkan, tetapi BEKERJA.

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

Inilah yang terjadi dalam skrip ini:

  1. Setel volume input ke 0 - ini akan menggeser slider ke kiri
  2. "Klik" penggeser untuk melakukan apa pun yang ada di balik layar voodoo yang dianggap perlu oleh Apple untuk benar-benar "membisukan" jalur input (ini semakin konyol)
  3. Keluar dari Aplikasi Preferensi Sistem.

Satu hal yang perlu diperhatikan: Jendela Preferensi Suara tidak dapat dibuka sebelum menjalankan ini atau yang pertama set volume input volume 0tidak berfungsi.

Ini juga sepele untuk mengedit skrip untuk unmute (yang juga menderita masalah yang sama). (Gunakan "AXIncrement" untuk tindakan)

Alat peraga besar untuk @robmathers untuk mendapatkan saya sejauh yang saya butuhkan untuk mencari tahu bagian terakhir ini. Saya masih menunggu untuk memberikan hadiah jika ada orang lain yang memiliki solusi yang lebih elegan, tetapi sebaliknya, itu adalah miliknya untuk diambil.

kenny
sumber
Jika ada yang ingin melacak perubahan di masa depan pada utilitas kecil ini, lihat dotfile
kenny