Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 47

DWJukebox for DOS and Windows

Version 3.4.1
By Chris La Mantia (support@dwjukebox.com)
Home page: www.DWJukebox.com
Skin Gallery: www.DWJukebox.com/category/skins
Support Forum: www.DWJukebox.com/forum

LICENSE: Free for non-commercial use. This software may not be


used for any commercial activity of any kind. See license.txt
for full details.

======================================
============ Introduction ============
======================================

This is an MP3 jukebox program for DOS and Windows. It was designed
to run on MAME cabinets, although MAME is not required.

This program is meant to look and act like a jukebox, not a media
player. Thus, there are no playlists, no fast forward, no rewind,
no track seek, etc. It expects input via buttons like a real jukebox,
not by navigating a GUI with a joystick or mouse.

Special note for Windows 95, 98, ME, 2000, Vista, and Windows 7 users:
----------------------------------------------------------------------

The default mouse and touchscreen support in this software is only


compatible with DOS and Windows XP. To enable the mouse for Windows 95,
98, ME, or 2000, rename the file ALLEG41.DLL to ALLEG41.XP and rename
the file ALLEG41.98 to ALLEG41.DLL.

=================================================
============ Setup and Configuration ============
=================================================

The jukebox has no configuration options available through the program


itself; all configuration is carried out through text-based
configuration files.

First Time Setup:


-----------------

In order to get up and running quickly, please edit the jukebox.ini file
in a text editor like Windows Notepad or DOS Edit and set the SongPath
to point to your music collection. You may set multiple song paths, so
if you have more than one folder of music, set SongPath1, SongPath2, etc.
Please note that if one of your SongPaths is in a subfolder of another
SongPath, songs will get indexed twice and updates may not be stored
properly. This will be enough to get the jukebox running with the
default skin and contols.
The first time the jukebox is run, it will index all of the song files.
For large collections, this step can be time-consuming, as each song
must be completely loaded into memory to be searched for identification
information. This information is saved in a song database, so on
subsequent runs, the jukebox only needs to verify the existence of the
file. This verification step allows you to use removable media; songs
will only be displayed on the jukebox if they exist when the jukebox is
started.

Configuration Files
-------------------

The configuration files used by DWJukebox are plain text files. They are
organized similar to Windows INI files; they contain a number of
parameters divided into sections, with the section names starting in
square braces. Lines that start with the # character (pound, octothorpe,
number sign, whatever you want to call it) are comments and are not
read by the jukebox. For example, here is a section with two parameters:

[Settings]
# This section contains jukebox settings.

RadioMode = Disabled
MaxQueueSize = 250

Three configuration files are used to determine the operation of


the jukebox:

JUKEBOX.INI
This file contains all settings related to operation of the program
itself, and general user preferences. Anything related to the physical
PC, such as resolution or refresh rate, or jukebox operator settings,
such as whether or not to require credits, are set in this file. You can
specify a different configuration file on the command line when starting
the jukebox; for example, starting the jukebox with WINCAB.EXE
MYPREFS.INI will use MYPREFS.INI instead of JUKEBOX.INI.

Control Map File


The control map file assigns jukebox functions to individual keys,
joystick or gamepad buttons and axes, or mouse buttons. The default
control map file is CONTROLS.INI; however, a different file can be
selected via the Controls parameter in JUKEBOX.INI.

Skin File
The skin file defines the look of the jukebox and the scheme by which
songs are selected. All interactive elements of the interface can be
defined here. The skin file is set via the Skin parameter in
JUKEBOX.INI; the default is DEFAULT.SKN. Although the skin files
included have a .SKN extension, they are still effectively INI files and
can be edited with any text editor.

==================================
============ Controls ============
==================================

The jukebox is designed to emulate a real, physical jukebox, not a media


player or video jukebox. thus, it is designed to use physical buttons on
a control panel rather than a mouse or keyboard. The standard way to do
this is through a keyboard encoder such as a KeyWiz or I-Pac, or by
hacking a keyboard or game controller. All jukebox functions can be
mapped to any keyboard key, or to the two main axes or buttons on a
gamepad.
Configuring the Control Panel
-----------------------------

Control information is stored in a separate configuration file. The


default control map file is controls.ini; however, you can select a
different file by changing the Controls setting in the Controls section
in jukebox.ini.

In controls.ini, physical keys or gamepad buttons are mapped to jukebox


functions. This allows more than one key or button to provide the same
function. The jukebox can read any key on a standard PC keyboard,
including the Shift, Ctrl, Alt, Lock, and Windows keys, and it can read
up to 14 buttons and the 4 main directions on the first two axes of the
first four gamepads or joysticks in the system. (DOS users will be
limited to two buttons on two gamepads or four buttons on one gamepad
due to limitations on the DOS PC gameport.) Mouse buttons can be mapped
as well; however, mouse button 1 always controls the user interface, so
mouse button1 should only remapped for skins with no clickable icons.

The default controls.ini file includes every mappable key and button for
demonstration purposes; however, you are only required to include keys
or buttons that you are actually using.

Some buttons are required for basic jukebox operation, such as controls
to change pages or select songs. Others represent optional functions
such as displaying a list of the most popular songs, volume control,
etc.

Required Buttons:
-----------------

BTN_A, BTN_B, etc.


These are the letters used by jukeboxes that use either one letter and
one number or just one letter to select a song. BTN_A through BTN_Z are
available. The default controls.ini maps BTN_A through BTN_J to their PC
keyboard counterparts. The default skin uses BTN_A through BTN_D for
song selection and ignores higher letters.

If you are using a skin with a numeric selection method, the letter
keys will jump directly to the first page starting with an artist with
a name starting with that letter.

BTN_1, BTN_2, etc.


These are the number buttons on the jukebox; they are used in all
control setups except those that use just a single letter to select a
song. BTN_1 through BTN_25 are available. Note that BTN_10 through
BTN_25 represent a single button with the two-digit number on its face
and not two separate buttons. In addition, if the skin file is designed
to use a zero, BTN_0 will also be used. The default skin uses BTN_1
through BTN_4 for song selection and ignores higher numbers.

BTN_PREVPG
BTN_NEXTPG

These buttons page through the available songs.


By default, they are mapped to the Page Up and Page Down keys.

Optional Buttons
----------------

BTN_SELECT
Selects the song entered. This button is optional is the AutoSelect
option is enabled in jukebox.ini; otherwise it is required. By default,
for the default skin, the user should press a letter button and a number
button followed by the Select button to start a song. If you would
prefer the song to be started immediately rather than requiring the
Select button, enable the AutoSelect option in jukebox.ini. By default,
it is mapped to both Enter keys on the keyboard.

BTN_FIRSTPG
BTN_LASTPG
These buttons will jump to the first or last pages of the available
songs.

BTN_PREVALPHA
BTN_NEXTALPHA
These buttons skip to the next or previous page where the first letter
of the artist is different (not counting the word "THE"). This allows
paging through large collections quickly. By default, these functions
are mapped to the comma and period keys (think of as arrows
pointing to the next character in the alphabet).

BTN_POPULAR
BTN_POPULAR temporarily changes the Coming Up display to show the most
popular songs rather than the song queue. Pressing this button again
will show the next page of popular songs. After a few seconds, the
display will return to showing the upcoming song queue. (The exact
number of seconds the popular song list is displayed can be set in
jukebox.ini via the MostPopularDisplayTime setting, which defaults to 5
seconds.) This button is mapped to the F7 key on the keyboard by
default.

BTN_RADIO
BTN_RADIO toggles "radio mode" on and off where random songs will be
continually played. Pressing BTN_RADIO again will stop radio mode.
BTN_RADIO is mapped to the F3 key by default.

BTN_RADIO_ON
BTN_RADIO_ON turns "radio mode" on if it is currently disabled;
otherwise it has no effect. It is not mapped by default.

BTN_RADIO_OFF
BTN_RADIO_OFF turns "radio mode" off if it is currently enabled;
otherwise it has no effect. It is not mapped by default.
BTN_PLAYSTIMULATOR
BTN_PLAYSTIMULATOR toggles the PlayStimulator on and off. If no time was
specified for the PlayStimulator, it is set to 10 minutes when enabled.

BTN_PLAYSTIMULATOR_ON
BTN_PLAYSTIMULATOR_ON turns the PlayStimulator on if it was disabled;
otherwise it has no effect. If no time was specified for the
PlayStimulator, it is set to 10 minutes when enabled. This button is
not mapped by default.

BTN_PLAYSTIMULATOR_OFF
BTN_PLAYSTIMULATOR_OFF turns the PlayStimulator of if it was ensabled;
otherwise it has no effect. This button is not mapped by default.

BTN_RANDOM
This selects a random song and adds it to the queue. As this is a
selection button, it requires a credit if credits are required.

BTN_SHUFFLE
BTN_SHUFFLE reorganizes the songs in the queue, placing them in a random
order.

BTN_TOPTUNE
BTN_TOPTUNE selects the most-played song on the popularity list. If that
song is already playing or already in the queue, the next most popular
song will be played, etc. As this is a selection button, it requires a
credit if credits are required.

