on run argv if count of argv is equal to 0 then set msg to "Use the following commands:\n" set msg to msg & " start, play [uri] - Start playback / play uri\n" set msg to msg & " pause, stop - Stop playback\n" set msg to msg & " play/pause - Toggle playback\n" set msg to msg & " next - Next track\n" set msg to msg & " previous, prev - Previous track\n" set msg to msg & " info - Print track info\n" set msg to msg & " jump N - Jump to N seconds in the song\n" set msg to msg & " forward N - Jump N seconds forwards\n" set msg to msg & " rewind N - Jump N seconds backwards\n" set msg to msg & " shuffle - Toggle shuffle\n" set msg to msg & " repeat - Toggle repeat\n" set msg to msg & " volume N - Set Volume to N (0...100)\n" return msg end if set command to item 1 of argv using terms from application "Spotify" set info to "Error." if command is equal to "play" or command is equal to "start" then if count of argv is equal to 1 then tell application "Spotify" to play else set uri to item 2 of argv tell application "Spotify" to play track uri end if else if command is equal to "play/pause" then tell application "Spotify" to playpause return "Toggled." else if command is equal to "pause" or command is equal to "stop" then tell application "Spotify" to pause return "Paused." else if command is equal to "next" then tell application "Spotify" to next track else if command is equal to "previous" or command is equal to "prev" then tell application "Spotify" to previous track else if command is equal to "jump" set jumpTo to item 2 of argv as real tell application "Spotify" set tMax to duration of current track if jumpTo > tMax return "Can't jump past end of track." else if jumpTo < 0 return "Can't jump past start of track." end if set nM to round (jumpTo / 60) rounding down set nS to round (jumpTo mod 60) rounding down set newTime to nM as text & "min " & nS as text & "s" set player position to jumpTo return "Jumped to " & newTime end tell else if command is equal to "forward" set jump to item 2 of argv as real tell application "Spotify" set now to player position set tMax to duration of current track set jumpTo to now + jump if jumpTo > tMax return "Can't jump past end of track." else if jumpTo < 0 set jumpTo to 0 end if set nM to round (jumpTo / 60) rounding down set nS to round (jumpTo mod 60) rounding down set newTime to nM as text & "min " & nS as text & "s" set player position to jumpTo return "Jumped to " & newTime end tell else if command is equal to "rewind" set jump to item 2 of argv as real tell application "Spotify" set now to player position set tMax to duration of current track set jumpTo to now - jump if jumpTo > tMax return "Can't jump past end of track." else if jumpTo < 0 set jumpTo to 0 end if set nM to round (jumpTo / 60) rounding down set nS to round (jumpTo mod 60) rounding down set newTime to nM as text & "min " & nS as text & "s" set player position to jumpTo return "Jumped to " & newTime end tell else if command is equal to "volume" then set newVolume to item 2 of argv as real if newVolume < 0 then set newVolume to 0 if newVolume > 100 then set newVolume to 100 tell application "Spotify" set sound volume to newVolume end tell return "Changed volume to " & newVolume else if command is equal to "shuffle" then tell application "Spotify" set shuffling to not shuffling return "Shuffle is now " & shuffling end tell else if command is equal to "repeat" then tell application "Spotify" set repeating to not repeating return "Repeat is now " & repeating end tell else if command is equal to "info" then my getInfo() end if tell application "Spotify" if player state as text is equal to "playing" my getInfo() end if end tell end using terms from end run on getInfo() set info to "Error." tell application "Spotify" set myTrack to name of current track set myArtist to artist of current track set myAlbum to album of current track set tM to round (duration of current track / 60) rounding down set tS to duration of current track mod 60 set myTime to tM as text & "min " & tS as text & "s" set nM to round (player position / 60) rounding down set nS to round (player position mod 60) rounding down set nowAt to player position set info to "{" set info to info & "\n \"artist\": \"" & myArtist & "\"," set info to info & "\n \"track\": \"" & myTrack & "\"," set info to info & "\n \"album\": \"" & myAlbum & "\"," set info to info & "\n \"URI\": \"" & spotify url of current track & "\"," set info to info & "\n \"duration\": \"" & mytime & " ("& duration of current track & " seconds)" & "\"," set info to info & "\n \"player\": \"" & player state & "\"" set info to info & "\n \"position\": \"" & nowAt & "\"\n" set info to info & "}" end tell return info end getInfo