[beast/wip/soundfont: 7/832] BSE: added global sound font repository to each project



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]