BTN_COIN1
BTN_COIN2
BTN_COIN3
BTN_COIN4
The BTN_COIN buttons represent the coin slots on a jukebox that requires
credits to play. Up to 4 individual coin slots can be defined. Coins are
only required if RequireCredits is enabled in jukebox.ini. By default,
BTN_COIN1 is mapped to the Insert key. Credits are added to the jukebox
based on the CoinXCredit settings in jukebox.ini.

BTN_PAUSE
BTN_PAUSE will pause the currently playing song, or restart it if the
song is paused. It is by default mapped to the F8 key.

BTN_PAUSE_ON
BTN_PAUSE_ON will pause the currently playing song; if the song is already
paused it will have no effect. It is not mapped by default.

BTN_PAUSE_OFF
BTN_PAUSE_OFF will unpause the current song, if the song is already
paused. If the song is not paused or no song is playing it will have no
effect. It is not mapped by default.

BTN_SCREENSAVER
BTN_SCREENSAVER will force the screensaver to be activated or deactivated
right away, rather than waiting for the timeout. It is not mapped by
default.

BTN_SCREENSAVER_ON
BTN_SCREENSAVER_ON will force the screensaver to be activated if it
is currently not active; otherwise it will have no efferct. It is not
mapped by default.

BTN_SCREENSAVER_OFF
BTN_SCREENSAVER_OFF will force the screensaver to be deactivated if it
is currently active; otherwise it will have no efferct. It is not
mapped by default.

BTN_SCREENSHOT
BTN_SCREENSHOT will save a snapshot of the jukebox to a file. In higher
resolutions, it may take several seconds to save the screenshot, during
which the music will probably repeatedly loop a short section of music.
BTN_SCREENSHOT is mapped to the F12 key by default.

BTN_EXIT
Exits the jukebox. BTN_EXIT is mapped to the Escape key by default.

BTN_BACKSPACE
Clears the last entered button. By default, this is mapped to the
Backspace key on the keyboard.

BTN_CLEAR
Clears all currently entered buttons. This button is not mapped by
default.

BTN_LOOP
Toggles LoopMode, where as soon as a song finishes playing it is
re-added to the queue. Songs removed with MSG_SKIP are not looped. Songs
added to the queue through this method do not consume a credit, but they
do increase the play count. Useful at parties or holiday occasions to
keep a particular set of songs on continuous play. It is mapped to the
F5 key by default.

BTN_LOOP_ON
Enables LoopMode, if it is not already enabled; otherwise it has no
effect. It is not mapped by default.

BTN_LOOP_OFF
Disables LoopMode, if it is already enabled; otherwise it has no effect.
It is not mapped by default.

BTN_SKIP
Cancels the currently playing song and starts the next song in the
queue. As this action does not restore credit to the credits counter, it
should probably not be included on a jukebox that is set up to use
credits. By default, it is mapped to the Delete key.

BTN_CLEARQUEUE
Cancels all of the songs in the queue. If credits are enabled, a number
of credits equal to the number of songs waiting in the queue will be
added. By default, it is mapped to the F1 key.

BTN_CLEARALL
Cancels all of the songs in the queue, including the
currently playing song. If credits are enabled, a number of credits
equal to the number of songs waiting in the queue will be added.
Credit is not returned for the currently playing song. This button
is not mapped by default.
BTN_FREEPLAY
Toggles between free play and credits required modes.

BTN_FREEPLAY_ON
Turns free play mode on if credits are currently required; otherwise it
has no effect. It is not mapped by default.

BTN_FREEPLAY_OFF
Turns free play mode off if it is currently enabled; otherwise it has no
effect. It is not mapped by default.

BTN_SKIPLAST
Deletes the last song in the queue. Note that you cannot
skip the currently playing song this way. This button can only be used
during the time specified by SkipLastTimeLimit in jukebox.ini. If
SkipLastTimeLimit is set to 0, this button can be used at any time
to remove the most recent addition. If SkipLastTimeLimit is set to
any value higher than 0, BTN_SKIPLAST can only remove the single most
recent addition, unless LimitSkipLastToMostRecent is set to False.

GUI Navigation Buttons


----------------------

On a control panel with very limited controls, such as a single 4-way


joystick with one button, the jukebox can be navigated as a GUI. This
is not the recommended way to use the jukebox, but it is available for
those who need it. Navigating off the left or right sides of the screen
will cause the page to turn without explicitly having to select a page
change button. The available GUI controls are:

BTN_GUI_LEFT
BTN_GUI_RIGHT
BTN_GUI_UP
BTN_GUI_DOWN
Moves the GUI focus in the appropriate direction. The control with
focus will be marked with a dotted line. These buttons are mapped
to the cursor keys by default. The directions are relative to the
screen rotation.

BTN_GUI_SELECT
Selects the control that currently has focus, i.e. "clicks" the button.
By default, this is mapped to the spacebar.

BTN_GUI_NEXT
BTN_GUI_PREV
Moves the focus to the next or previous control. By default,
BTN_GUI_NEXT is mapped to the Tab key; BTN_GUI_PREV is not mapped by
default.

BTN_SKIN_PREV
BTN_SKIN_NEXT
Switches to the next or previous skin. By default, BTN_SKIN_NEXT is
mapped to the F10 key; BTN_SKIN_PREV is mapped to the F9 key.

BTN_SKIN_1
BTN_SKIN_2
BTN_SKIN_3
BTN_SKIN_4
BTN_SKIN_5
BTN_SKIN_6
BTN_SKIN_7
BTN_SKIN_8
BTN_SKIN_9
BTN_SKIN_10
Switches directly to a specific skin. None of these buttons are
mapped by default.

============================================
============ Icons and Messages ============
============================================

In order to interact with the skin, the jukebox sends status


messages to the skin and can receive control messages from icons
mapped to locations on the screen.

When a message is received that matches the Action setting of an


icon, that icon's OnImage is displayed, and when the negative
version of the message is received, the icon reverts to its OffImage.
More than one icon can have the same Action, but each icon can only
have one Action. If no OnImage is defined, the OffImage will appear
down and to the right as if "pressed" in like a button. If no
OffImage is specified, the background image in the area specified
by the icon is used.

An Action may contain any of the button definitions listed above.


When a button definition is used, the icon will move to the OnImage
state for a tenth of a second, and then return to the OffImage state.
If the icon is marked as Clickable, it will send the button command as
well as receive it.

In addition to button messages, there are several state messages that


can be assigned as actions. State messages should not be marked as
Clickable, as they are not commands. State messages are often used
to activate "lights" on the jukebox, indicating credits being
available, that a song is paused, that radio mode is turned on, etc.
This is done by putting an image of a turned-on lamp for the icon's
OnImage and of an unlit lamp for the OffImage.

The state messages are:

MSG_FILTERED
Activated when a filter is in place; deactivated when the filter is
cleared.

MSG_POPULAR
Activated when the Most Popular list is shown; deactivated when the
Song Queue display is restored.

MSG_CREDITS
Activated when one or more credits are available; deactivated when
no credits are remaining. When the jukebox is set to not require
credits, this message is always active.

MSG_SONGSTART
Activated when a song is playing; deactivated when the song
finishes.

MSG_SONGPAUSE
Activate when the Pause feature is activated;
deactivated when play is resumed.

MSG_START
Activated when the jukebox is started. Note that this message is never
deactivated, so you cannot use this message to trigger shutdown events,
as the shutdown happens too quickly for the jukebox to respond to.

MSG_START_SKIN
Activated when a new skin starts. This is the default action, and
can be used to essentially apply "decals" to the jukebox without having
to edit the skin background image. Note that this message is never
deactivated, so you cannot use this message to trigger skin shutdown
events, as the shutdown happens too quickly for the jukebox to respond
to.

MSG_ISDOS
Activated for DOS, deactivated for Windows. Useful if you wanted to
show a different decal depending on which version is running.

MSG_RADIO
Activated when RadioMode is started; deactivated when RadioMode
is exited.

MSG_LOOP
Activated when LoopMode is started; deactivated when LoopMode
is exited.

MSG_PLAYSTIMULATOR
Activated when the PlayStimulator has been enabled; deactivated
when the PlayStimulator has been disabled.

MSG_SCREENSAVER
Activated when the screen saver is activated; deactivated
when the screen saver has been dismissed.

MSG_MUTE
Activated when the Mute function is used; deactivated when normal volume
is restored. This message is only sent if the actual mute function is
used, not if the volume is simply turned down to minimum.

MSG_NOCREDITS
Activated when the user attempts to select a song when credits are
required and no credits are available. Deactivated two seconds later.

MSG_INVALID
Activated when the user attempts to select an empty song slot.
Deactivated two seconds later.

MSG_DUPSONG
Activated when a song is selected that is already in the queue
if AllowDuplicatesInQueue is disabled in jukebox.ini. Deactivated
two seconds later.

