BSE: move BseWave methods into bseapi.idl
authorTim Janik <timj@gnu.org>
Sat, 28 May 2016 11:53:25 +0000 (13:53 +0200)
committerTim Janik <timj@gnu.org>
Wed, 12 Oct 2016 23:10:43 +0000 (01:10 +0200)
Signed-off-by: Tim Janik <timj@gnu.org>
bse/Makefile.am
bse/bseapi.idl
bse/bsewave.cc
bse/bsewave.hh
bse/bsewave.proc [deleted file]

index 45a6afc..367c894 100644 (file)
@@ -118,7 +118,7 @@ bse_proc_sources = $(strip \
        bsecategories.proc      bseeditablesample.proc  \
        bsejanitor.proc                                                         bseproject.proc         \
                                bsesong.proc                                    bsesource.proc          \
-                               bseitem.proc            bsewave.proc            bsewaveosc.proc         \
+                               bseitem.proc                                    bsewaveosc.proc         \
 )
 bse_proc_gen_sources = $(bse_proc_sources:.proc=.genprc.cc)
 # non-compile and non-install sources required
index 6b5d211..9efed38 100644 (file)
@@ -794,6 +794,10 @@ interface EditableSample : Item {
 
 /// Interface for PCM wave samples.
 interface Wave : Source {
+  float64        chunk_get_mix_freq    (int32 chunk_index); ///< Retrieve mixing frequency of a wave chunk.
+  float64        chunk_get_osc_freq    (int32 chunk_index); ///< Retrieve oscillating frequency of a wave chunk.
+  int32          n_wave_chunks         ();                  ///< Get the number of wave chunks of a wave.
+  EditableSample use_editable          (int32 chunk_index); ///< Retrieve an editable sample object for a wave chunk.
 };
 
 /// Interface serving as container for Wave objects.
index 0d64b56..be118eb 100644 (file)
@@ -7,6 +7,7 @@
 #include "gsldatahandle.hh"
 #include "bseserver.hh"
 #include "bseloader.hh"
+#include "bseeditablesample.hh"
 
 #include <string.h>
 
@@ -866,4 +867,44 @@ WaveImpl::WaveImpl (BseObject *bobj) :
 WaveImpl::~WaveImpl ()
 {}
 
+double
+WaveImpl::chunk_get_mix_freq (int chunk_index)
+{
+  BseWave *self = as<BseWave*>();
+  GslWaveChunk *wchunk = (GslWaveChunk*) sfi_ring_nth_data (self->wave_chunks, chunk_index);
+  return wchunk ? wchunk->mix_freq : 0;
+}
+
+double
+WaveImpl::chunk_get_osc_freq (int chunk_index)
+{
+  BseWave *self = as<BseWave*>();
+  GslWaveChunk *wchunk = (GslWaveChunk*) sfi_ring_nth_data (self->wave_chunks, chunk_index);
+  return wchunk ? wchunk->osc_freq : 0;
+}
+
+int
+WaveImpl::n_wave_chunks ()
+{
+  BseWave *self = as<BseWave*>();
+  return self->n_wchunks;
+}
+
+EditableSampleIfaceP
+WaveImpl::use_editable (int chunk_index)
+{
+  BseWave *self = as<BseWave*>();
+  GslWaveChunk *wchunk = (GslWaveChunk*) sfi_ring_nth_data (self->wave_chunks, chunk_index);
+  BseEditableSample *esample = NULL;
+  if (wchunk)
+    {
+      esample = (BseEditableSample*) bse_object_new (BSE_TYPE_EDITABLE_SAMPLE, NULL);
+      bse_editable_sample_set_wchunk (esample, wchunk);
+      bse_item_use (BSE_ITEM (esample));
+      g_object_unref (esample);
+      return esample->as<EditableSampleIfaceP>();
+    }
+  return NULL;
+}
+
 } // Bse
index 956912a..68136e6 100644 (file)
@@ -74,7 +74,11 @@ class WaveImpl : public SourceImpl, public virtual WaveIface {
 protected:
   virtual  ~WaveImpl ();
 public:
-  explicit  WaveImpl (BseObject*);
+  explicit                     WaveImpl           (BseObject*);
+  virtual double               chunk_get_mix_freq (int chunk_index) override;
+  virtual double               chunk_get_osc_freq (int chunk_index) override;
+  virtual int                  n_wave_chunks      () override;
+  virtual EditableSampleIfaceP use_editable       (int chunk_index) override;
 };
 
 } // Bse
