+++
title = 'The Quest: Requirements'
date = 2012-01-04T02:46:00Z
+++

A few days ago, I introduced [the quest](http://dustin.hatch.name/post/14901999875/the-quest-introduction) I've been on for many years: finding the perfect digital media player software. I'm trying to approach my search in an objective way, the same way I would pick a piece of software for any professional purpose.

The first stage in choosing a product (software or otherwise) is to compile a list of requirements that that product must meet. The list should include all the features and functions the product must have, but can also include any non-critical ones, too. A weight is assigned to each requirement so that the scores will take into account which ones are crucial, and which are just nice.

Here are the requirements I've come up with for the "perfect" media player. I used a weighting scale of 1-10, because I like the metric system.

Free Software
=============

**Weight**: 10

The media player must be released under a free software (i.e. open source) license. Examples include GNU GPL, MPL, EPL, MIT, BSD, etc. Software that is free of monetary cost but not open source (i.e. free as in beer, not free as in speech) does not qualify. This is an “all or nothing” requirement, meaning the only possible scores are 10 and 0.

Album Shuffle
=============

**Weight**: 10

The software must be able to choose a random album from the library or playlist, play every song on the album, and then choose another album. Preferably, the list of albums from which to choose can be limited somehow (by a playlist or filter).

Additionally, the playback should be able to be altered by the user without interrupting this behavior. For example, if the user manually chooses to play a particular album before the automatically selected album is finished playing, the user’s album should be played through and a third album should then be chosen.

Ideally, the random algorithm should choose albums “without replacement,” meaning that once an album has been chosen, it cannot be chosen again until all albums have been played once.

Codec Support
=============

**Weight**: 8

Media are available in many formats, and having to use a different application to play them all is cumbersome and annoying. Converting files from one format to another for daily use is time consuming. To maintain maximum compatibility, at least the following codecs must be supported:

1. MP3
2. Ogg Vorbis
3. FLAC
4. Ogg FLAC
5. AAC

Players using an independently maintained, pluggable decoding system like GStreamer receive higher scores than players that implement the decoding themselves.

Cross Platform
==============

**Weight**: 8

Support for Microsoft Windows Vista and later and Linux are required. Players written for one platform and ported to the other with reduced functionality will naturally score lower. Support for other platforms (BSD, Mac OS X, etc.) does not affect the score unless both required platforms are equally supported.

Last.fm Scrobbling
==================

**Weight**: 10

Recording song plays to a Last.fm profile is required. Support for various features (including API 2.0, Now playing, and token authorization) will increase the player’s score. This functionality can be provided by a well-supported plugin or extension without impacting the score. Lower scores will be given to players providing scrobbling with outdated or unmaintained plugins, however.

Last.fm Streaming
=================

**Weight**: 4

Streaming radio from Last.fm is an optional feature. Last.fm subscribers like to get as much for their monthly fee as possible, but having to use a separate application to listen to the streams is a major deterrent in many cases.

Equalizer
=========

**Weight**: 8

It is pretty rare to have an acoustically-perfect system for listening to digital media, so an equalizer can have tremendous value for PC media players. The finer the control (i.e. more bands), the higher the score. Having a collection of preset configurations is a benefit, but not required, since they are rarely useful.

Media Library
=============

**Weight**: 9

For smaller collections of media, opening files directly to play them is fine, but collections numbering in the thousands need a more abstract interface. A good media library should allow selecting media by artist, album, genre, and year. In addition, a powerful search is necessary to allow quick location of a particular work. The library should have a clean, usable UI that scales with enormous libraries. Displaying album art in the library browser can boost the player’s score.

The library should be agnostic to the physical storage location of the media. It should also allow the listener to specify multiple storage locations for media. Additionally, the library should update itself whenever changes are made to the files it tracks. This should be done outside the UI thread so as not to impact usability. Ideally, the library should use the operating system’s native change notification mechanism to keep itself up-to-date when possible. 

Remote Control
==============

**Weight**: 6

Often, one finds one’s self needing to control media playback (pause, skip, volume control, etc.) when not in front of the PC. The player should allow control from other applications and systems over a local network or the Internet. Using a standardized protocol such as UPnP/DLNA is preferred but not required.

System Performance
==================

**Weight**: 6

This requirement is two-fold: the player must not negatively impact the performance of the rest of the system, and the player must itself remain responsive at all times. This must remain true even in cases of tremendous library size, or when the media is stored remotely (i.e. on a file server). If resampling is required for playback, the player must not consume inappropriate system resources to handle it.

Desktop Notifications
=====================

**Weight**: 4

Players should support, but not enforce, displaying desktop notifications (using Growl, libnotify, or Windows “bubbles”) for certain playback events (such as begin, pause, stop, track change, etc.). Desktop notifications that cannot be disabled will result in a low score. Desktop notifications using a non-standard or proprietary notification system will result in a low score.

Gapless Playback
================

**Weight**: 8

Concept albums are commonly produced with tracks that lead directly into one another, as are some others. In these cases, a pause, however slight, is inappropriate and detracts from the enjoyment of the media. The listener should not be able to tell when a new track begins. Players that are able to compensate for poorly cut media (i.e. files with silence inserted at the end) will score higher.

Visualizations
==============

**Weight**: 2

Visualizations are cool, but serve no real purpose. A spectrum analyzer and an oscilloscope are pretty much required if visualization support is available, but other “color splash” effects are neat as well.

Lyrics Display
==============

**Weight**: 3

Searching the world wide web for song lyrics is incredibly easy, but having them displayed directly in the media player is even easier. Higher scores for players capable of looking up lyrics in various online databases.

Metadata Editing
================

**Weight**: 5

Simple metadata editing is pretty important for those cases when some minor change needs made to a particular file. If the player also supports bulk tag editing (i.e. multiple files at once), it will score higher in this category.

Streaming Playback
==================

**Weight**: 3

Irrespective of the player’s support for Last.fm radio streaming, it should support streaming from various other sources, such as UPnP/DLNA, DAAP, and Shoutcast/Icecast.

Advanced Playback Control
=========================

**Weight**: 5

Fine-tuned control of media playback is necessary for listeners susceptible to mood swings or attention diversion. Key features include “stop after current” and a play queue (after which playback resumes from the library. Other less important features include “stop after x” where x is any arbitrary item and a sleep timer (stop after n time units).

CD Playback and Ripping
=======================

**Weight**: 2

Playing a CD is occasionally needed, though it is seldom a part of normal daily listening. Ripping CDs is also trivial and could easily be handled by a separate utility.

Usability
=========

**Weight**: 10

The main user interface must be clean and intuitive. Elements should be movable and resizable within reason. Keyboard shortcuts should be available and editable, but the default configuration should use well-known bindings (such as spacebar to toggle play/pause). Multimedia keys should be supported, including volume control.

Windows 7 taskbar features (including playback control buttons, progress indication, etc.) are not required, but can improve the player’s score.

So there they are, the requirements for the perfect media player. Not an easy test to pass, unfortunately. I'll be periodically posting how some of the player's I've used measure up in the next several posts.