Like I’m sure many people do, I use iTunes to manage my music at home. For my setup iTunes runs on a Mac Mini that is connected to my stereo system that drives my whole house audio solution. This has been a perfect for me – a centralized system for my music that is controlled either by Apples iOS remote app, or using screen sharing from a Mac. Simple, easy and no complaints — well, there was one small issue that was starting to grow into annoyance — it was difficult to pause music playback quickly.
The scenario was common enough – your listening to music and the phone rings. First thing to do is to pause playback. You can’t easily do it on your iPhone, since it’s ringing, so I’d always default to starting screen sharing – but that take a little time to connect. Needless to say, the first 10 seconds of my phone conversations involved loud music, me fumbling with screen sharing and a sprinkling of profanity. Yes – Annoying!
After one too many calls like this I figured there had to be a native Mac iTunes remote control, and yet after searching I couldn’t find one — Apple had lied —there was no app for that! And there, right in front of me was a new project. Time to build a Mac iTunes remote.
Here was a need – a native Mac iTunes remote – now I just needed to determine what that would look like. I had no idea how the iOS remote app worked, had never developed for the Mac, and it had been a few years since I had built any major functionality. Time for some internet searching.
One of the first things I found was that indeed the iTunes remote control protocol was well understood and actually based on a standard – Digital Audio Control Protocol (DACP,), which is based on the Digital Audio Access Protocol (DAAP), Both these protocols used standards for communication, including Bonjour and HTTP. This was promising and looked like a path forward.
Additionally, various projects existed that implemented the protocol. These projects were broken into two groups: Normally an Android remote control written in Java, or as an extension to a music server that allowed the iTunes Remote app to control it. This was promising — the protocol was mostly known (some secret iTunes bits still existed) and source code was available for various projects — now it was time for some development.
Time to Build
And thus coding began – except I had never done a Mac App, never developed in Objective-C, and all the code/resources I found were in Java, C++ and even Ruby. How to get started? Hit the net again!
While a strong developer community has always existed on the net – actually it predates networking — there has always been some cost of entry to find the resources you needed. Vendor developer portals help, as does Google, but some friction existed. To my pleasant surprise, this has changed in the past few years.
Sites like GitHub.com and StackOverflow.com have become the go-to-place to discover an example, locate a code segment or find the answer to a difficult problem. While these types of sites have existed for some time, they were segmented along technology lines, and domains. Great information was available, but it was presented in a hodgepodge manner across many sites, each with their own, “unique” style.
But like other social networking sites, Github and Stack Overflow have emerged as the go-to social sites for software developers. The similarity with a Facebook or Twitter use patterns is obvious if you look – status updates are in the form of answers and code checkins, your social credibility is based on your technical skills and experience, as people like what you post, your social scores increase. It’s a fantastic dynamic that’s driven rapid growth for both sites, and more importantly for me, provided all the information I needed to build my app.
From there, several months of coding ensued – HACK-A-THON – I won’t bore you with the details — and once complete a new iTunes Remote for the Mac was born and it was called “Aloof”.
When I completed this work, I had what I originally wanted – an iTunes remote control that ran on the Mac. It ran as a Mac toolbar application and it allowed me to instantaneously toggle the play/pause state of iTunes – solving my phone call issue. Needless to say, the feature set grew beyond my original goals.
As I developed Aloof, it became clear thru use and feedback from testers that the app should support a majority the needs one has with iTunes — one should rarely have to access your iTunes server except for music management. And as a result, Aloof includes the following capabilities:
- Full control of playback, including shuffle state, volume, playback timing and genius
- A rich now-playing display that includes album art
- Viewing and managing the “Up Next” songs as well as playback history
- Selection of the playlist to play music from
- A full, high-performance search capability
When all put together and deployed as an non-obtrusive toolbar application, Aloof provides everything needed to control iTunes playback natively on your mac.
When Aloof is installed and deployed, it is exposed as a simple Mac toolbar application, exposing a standard playback control in the toolbar. It’s when the mouse cursor overs over this control that the main interface is displayed.
The following sections provide an overview of the Aloof user interface.
Current song information is presented in an intuitive way, enabling rapid recognition of the current song playing. In addition to common information, detailed song information is available via an info panel that is easily accessible via a simple button press.
In addition to information for the current song, the Now Playing panel provides control over the music being played. From the intuitive player controls presented in the Mac toolbar menu, to the playback dashboard for less frequently needed operations, the Aloof Now Playing panel presents everything required for intuitive, yet personal music playback.
The player controls are presented in the Mac Tool Bar, providing the means to control playback of music on the current iTunes server. In addition, the player controls provide the means to display the Aloof main popup panel and access common Aloof application information.
This section of Now Playing provides information on the current song playing, including song title, song artist and album title. In addition the current rating of the song and album art are presented.
The toolbar the bottom of the Aloof interface provides access to the various Aloof operations and controls what activity is displayed. This toolbar is always displayed, no matter what activity Aloof is performing.
The Up Next panel of Aloof provides a view into your iTunes music play queue, often referred as “Up Next”. Containing both recently played and upcoming songs, the Up Next panel a continuous view of song playback activity and delivers a simple method to manage your music playback. What to replay that amazing song that just played, or delete a hideous scheduled to play next – the Up Next panel is where these actions are easily done.
Up next presents a list of songs ordered and grouped along a time line – items already played appear at the top of the list, then the current playing song followed by songs scheduled to play next. Upcoming songs are contained in two groups – those added to the Up Next group, and those scheduled to play from the the current music source (Playlist, Genius or Library). The Up Next group is only shown if a song was specifically added by using the Add to Up Next or Play Next options in Aloof or iTunes.
The Playlists panel of Aloof provides a quick method to select the source of music for iTunes. Following the layout and hierarchy of playlists on the current iTunes server, the Playlists panel provides access to Genius playlists, Smart Playlists and Normal playlists defined on iTunes.
The Playlist panel is intended for source selection only, and doesn’t deliver playlist management features such as creation, editing our deletion. These complex actions are easily performed performed within the expanse of the iTunes interface.
The Search panel of the Aloof interface provokes a powerful method to location music within your library, while provide a familiar and simple to use interface. Searching across album titles, artist names and song titles, search allows rapid access to all aspects of your music library.
Search results are easily navigate thru the use of the arrow keys or tab key. Additionally, the search field is rapidly accessed anywhere on the search panel by entering the Command-L key combination.
Search results are listed following an Album grouping methodology, and listed in order of Albums, the Artists and finally Songs that match the search terms.
The Settings panel of the Aloof interface provides a single location to configure and modify the behavior of Aloof to fit your needs. Available options within the Settings panel include:
- Add/Remove iTunes servers that Aloof is paired with
- Set the current server Aloof is connected to
- Enable/Disable user notifications when the song changes
- Set hot-keys for toggling play/pause, bringing up search and moving playback to the next song
- Have aloof start automatically
Put together in a compact, easy to access package all these capabilities delivered by Aloof provide rapid access to a majority of actions needed to control and operate a remote iTunes server natively from a Mac. For me it’s been fantastic, solving my initial need and then some — it’s rare for me to ever access iTunes these days.
Aloof version 1.0 is almost complete, very stable and being used by a small set of beta testers and friends. My next options are to either publish to the Mac App Store, open source it on GitHub, or possibly both — I really haven’t decided yet.
Before I release Aloof to the wider world, there are a few bugs to resolve, including having it run on Mountain Lion — it currently only supports Mavericks and in my mind a product should at lease support the latest 2 operating systems versions. A first glance this back port doesn’t look obvious, but I haven’t really spent much time on it.
I should have this all resolved in a few months, but In the mean time, if Aloof looks interesting and you know me, and I’ll get you a copy.