MSG_FREEPLAY
Activated or deactivated at jukebox startup depending on the
RequireCredits setting in jukebox.ini, and activated or deactivated
as appropriate if BTN_FREEPLAY is toggled.

MSG_IDLE
Activated when no songs are playing, paused, or queued. This
message is sent after the post-song delay on the last song, and it is
deactivated before the pre-song delay. It is not activated between
queued songs, only when the last queued song has played.

MSG_QUEUE
Activated when songs are added to an empty queue; deactivated when
the last song in the queue has started playing.

MSG_PRESONG
Activated when the delay period before a song starts, and
deactivated when the song starts playing. If no delay is set,
this message will activate at the beginning of a song and then
immediately deactivate.

MSG_POSTSONG
Activated when the delay period after a song starts, and deactivated
when the post-song delay is over. If no delay is set, this message will
activate and then immediately deactivate.

MSG_INTERSONG
Activated when the between-song delay period starts, and deactivated
when the between-song delay is over. If no delay is set, this message
will not activate at all.

MSG_ADDINGCREDITS
If the skin is set to add multiple credits one at a time, this message
is activated while the credits are being added and deactivated when all
of the credits for that coin have been added.

MSG_ADDEDCREDIT
Activated for each credit as it is added, deactivated a moment later.

MSG_SKIPLASTOK
Activated when the Skip Last Song function is available, deactivated
when the SkipLastTimeLimit timer is reached or another song is
queued or the last song is actually skipped.

MSG_QUEUEFULL
Activated when the song queue is full; deactivated when the song queue
is no longer full.

MSG_SELECTING
Activated when one or more selection buttons have been pressed but not
enough to make a valid selection. Deactivated when the selection
is cleared or a valid selection is ready to be selected.

MSG_SELECTIONREADY
Activated when enough selection buttons have been pressed to indicate a
valid selection. Deactivated when this is no longer the case.

MSG_ALLOWSELECTFULLCD
Activated at startup if the AllowSelectFullCD option is enabled.
Deactivated if it is disabled.
MSG_SONGSELECTED
Activated whenever a song is selected by any user action as opposed to
by the RadioMode or PlayStimulator. Deactivated two seconds later.

MSG_SELECTEDALL
Activated if the user selects the full CD and all tracks are
successfully queued. Deactivated two seconds later.

MSG_SELECTEDSOME
Activated if the user selects the full CD but only some of the tracks
are successfully queued due to lack of credits. Deactivated two
seconds later.

Command Messages
----------------

A command message is similar to a BTN_ message; however, they are not


sent in pairs, i.e. there is never a deactivation for them. Commands
are meant to trigger actions in the jukebox as opposed to triggering
GUI actions. These are not usually used as icon actions; they are used
internally by timers. Command messages are not sent to the GUI so
they should not be used by non-clickable icons, and clickable icons
will not appear to "press" if mapped to a command message.

CMD_ADDCREDIT
If the skin is set to add multiple credits one at a
time, this command is sent once for each credit to instruct the jukebox
to increase the credit counter.

CMD_NEXTPG
Turns to the next page of songs.

CMD_PREVPG
Turns to the previous page of songs.

==========================================
============ Jukebox Features ============
==========================================

(Editor's note: All jukebox features are named with BiCapitalization


rather than using separate words. This is not for trendy marketing
reasons; it simply allows the documentation builder to index the
features properly.)

PlayStimulator

In a commercial jukebox, a play stimulator is a feature that


automatically plays a song after a certain period of inactivity; the
theory is that it essentially reminds patrons that the jukebox is there
which encourages people to use it.

DWJukebox has an optional PlayStimulator mode that simulates this


function. The PlayStimulator can be enabled in JUKEBOX.INI or
toggled on and off via BTN_PLAYSTIMULATOR. When the PlayStimulator
is enabled, a random song will play after the selected period of
inactivity.
To enable the PlayStimulator via JUKEBOX.INI, set the number of
seconds the jukebox is to be idle before the PlayStimulator
kicks in by adding or changing the PlayStimulatorDelay setting
in JUKEBOX.INI in the [Settings] section:

[Settings]
PlayStimulatorDelay = 180

This would set the PlayStimulator to 180 seconds, or three minutes.


Setting this value to 1 will cause the jukebox to play constantly
as if it were in Radio Mode. Setting this value to 0 disables the Play
Stimulator.

To avoid repetition, the PlayStimulator (and all other functions that


randomly select songs) remembers the last 20 songs played and will
avoid playing them again. However, this feature is disabled if the
jukebox contains less than 40 songs. Songs higher on the Most Popular
list will be selected for random play more often.

RadioMode
RadioMode is similar to the PlayStimulator, except it selects a new
random song as soon as the queue is empty. Although RadioMode is
essentially a PlayStimulator with a one-second delay, it is a
separate function to allow both modes to be toggled independently.

To enable RadioMode via JUKEBOX.INI, set the RadioMode setting


in JUKEBOX.INI in the [Settings] section to Enabled.

[Settings]
RadioMode = Enabled

RadioMode can also be toggled on and off via BTN_RADIO.

LoopMode

In LoopMode, when a song finishes playing it is immediately re-added


to the end of the queue. Songs removed with MSG_SKIP are not looped.
Songs added to the queue through this method do not consume a credit,
but they do increase the play count. LoopMode is useful at parties
or holiday occasions to keep a particular set of songs on continuous
play.

LoopMode is usually enabled or disabled via BTN_LOOP. It can also be


enabled via the LoopMode setting in the [Settings] section of
JUKEBOX.INI

Song sorting options


--------------------

There are three options for sorting the songs: Artist (the default),
which sorts the labels by artist; Album, which sorts the labels by
album; and Random, which randomly scrambles the titlestrips as they
would normally appear on a real jukebox.

To set the song sort, add the SongSort parameter to the [Settings]
section of JUKEBOX.INI as follows:

[Settings]
SongSort = Random

- or -

SongSort = Artist

- or -

SongSort = Album

Note that Album sort only applies to album-based (CD-type) skins. If Album
is selected for a classic-style skin, it will be treated as Artist.

=====================================================
============ Creating a Custom Skin File ============
=====================================================

The appearance of nearly every aspect of DWJukebox is controlled by a


skin file. The skin file is a simple text file that contains pointers to
all images used by a skin, the definition of the control scheme used for
the jukebox, the definition of the output style of the jukebox, and
definitions for any interactive elements such as displays, indicators,
buttons and sounds.

At this point, I have put my time into trying to finish the jukebox,
so I have not written a skin builder. Fortunately, building a skin
is not that hard. Things to remember:

- All coordinates and measurements are relative to the background


image, not the actual resolution.
- Pixels in the background image are always assumed to be square;
they will be corrected for the aspect ratio of the monitor,
resolution and orientation at runtime to stay square.

Designing a skin comes down to:

- Selecting the background image


- Set the selection method and range of selection keys
- Set the location, size, color, and number of lines of the displays
(or disable them)
- Define the appearance of the titlestrips
- Define the size and location of one or more grid(s) of titlestrips
- Define any interactive icons
- Define any sounds.

Creating a simple skin


----------------------

Basic skins are very easy. Here, for example, is the classic.skn with
the comments stripped out to make it shorter:

[skin]
background=bgclassc.jpg

[Selection]
SelectionMethod=Alphanumeric
UseZero=False
HighLetter=D
HighNumber=4

[Display1]
# Now Playing display
enabled=True
x=157
y=202
w=282
h=80
lines=4
color=palegreen
bgcolor=black

[Display2]
# Song List display
enabled=True
x=595
y=202
w=282
h=80
lines=4
color=palegreen
bgcolor=black

[Display3]
# Selection display
enabled=True
x=496
y=258
w=42
h=25
color=palegreen
bgcolor=black

[Display4]
# Credit Display
enabled=True
x=496
y=214
w=42
h=25
color=palegreen
bgcolor=black

[TitleStrips]
Background=jb45lb01.jpg
AddQuotes=True
ForceUpperCaseTitles=True
ForceUpperCaseArtists=True
SongsPerStrip=Double
Font=bluehigh.ttf
FontSize=26
FontColor=black
SmallFont=bluecond.ttf
SmallFontSize=26
Width=320
Height=108

[StripGrid]
x=162
y=308
rows=4
cols=2
rowspace=2
colspace=60
order=Horizontal

That is all there is to a basic skin. Where it gets more complicated is


when you start adding icons that create or react to jukebox events;
these icons are of course critical for touchscreen use. For this, we
shift gears and look at default.skn. I'll skip all of the stuff covered
above and go right to the icons:

[Icon1]
x=464
y=193
w=93
h=94
OnImage=instron.bmp
OffImage=instroff.bmp
Clickable=False
Action=MSG_CREDITS

[Icon2]
x=624
y=281
w=11
h=11
OnImage=r-ledoff.bmp
OffImage=r-ledon.bmp
Clickable=False
Action=MSG_POPULAR

[Icon3]
x=738
y=281
w=11
h=11
OnImage=r-ledon.bmp
OffImage=r-ledoff.bmp
Clickable=False
Action=MSG_POPULAR

