glenda.party
term% ls -F
term% pwd
$home/manuals/9front/7/juke
term% cat index.txt
JUKE(7)                Miscellaneous Information Manual                JUKE(7)

NAME
       juke - music jukebox

SYNOPSIS
       juke [ -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 se‐
       lected 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 ob‐
       ject will be placed.  Gustav Mahler, thus, will be placed in  Rootâcom‐
       poser.   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; however,
       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 ob‐
       ject 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 ap‐
       pears in by key or textual content.  The number commands prepends  num‐
       bers to the texts of its subobjects (e.g., for the parts in a symphony)

       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 un‐
       der 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 attrib‐
       utes:

       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 ALSO
       playlistfs(7).

                                                                       JUKE(7)