(* 
db iTunes Vol, Play, or Fade
By David Battino, Batmosphere.com
Based on ideas from Doug's AppleScripts and Mac OS Hints

Code cleaned up and flattened by Jacob Rus

This script fades out iTunes if it's playing and fades it in if it's stopped.
*)

global itunes_state_
set itunes_state_ to my itunes_state()


if itunes_state_ is "playing" then
tell app "iTunes"
set current_volume to sound volume
my fade by 0.01 from current_volume to 0
pause
set sound volume to current_volume
end tell
else if itunes_state_ is "stopped" then
tell app "iTunes"
set current_volume to sound volume
play
my fade by 0.01 from 0 to current_volume
end tell
else if itunes_state_ is "" then
beep
end if

-- fade iTunes to the end_volume, delaying "delay" seconds for each step
to fade by delay_ from start_volume to end_volume
tell app "iTunes"

-- set the step size based on whether start or end volume is bigger
set step_ to ((start_volume < end_volume) as integer * 2 - 1)

repeat with i from start_volume to end_volume by step_
set the sound volume to i
delay delay_
end repeat
end tell
end fade

-- returns "playing", "stopped", or ""
on itunes_state()
tell application "System Events"
if process "iTunes" exists then
tell app "iTunes"
if player state is playing then
return "playing"
else
return "stopped"
end if
end tell
else
return ""
end if
end tell
end itunes_state