Bagaimana saya bisa memicu AppleScript berturut-turut dengan sangat cepat?

3

Latar Belakang

Untuk penyesuaian volume yang baik, saya menggunakan AppleScript berikut:

try
    do shell script "killall afplay"
end try
set currentVolume to output volume of (get volume settings)
set volume output volume (currentVolume + 2)
    -- play volume changing sound at new volume
do shell script "afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff"

Ini akan meningkatkan volume sebesar 2% dan memainkan volume baru seperti biasa.

Masalah

Menggunakan skrip ini memiliki kelemahan:

  • Ketika saya memicu skrip dengan cepat beberapa kali berturut-turut, itu tidak merespons secepat perubahan volume 'normal'.
  • Untuk setiap eksekusi, volume suara dimainkan dengan panjang penuh.

Tampaknya masalah saya adalah karena keterbatasan bagaimana skrip dipicu . Misalnya. Ketika saya menggunakan FastScript, itu tidak akan menjalankan script lagi sebelum sudah selesai. Hal yang sama berlaku untuk Quicksilver.

Namun, ketika saya menetapkan "skrip volume bawah" untuk Quicksilver dan "skrip volume lebih keras" ke FastScripts I bisa memicu kedua skrip dengan sangat cepat satu sama lain - jadi: skrip baik-baik saja. Saya percaya bahwa masalah saya disebabkan oleh bagaimana skrip dipicu.

Pertanyaan

Bagaimana saya bisa memicu skrip dengan sangat cepat?

gentmatt
sumber

Jawaban:

2

Menambahkan > /dev/null 2>&1 & ke akhir do shell script Perintah harus bekerja. Ini mengarahkan ulang stdout dan stderr dari do shell script perintah untuk /dev/null dan menjalankan skrip shell di latar belakang, artinya AppleScript tidak perlu lagi menunggu perintah untuk kembali stdout atau stderr sebelum skrip AppleScript dapat selesai. Itu berarti bahwa itu selesai dan dapat dijalankan lagi dengan lebih cepat.

Anda juga tidak perlu try handler di awal. Skrip yang dimodifikasi berikut ini akan berfungsi:

set currentVolume to output volume of (get volume settings)
set volume output volume (currentVolume + 2)
-- play volume changing sound at new volume
do shell script "afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff > /dev/null 2>&1 &" 

Saya mendapatkan tip ini dari MacScripter (sumber yang bagus untuk AppleScripting) di a pos tentang menjalankan beberapa contoh skrip shell.

joelseph
sumber
1

Bagaimana menambahkan ampersand ke akhir afplay baris sehingga bagian skrip diputar di latar belakang? Seperti ini

afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff &
binarybob
sumber
Tidak membantu :( Tapi terima kasih!
gentmatt
Saya memang mendapatkan sintaks yang sedikit salah (mengutip di tempat yang salah). Seharusnya begitu afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff &. Tidak mengatakan itu akan membantu, hanya ingin memperbaiki diri sendiri :-)
binarybob