--rw-r--r-- M 0 rsc users 1124 Oct 10 2006 COPYRIGHT
--rwxr-xr-x M 0 rsc users 283 Oct 10 2006 Juke
--rw-r--r-- M 0 rsc users 3755 Oct 10 2006 README
--rw-r--r-- M 0 rsc users 8584 Oct 10 2006 acme.c
--rw-r--r-- M 0 rsc users 1499 Oct 10 2006 acme.h
--rw-r--r-- M 0 rsc users 21071 Oct 10 2006 ajuke.c
--rw-r--r-- M 0 rsc users 729 Oct 10 2006 aplay.c
--rw-r--r-- M 0 rsc users 25 Oct 10 2006 audio-FreeBSD.c
--rw-r--r-- M 0 rsc users 3396 Oct 10 2006 audio-Linux.c
--rw-r--r-- M 0 rsc users 3178 Oct 10 2006 audio-ssh.c
--rw-r--r-- M 0 rsc users 380 Oct 10 2006 audio.h
--rwxr-xr-x M 0 rsc users 328 Oct 10 2006 flacinfo
--rw-r--r-- M 0 rsc users 47 Aug 22 10:47 index.html
--rw-r--r-- M 0 rsc users 1867 Oct 10 2006 jukefmt.c
--rwxr-xr-x M 0 rsc users 3736 Oct 10 2006 jukeget
--rw-r--r-- M 0 rsc users 13767 Oct 10 2006 jukeindex.c
--rwxr-xr-x M 0 rsc users 202 Aug 22 10:47 jukeinfo
--rwxr-xr-x M 0 rsc users 1038 Aug 22 10:47 jukeplay
--rwxr-xr-x M 0 rsc users 277 Oct 10 2006 jukeput
--rwxr-xr-x M 0 rsc users 274 Oct 10 2006 jukesearch
--rwxr-xr-x M 0 rsc users 83 Oct 10 2006 jukesongfile
--rw-r--r-- M 0 rsc users 7078 Oct 10 2006 m4ainfo.c
--rw-r--r-- M 0 rsc users 861 Oct 10 2006 mkfile
--rw-r--r-- M 0 rsc users 10119 Oct 10 2006 mp3info.c
--rw-r--r-- M 0 rsc users 2556 Oct 10 2006 volume.c
--rw-r--r-- M 0 rsc users 626 Oct 10 2006 waitfor.c
This directory contains a collection of tools that
implement a music player for acme(1).
Install on a plan9port system with
Before running Juke, index your song files:
mkdir -p $HOME/lib/jukedb
jukeindex *.mp3 *.m4a
(replace the wildcards with real paths to your sound files).
Once you have indexed your songs, run Juke, which will
create an acme window named Juke/ that contains instructions
on using the browser.
There are two shell scripts you may need to customize to
your system: jukeinfo and jukeplay. Jukeinfo is invoked by
jukeindex for each file name you specify. It is expected to
print information about the music file, probably by invoking
a helper program like mp3info or m4ainfo. See those programs
for the output format and field list. Jukeplay is invoked to
play the named file. It must write the decoded audio to
standard output, *not* to the audio device. The audio must
be 44100 Hz, 16-bit stereo PCM. A separate program
Jukeinfo and jukeplay can handle MP3 and MP4 files with
extensions .mp3 and .m4a respectively. Jukeinfo uses two
supplied programs mp3info and m4ainfo. Jukeplay uses
madplay, faad, and flac.
Note that the programs cannot handle .m4p like you download
The juke C programs never actually access the files,
so there's no need for them to be files at all. You could
imagine changing jukeinfo and jukeplay to take URLs and
access files on a remote web server, and everything should
just work out. Jukeplay does consult the environment variable
jukerx to get the files. For example, to play MP3 files it uses:
$jukerx cat $1 | madplay -q -S -o raw:/dev/stdout -
If you run jukerx=(ssh tux) Juke, then files will be fetched
over ssh from the machine named tux.
The players write to standard output and Juke pipes that
into a helper program called aplay to redirect that into the
If you have installed aplay on a remote machine (named, say, amp)
then you can run aplay -x amp on the local machine to play
audio on the remote machine. Juke will automatically do this
if you execute the internal "Dev" command, i.e. "Dev amp".
The special Dev local can be used to name the local machine.
There is also a standalone program "volume" included
that gives more detailed mixer access than Juke.
Comments and problems to Russ Cox <email@example.com>.
The pieces of the player you shouldn't need to touch are:
Shell script that starts ajuke after sanity-checking environment.
The program that talks to acme. It manages all the windows
named /juke/* and uses the following helper programs to
make the windows useful.
aplay [-x machine]
The program that reads 44.1kHz 16-bit stereo sound and plays
it on a given audio device. The -x flag says to play on a remote
machine via ssh.
Print the contents for a new window named name.
Window names are:
Juke/ - the playlist
Juke/song/ - the list of songs
Juke/song/n - song #n
And also album, artist, composer, and genre, list in place of song.
Print the contents for a search window searching for pattern.
Write standard input to the file for the window named name.
Only the playlist Juke/ and the sublists Juke/list/* can
Tab "song/n Title" lines so that they line up using the
acme font in the window with the given id.
Print the name of the song numbered nnn.
Sleep until the given time. Used to implement the alarm command.
The audio back end for volume and ajuke is system-specific,
and only Linux and FreeBSD are implemented. If you add support
for another system, please mail it to me so I can include it.