JUKE(7)JUKE(7)NAMEjuke - music jukebox
SYNOPSISjuke [ -t ] [ -w ] [ -h srvhost ] [ -s srvname ] games/jukebox [ -t ] [
-w ] games/jukefs [ -m mountpoint ] [ -s srvname ] [ mapfile ]
DESCRIPTION
Jukebox controls a playlist server (see playlistfs(7)) through a graph‐
ical user interface. It connects to a music database server which
reads a set of map files that describe recordings and their location.
Currently, there is one set of maps, mostly for classical music, with
some jazz and other stuff thrown in. These are served by jukefs, which
presents a file system conventionally mounted at /mnt/juke. The
playlist, explained below, is managed by a file system implemented by
playlistfs(7) and normally mounted on /mnt.
Jukebox is most easily started through the juke shell script.
Jukebox has four windows, which can be selected by clicking the appro‐
priate tab at the top of the window.
Above the tab are nine buttons and a volume slider. The are named,
from left to right, Exit, Pause, Play, Halt, Back, Forward, Root,
Delete, and Help. The buttons are active when they are displayed in
dark green (or red). When they are pale blue they are inactive. The
Exit button is always active; it exits the program (but leaves the
playlist and music database servers running).
The browse window is for browsing through the music and selecting music
to play. Browsing down in the music hierarchy is done by clicking but‐
ton one on an item. Clicking button three goes back up. Clicking but‐
ton two recursively adds all files below the selected item to the play
list.
The selected music is displayed in the playlist window. The track cur‐
rently playing is shown in the playing window.
The Root button browses back to the root.
The Delete button empties the playlist.
The Help displays a minimal on-line manual.
Play starts playing at the beginning of the play list, or at the
selected track in the play list.
During play, Pause, Stop, Back, and Forward are active. Back and For‐
ward go back or forward a track at a time. The other buttons do the
obvious thing.
The -t flag chooses a tiny font, useful for handhelds.
The -w flag creates the jukebox in a new window. Normally, the jukebox
takes over the window in which it is invoked.
The -s flag specifies the name under which the file descriptors of the
playlist and databse servers are posted in /srv. This allows two or
more play list servers to exist on one platform, e.g., when there are
several audio devices. The default value of the flag is $user for a
playlist server at /srv/playlistfs.$user and a database server at
/srv/jukefs.$user.
Jukefs reads a set of maps describing the music data, builds an in-mem‐
ory database, and provides lookup service to jukebox. The default map
is /sys/lib/music/map. It consists of a hierarchical set of objects.
Each object has a type, a value, zero or more attribute-value pairs and
zero or more subobjects. An object consists of the type, followed by
its contents between curly brackets. Attribute value pairs consist of
a single line containing an attribute name, an equals sign, and a
value. The value of an object is any text not containing curly brack‐
ets or equals signs. Here is an example:
category {
composer = mahler
Gustav Mahler
(1860 — 1911)
work {
path {classic/mahler}
class = symphonic
orchestra = rfo
conductor = Waart,~Edo~de
Symphony Nº 5 in c♯ (RFO, Vienna)
performance{
Radio Filharmonisch Orkest Holland
Edo de Waart, conductor
recorded: Musikverein, Vienna, May 6, 1996
}
command {number}
track {
Trauermarsch (In gemessenem Schritt. Streng. Wie ein Kondukt)
time {13:55}
file {034.pac}
}
track {
Stürmisch bewegt, mit größter Vehemenz
time {15:34}
file {035.pac}
}
track {
Scherzo (Kräftig, nicht zu schnell)
time {18:54}
file {036.pac}
}
track {
Adagietto (Sehr Langsam)
time {10:01}
file {037.pac}
}
track {
Rondo–Finale (Allegro)
time {15:44}
file {038.pac}
}
}
}
This example shows a category object for the composer Gustav Mahler
(the value consists of the two lines `Gustav Mahler' and `(1860 —
1911)') with one subobject, a work object whose value is `Symphony Nº 5
in c♯ (RFO, Vienna)'. The work object contains six subobjects: one
performance object and five track objects.
Category objects must contain exactly one attribute-value pair. The
attribute names a subobject of the root under which this category
object will be placed. Gustav Mahler, thus, will be placed in
Root→composer. Work, Recording, Part, and Track, objects all describe
named containers for subunits. A Lyrics, Performance, or Soloists
object adds information to a Work, Recording, Part, or Track, object.
It should only contain text. The same is true for a Time object; how‐
ever, it should only be used adjacent to File objects and it should
contain the running time of that file (this is for future use).
A File object specifies a file to be played. When the Select button is
pressed, all file objects contained hierarchically in the selected
object are added to the playlist.
There are a number of pseudo objects: Command may contain either sort
or number. The sort command sorts the subobjects of the object it
appears in by key or textual content. The number commands prepends
numbers to the texts of its subobjects (e.g., for the parts in a sym‐
phony)
An Include object is replaced by the contents of the named file.
A Key object specifies a key for sorting subobjects.
Finally, a Path object specifies a path to be prepended to the files
named in hierarchically contained File objects.
The attribute-value value pairs arrange for entries to be made of the
current object in a Category object named by the attribute directly
under the root.
The interface to the browsing database is through a file system imple‐
mented by jukefs. The file system synthesises a directory per object.
Each directory contains a set of files describing the object's
attributes:
children
contains a new-line separated list of subobject names. For each
name, x the directory /mnt/juke/x describes the subobject.
digest contains a one-line summary of the object
files is a new-line separated list of file objects contained in this
object. Each line consists of object name and file name.
fulltext
is the fulltextual value of the object.
key contains the key by which objects are sorted
miniparentage
is a one-line summary of the objects and the path leading to it
from the root. This is the line displayed in the playlist and
bottom browse windows of games/jukebox.
parent is the object reference to the parent of this object.
parentage
is a full description of the path leading to this object and the
object itself. This is the string displayed in the top of the
Browse and Playing windows of games/jukebox.
text is the text field of the object.
type is the type of the object
FILES
/sys/lib/music/map
Default map file
/mnt/juke
Default mount point for the music database.
SOURCE
/sys/src/games/music
SEE ALSOplaylistfs(7), audio(7)JUKE(7)