AutoKDJ Technical Specification
From AutOKwiki
AutoKDJ acts as the server backend for the autOK karaoke system.
Combined with Nullsoft Winamp, AutoKDJ acts as a webserver, and exposes new "Views" in the Winamp Media Library, and performs a number of other miscellaneous features.
Contents |
Background
AutoKDJ is based upon an open source project called ml_www, which is a Winamp plugin that turns Winamp into a webserver and allows people to view and enqueue songs in the Winamp Media Library. This plugin was chosen as a base for the AutoKDJ project in order to support a kiosk based enqueueing system.
Webserver Features
This section describes the features of the webserver aspect of AutoKDJ.
Original ml_www Features
The AutoKDJ plugin faithfully supports all of the webserver features from the original ml_www plugin, as of ml_www version 0.6.0 alpha 3.
This allows a customer to completely replace ml_www with AutoKDJ and still be able to quickly switch to the exact same functionality they used with the original plugin.
Some of this functionality is modal, meaning you need to turn off a karaoke specific "option" before it goes back to the original ml_www mode of operation. This option is in the plugin's configuration panel:
- Playlist Mode Panel
- Show Playlist in Karaoke Mode
Updated Playlist Page
The original playlist page is updated to run in a mode that works well in a karaoke venue, as a way to show customers what songs are on the queue, and a way to reassure them that they will sing before the bar closes.
When Show Playlist in Karaoke Mode is enabled, the playlist shows:
- The number of times the singer has sung that night
- The current rotation index of the song
- How much time is left before a given song begins (optional)
The (optional) items may be switched off in the Configuration panel. It has been found that in some venues, knowing how much time is left can be "too much" information. Interestingly, many people are not happy about the idea of waiting over an hour to come up, but seem perfectly happy to wait 20 songs, which is roughly the same amount of time.
Karaoke Customer Page
This page exposes a web form that allows customers to enqueueing songs with karaoke rotation in mind.
Karaoke Rotation Page
This page is for displaying rotation.
Karaoke Combo Page
This page combines the rotation and playlist page.
Karaoke Songbook Page
This page displays a karaoke songbook based on media library content, sorted either by artist or title.
Media Library Features
This section describes the features of the webserver aspect of AutoKDJ.
AutoKDJ exposes its own tree of "views" in the Media Library. Each "view" shows the state and gives the KDJ control of the AutoKDJ features from a certain perspective. The intent of the design is to show logical state for a large scale function that the KDJ may be doing at any time.
There 1 main view and 5 sub-views in the AutoKDJ Media Library plugin.
The Main View contains branding and credit information.
The Song Entry View contains controls for enqueueing songs with karaoke rotation support.
The EZ Song Entry View contains controls for enqueueing songs in a simplified manner.
The Playlist View shows and contains control for the playlist with Karaoke specific indicators and functions.
The Ticket View shows and contains control for ticket authentication.
The Online Karaoke View shows and contains control for purchasing karaoke content.
More details on each view is below.
Main View
This view serves as an "About" box, containing branding and credits with hyperlinks.
Song Entry View
This media library view is for enqueueing songs with karaoke rotation in mind.
Song List
The Song List contains a list of all songs in the media library, or songs that are "filtered" (see below).
The list is a series of columns, each containing common attributes of a given song (artist, title, etc). This list may be sorted by Artist, Title, or other attributes quickly by just clicking on a column header.
The act of double clicking on a given song will cause an enqueue action to happen. If the singer's name field (see below) has been filled in, the song is enqueued right away. If it has not been filled, a dialog box is presented that allows the KDJ to fill in the singer's name.
Song Filtering
The Song List contains song list filtering features. This is necessary as song lists tend to be very very large (thousands of songs) and scrolling through them is time consuming.
The Song List can be "filtered" in two ways.
The first level of filtering is controlled by the right-click menu of this view. With this menu, the KDJ can filtering songs in the media library by content type. It can be used to have the Song Entry view show plain audio files, plain video files, or "karaoke" files, or any combination.
The second level of filtering is controlled by a number of controls. The first control is a "search" field, which acts as a "search as you type (SAYT)" filtering of songs. In the interest of rapid searching, the search field invokes a search of all aspects of the song (artist, title, album, etc) so that the KDJ can very quickly get to a song for which they are searching without needing to think too much or operate more specific controls. The second control is a History button, which will cause a search for only songs that are in the given singer's history. This control is only exposed when the KDJ has typed a singer's name into the Singer Name field (see below). The third control is a Favorite button, which will cause a search for only the song that has the most occurences in the singer's history. These three controls are mutually exclusive, only one may be used at any given time.
Informational Message
The Song Entry view contains a message which has three pieces of information. One is the current version of the plugin. The second is the number of songs before a show is sold out. The third is the current singing rotation of the karaoke show.
Enqueueing Buttons
The Song Entry view has several enqueueing buttons.
There is a standard enqueue button, which is active if the KDJ has typed a singer's name into the Singer Name field (see below), and has selected a song in the Song List. Upon pressing this button, a given song becomes enqueued according to the rules of rotation.
There are also three "Kamakaze" enqueueing buttons. A Kamakaze button is used when a singer doesn't know what they want to sing, so a song is chosen for them.
There are three "Kamakaze" buttons available. Random in list, which picks any song that happens to be present in the Song List at any time. Random in History, which picks a song that happens to be present in the singer's history. Note this button is only exposed if the KDJ has typed a singer's name into the Singer Name field (see below). Favority in History, which picks a song that has the most number of occurances in the singer's history. Note thils button is only exposed if the KDJ has typed a singer's name into the Singer Name field (see below).
Singer Name and UID
There are two fields, for both Singer Name and Singer UID. Both fields work in tandem, meaning entering a UID automatically enters a singer's name if present, and entering a name automatically enters a singer's UID if present. The singer UID button is only active if there is a singer-UID correlation file present in the Venue settings folder.
If the Singer Name field is not filled in, certain features won't work, and an attempt to do a Karaoke enqueue causes the Singer Name dialog box to pop up, requiring the KDJ to enter a name. A song may not be enqueued in this view at all without a Singer Name.
Pitch and Tempo
The Pitch and Tempo fields are only active if a valid Pitch and Time Changing Plugin is installed and present on the system. If active, the KDJ may choose to enter a key offset value or a time factor value into this field. Doing so will make it so those values are applied to the Pitch and Time Changing plugin immediately before the song actually starts playing.
Realtime Pitch Correct
The Realtime Pitch Correct fields are only active if a valid Pitch and Time Changing Plugin is installed and present on the system and if there is a song playing at the time. If active, the KDJ may choose to enter a key offset value. Doing so will instantaneously change the pitch correction value of the song being played. This behaves exactly like pitch correcting buttons found on classic Karaoke players.
Configure
This button brings up the Configuration Panel.
Refresh
This button refreshes the state of this dialog box. This action is necessary upon certain actions, such as updating the # of songs before sold out message and refreshing the Song List when songs have been added or removed from the Media Library.
EZ Song Entry View
This media library view is for running the simplest, most braindead karaoke enququeing system imaginable. Its purpose is to allow a less sophisticated KDJ using a machine that has autoKDJ installed to run a manual rotation they way they always have, but still use the same content.
Playlist View
This media library view is for displaying the playlist with karaoke and rotation information, and manipulating the playlist in ways that make sense for a karaoke venue.
Ticket View
This media library view is for displaying a list of expired tickets
Online Karaoke View
This media library view is for online karaoke song purchasing and downloading
Bad File View
This media library view is for showing files that were Noted as being Bad through the Song Entry view. It also offers an option to "reinstate" a bad file.
If the configuration is such that Noting a bad file also removes it from the Media Library, then reinstating a bad file in this view will add it back to the Media Library.
This view is only available in V1.0 RC1 or greater.
Miscellaneous Features
The following are other miscellaneous features that autOKdj supports.
Karaoke Sessions
A Karaoke Session is a "snapshot" of the entire state of a karaoke show at any particular moment.
Karaoke Sessions may be loaded and saved at any time. With this, you could for example, save the session, restart Winamp, and open the session. As a result, Winamp and AutoKDJ will be fully restored to the previous state, as if you had never shut down Winamp in the first place.
The most practical application for Karaoke Sessions right now is a safety net. If a problem happens with Winamp, or if you are forced to reboot your system, or if you want to install new software in the middle of a show, you can use the Session feature to save the show and restore it later.
Once a Karaoke Session is reloaded, the wait times are normalized to the time the session was loaded. This means the song that was queued earliest is reset to waiting for 0 seconds after the session loads, and all other wait times are offset from that time.
NOTE: If you re-import your files into Winamp, or re-index previously existing songs in the Media Library, reloading a session may not work properly. Also, Karaoke Session files are intended to be loaded on the PC on which the Session files were saved, not for transferring to another machine and loaded there.
Automatic Karaoke Customer Rotation
Built in parametric karaoke customer rotation algorithm
Customer Centric Playlists
Mechanism to enqueue songs with a customer's name, and display the customer's name as the artist
Ticket Authentication
Mechanism to authenticate purchased song tickets
Customer UID Matching
This briefly describes the supported mechanism to correlate user unique IDs to friendly names and avatars available on the Internet.
The current database implementation is a simple a text file called "akdjuser.txt". This file is located in the Venues/VENUENAME folder on the server, where VENUENAME is the Venue Name set in in the configuration panel.
The text file is a series of single lines with this information:
UID,Name in Venue,Online Login,Avatar Link
UID is just an integer serving as a unique value for a given person at a given venue. It would also be the value of the TICKETID portion of a User Ticket.
Nave in Venue is the name a person prefers to use inside the venue. This is what gets displayed in all publically visible software.
Online ID is the login that a user would have for accessing their data online.
Avatar Link is an http link that points to a picture.
A practical example follows:
1,Mike G,ZuGzUg,http://www.7bamboo.com/cms/files/pictures/picture-7.jpg
When properly formatted, the server is sensitive to this additional information, displays images in the playlist screens, and allows enqueueing using singer tickets.
Customer Song History Tracking
Personal Song Selection
Random and customer history based song enqueueing
Karaoke Songbook Exporting
SHOUTcast title pushing
The AutoKDJ plugin supports pushing the song titles that are being played by Winamp to a SHOUTcast server.
The reason this was added had to do with the way the 7 Bamboo Karaoke Lounge implements video broadcasting of karaoke performances.
In that venue, the main KDJ machine runs Winamp, and a second machine encodes video data that is captured by a web camera and audio data that is captured by a sound card, and encodes that data and sends it to the SHOUTcast server.
This secondary machine is not aware of the titles of songs, because it is not the one running Winamp. So for the SHOUTcast server to receive song titles, some other entity that was aware of song titles is needed to push song titles to the SHOUTcast server, so that titles would update along with video performances.
Of course, the only machine that is aware of song titles is the one that is running Winmap with the autOKdj plugin. For this reason, and for general convenience, the feature was added to the autOKdj plugin itself.
The basic requirements of this feature are:
- Able to turn on and off the feature at will
- Easily configurable by anyone who is familiar with SHOUTcast technology
- Low overhead, in that it can't disrupt the karaoke CDG or audio rendering
This feature is implemented in the plugin, and configured with the autOKdj control panel in a separate tab called "SHOUTcast Title Push". This control panel has the user enter:
- The IP address and port number of to the SHOUTcast server
- The password that entitles the sender to change the title
- The URL of the website that represents the content
If invalid data is entered into any of these fields (out of range value in an IP address, malformed URL, etc) the UI tells the user immediately.
If all fields contain valid data, a fully formed title push URL is visible in a read-only field. Anyone who is well versed in SHOUTcast technology should right away recognize the URL format and validate that it works. That URL can also be copy/pasted into a web browser, which proves to be a nice way to test the URL to make sure it is complete. A typical SHOUTcast title push URL has the following format:
If the SHOUTcast title push feature is turned off, the settings of the other fields are still remembered, so that the on/off feature works like a toggle rather than forcing the user to re-enter data.
Configuration Panel
The following are descriptions of the customized Configuration settings.
Playlist Mode Pane
As compared to the original ml_www, the Playlist Mode pane now has the following additional options:
Show Playlist in Karaoke Mode
Shows playlist in Karaoke Customer Mode.
- If ticked, the left.html playlist shows the number of songs until closing, and song titles say how many minutes before the song starts.
- If unticked, left.html looks exaxctly the way it does in the classic ml_www.
Number of Songs to Show
Limits the number of songs displayed on the Playlist, if the playlist is shown in Karaoke Mode. This is put in to
give the KDJ more control over what customers see and don't see. Option is disabled if Karaoke Mode is off. A value of 0 means "no limit."
Singer Hyperlink
A text substitution string, designed to make it so if a singer has a known online identitity, the left.html song title is
a hyperlink to the user's public page. Format of this string should be http://{url}/{some text}%s{other text} where %s contains the location in the URL where the online ID goes. Example:
http://www.7bamboo.com/modules.php?name=Your_Account&op=userinfo&username=%s
Avatar Hyperlink GIF
The location of avatars that are GIF format. This is to be used with a user ID lookup database, which has yet to be defined.
Avatar Hyperlink Non-GIF
The location of avatars that are NOT in GIF format. This is to be used with a user ID lookup database, which has yet to be defined.
Allow Avatars
Says whether to permit the display of avatars. Issues in internet access may prevent this feature from working properly.
Show Repeat
Says whether to permit display of the singer repeat value. You may or may not want to show this information, depending on the feelings of your customers.
Show Time Remaining
Says whether to permit display of the times waiting to sing. You may or may not want to show this information, depending on the feelings of your customers.
Karaoke Mode Pane
Closing Time
Sets the time the Karaoke show closes. This is used to formulate messages saying number of songs until closing. This is hour : minute, 24-hour based, i.e.
0:30 is 12:30 AM
Never Closes
Tick this if you don't want closing time enforcement.
Venue Name
Custom text for the venue name, that appears in the Karaoke customer web page, as well as the Venue specific folder in the persistent settings area {Winamp Root}/Plugins/Venues
Max Singer Repeat
This sets the maximum number of songs any one singer can have on the playlist at any time. A value of 0 means there is no
maximum.
Global Tempo Adjust
This allows the lengthen or shorten the time of all songs in the playlist by a certain percentage.
Uses Paid System
Hint to advise AutoKDJ to put in a -!$- flag in the song title. This gives the Human KDJ a hint on who paid and who didn't, in an environment where customers queue their own songs.
Skip Unpaid Songs
If venue Uses Paid System (above), and if this option is ticked, then any song that is unpaid will be skipped.
Enable Crash Recovery Features
This is a measure to allow the KDJ to recover in the event Winamp crashes. As this is Beta software it is sort of necessary, but may impact performance.
If set, the Winamp.m3u is updated every time a new Karaoke song is queued, also temporary data is periodically saved in various data files.
Upon running Winamp after a crash, the Winamp.m3u is automatically reloaded and the temporary data is restored.
Clear Playlist Upon Winamp Close
This setting may be used to override the behavior of Winamp in favor of crash recovery.
- If ticked, this will delete the winamp.m3u file under the Winamp folder when Winamp closes normally. This defeats the Winamp "feature" of automatically remembering the playlist upon restart.
- If unticked, all karaoke state is preserved upon next run of Winamp, but only when there are still singers on the queue.
This option is OFF by default. Note this operation ONLY happens if at least one song was queued through the Karaoke panel.
Stop Playlist Upon Last Custom CDG
If ticked, Winamp will unconditionally stop when it hits the last song with title "CustomCDG".
This prevents overrun when KDJ is potentially distrated looking at another video output.
Generate Rotation Debug File
If ticked, this will create a debug text file which may be used to analyze the rotation algorithm behavior.
Use Standby Queue
This allows a KDJ to enqueue songs that will exceed the closing time limit, allowing for people to reserve space for themselves in the event people with songs on the queue leave.
If ticked, enables a new enqueueing feature called standby mode. When in standby mode, controls do not lock out after Sold Out, instead, an enqueue after Sold Out presents a warning to the KDJ as a popup. Also, a song enqueued after Sold Out will not auto-play, the KDJ must decide to play each song. Also, left.html clearly distinguishes singers in Standby. Also, if someone cancels, songs that were previously enqueued in Standby get upgraded to a normal queue, based on available time before sold out.
New Singers Preferred In Rotation
- If ticked, new singers will sing before repeat singers in the current rotation, and then will follow proper rotation order in the subsequent rotation. This is the default.
- If unticked, new singers will always follow proper rotation order.
Remove Noted Bad Files From Media Library
If checked, upon noting a bad file, the file is removed from the media library. This option is OFF by default. This does NOT cause the files themselves to be deleted.
Maximum Customer Wait Time
This shows hour : minute format, specifying the longest that any customer should ever wait to sing their next song. What it really does is it prevents FIRST time customers from cutting in front, if that much time has elapsed since the customer's song was queued. Note this only applies to the next song that a singer is scheduled to sing, it does not apply to any subsequent songs that the same singer may have queued up, until such time as the previous song
has been performed.
The value 0 : 0 means there is no such maximum time.
Dynamic Song Queue Lock
This lets the KDJ automatically "lock" a certain number of songs at the beginning of the song queue, if the queue exceeds a certain amount. Both amounts can be configured. Basically, this mitigates customer frustration that may happen when a repeat singer who is close to singing gets pre-empted by a first time singer. The values 0 and 0 mean turns this scheme off.
Relative Song Queue Lock
This lets the KDJ automatically "lock" a certain percentage of songs from the beginning of the song queue. Similar to the above Dynamic Song Queue Lock, this mitigates customer frustration that may happen when a repeat singer who is close to singing gets pre-empted by a first time singer. But unlike Dynamic Song Queue Lock, this locking automatically scales based on the length of the list. (within 25% means the 1st of 4 entries is locked, or the first 2 of 8 entries, or the first 4 of 16 entries... etc)
Note round-offs result in a person not being locked. For example, when set to 20%, the first 2 of 9 entries is not locked (20% of 9 is 1.8, not 2 whole people, so only the first entry is locked), but the first 2 of 10 entries would be locked (20% of 10 is 2, or 2 whole people, so they are both locked)
The value 0 turns this scheme off.
The value of 100 effectively turns off all rotation rules, and converts AutoKDJ into a first-come first-serve system.
Values greater than 100 are treated as if they were the value 0.
Ticketing
These options are here in support of features that allow customers to queue their own songs using a ticketing system. Details of how this works are not yet complete or disclosed.
Show CD-ID
If checked, shows the CD-ID in songbooks served or exported. If not checked, CD-ID columns in songbooks are omitted.
Strip "The" From Artist Names
If ticked, the word "The" will be omitted in songbooks served or exported when used in an Artist Name with "The" prepended ("The Beatles" becomes "Beatles") or appended ("Beatles, The" becomes "Beatles")
Default is off.
ShoutCast Pane
The ShoutCAST pane is for configuring the SHOUTcast title push feature.
Webserver Remote Control Interface
The AutoKDJ plugin uses the ml_www webserver allow for remote control or kiosk application such as autOKfe. The general format is that you are sending HTTP GET to karaoke.txt, rather than karaoke.html in various formats to do various things.
This full specification is only available with V1.00 RC1 or greater of the plugin.
Welcome Message
http://{server}/karaoke.txt
Data is returned in the following format:
WELCOME : DISP: Welcome to AutoKDJ
If this doesn't work, nothing will. Good test to see if the server is up.
Query Configuration
http://{server}/karaoke.txt?query=?CONFIG
This will return data in the format:
CONFIG : VENUENAME: AutoKDJ VENUE UID: CLOSING TIME: 1:30 TICKETING USED: 0 TICKETING ENFORCED: 0 MAX SINGER REPEAT: 0 USE STANDBY QUEUE: 0 AUTO START: 1 KEYCHANGE LOWER LIMIT: -12 KEYCHANGE UPPER LIMIT: 12 TEMPO LOWER LIMIT: -50 TEMPO UPPER LIMIT: 100
Songs Before Closing
http://{server}/karaoke.txt?query=?NUMSONGSTOCLOSE
The server will return a computed value suggesting the number of songs available until closing time. The result will be in the following TEXT format:
CLOSEMSG : DISP: NOTE: There are approximately 128 songs left until we are sold out. VAL : 128
Note the KDJ can configure the server to "never close". In this case the text will be:
CLOSEMSG : DISP: VAL : 4294967295
Ticket Validation
Ticket validation is only necessary if the Config indicates that Ticketing Used is in effect. This message allows you to verify that a ticket is good without actually using the ticket.
http://{server}/karaoke.txt?query=?VALIDATE ?TICKET_VENUEID=12345678 _TICKETPURP=00 _TICKETID=9ABCDEF0
- The numbers following VENUEID= are digits 3 through 10 on the Song Ticket.
- The numbers following TICKETPURP= are digits 1 through 2 on the Song Ticket.
- The numbers following TICKETID= are Digits 11 through 18 on the Song Ticket.
The server will return with one of the following two replies in text format:
AUTHENTICATION : STATUS: NOT VALID DISP: One or more of your tickets is not valid. Please see the KDJ for assistance.
This reply means the ticket is not valid.
AUTHENTICATION : STATUS: VALID
This reply means the ticket is valid.
Previous Singer List
http://{server}/karaoke.txt?query=?PREVIOUSSINGERLIST
The server will return the following TEXT format:
SINGER:
DISP: Mike
HTML: Mike
URL : Mike
{random data}
SINGER:
DISP: Karen & Jacob
HTML: Karen & Jacob
URL : Karen%20%26%20Jacob
{random data}
Each unique singer will begin with the SINGER: header.
- DISP: shows what should be displayed on the AutoKDJ screen.
- HTML: shows text that is safe to put into an HTML page. (May not be accurately depicted above)
- URL : shows text that is safe to enter into a URL, and that should be used in followup messages.
Validate Singer
http://{server}/karaoke.txt?query=?ADDUSER+"{URL Friendly Text Name Here}"
It is important to note that the FE will have to do a URL encode of the text data before sending it to the server. A simple URL encoding algorithm already exists in the AKDJ back end, and can be provided if necessary.
If it is OK for this name to be used at this time, you will receive a response saying:
AUTHENTICATION : STATUS: VALID
Otherwise, the FE will receive a response saying:
AUTHENTICATION : STATUS: NOT VALID DISP: You may not enter a song at this time. Please see the KDJ for assistance.
Validate Singer by User ID
http://{server}/karaoke.txt?query=?SELECTUSER ?TICKET_VENUEID=12345678 _TICKETPURP=01 _TICKETID=9ABCDEF0
- The numbers following VENUEID= are digits 3 through 10 on the User Ticket.
- The numbers following TICKETPURP= are digits 1 through 2 on the User Ticket
- The numbers following TICKETID= are Digits 11 through 18 on the User Ticket.
If this is a valid user ID, the post will return the following data in TEXT format:
USERID : STATUS: VALID DISP: Mike G ONLINE : ZuGzUg SANG: 0 INQUEUE: 0 LASTROTATION: 0 ROTATIONIDX: 0
If this is not a valud user ID, the post will return the following data in TEXT format:
USERID : STATUS: NOT VALID DISP: This User ID card is not recognized. Please use one of the other fields, or see the KDJ for assistance.
Search for Song
http://{server}/karaoke.txt?query={URL safe version of a ml_www mlQueryStruct.query field}
Examples:
To search for "Artist LIKE Cars":
http://{server}/karaoke.txt?query=?artist%20LIKE%20%22Cars%22
These URLs are IDENTICAL to those that are generated using the normal ml_www page. The only exception is the fact that you are now using karaoke.txt as the page name.
All entries that match that criteria will be returned to the terminal in TEXT format. For each entry, the Song Title, Song Original Artist, Album Name, Track Number, a "Song Already Sung" Flag, a Media Library Index, and a Hash Code are returned.
SONGQUERY :
RES : 3
SONG :
ARTIST: Cars
TITLE : You Might Think
CD-ID : 158-5
INDEX : 2
HASH : 2323299893
PLAYED: 0
{random data}
SONG :
ARTIST: Cars
TITLE : Shake It Up
CD-ID : 1-5
INDEX : 7
HASH : 3451863199
PLAYED: 0
{random data}
SONG :
ARTIST: Cars
TITLE : Tonight She Comes
CD-ID : 15-5
INDEX : 12
HASH : 175535374
PLAYED: 0
{random data}
Note RES : indicates the number of results to expect. If there are 200 or more results, there will be a + after the value, i.e.
RES : 200 +
All values displayed are decimal (base 10) values.
Search for Song by CD-ID
http://{server}/karaoke.txt ?query=?ALBUM+%3D%3D+%22158%22+AND+TRACKNO+%3D%3D+%2211%22
The significance of this post is a query for CD-ID.
The text in bold needs to be substituted by the application, all other text may remain as it is, verbatim.
If found, the server will respond with a post in the following TEXT format, indicating the Song Title, Song Original Artist, a "Song Already Sung" Flag, Album Name, Track Number, the Media Library Index, and a Hash Code for the song.
SONGQUERY :
RES : 1
SONG :
ARTIST: Metallica
TITLE : Enter Sandman
CD-ID : 158-11
INDEX : 1
HASH : 346893681
PLAYED: 0
{random data}
Song Enqueue
http://{server}/karaoke.txt?query=?ENQUEUE?USER={URL SAFEUSERNAME} ?song={library index}_{hash code} ?TICKET_VENUEID=12345678 _TICKETPURP=00 _TICKETID=9ABCDEF0 ?KEYCHANGE=-3 ?TEMPOCHANGE=25
{URL SAFE USERNAME} is the data that was in the URL : portion of the Name of a Repeat Customer. For New Customers, this needs to be generated in a URL safe manner.
The significance of the numbers is:
- {library index}_{hash code} returned from the previous Song Query.
- Number following VENUEID= is digits 3 through 10 on the Song Ticket
- Number following TICKETPURP= is digits 1 through 2 on the Song Ticket
- Number following TICKETID= is digits 11 through 18 on the Song Ticket
- Number following KEYCHANGE= is for changing the key of the song, from -12 to +12 (semitones)
- Number following TEMPOCHANGE= is for changing the tempo of the song, from -50 to 100 (percent faster)
If upgrades were purchased, each ticket should be presented in succession, i.e.:
http://{server}/karaoke.txt?query=?ENQUEUE?USER={URL SAFE USERNAME} ?song={library index}_{hash code} ?TICKET_VENUEID=12345678 _TICKETPURP=00 _TICKETID=9ABCDEF0 ?TICKET_VENUEID=12345678 _TICKETPURP=00 _TICKETID=9ABCDEF1
If the user selected their name from a User ID card, the URL is the same, except the ?USER section is replaced with the ticket info
http://{server}/karaoke.txt?query=?ENQUEUE ?song={library index}_{hash code} ?TICKET_VENUEID=12345678 _TICKETPURP=01 _TICKETID=00000002 ?TICKET_VENUEID=12345678 _TICKETPURP=00 _TICKETID=9ABCDEF0
Note this is just a concatenation of tickets, but one of those tickets is a User ticket instead of a Song ticket.
If *any* of the tickets are not authentic or invalid, a page in TXT format containing an error message will be returned to the client.
AUTHENTICATION : STATUS: NOT VALID DISP: One or more of your tickets is not valid. Please see the KDJ for assistance.
Otherwise the result will be:
AUTHENTICATION : STATUS: VALID
Playlist
http://{server}/left.txt
Note this is not karaoke.txt, since we are using the ml_www left.html format here.
Result will be:
VNAM: AutoKDJ Karaoke Customer Song List SDLN: We have room for another 71 singers! LEN : 8 Singers SONG: Singer - Song STAT: Now Singing! TIME: [0:00] SONG: Singer - Song SONG: Singer - Song SONG: Singer - Song SONG: Singer - Song SONG: Singer - Song SONG: Singer - Song
