Как я могу последовательно запустить AppleScript очень быстро?

3

Фон

Для точной регулировки громкости я использую следующий AppleScript:

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"

Это увеличит громкость на 2% и сыграет новую громкость, как обычно.

проблема

Использование этого скрипта имеет недостатки:

  • Когда я запускаю скрипт быстро несколько раз подряд, он не отвечает так быстро, как при «нормальном» изменении громкости.
  • Для каждого исполнения звук громкости воспроизводится на полную длину.

Похоже, что моя проблема связана с ограничением как запускаются скрипты , Например. Когда я использую FastScript, он не будет выполнять сценарий снова до это было закончено. То же самое касается ртути.

Тем не менее, когда я назначаю "сценарий с меньшим объемом" для Quicksilver, а "сценарий с более громким объемом" для FastScripts, я Можно запускать оба сценария очень быстро друг за другом - так что сценарий в порядке. Я считаю, что моя проблема связана с тем, как запускаются сценарии.

Вопрос

Как я могу последовательно запустить скрипт очень быстро?

gentmatt
источник

Ответы:

2

Добавление > /dev/null 2>&1 & до конца do shell script Команда должна работать. Это перенаправляет stdout а также stderr из do shell script командовать /dev/null и запускает сценарий оболочки в фоновом режиме, это означает, что AppleScript больше не нужно ждать, пока команда вернет stdout или же stderr до завершения сценария AppleScript. Это означает, что он заканчивается и может быть запущен снова намного быстрее.

Вам также не нужно 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 > /dev/null 2>&1 &" 

Я получил этот совет от MacScripter (отличный ресурс для AppleScripting) в сообщение о запуске нескольких экземпляров сценария оболочки.

joelseph
источник
1

Как насчет добавления амперсанда в конец afplay линия, так что сценарий играет в фоновом режиме? Как это

afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff &
binarybob
источник
Не помогло :( но спасибо!
gentmatt
Я получил немного неправильный синтаксис (цитаты не в том месте). Это должно было быть afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff &, Не говорю, что это поможет, просто хочу исправить себя :-)
binarybob