[Icon4]
x=477
y=413
w=33
h=33
FocusColor=yellow
ShadowColor=Black
Clickable=True
Action=BTN_A

[Icon5]
x=514
y=413
w=33
h=33
FocusColor=yellow
ShadowColor=Black
Clickable=True
Action=BTN_1

(This is just a subset of the 17 icons in default.skn, but the rest are
like Icon4 and Icon5.)

Here we see the two different kinds of icons: non-clickable icons, which
simply react to events, and clickable icons, which both create and react
to events. Correspondingly, there are two kinds of events an icon can
send or receive: BTN_ events, which act as if one of the buttons were
pressed when sent, and MSG_ events, which report on the state of the
jukebox.

As a general rule, clickable BTN_ messages almost always represent


physical buttons, and non-clickable MSG_ messages almost always
represent lights or a similar status indicator.

Clickable icons should always send BTN_ events; non-clickable icons can
react to either BTN_ or MSG_ events. The BTN_ events are listed in
controls.ini; the MSG_ events are listed in readme.txt.

BTN_ events always un-set themselves after 1/10th of a second, and MSG_
events un-set themselves when the condition is no longer true. A perfect
example is to compare BTN_PAUSE vs. MSG_SONGPAUSED. When BTN_PAUSE is
pressed, either on the keyboard or by clicking a clickable icon assigned
to it, the BTN_PAUSE message is processed, which pauses the current song
and pushes BTN_PAUSE and MSG_SONGPAUSED onto the message queue, and a
-BTN_PAUSE (unset BTN_PAUSE) onto the timer queue. The user interface
sees the BTN_PAUSE and causes whatever icons are assigned to it to
display their OnImage, or if no OnImage is assigned it makes the
OffImage (or the background if no OffImage is assigned) appear to be
"pressed" by shifting it a couple of pixels down and to the right. The
same thing happens with MSG_SONGPAUSED, so if you have an OffImage that
looks like an unlit LED and an OnImage that looks like a lit LED, the
LED for that icon will appear to "light" in response to MSG_SONGPAUSED.
A tenth of a second later, -BTN_PAUSE is sent to the user interface,
reverting any icons assigned to it back to their OffImage (or the
background if no OffImage is assigned), but the song is still paused.
When BTN_PAUSE is pressed again, the process repeats, except this time
processing the message results in starting the song and sending
BTN_PAUSE and -MSG_SONGPAUSED to the interface, and again -BTN_PAUSE to
the timer queue. If the clickable icon instead was set to
MSG_SONGPAUSED, nothing would happen, as the jukebox engine doesn't
react to MSG_ messages, only BTN_ messages.
MSG_ISDOS is a special case; it is set on startup if running in DOSCab
and unset if running in Windows. This allows you to show an instruction
label or logo differently depending on which operating system is
running.

NOTE: It is not necessary to add button icons to enable a button unless


the skin is to be used with a touchscreen, mouse, or via the GUI
navigation buttons.

Adding Sounds to Skins


----------------------

Skins can contain pointers to sounds that are triggered when a button
is pressed or an event occurs. Sounds can be set to trigger either
when a message or button is set or unset. To specify that a sound
should be played when a message or button is unset, prefix the message
or button name with a minus sign.

Here is a sample sound definition set:

[Sounds]
BTN_COIN1=coin.wav
BTN_COIN2=coin.wav
BTN_ANY=btnclick.wav
MSG_START=startup.wav

==========================================================
============ [Controls] Section (JUKEBOX.INI) ============
==========================================================

The [Controls] section relates to input devices and how they are
interpreted by the jukebox engine.

[Controls] AlphaToggle
AlphaToggle sets one set of buttons to toggle between letters and
numbers. If AlphaToggle is True, keys and joystick buttons mapped to
letters will toggle back and forth between letters and numbers.
This option only takes effect when the SelectionMethod is set to
ALPHANUMERIC. This allows skins designed for two separate sets
of selection keys to be used with a control panel with fewer buttons.
This is equivalent to the 4ButtonPanel option from version 2.x.

Default value: False

[Controls] AutoSelect
AutoSelect automatically enters the selected song without having to press
a Select button. If AutoSelect is true, a selection is made the moment
the maximum number of selection buttons are pressed. If AutoSelect is
false, a Select button must be pressed to enter the selection.
When AutoSelect is enabled, it actually pushes a BTN_SELECT message
onto the message queue, so if there is an on-screen icon mapped to
BTN_SELECT it will appear to trigger as if it had actually been pressed.

Default value: False


[Controls] Controls
Controls sets the name of the file that contains the control maps.
This file maps jukebox functions to physical keyboard keys or joystick or
gamepad axes and buttons. See the Control Map File chapter for more
information.

Default value: CONTROLS.INI

[Controls] KeyRepeatRate
KeyRepeatRate sets the number of times per second a control will repeat
when held down, up to a maximum of 30. This applies to all forms of
input: keyboard, gamepad, and on-screen icons. If KeyRepeatRate is set
to 0 or DISABLED, no controls will repeat.

Default value: 5

[Controls] Mouse
Mouse sets the mode of the mouse. Mouse = Disabled will disable the
mouse, Mouse = Enabled will enable the mouse with a visible pointer,
and Mouse = Touchscreen will enable the mouse with an invisible pointer.
(If you prefer, you can use Visible and Invisible in place of Enabled
and Touchscreen.)

Note that touchscreens are currently only supported under DOS and
Windows XP.

Default value: Disabled

[Controls] ShowKeys
If ShowKeys is enabled, it puts the name of the last key, joystick
button, or mouse button pressed in the upper left corner of the screen.
This is meant to help identify buttons on remote controls or keyboard
encoders when setting up CONTROLS.INI.

Default value: Disabled

=========================================================
============ [Display] Section (JUKEBOX.INI) ============
=========================================================

[Display] AnimationSpeed
AnimationSpeed sets the speed of the page change animations. This value
can range from 2 to 100. Since this value represents milliseconds between
frames, lower numbers are faster. Setting the speed to 0 or Disabled
disables page change animations.

Default value: 20

[Display] AnimationAcceleration

AnimationAcceleration sets the rate at which the page change animation


accelerates. It accepts values from 1 to 100, with 100 being fastest.
Acceleration only starts to kick in on the third page change, and once
the page change button is released for more than a second or two the
acceleration resets. A value of 0 or Disabled turns off acceleration.

Default value: 20
[Display] ColorDepth
When DWJukebox starts up, it will cycle through color depths until it
finds one that is supported at the requested resolution. By default, it
tries 16 bits per pixel first, then 15, then 24, then 32. This may cause
some undesired flashing on startup, or the selection of an undesired
color depth. Setting ColorDepth to either 15, 16, 24, or 32 will cause
the jukebox to try that color depth first. Setting ColorDepth to
Auto will go in the order listed above in DOS; in Windows, the Auto
setting will try to use the existing desktop color depth before trying
the others in the order listed above.

Note that selecting an unsupported color depth may cause the jukebox to
open in a window in Windows.

Default value: Auto

[Display] FixedDimension
If a skin does not perfectly match the rotation, either the height or the
with must be either clipped or letterboxed to make the display fit.
FixedDimension = Height uses the full height of the skin; FixedDimension
Width uses the full width of the skin. FixedDimension = Auto uses width
for horizontal orientations and height for vertical orientations.

Default value: Auto

[Display] IconFocusBoxThickness
[Display] TrackFocusBoxThickness
IconFocusBoxThickness sets, in pixels, the thickness of the dotted
focus line around highlighted icons; TrackFocusBoxThickness sets the
thickness of the line around track titles. If set to AUTO, the
thickness will depend on the screen resolution; if it is set to 0 or
DISABLED, the focus line won't appear at all.

Default value: Auto

[Display] FontSmoothing
FontSmoothing sets whether TrueType fonts used by the jukebox are
anti-aliased (smoothed). Disabling font smoothing may increase
performance on slow machines. FontSmoothing has been tested to work at
full speed on at least a Pentium 166 at 800x600 resolution.

Default value: Enabled

[Display] InsertCoinMsg1
[Display] InsertCoinMsg2
InsertCoinMsg1 and InsertCoinMsg2 set the message that appears when a
selection is attempted with no credits available.
If the jukebox is set to use credits and a selection button is pressed
with no credits available, the message specified in InsertCoinMsg1 and
InsertCoinMsg2 will be shown on the Upcoming Songs display. If the
Upcoming Songs display is set to only display one line, only
InsertCoinMsg1 will be shown.

Default value: NO SELECTIONS REMAINING for line 1, INSERT COIN for line 2
[Display] MonitorAspectRatio

The MonitorAspectRatio sets the physical aspect ratio of the monitor,


NOT the aspect ratio of the screen resolution. A particular monitor
always has the same aspect ratio no matter what resolution it's running
in. The aspect ratio needs to be set for the monitor in its "natural"
configuration, not accounting for the Rotation setting in the jukebox.
If the display is rotated in hardware by the video card, it needs to be
inverted.

