This updates only Documentation and log messages.
-configurable audio streaming software
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+configurable audio streaming software:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
para_server streams binary audio data (mp3/ogg files) over
local or remote networks. It contains two built-in streamers:
the http streamer and the ortp streamer.
para_server streams binary audio data (mp3/ogg files) over
local or remote networks. It contains two built-in streamers:
the http streamer and the ortp streamer.
configurable audio file selectors:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
configurable audio file selectors:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- There are three audio file selectors (aka "database tools")
- available:
+ There are three audio file selectors available:
- random
- plm (playlist manager)
- random
- plm (playlist manager)
to retrieve the list of available commands and some server info.
to retrieve the list of available commands and some server info.
-Choose your database tool (dbtool)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-You have two options:
+Choose an audio file selector
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+paraslash has three different audio file selectors: random (default),
+plm (the playlist manager) and mysql.
- 1. Use the mysql dbtool which comes with paraslash and requires
- mysql.
+ The random selector chooses files randomly from the given
+ directory.
- 2. If you can not use the mysql dbtool and you just want
- to quickly make paraslash working, use the random dbtool.
- The directory which is searched for audio files can be given
- via the server option --random_dbtool_dir.
+ The playlist selector allows to send a playlist to para_server
+ via the lpl (load playlist) command. para_server will choose
+ files from the loaded playlist in sequential order.
- Note, however, that this database tool is really dopey. It
- scans the given directory on every audio file change and
- chooses one randomly. There is no further functionality.
+ The mysql selector stores information about your audio
+ files in a mysql database. It is much more involved than
+ the other two selectors and lets you chose files in many
+ interesting ways. If you like to use the mysql selector,
+ read README.mysql and follow the instructions given there.
+ Return to this document when ready.
-The current database tool can be changed at runtime via
+The current audio file selector can be changed at runtime via
- para_client cdt new_dbtool
+ para_client cdt new_selector
-If you have choosen 1. above, read README.mysql and follow the
-instructions given there. Return to this document when ready.
- o new database tool: plm, the playlist manager
+ o new audio file selector: plm, the playlist manager
- o para_server: the dopey file selector is now called "random",
- and it is selected by default. Use the --selector option to
- choose another selector at startup, or the cdt command to switch
- between the supported selectors.
+ o para_server: the dopey selector is now called "random",
+ and is the default selector. Use the --selector option to
+ choose another selector at startup, or the cdt command to
+ switch between the supported selectors.
o X86_64 fixes (thanks to Steffen Klassert)
o X86_64 fixes (thanks to Steffen Klassert)
All senders have the same set of commands that allow to
control the access permissions of the stream.
All senders have the same set of commands that allow to
control the access permissions of the stream.
- para_server needs a "database tool" to work, mainly to
- determine which song to stream next. There are three such
- tools available: random, plm and mysql. The former chooses
- audio files randomly and plm, the playlist manager, can handle
+ para_server needs an "audio file selector" to work, mainly to
+ determine which song to stream next. There are three selectors
+ available: random, plm and mysql. The former chooses audio
+ files randomly and plm, the playlist manager, can handle
playlists. Both are always supported.
playlists. Both are always supported.
- The (optional) mysql database tool connects to a mysql server
+ The (optional) mysql selector connects to a mysql server
which holds information on your audio files. It has several
unusual features, see README.mysql for details.
which holds information on your audio files. It has several
unusual features, see README.mysql for details.
LIMITATIONS:
~~~~~~~~~~~~
LIMITATIONS:
~~~~~~~~~~~~
-The mysql database tool assumes that the basenames of your audio files
-are unique. If this is not the case, don't use this database tool,
-rename your files, or create your own database tool.
+The mysql selector assumes that the basenames of your audio files are
+unique. If this is not the case, don't use this selector, rename your
+files, or create your own one.
README.mysql
============
README.mysql
============
-This file describes how to use the mysql database tool which comes
-with the paraslash package.
+This file describes how to use the mysql audio file selector which
+comes with the paraslash package.
It assumes you have already installed mysql and paraslash as described
in INSTALL, so read README and INSTALL before proceeding.
It assumes you have already installed mysql and paraslash as described
in INSTALL, so read README and INSTALL before proceeding.
-Switch to the mysql dbtool
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+Switch to the mysql audio file selector
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Actually, the mysql database tool should already be selected (just
-ignore the warning about the missing database). To verify that it is
-indeed activated, type
-which prints the name of the current database tool. If the mysql
-dbtool is not selected, try
+prints the name of the current selector. Try
-If this doesn't work either, it means that some required config options
-were not specified (check the log for more info) or that para_server
-was built without mysql support. Type
+to switch to the mysql selector. If this doesn't work, it means that
+some required config options were not specified (check the log for
+more info) or that para_server was built without mysql support. Type
-to find out. If mysql is not mentioned as a supported database tool,
+to find out. If mysql is not mentioned as a supported selector,
you'll have to recompile.
Create a new database
~~~~~~~~~~~~~~~~~~~~~
you'll have to recompile.
Create a new database
~~~~~~~~~~~~~~~~~~~~~
-Once the mysql database tool is selected, create the database:
+Once the mysql selector is activated, create the database:
para_client cdb
para_client cdt mysql
para_client cdb
para_client cdt mysql
-The second command forces para_server to re-init the mysql dbtool.
+The second command forces para_server to re-init the mysql selector.
Check the log. There should not be any warnings or errors.
Check the log. There should not be any warnings or errors.
-prints the list of all files known by the mysql dbtool. If the list
+prints the list of all files known by the mysql selector. If the list
is empty, double check the mysql_audio_file_dir option.
is empty, double check the mysql_audio_file_dir option.
Attribute usage
~~~~~~~~~~~~~~~
Attribute usage
~~~~~~~~~~~~~~~
-An attribute is simply a bit which can be set for each sound file
+An attribute is simply a bit which can be set for each audio file
individually. You may have as many attributes as you like. A new
attribute "test" is created by
individually. You may have as many attributes as you like. A new
attribute "test" is created by
para_client laa
lists all available attributes. You can set the "test" attribute for
para_client laa
lists all available attributes. You can set the "test" attribute for
-the current song by executing
+the current audio file by executing
-or for any particular song by
+or for any particular audio file by
para_client sa test+ filename
para_client sa test+ filename
-You can unset the attribute "test" for the current song with
+Unset the attribute "test" for the current audio file with
-and you can drop the test attribute entirely from the database with
+and drop the test attribute entirely from the database with
para_client da test
Stream usage
~~~~~~~~~~~~
para_client da test
Stream usage
~~~~~~~~~~~~
-A stream is a pair of expressions in terms of attributes and other
-meta data contained in the database. The first, boolian, expression
-determines the set of songs which are permitted in this stream. The
-second, integer, expression determines the order in which permitted
-songs are going to be fed to the audio file sender(s).
+A stream is a pair of expressions in terms of attributes and other data
+contained in the database. The first, boolian, expression determines
+the set of audio files which are admissible in this stream. The second,
+integer, expression determines the order in which admissible files
+are going to be fed to the audio file sender(s).
To create a new stream called "my_stream", put arbitrary many (including
none) accept or deny lines and one or zero score lines into some
To create a new stream called "my_stream", put arbitrary many (including
none) accept or deny lines and one or zero score lines into some
para_client stradd my_stream < tmpfile
para_client stradd my_stream < tmpfile
-adds the stream "my_stream" to dbtool's stream database.
+adds the stream "my_stream" to the table of streams.
If the stream definition is really short, you may also just pipe it to
the client rather than using temporary files. Like this:
If the stream definition is really short, you may also just pipe it to
the client rather than using temporary files. Like this:
- Assume you already have an attribute "test" and you'd like to
- to restrict the set of songs being played to those having the
- "test" attribute set. Define a new stream "only_test" by
+ Assume you already have an attribute "test" and you'd like to
+ to restrict the set of songs being played to those having the
+ "test" attribute set. Define a new stream "only_test" by
echo 'accept: IS_SET(test)' | para_client stradd only_test
echo 'accept: IS_SET(test)' | para_client stradd only_test
only the desired songs are going to be played.
There is no need to keep the temporary files containing the stream
only the desired songs are going to be played.
There is no need to keep the temporary files containing the stream
-definition since you can always query the database to get it back:
+definition since you can always use the strq command to get it back:
para_client strq only_test
para_client strq only_test
-This means that each song's score is just the number of days that went
-by since this song has been played (one day is 1440 minutes). This
-is fine in many cases since the dbtool then always chooses that
-admissible song, which wasn't played for the longest time.
+This means that the score of an audio file is just the number of days
+that went by since it has been played the last time (one day is 1440
+minutes). In other words, the mysql selector choses that admissible
+file which wasn't played for the longest time.
-However, one disadvantage of this scoring sheme is that new songs,
+However, one disadvantage of this scoring sheme is that new files,
once played, are going to be deferred for a possibly very long period
once played, are going to be deferred for a possibly very long period
-depending on the size of your collection of (admissible) songs. Hence
+depending on the size of your collection of (admissible) files. Hence
the following scoring rule comes into mind:
the following scoring rule comes into mind:
-since this gives newer songs, i.e. songs to which you haven't listen to
+since this gives newer files, i.e. files to which you haven't listen to
that often, a higher score than older songs you already know by heart.
You can also use a combination of these two methods:
that often, a higher score than older songs you already know by heart.
You can also use a combination of these two methods:
- score: LASTPLAYED()/1440 - 10 * NUMPLAYED()
+ score: LASTPLAYED()/1440 - 10 * NUMPLAYED()
which subtracts 10 score points for each time paraslash has played
which subtracts 10 score points for each time paraslash has played
-Another useful feature for scoring is due to the fact that "true"
-expands to one and "false" to zero. So you can also use the
-IS_SET/IS_N_SET/NAME_LIKE macros in a score line to give
-your favorite band "bar" some extra points:
+Another useful feature for scoring is due to the fact that
+"true" expands to one and "false" to zero. So you can also use the
+IS_SET/IS_N_SET/NAME_LIKE macros in a score line to give your favorite
+band "bar" some extra points:
score: 40 * IS_SET(foo) + 20 * NAME_LIKE(%bar%) + LASTPLAYED()/1440
score: 40 * IS_SET(foo) + 20 * NAME_LIKE(%bar%) + LASTPLAYED()/1440
-dbtool can also magage images that, when associated with certain songs,
-can be displayed by para_sdl_gui and para_krell when one of these songs
-is playing. It is also possible to just retrieve the current image via
+The mysql selector can also magage images that, when associated
+with one or more audio files, can be displayed by para_sdl_gui and
+para_krell. It is also possible to just retrieve the current image via
para_client pic > filename
para_client pic > filename
.name = "cdt",
.handler = com_cdt,
.perms = DB_READ | DB_WRITE,
.name = "cdt",
.handler = com_cdt,
.perms = DB_READ | DB_WRITE,
-.description = "change database tool",
-.synopsis = "cdt [name_of_new_dbtool]",
+.description = "change the current audio file selector",
+.synopsis = "cdt [new_selector]",
-"Deactivate current dbtool and activate name_of_new_dbtool. If no\n"
-"argument was given, print the current database tool.\n"
+"Shutdown the current selector and activate new_selector. If no\n"
+"argument was given, print the name of the current selector.\n"
*handler = para_strdup("para_server"); /* server commands */
return cmd;
}
*handler = para_strdup("para_server"); /* server commands */
return cmd;
}
- /* not found, look for dbtool commands */
+ /* not found, look for commands supported by the current selector */
mmd_lock();
if (handler)
*handler = make_message("the %s database tool", dblist[mmd->dbt_num].name);
mmd_lock();
if (handler)
*handler = make_message("the %s database tool", dblist[mmd->dbt_num].name);
/** shut down non-authorized connections after that many seconds */
#define ALARM_TIMEOUT 10
/** shut down non-authorized connections after that many seconds */
#define ALARM_TIMEOUT 10
-/* these are exported to afs/command/dbtool */
+/* these are exported to afs.c. command.c and to all selectors */
struct misc_meta_data *mmd;
/** the configuration of para_server
*
struct misc_meta_data *mmd;
/** the configuration of para_server
*
- * It also contains the options for all database tools and all supported
+ * It also contains the options for all audio file selectors and all supported
* senders.
*/
struct gengetopt_args_info conf;
* senders.
*/
struct gengetopt_args_info conf;
extern void ortp_send_init(struct sender *);
extern struct audio_format afl[];
extern void ortp_send_init(struct sender *);
extern struct audio_format afl[];
-/** the list of supported database tools */
+/** the list of supported audio file selectors */
struct dbtool dblist[] = {
{
.name = "random",
struct dbtool dblist[] = {
{
.name = "random",
for (i = 0; dblist[i].name; i++) {
if (strcmp(dblist[i].name, conf.selector_arg))
continue;
for (i = 0; dblist[i].name; i++) {
if (strcmp(dblist[i].name, conf.selector_arg))
continue;
- PARA_NOTICE_LOG("initializing %s database tool\n",
+ PARA_NOTICE_LOG("initializing %s audio file selector\n",
dblist[i].name);
ret = dblist[i].init(&dblist[i]);
if (ret < 0) {
dblist[i].name);
ret = dblist[i].init(&dblist[i]);
if (ret < 0) {
mmd->dbt_num = i;
return;
}
mmd->dbt_num = i;
return;
}
- PARA_WARNING_LOG("%s", "falling back to the random dbtool\n");
+ PARA_WARNING_LOG("%s", "falling back to the random selector\n");
random:
mmd->dbt_num = 0;
dblist[0].init(&dblist[0]); /* always successful */
random:
mmd->dbt_num = 0;
dblist[0].init(&dblist[0]); /* always successful */
return;
}
/* init failed */
return;
}
/* init failed */
- PARA_ERROR_LOG("%s -- switching to the random dbtool\n", PARA_STRERROR(-ret));
+ PARA_ERROR_LOG("%s -- switching to the random selector\n", PARA_STRERROR(-ret));
dblist[0].init(&dblist[0]);
mmd->dbt_num = 0;
}
dblist[0].init(&dblist[0]);
mmd->dbt_num = 0;
}
close_log(logfile); /* gets reopened if necessary by parse_config */
logfile = NULL;
parse_config(1); /* reopens log */
close_log(logfile); /* gets reopened if necessary by parse_config */
logfile = NULL;
parse_config(1); /* reopens log */
- mmd->dbt_change = mmd->dbt_num; /* do not change dbtool */
- handle_dbt_change(); /* force reloading dbtool */
+ mmd->dbt_change = mmd->dbt_num; /* do not change selector */
+ handle_dbt_change(); /* reload selector */
}
static void status_refresh(void)
}
static void status_refresh(void)