AirPlay Alarm Clock with iTunes 12
A few years ago, I wrote a convoluted AppleScript that allowed me to use my Apple TV as an alarm clock. It worked by waking up iTunes, selecting a playlist, shuffling it, and then playing it via AirPlay. Unfortunately, it stopped working when iTunes 11 was released due to a number of changes to AppleScript support; there were also changes to OS X which prevented AppleScripts from launching via Calendar alerts.
Fast forward to today and I found myself needing this script again for a new project1. After a bit of hacking around, I’ve managed to get the script fully updated for iTunes 12:
set AirplayDeviceName to "Kitchen"
set PlaylistName to "Morning"
set AirplayVolume to 100
activate application "iTunes"
tell application "System Events"
tell application "iTunes"
set visible of front browser window to true
set the view of the front browser window to playlist PlaylistName
end tell
end tell
tell application "System Events"
tell process "iTunes" to if exists then
click menu item "Songs" of menu "Shuffle" of menu item "Shuffle" of menu "Controls" of menu bar 1
click menu item "On" of menu "Shuffle" of menu item "Shuffle" of menu "Controls" of menu bar 1
end if
end tell
tell application "iTunes"
set AirplayNames to (get name of AirPlay devices)
set AirplayDevices to (get AirPlay devices)
set AirplayToPlay to {}
repeat with i from 1 to length of AirplayNames
if item i of AirplayNames as string = AirplayDeviceName then set end of AirplayToPlay to item i of AirplayDevices
end repeat
set current AirPlay devices to AirplayToPlay
end tell
tell application "iTunes"
play playlist PlaylistName
set the sound volume to AirplayVolume
end tell
The script is significantly smaller thanks to some new AirPlay APIs within iTunes and I’ve updated it to allow for simple changing of volume. It should work in all versions of iTunes 11 and iTunes 12.
In order to get this working as an alarm, we have to jump through a number of hoops on OS X El Capitan. Firstly, we need to save our AppleScript as an application (after you’ve made any adjustments to your Airplay device name, playlist name, and the volume you want). You can do this by opening it within Script Editor and then choosing File > Export.
If you haven’t disabled the GateKeeper restrictions on your Mac, you will need to either Code Sign this app or grant an exception within the Security & Privacy settings after you have first tried to open it.
With the alarm exported, we now need to open up Automator and create a new Calendar Alarm. Find the Launch Application action and set that up to point to your newly exported alarm app. Finally, save this and you’ll find a new entry has appeared in your calendar; it will launch immediately thus starting off the iTunes alarm process. Simply copy and paste this alarm entry (or make it recurring) in order to set it to whatever times you want.
I’m going to continue playing around with different ways to launch the alarm but for now this works in much the same way as my old script did.
The full code (and previous version) is available on GitHub.
-
I’m experimenting with some HomeKit APIs with the aim being that my “Good morning” scene can be activated by a physical button and will not only turn on my lights and disable my security camera but also start playing my morning playlist in the kitchen. This is what I do for fun. ↩︎