otto is a web based mp3 database and jukebox which can gracefully organize a very large number of albums. it is suitable for home or office workgroup use, or as an interface to a streaming internet 'radio' station.
otto is written in perl. it requires perl5, mysql, the DBI and DBD::mysql perl modules (and a few others), and apache. mod_perl is optional. otto runs under linux and could easily be ported to other versions of unix. mpg123 or icecast are used to play or stream your music.
otto was designed with two purposes in mind:
1) to act as an easy interface to all my cds which i've encoded into mp3s. i use otto at home to act as a jukebox which is always playing music from my collection. i rarely put a cd into my cd player anymore, i simply use otto instead.
2) to be a multi-user network streaming jukebox for a group of people to upload and share their music. you could, for example, use this at work with everyone having separate accounts for accessing otto, and everyone having separate upload/download areas for music which they own. people all over the office can share and listen to the same music and everyone can have the pleasure of acting as dj for everyone else.
otto is always playing music. otto keeps a queue of songs to be played. you can add requests to the queue, change the order of requests, delete songs from the queue, or even kill the currently playing song. when there are no songs left to play, otto will add 20 random songs to the queue. requests always play ahead of the random songs otto has picked.
otto is geared toward people who have ripped+encoded entire albums. the otto database groups together tracks from an album and keeps them in album order. whole albums can easily be played, or shuffled together with tracks from other albums.
otto does search
otto tries to pack a lot of information on to a single page. at first this means otto is not always the simplest thing to use. however, once you get the hang of it, otto makes browsing and using your mp3 collection a straightforward task and it tries to stay out of your way as much as possible.
an example of this is the otto search function. if you type a search term into the search form, otto will show search results in three separate areas indicating search matches against artist names, album names, and song titles.
otto does lists
otto lets you create lists of songs that interest you. you can create as many lists as you like. once you have picked a list to work with, icons appear next to all song titles while browsing the database allowing you to easily add or delete songs to the list.
a special 'trash' list allows you to select songs which otto should avoid when it is randomly picking songs. if you don't like the currently playing song, there is a trash icon for quickly adding the current song to the trash list so you never have to hear it again.
otto is multi-user
you can issue a separate username and password to each of your otto users. this is useful in a office workgroup environment. if you organize your mp3s such that each user's mp3s are in a separate directory, then otto can keep track of who's albums are who's. otto displays the album's owner next to the album title while you are browsing the database. the currently playing track also has the owner displayed so you know who to blame.
when a user is browsing a song which is tagged as being owned by them, a download link appears next to that song allowing it to be saved locally on the user's machine. if desired, this feature can be disabled so any user can download any song.
otto keeps a list of the 30 most recently loaded albums so you can easily see what has been recently loaded by your fellow users.
you can also choose to configure otto not to prompt for a username + password at all. this can be handy when using otto at home where multi-user features don't make as much sense.
otto as radio station
otto makes a fine front end for an internet radio station. instead of using mpg123 to play the music out of your soundcard, otto can use icecast to stream your mp3s over the network. you can even combine mpg123 and icecast to play music and stream to the network at the same time.
the front page for otto is a public page which does not require a username or password. it shows what's playing and what's coming up. otto also parses the icecast stats file and shows how many people are currently listening. on the request interface, you can also see a list of the last 30 icecast listeners and how long they were connected.
if your users log into the web interface from the same machine they use to listening to the stream, otto automatically associates that username with the icecast listener address. this way you can tell who is behind a given icecast connection.
otto as database
one of the design goals for otto was to be able to gracefully browse and search a very large database of mp3 files. otto is a pleasure to use even if you load 20,000 tracks into it. as part of dealing with so many songs, otto has a few options for controlling the organization of your database.
you can arrange for artists with multiple pseudonyms to be filed together under one name. 'AFX' and 'Caustic Window' can be filed under 'Aphex Twin', for example. or maybe you would like to file a related artist somewhere other than under their own name, 'Morrissey' under 'The Smiths' perhaps.
if you identify specific artists names as proper names, you can have otto file them under their last name instead of their first. like 'Charlie Parker' under 'P' instead of 'C'.
otto also has a separate various artists section and a separate soundtracks section. if you tell otto how to parse the song and artist names from each of your various artists collections, you can have all your 'Banco de Gaia' tracks appear under 'Banco de Gaia' including all his appearances on numerous various artists collections.
otto has support for running multiple icecast channels at once. each channel is configured with a different database of songs and has a separate icecast stream associated with it. all from a single otto installation.
otto has some international language support. it can be configured to use an arbitrary character set encoding. it also has an alternate navagation bar containing the greek alphabet in the iso-8859-7 character set. if you want to support another language this will provide a great starting point.
it is easy to write small scripts that fetch the currently playing song and the upcoming song queue. as long as you have mysql installed and the mysql perl module available, the script can run either on the same machine that runs otto, or on a remote machine. this is great for driving non-web based displays (like lcd displays attached to the serial port). a rough example script is included.
otto was originally inspired by the globecom jukebox. if otto doesn't quite do it for you, then perhaps the globcom one will. please see http://www.globecom.net/jukebox/
otto would like to send props out to its peeps. a special thank you to willg (otto logo and general look), jas (suggested the name), mbletsas, rmadams, bfitz, jfinks, mikeg, kasco, tschroed, dbrandon, nfields, spero, and sgunn. thank you all for your help, feedback and encouragement. i hope i didn't forget anyone, i'm bad that way.