[beast/wip/soundfont: 7/832] BSE: added global sound font repository to each project
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast/wip/soundfont: 7/832] BSE: added global sound font repository to each project
- Date: Sun, 6 Nov 2016 11:49:32 +0000 (UTC)
commit 7a862050c55a6f2a8431a67970b119eebb53d77c
Author: Stefan Westerfeld <stefan space twc de>
Date: Mon Nov 8 22:56:39 2010 +0100
BSE: added global sound font repository to each project
This repo is similar to the wave repo; it contains sound fonts used by a
project.
bse/bseproject.c | 24 ++++++++++++++++++++++++
bse/bseproject.h | 1 +
bse/bseproject.proc | 29 +++++++++++++++++++++++++++++
3 files changed, 54 insertions(+), 0 deletions(-)
---
diff --git a/bse/bseproject.c b/bse/bseproject.c
index 1dc8629..2ca856e 100644
--- a/bse/bseproject.c
+++ b/bse/bseproject.c
@@ -31,6 +31,7 @@
#include "bsemidinotifier.h"
#include "gslcommon.h"
#include "bseengine.h"
+#include "bsesoundfontrepo.h"
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
@@ -186,6 +187,7 @@ bse_project_init (BseProject *self,
gpointer rclass)
{
BseWaveRepo *wrepo;
+ BseSoundFontRepo *sfrepo;
self->state = BSE_PROJECT_INACTIVE;
self->supers = NULL;
@@ -202,8 +204,12 @@ bse_project_init (BseProject *self,
wrepo = bse_container_new_child (BSE_CONTAINER (self), BSE_TYPE_WAVE_REPO,
"uname", "Wave-Repository",
NULL);
+ sfrepo = bse_container_new_child (BSE_CONTAINER (self), BSE_TYPE_SOUND_FONT_REPO,
+ "uname", "Sound-Font-Repository",
+ NULL);
/* with fixed uname */
BSE_OBJECT_SET_FLAGS (wrepo, BSE_OBJECT_FLAG_FIXED_UNAME);
+ BSE_OBJECT_SET_FLAGS (sfrepo, BSE_OBJECT_FLAG_FIXED_UNAME);
}
static void
@@ -438,6 +444,13 @@ bse_project_retrieve_child (BseContainer *container,
g_warning ("%s: no wave-repo found in project\n", G_STRLOC);
return NULL; /* shouldn't happen */
}
+ else if (g_type_is_a (child_type, BSE_TYPE_SOUND_FONT_REPO)) /* and the same sound font repo */
+ {
+ BseSoundFontRepo *sfrepo = bse_project_get_sound_font_repo (self);
+ if (!sfrepo)
+ g_warning ("%s: no sound-font-repo found in project\n", G_STRLOC);
+ return BSE_ITEM (sfrepo);
+ }
else
{
BseItem *item = BSE_CONTAINER_CLASS (parent_class)->retrieve_child (container, child_type, uname);
@@ -657,6 +670,17 @@ bse_project_get_wave_repo (BseProject *self)
return NULL;
}
+BseSoundFontRepo*
+bse_project_get_sound_font_repo (BseProject *self)
+{
+ g_return_val_if_fail (BSE_IS_PROJECT (self), NULL);
+ GSList *slist;
+ for (slist = self->supers; slist; slist = slist->next)
+ if (BSE_IS_SOUND_FONT_REPO (slist->data))
+ return slist->data;
+ return NULL;
+}
+
BseSong*
bse_project_get_song (BseProject *self)
{
diff --git a/bse/bseproject.h b/bse/bseproject.h
index c7d9f4d..2dbaa41 100644
--- a/bse/bseproject.h
+++ b/bse/bseproject.h
@@ -90,6 +90,7 @@ BseItem* bse_project_lookup_typed_item (BseProject *project,
GType item_type,
const gchar *uname);
BseWaveRepo* bse_project_get_wave_repo (BseProject *project);
+BseSoundFontRepo* bse_project_get_sound_font_repo (BseProject *project);
BseSong* bse_project_get_song (BseProject *project);
gpointer bse_project_create_intern_synth (BseProject *project,
const gchar *synth_name,
diff --git a/bse/bseproject.proc b/bse/bseproject.proc
index ac3b9fa..1bd9d77 100644
--- a/bse/bseproject.proc
+++ b/bse/bseproject.proc
@@ -21,6 +21,7 @@
#include <bse/bsesong.h>
#include <bse/bseundostack.h>
#include <bse/bsewaverepo.h>
+#include <bse/bsesoundfontrepo.h>
#include <bse/bsecsynth.h>
#include <bse/bsemidisynth.h>
#include <bse/bsedatapocket.h>
@@ -300,6 +301,34 @@ METHOD (BseProject, get-wave-repo) {
return BSE_ERROR_NONE;
}
+METHOD (BseProject, get-sound-font-repo) {
+ HELP = "Get sound font repository for project";
+ IN = bse_param_spec_object ("project", "Project", "The project",
+ BSE_TYPE_PROJECT, SFI_PARAM_STANDARD);
+ OUT = bse_param_spec_object ("sfrepo", "Sound Font Repo", "The project's unique sound font repo",
+ BSE_TYPE_SOUND_FONT_REPO, SFI_PARAM_STANDARD);
+
+} BODY (BseProcedureClass *proc,
+ const GValue *in_values,
+ GValue *out_values)
+{
+ /* extract parameter values */
+ BseProject *project = bse_value_get_object (in_values++);
+ BseSoundFontRepo *sfrepo = NULL;
+
+ /* check parameters */
+ if (!BSE_IS_PROJECT (project))
+ return BSE_ERROR_PROC_PARAM_INVAL;
+
+ /* action */
+ sfrepo = bse_project_get_sound_font_repo (project);
+
+ /* set output parameters */
+ bse_value_set_object (out_values++, sfrepo);
+
+ return BSE_ERROR_NONE;
+}
+
METHOD (BseProject, get-data-pocket) {
HELP = "Retrieve a specifically named data pocket for this project";
IN = bse_param_spec_object ("project", "Project", "The project",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]