2009-09-19 4 views
5

배경구현 키보드 볼륨 조절 버튼 - 루프 내에서 볼륨 설정은

나는 MACALLY IceKey 키보드가에게 작동하지 않습니다. 이 키보드에는 드라이버가 작동해야하는 볼륨 버튼이 있습니다. 이 드라이버는 2006 년 이래로 업데이트되지 않았으며 최근 Mac OS X 10.6.1에서 필자가 경험 한 반복적 인 커널 패닉의 원인으로 의심됩니다. 그래서, 그것은갑니다; 하지만 내 볼륨 키를 다시 원해!

놀라운 ControllerMate을 사용하여이 키들을 프로그래밍하여 applescript 스크립트 실행을 포함한 모든 작업을 수행 할 수 있습니다. 그래서, 그 기능을 구현하려고합니다.

볼륨 추가 명령을 사용하면 볼륨을 0에서 100 사이의 값으로 설정할 수 있습니다. Apple 키보드 볼륨 키를 사용하여 총 17 개의 볼륨 설정 (0 포함)을 선택할 수 있습니다. 이 동작을 복제하는 가장 간단한 방법은 허용되는 볼륨 설정 목록을 유지하고 다음으로 큰 (또는 가장 작은) 볼륨 설정을 가져 오는 것입니다.

그것은 작동하지 않습니다

문제. 다음 스크립트 : 시스템 볼륨 레벨이 시스템은 "49"로 "50"을 해석하는 것 43 이상이어야 발생하는 경우

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 

는 ...에만 작동합니다; 그 볼륨만큼 내 스크립트와 함께 갈 것입니다. 볼륨 이 50보다 크면 내 스크립트는 아무 효과가 없습니다. 키커? "exit repeat"문을 제거하면 예상대로 시스템 볼륨이 100으로 설정됩니다.

(좋은 슬픔, 애플 스크립트는 때때로 이상한입니다.)

어떤 아이디어?

보너스 포인트

뿐만 아니라 볼륨 오버레이를 표시하려면이를 얻을 슈퍼 좋지 않을까. 누구든지 그 방법을 알고 있습니까? AppleScript를 사용할 필요조차 없습니다. 커맨드 라인 툴에 코코아 코드를 붙이면 행복합니다.

답변

6

어떻게 표시하는 투명 오버레이를 얻는 아무 생각이 없지만, 최대 볼륨을 돌리면서이 적어도 시스템 경고음을 재생 :

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) 제한을 벗어나는 값을 자동으로 조정하는 것처럼 보입니다.

는 업데이트 : 당신은 오버레이 일부 종류 보여 Growl's AppleScript support을 사용할 수 으르렁 거리는 소리 알림 공예에 대한 지불 괴상한의 제안으로

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 
+0

에 내장 할 수 있습니다. Apple의 드라이버 (list-of-valid-values ​​접근법을 사용하는 것 같습니다)의 동작을 복제하지는 않지만 "충분 함"이어야합니다. –

1

을, 나는이의 음소거/음소거 해제 버전을 만들어 표시 Growl 알림,하지만 잠시 동안 만.

나는 울기 지속 시간과 스타일을 지정하는 방법을 찾지 못했기 때문에 현재 growl 기본값을 읽는 데 applescript를 사용하고 간단한 Growl 스타일로 전환합니다 (Smoke, 상단에 작은 창이 표시되므로 오른쪽 구석, 시스템을 더 완벽하게 비추는 동작을 위해이 스크립트를 베젤에 적용 할 수는 있지만) 지연 시간을 0.3 초로 줄이고 으르렁 거리며 으르렁 거리는 환경을 되돌립니다.

제가 주로 애플 스크립트를 잊어 버렸기 때문에 스크립트는 약간 장황합니다. 이 작업을 훨씬 더 단순화 할 수있는 방법이있을 것이라고 확신합니다. 나는 당신의 접근을해야합니다 같은

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 
1

당신은 또한보고 년대 통지

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)