Aspect ratios can be specified as an actual ratio (4:3 or 16:9, for


example) or as a decimal number representing the ratio (for example,
the standard 4:3 aspect ratio can be expressed as 1.33334,
which is roughly 4 divided by 3). You should only need to
change this if you have a widescreen monitor. Most widescreen
monitors use a 16:10 aspect ratio, or 1.6; widescreen TV's or
monitors with TV-style 720 or 1080 vertical resolutions are usually
16:9, or 1.77778.

If MonitorAspectRatio is set to STRETCH, the full height and width of


the skin will fill the height and width of the monitor and the
FixedDimension attribute will be ignored.

Default value: 4:3

[Display] MousePointer
MousePointer points to the file containing a set of Allegro bitmaps
representing the mouse pointers. Right now, changing this is only
useful if all of the pointers have their hotspot in the same spots as
the default pointer file, as the hotspots are currently hardcoded.

Default value: jbdefptr.ptr

[Display] RefreshRate
RefreshRate requests a specific monitor refresh rate. Be careful with
this value! Most monitors will not accept an out of range refresh rate,
but some older monitors could theoretically be damaged. If in doubt,
do not set a refresh rate and the monitor's default will be used.

Default value: Monitor default

[Display] Rotation
Rotation sets the rotation of the display. This value can be specified
three different ways; use the one that makes most sense to you.

First, Rotation may be specified in 90 degree clockwise increments. Thus,


Rotation = 0 is horizontal, Rotation = 1 is vertical rotated to the
right, Rotation = 2 is upside down, and Rotation = 3 is vertical rotated
to the left.

Second, Rotation may be specified in degrees, with 0, 90, 180, and 270
being the only supported values.

Finally, rotation may be specified as HORIZONTAL, VERTICAL (or


VERTICAL RIGHT), UPSIDE DOWN, or VERTICAL LEFT.

Default value: 0
[Display] Skin
Skin sets the default definition file. It can be either the name of a
specific .skn file in the Skins folder, or the name of a folder in the
Skins folder containing a .skn file by the same name. It is not
necessary to specify the .skn extension.

Multiple skins can be specified as Skin1, Skin2, etc. When multiple


skins are used, the BTN_SKIN_NEXT and BTN_SKIN_PREV keys can be used
to cycle between them, or buttons BTN_SKIN_1 through BTN_SKIN_10 can
be used to switch directly to a particular skin.

Default value: Default.skn

[Display] Width
[Display] Height
Width and Height set the screen resolution. The skin will be scaled to
fit this resolution, adjusted by the aspect ratio of the monitor.
Because of these automatic adjustments, any skin can be used in any
resolution and any rotation.

Although any skin can be used at any resolution, use skins especially
designed for low resolutions for best results below 640x480.

Note that the Width and Height are for the monitor in its normal
horizontal configuration. Thus, even if using a rotated display set the
Width and Height appropriately for a non-rotated horizontal display.

If Width or Height is set to Auto, the jukebox will use the existing
desktop resolution in Windows, or 1024x768 in DOS.

Default value: Width=Auto, Height=Auto

=======================================================
============ [Index] Section (JUKEBOX.INI) ============
=======================================================

The Index section sets parameters and preferences related to the


indexing of song files.

[Index] CoverArt
CoverArt defines the order in which files are searched for cover art.
Cover art is only used for CD skins at this time. The cover art found in
the folder for the first song in an album is used.

Multiple CoverArt paths can be set, so they are specified as CoverArt1,


CoverArt2, etc. Here, for example, are the CoverArt settings in the
default JUKEBOX.INI:

CoverArt1 = folder.jpg
CoverArt2 = AlbumArt_{????????-????-????-????-????????????}_Large.jpg
CoverArt3 = *.jpg

Default value: None

[Index] DefaultAlbum
DefaultAlbum is the text to be used when no album name can be determined.
Default value: Singles

[Index] DefaultArtist
DefaultArtist is the text to be used when no artist name can be
determined.

Default value: Various Artists

[Index] FilenameCrop
FilenameCrop indicates whether or not to crop track, album and/or artist
artist information from filenames. This only applies when ID3
information is unavailable or disabled. If FilenameCrop is set to a
value of 2 or higher, that number of characters is always cropped from
the beginning of a filename. If FilenameCrop is set to 1 or Numeric, any
numbers and the space following them are dropped from the filename.
If FilenameCrop is set to Smart, any information in the filename up to
the last "- " (hyphen followed by a space) is assumed to be album and
artist information and is dropped from the title.

NOTE: Only the Smart and Disabled modes are currently available; Numeric
is not yet implemented.

Default value: Smart

[Index] MaxFolderDepth
Sets how deep to scan into the folder structure for songs,
from 1 to 32 levels deep. MaxFolderDepth sets how deep in the folder
structure to look for music. This will help prevent runaway indexing
if unexpected removable media is found on a song path.

Default value: 3

[Index] RunawayLimiter
RunawayLimiter is used in case a corrupted database gets
"stuck" reading a song; unfortunately in rare circumstances
a large song database can trigger a runaway limit. This
value can be set up to 10000; larger runaway limiters will
result in longer delays before exit if a runaway condition is
reached. You should not need to change this value unless
directed to by technical support.

Default value: 30

[Index] OrphanControl
When a CD has more tracks than can fit on one title card, the remaining
tracks are split onto a different album. If the last album of the set
has fewer than 25% of the possible tracks for one album, OrphanControl
decides how to handle these "orphaned" tracks. If OrphanControl is
enabled, some of the tracks from the previous album are moved to the
last album, making them both relatively even. If OrphanControl is
disabled, the orphaned tracks are left alone.

Default value: Enabled

[Index] SmartCrop
SmartCrop has been replaced by FilenameCrop; it is still supported
for backward compatibility.
Default value: Value of FilenameCrop

[Index] SongPath
SongPath sets the folder(s) in which to look for music. By default,
subdirectories under the current folder are searched; to search a
different folder, set SongPath to the folder to search. Additional
folders may be specified as SongPath1, SongPath2, etc. You may specify
the root folder of removable media; songs on that media will only be
used when the media is in the drive.

Example:

SongPath1 = C:\Documents and Settings\All Users\My Documents\My Music


SongPath2 = D:\
SongPath3 = C:\Music\Ogg

Default value: The jukebox program directory and below.

[Index] StrictAlbum
StrictAlbum defines which album titles must have their songs in the same
folder to count as belonging the same album. This is necessary for
common album names like "Greatest Hits". If any StrictAlbum is set to *
(asterisk), all albums will be treated as Strict. Multiple StrictAlbum
settings can be specified as StrictAlbum1, StrictAlbum2, etc.

Example:

StrictAlbum1 = Greatest Hits


StrictAlbum2 = Original Motion Picture Soundtrack

Default value: None

[Index] UpdateIndex
UpdateIndex indicates whether to rescan the index every time the jukebox
is started or to use the last index created by the jukebox. If
UpdateIndex is set to True, the jukebox will go through every song file
to make sure it exists and will add new files to the database and/or
update existing files. This can take a long time if there are a large
number of files; it's best used when a music collection changes often
or if some of the song paths are on removable or network paths. If
UpdateIndex is set to False, the jukebox will load the last index it
created; this is much faster, but could result in errors if a selected
song is not found.

If the index file does not exist, the jukebox will ignore this setting
and update the index.

Default value: True

[Index] UseID3
UseID3 indicates whether to use ID3 for MP3 song identification, or OGG
tags for OGG files. If UseID3 is set to False, it will assume the
filename is the name of the song and set the artist and album based on
the folder structure. Since DOS does not use long filenames, if ID3
support is disabled the database should be created on a Windows
system.

Default value: True

=============================================================
============ [Screensaver] Section (JUKEBOX.INI) ============
=============================================================
The jukebox includes four screensaver options:

Lines: an extremely simple screensaver that shows a


moving pattern of lines with an optional display showing information
about the current song.

Blank: A blank screen with an optional moving information box


about the current song.

Slideshow: Displays all of the images (JPG, PNG, or BMP) in a folder


either in sequence or randomly.

Windows: Activates the Windows default screensaver.

[ScreenSaver] ScreenSaver
Sets the screensaver mode. Available options are Blank, Lines,
Windows, and Slideshow.

Default value: Lines.

[ScreenSaver] SlideShowPath

SlideShowPath selects the folder for the images for the slideshow
screensaver.

[ScreenSaver] SlideShowInterval
SlideShowInterval sets the number of seconds each slideshow image is
displayed on the screen.

Default value: 10.

[ScreenSaver] SlideShowRandom
SlideShowRandom sets whether each slideshow image is displayed randomly
or sequentially.

Default value: False.

[ScreenSaver] SlideShowMaxImageSize
SlideShowMaxImageSize sets the maximum size for slideshow images, in
kilobytes. Images larger than this will be ignored. If this value is
set to 0 or Disabled, the image size will not be checked and all images
will be used.

Default value: 1024.