diff --git a/bse/bsewave.proc b/bse/bsewave.proc
deleted file mode 100644 (file)
index cfeccdf..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-// Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html
-#include <bse/bseplugin.hh>
-#include <bse/bseprocedure.hh>
-#include <bse/bsewave.hh>
-#include <bse/bseeditablesample.hh>
-#include "bsebuiltin_externs.cc"
-
-
-AUTHORS = "Tim Janik <timj@gtk.org>";
-LICENSE = "GNU Lesser General Public License";
-
-
-METHOD (BseWave, n-wave-chunks) {
-  HELP  = "Get the number of wave chunks of a wave";
-  IN    = bse_param_spec_object ("wave", "Wave", NULL,
-                                BSE_TYPE_WAVE, SFI_PARAM_STANDARD);
-  OUT   = sfi_pspec_int ("n_chunks", "Number of Wave Chunks", NULL,
-                        0, 0, G_MAXINT, 1, SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  /* extract parameter values */
-  BseWave *wave = (BseWave*) bse_value_get_object (in_values++);
-
-  /* check parameters */
-  if (!BSE_IS_WAVE (wave))
-    return Bse::Error::PROC_PARAM_INVAL;
-
-  /* set output parameters */
-  sfi_value_set_int (out_values++, wave->n_wchunks);
-
-  return Bse::Error::NONE;
-}
-
-METHOD (BseWave, use-editable) {
-  HELP  = "Retrieve an editable sample object for a wave chunk.";
-  IN    = bse_param_spec_object ("wave", "Wave", NULL,
-                                BSE_TYPE_WAVE, SFI_PARAM_STANDARD);
-  IN    = sfi_pspec_int ("chunk_index", NULL, "Index of chunk to edit",
-                        0, 0, G_MAXINT, 1, SFI_PARAM_STANDARD);
-  OUT   = bse_param_spec_object ("esample", NULL, "Editable sample",
-                                BSE_TYPE_EDITABLE_SAMPLE, SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  /* extract parameter values */
-  BseWave *wave = (BseWave*) bse_value_get_object (in_values++);
-  guint chunk_index = sfi_value_get_int (in_values++);
-  BseEditableSample *esample = NULL;
-  GslWaveChunk *wchunk = NULL;
-
-  /* check parameters */
-  if (!BSE_IS_WAVE (wave))
-    return Bse::Error::PROC_PARAM_INVAL;
-
-  wchunk = (GslWaveChunk*) sfi_ring_nth_data (wave->wave_chunks, chunk_index);
-  if (wchunk)
-    {
-      esample = (BseEditableSample*) bse_object_new (BSE_TYPE_EDITABLE_SAMPLE, NULL);
-      bse_editable_sample_set_wchunk (esample, wchunk);
-      bse_item_use (BSE_ITEM (esample));
-      g_object_unref (esample);
-    }
-
-  /* set output parameters */
-  bse_value_set_object (out_values++, esample);
-
-  return Bse::Error::NONE;
-}
-
-METHOD (BseWave, chunk-get-osc-freq) {
-  HELP  = "Retrieve oscillating frequency of a wave chunk.";
-  IN    = bse_param_spec_object ("wave", "Wave", NULL,
-                                BSE_TYPE_WAVE, SFI_PARAM_STANDARD);
-  IN    = sfi_pspec_int ("chunk_index", "Chunk Index", "Index of chunk",
-                        0, 0, G_MAXINT, 1, SFI_PARAM_STANDARD);
-  OUT   = sfi_pspec_real ("osc_freq", NULL, NULL,
-                         BSE_KAMMER_FREQUENCY, BSE_MIN_OSC_FREQUENCY, BSE_MAX_OSC_FREQUENCY, 10.0,
-                         SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  /* extract parameter values */
-  BseWave *wave = (BseWave*) bse_value_get_object (in_values++);
-  guint chunk_index = sfi_value_get_int (in_values++);
-  GslWaveChunk *wchunk = NULL;
-
-  /* check parameters */
-  if (!BSE_IS_WAVE (wave))
-    return Bse::Error::PROC_PARAM_INVAL;
-
-  wchunk = (GslWaveChunk*) sfi_ring_nth_data (wave->wave_chunks, chunk_index);
-  if (wchunk)
-    sfi_value_set_real (out_values++, wchunk->osc_freq);
-
-  return Bse::Error::NONE;
-}
-
-METHOD (BseWave, chunk-get-mix-freq) {
-  HELP  = "Retrieve mixing frequency of a wave chunk.";
-  IN    = bse_param_spec_object ("wave", "Wave", NULL,
-                                BSE_TYPE_WAVE, SFI_PARAM_STANDARD);
-  IN    = sfi_pspec_int ("chunk_index", "Chunk Index", "Index of chunk",
-                        0, 0, G_MAXINT, 1, SFI_PARAM_STANDARD);
-  OUT   = sfi_pspec_real ("mix_freq", NULL, NULL,
-                         0, 0, 44100 * 16 /* FIXME: MAX_MIX_FREQ */, 10.0,
-                         SFI_PARAM_STANDARD);
-}
-BODY (BseProcedureClass *proc,
-      const GValue      *in_values,
-      GValue            *out_values)
-{
-  /* extract parameter values */
-  BseWave *wave = (BseWave*) bse_value_get_object (in_values++);
-  guint chunk_index = sfi_value_get_int (in_values++);
-  GslWaveChunk *wchunk = NULL;
-
-  /* check parameters */
-  if (!BSE_IS_WAVE (wave))
-    return Bse::Error::PROC_PARAM_INVAL;
-
-  wchunk = (GslWaveChunk*) sfi_ring_nth_data (wave->wave_chunks, chunk_index);
-  if (wchunk)
-    sfi_value_set_real (out_values++, wchunk->mix_freq);
-
-  return Bse::Error::NONE;
-}