Support config-file relative sample paths.
authorStefan Westerfeld <stefan@space.twc.de>
Fri, 26 Nov 2010 18:22:51 +0000 (19:22 +0100)
committerStefan Westerfeld <stefan@space.twc.de>
Fri, 26 Nov 2010 18:22:51 +0000 (19:22 +0100)
TODO
docs/jacksampler.1
docs/jacksampler.1.doxi
src/jacksampler.cc

diff --git a/TODO b/TODO
index 57632bf..cb2bae5 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,5 +1,4 @@
 JackSampler 0.0.2:
-- relocatable samples
 
 - make release time and release delay time instrument specific
 - use a better resampling algorithm
index 5c225e1..6735abe 100644 (file)
@@ -1,13 +1,13 @@
 .\" generator: doxer.py 0.6
-.\" generation: 2010-06-16T13:49:32
-.TH "JackSampler" "1" "Wed Apr 19 00:50:37 2006" "jacksampler-0.0.2" "JackSampler Manual Page"
+.\" generation: 2010\-11\-26T19:13:58
+.TH "JackSampler" "1" "Wed Apr 19 00:50:37 2006" "jacksampler\-0.0.2" "JackSampler Manual Page"
 
 .SH
 NAME
 
 
 .PP
-jacksampler - A JACK based sampler
+jacksampler \- A JACK based sampler
 .SH
 SYNOPSIS
 
@@ -31,7 +31,7 @@ the active instrument using the keyboard while JackSampler runs. For
 each instrument, an ascii based configuration file determines which
 sample is played for which note. JackSampler chooses the nearest sample
 if no exact match can be found, and plays that sample slower or faster
-so that the sample will have the right frequency which corrsponds to the
+so that the sample will have the right frequency which corresponds to the
 midi note.
 .br
 
@@ -41,19 +41,25 @@ for samples, looking like this:
 .br
 
 .br
-sample 24 grand-piano/c1a.wav 
+sample 24 grand\-piano/c1a.wav
 .br
 
-sample 31 grand-piano/g1b.wav 
+sample 31 grand\-piano/g1b.wav
 .br
 
-sample 36 grand-piano/c2.wav 
+sample 36 grand\-piano/c2.wav
 .br
 
 ...
 .br
 
 .br
+For relative paths, files are assumed to be in the same directory the
+config file is stored in; for absolute paths, the full path is used
+for loading the sample.
+.br
+
+.br
 There are two additional configuration parameters; one is the time
 jacksampler uses to fade out the sample on note release in milliseconds.
 A configuration entry could look like this:
@@ -101,7 +107,7 @@ Show status information.
 .TP
 \fBr\fP, \fBreset\fP 
 .br
-Reset all voices (release all notes) - this command may click.
+Reset all voices (release all notes) \- this command may click.
 
 .TP
 \fBq\fP, \fBquit\fP 
index 8e429f2..f03b22d 100644 (file)
@@ -23,17 +23,21 @@ jacksampler - A JACK based sampler
         each instrument, an ascii based configuration file determines which
         sample is played for which note. JackSampler chooses the nearest sample
         if no exact match can be found, and plays that sample slower or faster
-        so that the sample will have the right frequency which corrsponds to the
+        so that the sample will have the right frequency which corresponds to the
         midi note.
 
         For each instrument, a configuration file can contain multiple entries
         for samples, looking like this:
 
-        sample 24 grand-piano/c1a.wav @*
-        sample 31 grand-piano/g1b.wav @*
-        sample 36 grand-piano/c2.wav @*
+        sample 24 grand-piano/c1a.wav@*
+        sample 31 grand-piano/g1b.wav@*
+        sample 36 grand-piano/c2.wav@*
         ...
 
+        For relative paths, files are assumed to be in the same directory the
+        config file is stored in; for absolute paths, the full path is used
+        for loading the sample.
+
         There are two additional configuration parameters; one is the time
         jacksampler uses to fade out the sample on note release in milliseconds.
         A configuration entry could look like this:
index b2634e8..c09ea4a 100644 (file)
@@ -359,6 +359,12 @@ JackSampler::parse_config (const Options& options, int instrument, const char *n
 {
   MicroConf cfg (name);
 
+  // this is used to search sample files in the directory the config file is stored in
+  // (except for absolute paths)
+  char *config_dir_str = g_path_get_dirname (name);
+  string config_dir = config_dir_str;
+  g_free (config_dir_str);
+
   while (cfg.next())
     {
       int    note = 0;
@@ -367,6 +373,8 @@ JackSampler::parse_config (const Options& options, int instrument, const char *n
 
       if (cfg.command ("sample", note, file))
         {
+          if (!g_path_is_absolute (file.c_str()))
+            file = config_dir + "/" + file;
          if (load_note (options, note, file.c_str(), instrument) == 2)
            n_output_ports = 2;
           printf ("NOTE %d FILE %s\n", note, file.c_str());