[ScreenSaver] ColorVariance
The screensaver kaleidoscope smoothly transitions from one color to
another, but for variety, the color will occasionally jump to a random
new color. The ColorVariance setting controls how often this happens.
The lower the ColorVariance setting, the more often the colors will
jump around. This setting can range from 1 to 5000.

Default value: 100

[ScreenSaver] CornerMirror
The CornerMirror setting controls whether the kaleidoscope display is
repeated in the corners of the screen.

Default value: True

[ScreenSaver] LineCount
LineCount sets the number of lines used by the screensaver kaleidoscope
display. You may need to reduce this setting for lower resolutions,
depending on how dense you prefer the kaleidoscope to be. This can range
from 1 to 500.

Default value: 80

[ScreenSaver] MaxBlue
[ScreenSaver] MaxGreen
[ScreenSaver] MaxRed
[ScreenSaver] MinBlue
[ScreenSaver] MinGreen
[ScreenSaver] MinRed
MinRed, MaxRed, MinGreen, MaxGreen, MinBlue, and MaxBlue control the
color range of the kaleidoscope lines. The range for these settings is
0 to 255.
Default value: 50 for minimums, 250 for maximums.

[ScreenSaver] ScreenSaverCancelTimeout
ScreenSaverCancelTimeout sets the number of minutes before the screen
saver automatically deactivates. Setting ScreenSaverCancelTimeout to
0 or DISABLED requires a keystroke or mouse movement to deactivate the
screensaver.

Default value: Disabled

[ScreenSaver] ScreenSaverTimeout
ScreenSaverTimeout sets the number of minutes before the screen saver
activates. Setting ScreenSaverTimeout to 0 or DISABLED deactivates the
screensaver.

Default value: Disabled

[ScreenSaver] ShowSongInfo
ShowSongInfo selects whether or not a floating box containing the Now
Playing display is show when the screensaver is active.

Default value: True

[ScreenSaver] SongInfoBGColor
SongInfoBgColor sets the color of the background used by the
screensaver's Song Info display. See Colors.html in the DOCS folder for
information on specifying colors.

Default value: Black


[ScreenSaver] SongInfoColor
SongInfoBgColor sets the color of the foreground text used by the
screensaver's Song Info display. See Colors.html in the DOCS folder for
information on specifying colors.

Default value: Palegreen

[ScreenSaver] SongInfoHeight
[ScreenSaver] SongInfoWidth
SongInfoWidth and SongInfoHeight set the size of the Song Info display
in pixels. Note that this size will not be adjusted for resolution or
aspect ratio.

Default value: The defaults are a percentage of the screen resolution.

[ScreenSaver] SongInfoLines
SongInfoLines sets the number of lines displayed on the screensaver's
Song Info display, from 1 to 5.

Default value: 5

[ScreenSaver] StepSize
StepSize controls the distance between lines in the kaleidoscope
display. This can range from 1 to 50.

Default value: 5

==========================================================
============ [Settings] Section (JUKEBOX.INI) ============
==========================================================

[Settings] AllowDuplicatesInQueue
AllowDuplicatesInQueue sets whether or not a duplicate song can be
added into the queue. Real jukeboxes, especially those that use remote
wallboxes, will usually not allow duplicates, although they will
happily accept the money, on the theory that if two patrons want to
hear a particular song, they will both hear it even if it is only
played once.

If this setting is set to FALSE and the song being added is already in
the queue, the song will not be added, a credit will still be taken,
and the MSG_DUPSONG message will be fired, with -MSG_DUPSONG being
fired two seconds later. This will allow a skin to display an icon
showing that the song has already been queued, although ordinarily
such a display would not be desired, at least on a real jukebox.

Default value: False.

[Settings] AllowSelectFullCD
Sets whether selecting track 0 on a CD selects the full CD.
AllowSelectFullCD sets whether or not selecting track zero on a CD
will select all the songs on a CD. If credits are required, only the
number of tracks for which credit is available will be selected.

Default value: True.

[Settings] ArtCacheMB
ArtCacheMB specifies the amount of memory set aside for caching cover
art images in megabytes. Note that at least enough memory to cache
one page will always be reserved. The range is 0 to 1024. The
default setting is AUTO, which is 4MB for DOS or 32MB for Windows.
This setting only applies to album-based skins, as cover art is not
supported for classic skins.

Default value: Auto.

[Settings] AutoFlipTimer
The AutoFlip timer automatically changes pages after a timer
expires. If a longer delay before the first automatic flip is
desired, set the FirstAutoFlipTimer to the desired time. For
example you may want pages to start flipping after 5 minutes
but then flip every 30 seconds thereafter.

If either timer is disabled the other timer will control all flips.
If both timers are disable no automatic flips will occur. The
timers are set in seconds.

Default value: Disabled.

[Settings] Coin1Credit
[Settings] Coin2Credit
[Settings] Coin3Credit
[Settings] Coin4Credit
CoinXCredit sets the number of credits provided by a given
coin input. X can range from 1 to 4. For example, if coin
slot 1 took nickels and coin slot 2 took quarters, you might want
to set 1 credit for a nickel and 5 credits for a quarter. You
would thus set:

Coin1Credit = 1
Coin2Credit = 5

Default value: 3.

[Settings] CPUUsage
CPUUsage sets how much CPU time the jukebox gives itself in Windows;
it has no effect in DOS. Higher values give more CPU priority
to the jukebox, lower values give more priority to the system.
This value can range from 0 to 100.

Default value: 10.

[Settings] DebugLevel
DebugLevel sets the logging level for the jukebox. The debug log
is stored in jbdebug.log in the same folder as the jukebox. The
DebugLevel may be set from DISABLED (no logging) to 5 (maximum
logging). Detail level 5 will show inordinately large amounts of
detail; usually detail level 3 is the most informative without
detail overload. Debug logs can grow quite large, so DebugLevel
should only be enabled when troubleshooting.

If a fatal error occurs, jbdebug.log will get create whether or


not the DebugLevel is set,

Default value: Disabled.


[Settings] DisplayOutputFile
DisplayOutputFile sets the location and name of the display output
file. This file contains a four-line version of the Now Playing
display in plain text, usable by programs that can send the contents
of a file to an LCD display like LCD Smartie. Setting this to
Disabled will prevent the output file from being created or updated.

Default value: display.txt, in the same directory as the jukebox.

[Settings] FileSystemEncoding
FileSystemEncoding sets the text encoding used by the file system.
Possible values are ASCII, UTF8, and UNICODE. You should never
need to change this setting.

Default value: ASCII.

[Settings] FirstAutoFlipTimer

The AutoFlip timers automatically change pages after a timer


expires. Usually a longer delay for the first flip is desired,
for example you may want pages to start flipping after
5 minutes but then flip every 30 seconds thereafter.
FirstAutoFlipTimer sets the interval for the first flip;
use AutoFlipTimer to set the interval for the remaining flips.
If either timer is disabled the other timer will control all
flips. If both timers are disable no automatic flips will occur.
The timers are set in seconds.

Default value: Disabled.

[Settings] KeyboardLEDsOff
This setting attempts to turn off the keyboard LED's when the
jukebox starts. This is meant for jukeboxes in game cabinets where
the keyboard LED's may be mapped to LEDs on the control panel.
This setting only works in DOS and Windows 95/98.

Default value: Disabled.

[Settings] LimitSkipLastToMostRecent
LimitSkipLastToMostRecent prevents the BTN_SKIPLAST button from
removing more than a single song from the end of the queue if
SkipLastTimeLimit is enabled. If this setting is disabled, the
BTN_SKIPLAST button can be used to remove as many songs from the
end of the queue as desired until the time limit runs out.
Note that if SkipLastTimeLimit is set to 0 or DISABLED, this
setting has no effect, as in that case BTN_SKIPLAST is not limited.

Default value: Enabled.

[Settings] LoopMode
LoopMode enables loop mode, where songs are re-added to the queue
automatically as soon as they finish playing. You usually want to
leave this set to FALSE and enable it via BTN_LOOP.

Default value: Disabled.

[Settings] MaxQueueSize
MaxQueueSize sets the maximum number of songs that can be queued up to
play, not counting the currently playing song. This value can range from
1 to 500.

Default value: 250.

[Settings] MaxRandomSongLength
MaxRandomSongLength sets, in minutes, the longest song that can be played
by any method that selects a random song, such as the play stimulator or
radio mode. The default is 6 minutes; the minimum is two minutes. Note
that if there are very few songs available below this limit, longer
songs may be played as the random song selector will only try a limited
number of times to find a matching song to avoid crashes.

Default value: 6.

[Settings] MostPopularDisplayTime
MostPopularDisplayTime sets the number of seconds the "most popular"
display is shown before returning to the "upcoming songs" display.

Default value: 5.

[Settings] PlayStimulatorDelay
PlayStimulatorDelay sets the number of seconds the jukebox must be idle
before randomly selecting and playing a song. If PlayStimulatorDelay is
set to 0 or DISABLED, songs will not play randomly while the jukebox is
idle.

Default value: Disabled.

