summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/xas/spatial.h4
-rw-r--r--src/bank.c1
-rw-r--r--src/spatial.c5
-rw-r--r--src/synth.c1
-rw-r--r--src/vox.c1
5 files changed, 12 insertions, 0 deletions
diff --git a/include/xas/spatial.h b/include/xas/spatial.h
index b9297f8..5287502 100644
--- a/include/xas/spatial.h
+++ b/include/xas/spatial.h
@@ -3,6 +3,9 @@
#include <xas/audio.h>
+#define XAS_SPATIAL_OBJECT_NONE 0
+#define XAS_SPATIAL_OBJECT_MANAGED (1 << 0)
+
#define XAS_SPATIAL_DEFAULT_OBSERVER_WIDTH 0.18f
#define XAS_SPATIAL_DEFAULT_RADIUS 4000.0f /* metres */
#define XAS_SPATIAL_DEFAULT_SPEED 343.0f /* m/s */
@@ -40,6 +43,7 @@ struct _xas_spatial_object {
xas_audio_stream *source;
void *ctx;
+ int flags;
xas_spatial_coord point;
xas_spatial_object *next;
diff --git a/src/bank.c b/src/bank.c
index e311023..fbc9cb4 100644
--- a/src/bank.c
+++ b/src/bank.c
@@ -135,6 +135,7 @@ xas_bank_player *xas_bank_player_new(xas_bank *bank) {
player->obj.stop = (xas_object_stop_callback)xas_bank_player_stop;
player->obj.set_gain = (xas_object_set_gain_callback)set_gain;
player->obj.stream_new = (xas_object_stream_new_callback)xas_bank_player_stream_new;
+ player->obj.destroy = (xas_object_destroy_callback)xas_bank_player_destroy;
player->bank = bank;
player->status = XAS_BANK_PLAYER_STOPPED;
diff --git a/src/spatial.c b/src/spatial.c
index 63207fa..9631603 100644
--- a/src/spatial.c
+++ b/src/spatial.c
@@ -311,6 +311,10 @@ void xas_spatial_scene_destroy(xas_spatial_scene *scene) {
while (object) {
xas_spatial_object *next = object->next;
+ if (object->flags & XAS_SPATIAL_OBJECT_MANAGED) {
+ xas_object_destroy(object->ctx);
+ }
+
free(object);
object = next;
@@ -398,6 +402,7 @@ xas_spatial_object *xas_spatial_scene_add_object(xas_spatial_scene *scene,
object->point = point;
object->source = source;
object->ctx = ctx;
+ object->flags = XAS_SPATIAL_OBJECT_NONE;
object->next = NULL;
object->delta_l = 0;
object->delta_r = 0;
diff --git a/src/synth.c b/src/synth.c
index 4956621..6057ce3 100644
--- a/src/synth.c
+++ b/src/synth.c
@@ -130,6 +130,7 @@ xas_synth *xas_synth_new(xas_audio_format format,
synth->obj.stop = (xas_object_stop_callback)synth_stop;
synth->obj.set_gain = (xas_object_set_gain_callback)set_gain;
synth->obj.stream_new = (xas_object_stream_new_callback)xas_synth_stream_new;
+ synth->obj.destroy = (xas_object_destroy_callback)xas_synth_destroy;
synth->type = type;
synth->state = XAS_SYNTH_IDLE;
diff --git a/src/vox.c b/src/vox.c
index f53f3fd..9d3d098 100644
--- a/src/vox.c
+++ b/src/vox.c
@@ -293,6 +293,7 @@ xas_vox *xas_vox_new_args(xas_audio_format format,
vox->obj.stop = (xas_object_stop_callback)xas_vox_stop;
vox->obj.set_gain = (xas_object_set_gain_callback)set_gain;
vox->obj.stream_new = (xas_object_stream_new_callback)xas_vox_stream_new;
+ vox->obj.destroy = (xas_object_destroy_callback)xas_vox_destroy;
vox->text2wave_path = text2wave_path;