fluiddec: add more soundfont search paths

Fedora installs the soundfonts in /usr/share/soundfonts/ so make sure we
look there as well.
This commit is contained in:
Wim Taymans 2014-02-10 14:34:40 +01:00
parent 270b57fc33
commit 64367f33a6

View File

@ -63,8 +63,6 @@ enum
LAST_SIGNAL LAST_SIGNAL
}; };
#define SOUNDFONT_PATH "sounds/sf2/"
#define DEFAULT_SOUNDFONT NULL #define DEFAULT_SOUNDFONT NULL
#define DEFAULT_SYNTH_CHORUS TRUE #define DEFAULT_SYNTH_CHORUS TRUE
#define DEFAULT_SYNTH_REVERB TRUE #define DEFAULT_SYNTH_REVERB TRUE
@ -507,8 +505,6 @@ gst_fluid_dec_open (GstFluidDec * fluiddec)
{ {
GDir *dir; GDir *dir;
GError *error = NULL; GError *error = NULL;
gint shared_dirs_count;
gint shared_dirs_failed;
const gchar *const *sharedirs; const gchar *const *sharedirs;
if (fluiddec->sf != -1) if (fluiddec->sf != -1)
@ -525,24 +521,26 @@ gst_fluid_dec_open (GstFluidDec * fluiddec)
GST_DEBUG_OBJECT (fluiddec, "loaded soundfont file %s", GST_DEBUG_OBJECT (fluiddec, "loaded soundfont file %s",
fluiddec->soundfont); fluiddec->soundfont);
} else { } else {
gint i; gint i, j;
shared_dirs_count = 0; /* ubuntu/debian in sounds/sf2, fedora in soundfonts */
shared_dirs_failed = 0; static const gchar *paths[] = { "sounds/sf2/", "soundfonts/", NULL };
sharedirs = g_get_system_data_dirs (); sharedirs = g_get_system_data_dirs ();
for (i = 0; sharedirs[i]; i++) { for (i = 0; sharedirs[i]; i++) {
gchar *soundfont_path = g_build_path ("/", sharedirs[i], SOUNDFONT_PATH, for (j = 0; paths[j]; j++) {
gchar *soundfont_path = g_build_path ("/", sharedirs[i], paths[j],
NULL); NULL);
shared_dirs_count += 1;
GST_DEBUG_OBJECT (fluiddec, "Trying to list contents of a %s directory", GST_DEBUG_OBJECT (fluiddec, "Trying to list contents of a %s directory",
soundfont_path); soundfont_path);
error = NULL; error = NULL;
dir = g_dir_open (soundfont_path, 0, &error); dir = g_dir_open (soundfont_path, 0, &error);
if (dir == NULL) { if (dir == NULL) {
GST_DEBUG_OBJECT (fluiddec, "Can't open a potential soundfont directory %s: %s", GST_DEBUG_OBJECT (fluiddec,
"Can't open a potential soundfont directory %s: %s",
soundfont_path, error->message); soundfont_path, error->message);
g_free (soundfont_path); g_free (soundfont_path);
g_error_free (error); g_error_free (error);
shared_dirs_failed += 1;
continue; continue;
} }
@ -559,19 +557,20 @@ gst_fluid_dec_open (GstFluidDec * fluiddec)
fluiddec->sf = fluid_synth_sfload (fluiddec->synth, filename, 1); fluiddec->sf = fluid_synth_sfload (fluiddec->synth, filename, 1);
if (fluiddec->sf != -1) { if (fluiddec->sf != -1) {
GST_DEBUG_OBJECT (fluiddec, "loaded soundfont file %s", filename); GST_DEBUG_OBJECT (fluiddec, "loaded soundfont file %s", filename);
break; goto done;
} }
GST_DEBUG_OBJECT (fluiddec, "could not load soundfont file %s", filename); GST_DEBUG_OBJECT (fluiddec, "could not load soundfont file %s",
filename);
} }
g_dir_close (dir); g_dir_close (dir);
g_free (soundfont_path); g_free (soundfont_path);
} }
}
if (fluiddec->sf == -1) { if (fluiddec->sf == -1) {
if (shared_dirs_count == shared_dirs_failed)
goto open_dir_failed;
goto no_soundfont; goto no_soundfont;
} }
} }
done:
return TRUE; return TRUE;
/* ERRORS */ /* ERRORS */
@ -582,20 +581,11 @@ load_failed:
("failed to open soundfont file %s for reading", fluiddec->soundfont)); ("failed to open soundfont file %s for reading", fluiddec->soundfont));
return FALSE; return FALSE;
} }
open_dir_failed:
{
GST_ELEMENT_ERROR (fluiddec, RESOURCE, OPEN_READ,
("No path in the XDG_DATA_DIRS pathlist has a %s subdirectory that can be opened",
SOUNDFONT_PATH),
("failed to open subdirectory %s in each of the directories in XDG_DATA_DIRS pathlist",
SOUNDFONT_PATH));
return FALSE;
}
no_soundfont: no_soundfont:
{ {
GST_ELEMENT_ERROR (fluiddec, RESOURCE, OPEN_READ, GST_ELEMENT_ERROR (fluiddec, RESOURCE, OPEN_READ,
("Can't find a soundfont file in subdirectory %s of XDG_DATA_DIRS paths", SOUNDFONT_PATH), ("Can't find a soundfont file in subdirectories of XDG_DATA_DIRS paths"),
("no usable soundfont files found in %s subdirectories of XDG_DATA_DIRS", SOUNDFONT_PATH)); ("no usable soundfont files found in subdirectories of XDG_DATA_DIRS"));
return FALSE; return FALSE;
} }
} }