[Settings] RadioMode
RadioMode sets whether or not the jukebox will play songs continuously
when idle, like a radio. This mode can be toggled with BTN_RADIO, or
specifically turned on or off with BTN_RADIO_ON and BTN_RADIO_OFF.

Default value: Disabled.

[Settings] RandomSongPopularityPreference
RandomSongPopularityPreference sets the level which the jukebox gives
preference to songs higher in the popularity list. A value of 0 or
DISABLED ignores popularity for random selects, giving equal preference
to all songs regardless of popularity. Values above 0 give more
preference to popular songs, to a maximum value of 10. Values above 4 or
so are not recommended unless you have thousands of songs available. The
default value is 2.

Note that this setting only has any effect after at least a quarter of
the songs in the library have been played at least once.
[Settings] RequireCredits
If RequireCredits is true, selections cannot be made without credits. If
RequireCredits is false and the credit display is enabled, it will
always show 01.

Please note that the credits feature is meant only for home use, for
entertainment purposes only. There are ways to bypass the credit system;
it is not licensed for, or suitable for, a commercial environment. See
license.txt for full details.

Default value: False.

[Settings] ResourcePath
ResourcePath sets alternate paths for skin resources. Multiple
ResourcePaths can be specified as ResourcePath1, ResourcePath2, etc.
If no ResourcePath is set, the jukebox will default to the SKINS folder.
Subfolders are not searched.

Default value: skins.

[Settings] SkipLastTimeLimit
SkipLastTimeLimit sets the number of seconds after a song is queued in
which is can be removed from the queue with BTN_SKIPLAST. If
SkipLastTimeLimit is set to 0 or DISABLED, the user can always remove the
last song in the queue. To disable this function, simply don't map a key
to it.

Default value: 15.

[Settings] SongDelay
SongDelay sets the length of time the jukebox pauses between songs, in
hundredths of a second. This would be the time a real jukebox would be
switching disks. Note that this setting is only used if the skin does
not provide an InterSongDelay.

Default value: 200 (2 seconds).

[Settings] SongSort
SongSort sets how the jukebox arranges titlestrips. If SongSort is set
to Artist, title strips will be sorted by the artist name. If SongSort
is set to Random or is not set, title strips will be randomized. If
SongSort is set to Album, title strips will be sorted by the album name.
Note that Album sort only appllies to CD-based skins.

Default value: Artist.

[Settings] SystemShutdownEnabled
SystemShutdownEnabled sets whether or not the jukebox can shut down
Windows. If SystemShutdownEnabled=True, Windows will shut down if
BTN_SHUTDOWN was pressed or if the jukebox is requested to close by
Windows. Exiting via BTN_EXIT will not shut down the system even if
SystemShutdownEnabled is enabled. This setting has no effect in the DOS
version.

Default value: False.

=================================================
============ [VolumeControl] Section ============
=================================================

[VolumeControl] SetSystemVolume
SetSystemVolume controls whether the jukebox volume control is
controlling the volume for the entire system via the hardware mixer
(True), or just controlling its own volume through software (False). The
default is False. It is not always possible to access the hardware mixer
on all sound cards; if you set this value to True and the volume does
not change when a volume key is pressed, the hardware mixer is not
accessible on your system.

Default value: False.

[VolumeControl] SoundEffectsVolume
SoundEffectsVolume sets the volume for sound effects, from 0 to 100.
This value is interpreted as a percentage of the music volume.

Default value: 50.

[VolumeControl] SoundEffectsVolumeWhenPlaying
SoundEffectsVolumeWhenPlaying sets the volume for sound effects that
start while a song is playing, from 0 to 100. This value is interpreted
as a percentage of the music volume.

Default value: 0.

[VolumeControl] Volume
Volume sets the initial music volume, from 0 to 100.

Default value: 100.

[VolumeControl] VolumeIncrement
VolumeIncrement sets the amount the volume changes each time a
volume up/volume down key is pressed.

Default value: 10.

==========================================================
============ [Joystick] Section (JUKEBOX.INI) ============
==========================================================

The [Joystick] section is not normally used; its purpose is to load


special drivers for non-standard DOS joysticks, or to specify the Win32
joystick driver in Windows as opposed to the standard DirectInput driver.

[Joystick] JoyType
DOS joystick drivers :

0 - none
STD - standard 2-button
2PAD - dual standard 2-button
4BUT - standard 4-button
6BUT - standard 6-button
8BUT - standard 8-button
FPRO - CH Flightstick Pro
WING - Logitech Wingman Extreme
SW - Microsoft Sidewinder digital pad
SWAG - Microsoft Sidewinder digital pad (aggressive)
SWPP - Microsoft Sidewinder 3D/Precision/Force Feedback Pro
GPRO - Gravis GamePad Pro
GRIP - Gravis GrIP
GRI4 - Gravis GrIP (4-axis only)
SNE1 - SNES joypads connected to LPT1
SNE2 - SNES joypads connected to LPT2
SNE3 - SNES joypads connected to LPT3
PSX1 - PSX joypads connected to LPT1
PSX2 - PSX joypads connected to LPT2
PSX3 - PSX joypads connected to LPT3
N641 - N64 joypads connected to LPT1
N642 - N64 joypads connected to LPT2
N643 - N64 joypads connected to LPT3
DB91 - Pair of 2-button joysticks connected to LPT1
DB92 - Pair of 2-button joysticks connected to LPT2
DB93 - Pair of 2-button joysticks connected to LPT3
TGX1 - TurboGraFX joysticks connected to LPT1
TGX2 - TurboGraFX joysticks connected to LPT2
TGX3 - TurboGraFX joysticks connected to LPT3
SEGI - IF-SEGA joystick interface card (ISA bus)
SEGP - IF-SEGA joystick interface card (PCI bus)
SGPF - IF-SEGA joystick interface card (fast PCI bus)
WWAR - Wingman Warrior

Windows joystick drivers :

0 - none
DX - DirectInput joystick
W32 - Win32 joystick

========================================
============ [Skin] Section ============
========================================

[Skin] Background
[Skin] FlipText

[Skin] ResourcePath

============================================
============ [DisplayX] Section ============
============================================

[DisplayX] BGColor

[DisplayX] Color

[DisplayX] Enabled

[DisplayX] FontCase

[DisplayX] H

[DisplayX] Lines

[DisplayX] W
[DisplayX] X

[DisplayX] Y

=========================================
============ [Fonts] Section ============
=========================================

Fonts may be specified individually for the song titles, artist names,
album names, and the address number of the CD. Here is an example of
the font configuration for a skin:

[Fonts]
TitleFont = dvsans.ttf
TitleFontSize = 14
TitleFontCondensed = dvsansc.ttf
TitleFontCondensedSize = 12
TitleFontSmall = dvsansc.ttf
TitleFontSmallSize = 8
TitleFontColor = ghostwhite
TitleFontCase = Normal
TitleFontAddQuotes = False
TitleFontQuoteSymbol = "

ArtistFont = dvsans.ttf
ArtistFontSize = 12
ArtistFontCondensed = dvsansc.ttf
ArtistFontCondensedSize = 11
ArtistFontSmall
ArtistFontColor = lightgrey
ArtistFontCase = Normal
ArtistFontAddQuotes = False

AlbumFont = dvsansb.ttf
AlbumFontSize = 14
AlbumFontCondensed = dvsansbc.ttf
AlbumFontCondensedSize = 12
AlbumFontSmall = dvsansbc.ttf
AlbumFontSmallSize = 8
AlbumFontColor = ghostwhite
AlbumFontCase = Uppercase
AlbumFontAddQuotes = False
CDAddressFont = bluecond.ttf
CDAddressFontSize = 26
CDAddressFontColor = white

[Fonts] FixedFont

=========================================
============ [IconX] Section ============
=========================================

[IconX] Action

[IconX] Clickable

[IconX] FocusColor

[IconX] H

[IconX] NormallyOff
[IconX] NormallyOn
NormallyOff or NormallyOn (only one should be used per icon) can be used
to reverse the normal action of an icon. By default, Icons are normally
Off, and are set to On when they are activated. By setting
NormallyOff=False or NormallyOn=True, you can reverse this situation,
causing an icon to turn Off when activated.

Default value: True for NormallyOff, False for NormallyOn.

[IconX] OffImage
[IconX] OnImage

[IconX] ShadowColor

[IconX] W

[IconX] X

[IconX] Y

=============================================
============ [Selection] Section ============
=============================================

[Selection] DiscAddress

[Selection] HighLetter

[Selection] HighNumber
[Selection] LetterASymbol, LetterBSymbol, etc.
[Selection] Number1Symbol, Number2Symbol, etc.
LetterXSymbol and NumberNSymbol change the symbol displayed
for the corresponding selection value. There is probably never a need to
use this setting. It could be used, for example, on a jukebox with an
alphanumeric selection scheme where the number is first rather than the
letter. In this case, the symbols would be swapped as follows:

LetterASymbol = 1
LetterBSymbol = 2
LetterCSymbol = 3
LetterDSymbol = 4
Number1Symbol = A
Number2Symbol = B
Number3Symbol = C
Number4Symbol = D

