- Separate implementations of user interface, queueing, and
playing or broadcasting of songs into components.
- Multiple user interfaces could control same underlying jukebox
engine, from different machines.
- Ability to use either CDDB files, in the same way
Gronk!
does, or MP3 file tags to get song and disc information.
- Communication via XMLRPC, so control functions are machine-
and language-agnostic.
- Ability to use backend (player) components with other jukebox
engines that can execute external players. That is, turn other
players into interface and queueing components.
- No SQL database server. There is no need for this level of
complexity, even in a jukebox with 1K (or even 10K) discs.
- The player interface is stable and working. I have been using
it underneath the Gronk! web frontend by
jwz.
- A fast database implementation is up and working, albeit for
programs written in ruby only. The database will have to be
wrapped in a server to provide XML data marshalling to allow
other languages to access it. This database is based on the
CDDB-file style of information gathering.
- A server to maintain a registry of servers by symbolic names
is up and running, and all the backend programs work with it.
- Implement XMLRPC-based Observable/Observer in order to eliminate
polling the player component. Need same functionality between
queuemgr and UI. DONE: implemented with signals.
- Define queueing component and API and write queueing component.
Note that the queueing component is a client of the player, but
is both a client of and a server to the user interface, in
order to notify a UI of changes in the queue status, triggered
by a song ending, a queue low water mark being reached, or
another UI component making a change to the queue.
- Write a simple front end (curses based, most likely) as a
proof of concept.
- Evaluate prototype for design flaws and deficiencies, and
areas which can be improved. Those items would be added to
this list.
- Change the database storage format to a language neutral one.
DONE. See <URL:db.html>.
- Implement the ID3-tag based style of database building. The
in-memory, and on-disk, database formats should be blind to the
way the database was built (although the cddb based database will
be more accurate due to lack of name length limitations).
- Only minor attempt is made at network bandwidth conservation.
- No provision is made for changing the database while the
database server or a user interface is running. This must
be addressed (sooner is better).
This source is updated frequently, and is newer than the downloadable
tarballs.
See <URL:rdoc/index.html>.
- 2003/02/09
-
Rearranged source tree and reimported into a new repo, as I didn't
design the tree and it just grew like a weed. Or that green stuff in
The Lonesome Death of Jordy Verrill.
- 2003/02/21
-
Taking some time off from coding to clean up and document everything
done so far.
- 2003/03/04
-
Still documenting. Fixed a pile of bugs. Wrote a curses only client for
displaying player status, so we don't have to rely on cdialog/Xdialog.
- 2003/03/13
-
Added <URL:db.html>.
- 2003/03/14
-
Added new ASCII db write code (writedb.rb). Started over on mkcddb.rb,
to make fake cddb files for directories of files.
- 2003/03/23
-
Added new ASCII db read code (mydb.rb) and tested on entire database.
- 2003/03/27
-
Added mkcddb.rb utility to create fake cddb files for downloaded music,
like that purchased from mp3.com.
- 2003/03/28
-
Found out that a PIII 733 isn't fast enough to be a shoutcast
server. Bummer.
- 2003/03/29
-
Mutated xxjnamed into the queue manager, since it has to handle or
call the queue manager for a number of things. Added sorting to reading
and writing the database. Docs for queuemgr coming soon.
- 2003/04/06
-
Development suspended while I work out some design problems.
The code is available on sourceforge.net. It requires Ruby with
the 1.8 shim (or Ruby 1.8 - untested), and the mp3stat program.
The code packages are by now out of date. Look for a new release soon.
The reason it needs the update to ruby is that is uses the
OptionParser class defined therein.
$Id: xxj.rd,v 1.13 2003/04/06 17:53:01 alane Exp $