[beast/devel: 13/28] BSE: add xinfos master-volume-db, adsr-attack-time and adsr-release-time
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast/devel: 13/28] BSE: add xinfos master-volume-db, adsr-attack-time and adsr-release-time
- Date: Sat, 4 May 2013 03:53:19 +0000 (UTC)
commit 0cdd5a03f9bceeb0545e3fb6fc8d2c06c1e92b00
Author: Stefan Westerfeld <stefan space twc de>
Date: Thu Mar 21 15:55:15 2013 +0100
BSE: add xinfos master-volume-db, adsr-attack-time and adsr-release-time
These xinfos can be used to adjust the amplifier volume and the adsr
envelope parameters for bsewave files.
bse/bsetrack.cc | 35 +++++++++++++++++++++++++++++++++++
1 files changed, 35 insertions(+), 0 deletions(-)
---
diff --git a/bse/bsetrack.cc b/bse/bsetrack.cc
index 3367070..9b9f6c4 100644
--- a/bse/bsetrack.cc
+++ b/bse/bsetrack.cc
@@ -315,6 +315,36 @@ track_uncross_wave (BseItem *owner,
}
static void
+set_amp_master_volume (BseSNet *snet, const char *amp_name, gchar **xinfos)
+{
+ const gchar *master_volume_db = bse_xinfos_get_value (xinfos, "master-volume-db");
+ if (master_volume_db)
+ {
+ BseItem *amp = bse_container_resolve_upath (BSE_CONTAINER (snet), amp_name);
+
+ double volume;
+ g_object_get (amp, "master-volume", &volume, NULL);
+ volume *= bse_db_to_factor (g_ascii_strtod (master_volume_db, NULL));
+ g_object_set (amp, "master-volume", volume, NULL);
+ }
+}
+static void
+set_adsr_params (BseSNet *snet, const char *adsr_name, gchar **xinfos)
+{
+ const gchar *adsr_release_time = bse_xinfos_get_value (xinfos, "adsr-release-time");
+ if (adsr_release_time)
+ {
+ BseItem *adsr = bse_container_resolve_upath (BSE_CONTAINER (snet), adsr_name);
+ g_object_set (adsr, "release_time", g_ascii_strtod (adsr_release_time, NULL), NULL);
+ }
+ const gchar *adsr_attack_time = bse_xinfos_get_value (xinfos, "adsr-attack-time");
+ if (adsr_attack_time)
+ {
+ BseItem *adsr = bse_container_resolve_upath (BSE_CONTAINER (snet), adsr_name);
+ g_object_set (adsr, "attack_time", g_ascii_strtod (adsr_attack_time, NULL), NULL);
+ }
+}
+static void
create_wnet (BseTrack *self,
BseWave *wave)
{
@@ -340,6 +370,8 @@ create_wnet (BseTrack *self,
g_object_set (bse_container_resolve_upath (BSE_CONTAINER (self->wnet), "wave-osc"), /* no undo */
"wave", wave,
NULL);
+ set_amp_master_volume (self->wnet, "amplifier", wave->xinfos);
+ set_adsr_params (self->wnet, "adsr", wave->xinfos);
}
else if (strcmp (synthesis_network, "adsr-wave-2") == 0 ||
strcmp (synthesis_network, "plain-wave-2") == 0)
@@ -350,6 +382,9 @@ create_wnet (BseTrack *self,
g_object_set (bse_container_resolve_upath (BSE_CONTAINER (self->wnet), "wave-osc-right"), /* no undo */
"wave", wave,
NULL);
+ set_amp_master_volume (self->wnet, "amplifier-left", wave->xinfos);
+ set_amp_master_volume (self->wnet, "amplifier-right", wave->xinfos);
+ set_adsr_params (self->wnet, "adsr", wave->xinfos);
}
else if (strcmp (synthesis_network, "gus-patch") == 0)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]