Note that a symbol can contain more than one letter or number.

Default value: Equal to the normal symbol for that value.

[Selection] SelectionMethod

[Selection] ShowSelectionAddress

[Selection] SkipLetterA, SkipLetterB, etc.


[Selection] SkipNumber1, SkipNumber2, etc.
SkipLetterX and SkipNumberN skip the specified letter or
number in the selection order. Many jukeboxes did not use the letters
I or O to avoid confusion with 1 and 0. If SkipLetterX
or SkipNumberN are set to True, the specified letter or number
will not be available. If a key is mapped to that letter or number, it
will trigger MSG_INVALID if pressed.

Default value: False

[Selection] UseTrackZero
[Selection] UseZero

==========================================
============ [Sounds] Section ============
==========================================

[Sounds] (message)

=============================================
============ [StripGrid] Section ============
=============================================

[StripGrid] Cols

[StripGrid] ColSpace

[StripGrid] CoverArtSide

[StripGrid] CoverArtSpace

[StripGrid] Order

[StripGrid] Rows
[StripGrid] RowSpace

[StripGrid] X

[StripGrid] Y

==========================================
============ [Timers] Section ============
==========================================

[Timers] IncrementalCreditDelay

[Timers] InterSongDelay

[Timers] PostSongDelay

[Timers] PreSongDelay

===============================================
============ [Titlestrips] Section ============
===============================================

[TitleStrips] AddQuotes

[Titlestrips] Animation

[Titlestrips] Background

[Titlestrips] BGColor

[Titlestrips] CDHeader

[Titlestrips] DefaultAlbumArt

[Titlestrips] FocusColor

[TitleStrips] Font
[Titlestrips] FontColor

[TitleStrips] FontColor

[Titlestrips] FontFocusColor

[TitleStrips] FontSize

[TitleStrips] ForceUpperCaseArtists

[TitleStrips] ForceUpperCaseTitles

[Titlestrips] Height

[Titlestrips] ShadowColor

[TitleStrips] SmallFont
[TitleStrips] SmallFontSize

[Titlestrips] SongsPerStrip

[TitleStrips] TitleFontColor

[Titlestrips] Width

===========================================
============ Control Map Files ============
===========================================
Control map files assign jukebox function to individual keys, joystick
or gamepad buttons and axes, or mouse buttons. For simplicity, this
documentation will simply refer to "keys" whether the input device is
a keyboard, a keyboard encoder, mouse buttons, or a gamepad.

Although it seems backwards to assign a function to a key as opposed to


assigning a key to a function, it allows more than one key to perform a
particular function; this is useful on cocktail-style arcade cabinets,
where more than one set of controls is available. In the default control
map file, CONTROLS.INI, all possible key assignments are shown but only
keys actually in use are required to be present in the file.

If you do not assign a function to a key, that function will not be


available. On a coin-operated jukebox, for example, you would probably
not want to assign the BTN_SKIP and BTN_RADIO functions.

Keyboard Key Names


NOTE: Key names refer to specific, physical keys, not character symbols.
Thus, there is no distinction between an uppercase letter and a
lowercase letter; however, there is a distinction between the number
keys along the top of a keyboard and the number keys on the numeric
keypad.
Alphabetic Keys:
----------------

KEY_A
KEY_B
...
KEY_Y
KEY_Z

Numeric keys (top of keyboard):


-------------------------------

KEY_0
KEY_1
...
KEY_8
KEY_9

Numeric Keypad Keys:


--------------------

KEY_0_PAD
KEY_1_PAD
...
KEY_8_PAD
KEY_9_PAD
KEY_SLASH_PAD
KEY_ASTERISK
KEY_MINUS_PAD
KEY_PLUS_PAD
KEY_DEL_PAD
KEY_ENTER_PAD

Cursor Movement Keys:


---------------------

KEY_LEFT
KEY_RIGHT
KEY_UP
KEY_DOWN
KEY_INSERT
KEY_DEL
KEY_HOME
KEY_END
KEY_PGUP
KEY_PGDN
Function Keys:
--------------

KEY_F1
KEY_F2
...
KEY_F11
KEY_F12

Modifier and Lock Keys


----------------------

KEY_LSHIFT
KEY_RSHIFT
KEY_LCTRL
KEY_RCTRL
KEY_LALT
KEY_RALT
KEY_LWIN
KEY_RWIN
KEY_MENU
KEY_SCRLOCK
KEY_NUMLOCK
KEY_CAPSLOCK

Other Keys
----------

KEY_ESC
KEY_TILDE
KEY_MINUS
KEY_EQUALS
KEY_BACKSPACE
KEY_TAB
KEY_OPENBRACE
KEY_CLOSEBRACE
KEY_ENTER
KEY_SEMICOLON
KEY_QUOTE
KEY_BACKSLASH
KEY_BACKSLASH2
KEY_COMMA
KEY_PERIOD
KEY_SLASH
KEY_SPACE
KEY_PRTSCR
KEY_PAUSE

NOTE: On some keyboards, KEY_PAUSE and KEY_PRTSCR may not work properly.
Joystick and Gamepad Key Names

The jukebox input engine supports up to four joysticks or gamepads in


Windows and two in DOS. Up to 14 buttons can be accessed per stick.
Note that in DOS a standard PC gameport only supports two buttons per
stick.

JOY1_UP
JOY1_DOWN
JOY1_LEFT
JOY1_RIGHT
JOY1_BUTTON1
JOY1_BUTTON2
...
JOY1_BUTTON13
JOY1_BUTTON14

JOY2_UP
JOY2_DOWN
JOY2_LEFT
JOY2_RIGHT
JOY2_BUTTON1
JOY2_BUTTON2
...
JOY2_BUTTON13
JOY2_BUTTON14

JOY3_UP
JOY3_DOWN
JOY3_LEFT
JOY3_RIGHT
JOY3_BUTTON1
JOY3_BUTTON2
...
JOY3_BUTTON13
JOY3_BUTTON14

JOY4_UP
JOY4_DOWN
JOY4_LEFT
JOY4_RIGHT
JOY4_BUTTON1
JOY4_BUTTON2
...
JOY4_BUTTON13
JOY4_BUTTON14

Mouse Button Names


Up to 5 buttons on a mouse are supported. Traditionally, the left button
is button 1, the right button is button 2, and if there is a center
button it is button 3. Only one mouse can be used.

Please note that mouse button 1 is always used for the user interface,
so it should be mapped to a control only if a skin with no clickable
icons is being used; otherwise, clicking the icon will trigger the
function mapped to button 1.
Also, note that in Windows, the button number reported may be modified
by the mouse settings in Control Panel. For example, if the rear
shoulder button on a Microsoft Intellimouse (normally button 4) is set
in Control Panel to act as a standard click (which is normally button
1), it will act as button 1 in DWJukebox.

MOUSE_BUTTON1
MOUSE_BUTTON2
MOUSE_BUTTON3
MOUSE_BUTTON4
MOUSE_BUTTON5

==========================================
============ Acknowledgements ============
==========================================

I would like to thank Javier Gonzales and Delirium Software, who's


libraries make up the core of DWJukebox. Please see
http://nekros.freeshell.org/delirium/index.php for more
information on the useful tools made available by Delirium Software.

Vinyl record image on defcdar2.jpg created at http://www.says-it.com.

Some of the TrueType fonts in this package are from Larabie Fonts at
http://www.larabiefonts.com. See fonteula.txt for font
license information.

This program uses Allegro for all graphics, sound, and user-interface
handling. The Allegro library and source code is available at
http://alleg.sourceforge.net.

This program uses AllegMP3 as its MP3 decoder. AllegMP3 is licensed


under the GNU Library General Public License. The AllegMP3 library
and source code are available at
http://nekros.freeshell.org/delirium/almp3.php.

This program uses AllegOGG as its OGG Vorbis decoder. AllegOGG is


licensed under the Xiph.org BSD-Alike License. The AllegOGG library
and source code are available at
http://nekros.freeshell.org/delirium/alogg.php.

This program uses AllegFont as its TrueType decoder. AllegFont is


licensed under the Freetype Project License. The AllegFont library
and source code are available at
http://nekros.freeshell.org/delirium/alfont.php.

This program uses JPGalleg as its JPG decoder. JPGalleg is licensed


under the zlib/libpng license. The JPGalleg library and source code
are available at http://www.ecplusplus.com/index.php?page=projects&pid=1.

This program uses AllegroPNG as its PNG decoder. AllegroPNG


is licensed under the zlib/libpng license. The AllegroPNG library
and source code are available at http://alpng.sourceforge.net/.

This program uses id3lib as its ID3 decoder. id3lib is licensed


under the GNU Library General Public License. The id3lib library
and source code are available at http://id3lib.sourceforge.net.

==================================
============ Feedback ============
==================================

DWJukebox has become what it is today largely through feedback from its
users. If you have any questions or comments, please visit the official
DWJukebox Support Forum at www.DWJukebox.com/forum,
or feel free to E-mail me at support@dwjukebox.com.

You might also like