Реализация кнопок управления громкостью клавиатуры в Applescript - настройка громкости внутри цикла не работает - PullRequest
5 голосов
/ 20 сентября 2009

Фон

У меня есть клавиатура MacAlly IceKey. Эта клавиатура имеет кнопки регулировки громкости, для работы которых требуется драйвер. Этот драйвер не обновлялся с 2006 года, и я подозреваю, что он является источником недавнего всплеска повторяющейся паники ядра, с которой я столкнулся в Mac OS X 10.6.1. Итак, это идет; но я хочу вернуть мои клавиши регулировки громкости!

Используя замечательный ControllerMate , я могу запрограммировать эти ключи на все, в том числе на выполнение сценария appleScript. Итак, я пытаюсь реализовать эту функциональность.

Команда установки громкости (часть стандартных дополнений) позволяет вам установить громкость на любое значение от 0 до 100. Клавиши громкости на клавиатуре Apple позволяют выбрать до 17 настроек громкости (включая 0). Я полагаю, что самый простой способ продублировать это поведение - сохранить список разрешенных настроек громкости и выбрать следующий самый большой (или самый маленький) из этого.

Проблема

Это не работает. Следующий скрипт:

set volumesList to {0, 6, 12, 18, 25, 31, 37, 43, 50, 56, 62, 68, 75, 81, 87, 93, 100}
set sysVolume to get volume settings

repeat with curVolume in volumesList
    if (curVolume > (output volume of sysVolume)) then
        set volume output volume (contents of curVolume)
        exit repeat
    end if
end repeat

get volume settings

... работает только в том случае, если уровень громкости системы ниже 43. Система, кажется, интерпретирует «50» как «49»; это так же высоко, как громкость моего сценария. Если громкость начинается выше 50, мой сценарий не действует. Кикер? Если оператор «exit repeat» будет удален, системный том будет установлен на 100 - как и следовало ожидать.

(Боже, AppleScript иногда странный .)

Есть идеи?

Бонусные баллы

Было бы очень здорово, чтобы это отображало наложение громкости. Кто-нибудь знает, как этого добиться? Это даже не должно быть через AppleScript; Я рад, что добавил код Какао в инструмент командной строки, если это то, что нужно.

Ответы [ 3 ]

7 голосов
/ 20 сентября 2009

Я понятия не имею, как отобразить полупрозрачный оверлей, но это по крайней мере воспроизводит звуковой сигнал системы при увеличении громкости:

set currentVolume to output volume of (get volume settings)
set newVolume to (currentVolume + (100 / 17)) as integer
set volume output volume newVolume
beep

Замените + на - в вашем скрипте уменьшения громкости.

set volume output, кажется, автоматически корректирует значения, выходящие за пределы (0, 100).

Обновление: Вы можете использовать Поддержка AppleScript от Growl , чтобы показать некоторые виды наложения:

tell application "GrowlHelperApp"

    register as application "Volume Change" ¬
        all notifications {"Volume Change"} ¬
        default notifications {"Volume Change"} ¬
        icon of application "Script Editor"

    notify with name "Volume Change" ¬
        title "Volume Up" ¬
        description "Volume is now " & output volume of (get volume settings) ¬
        application name "Volume Change"

end tell
2 голосов
/ 29 марта 2016

Вы также можете использовать встроенное уведомление

set vol to ((output volume of (get volume settings)) + 5)
if (vol > 100) then set vol to 100
set volume output volume (vol)

display notification ((vol) as string)
1 голос
/ 05 сентября 2012

С предложениями платного ботаника для создания уведомления Growl, я сделал Mute / Unmute версию этого, которая отображает уведомление Growl, но только на короткое время.

Так как я не смог найти способ указать продолжительность и стиль рыча, я использовал applecript, чтобы прочитать текущие значения по умолчанию рыча, переключившись на простой стиль Growl (Smoke, так как в верхнем правом углу он показывает лишь небольшое окно в углу, хотя вы можете адаптировать этот сценарий к рамке для поведения, которое более точно отражает систему), уменьшает задержку до 0,3 секунды, рычит, а затем отменяет настройки рыка.

Сценарий немного многословен, так как я в основном забыл appleScript. Я уверен, что есть способ упростить это гораздо больше.

set _muted to (get (output muted of (get volume settings)))
set str to "Muted"
if _muted is false then
    set volume with output muted
else
    set volume without output muted
    set str to "" & output volume of (get volume settings)
end if

set oldStyle to (do shell script "defaults read com.Growl.GrowlHelperApp GrowlDisplayPluginName")

do shell script "defaults write com.Growl.GrowlHelperApp GrowlDisplayPluginName Smoke"

set alpha to (do shell script "defaults read com.Growl.GrowlHelperApp com.growl.SmokeNotificationView | awk '$3 ~ /Alpha/' | sed -E 's/[^0-9.]*//g'")

set duration to (do shell script "defaults read com.Growl.GrowlHelperApp com.growl.SmokeNotificationView | awk '$3 ~ /Duration/' | sed -E 's/[^0-9.]*//g'")

set cmd to "defaults write com.Growl.GrowlHelperApp \"com.growl.SmokeNotificationView\" -dict "
set params to "\"Smoke - Alpha\" -float " & alpha & " \"Smoke - Duration\" -float 0.3"

do shell script cmd & params

tell application "GrowlHelperApp"
    register as application ¬
        "Volume Change" all notifications {"Volume Change"} ¬
        default notifications {"Volume Change"} ¬
        icon of application "Script Editor"

    notify with name ¬
        "Volume Change" title "Volume" description str application name ¬
        "Volume Change" identifier "MuteUnmute"
end tell

do shell script "defaults write com.Growl.GrowlHelperApp GrowlDisplayPluginName " & oldStyle

set params to "\"Smoke - Alpha\" -float " & alpha & " \"Smoke - Duration\" -float " & duration
do shell script cmd & params
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...