summaryrefslogtreecommitdiffstats
path: root/src/script.c
diff options
context:
space:
mode:
authorXANTRONIX Development2022-03-01 23:43:57 -0500
committerXANTRONIX Development2022-03-01 23:43:57 -0500
commitea5c729f69a9c6c2fb88caa48e37f6f548532b9b (patch)
tree2d2c88aecdb55d911fbc9fe512cce91d0dbae572 /src/script.c
parent80f45719b50f394e0cc797fdb20342698afbd14e (diff)
downloadxas-ea5c729f69a9c6c2fb88caa48e37f6f548532b9b.tar.gz
xas-ea5c729f69a9c6c2fb88caa48e37f6f548532b9b.tar.bz2
xas-ea5c729f69a9c6c2fb88caa48e37f6f548532b9b.zip
good cats renaming stuff,,,
Diffstat (limited to 'src/script.c')
-rw-r--r--src/script.c361
1 files changed, 0 insertions, 361 deletions
diff --git a/src/script.c b/src/script.c
deleted file mode 100644
index 4bd69b1..0000000
--- a/src/script.c
+++ /dev/null
@@ -1,361 +0,0 @@
-#include <stdlib.h>
-#include <string.h>
-
-#include <xas/object.h>
-#include <xas/bank.h>
-#include <xas/synth.h>
-#include <xas/vox.h>
-#include <xas/script.h>
-
-xas_script *xas_script_new(xas_spatial_scene *scene, size_t buffer_size) {
- xas_script *script;
-
- if ((script = malloc(sizeof(*script))) == NULL) {
- goto error_malloc_script;
- }
-
- script->scene = scene;
- script->first = NULL;
- script->buffer_size = buffer_size;
-
- return script;
-
-error_malloc_script:
- return NULL;
-}
-
-void xas_script_destroy(xas_script *script) {
- xas_script_event *event = script->first;
-
- while (event) {
- xas_script_event *next = event->next;
-
- free(event);
-
- event = next;
- }
-
- free(script);
-}
-
-static void add_event(xas_script *script, xas_script_event *ev) {
- xas_script_event *current = script->first;
-
- if (script->first == NULL) {
- script->first = ev;
-
- return;
- }
-
- while (current) {
- xas_script_event *next = current->next;
-
- if (next == NULL) {
- current->next = ev;
-
- return;
- }
-
- if (timercmp(&ev->timestamp, &current->timestamp, >=)
- && timercmp(&ev->timestamp, &next->timestamp, <)) {
- current->next = ev;
- ev->next = next;
-
- return;
- }
-
- current = next;
- }
-}
-
-int xas_script_add_event_off(xas_script *script,
- xas_spatial_object *object,
- struct timeval timestamp) {
- xas_script_event *ev;
-
- if ((ev = malloc(sizeof(*ev))) == NULL) {
- goto error_malloc_ev;
- }
-
- ev->type = XAS_SCRIPT_EVENT_OFF;
- ev->objtype = XAS_SCRIPT_OBJECT_ANY;
- ev->object = object;
- ev->timestamp = timestamp;
- ev->next = NULL;
-
- add_event(script, ev);
-
- return 0;
-
-error_malloc_ev:
- return -1;
-}
-
-int xas_script_add_event_on(xas_script *script,
- xas_spatial_object *object,
- struct timeval timestamp) {
- xas_script_event *ev;
-
- if ((ev = malloc(sizeof(*ev))) == NULL) {
- goto error_malloc_ev;
- }
-
- ev->type = XAS_SCRIPT_EVENT_ON;
- ev->objtype = XAS_SCRIPT_OBJECT_ANY;
- ev->object = object;
- ev->timestamp = timestamp;
- ev->next = NULL;
-
- add_event(script, ev);
-
- return 0;
-
-error_malloc_ev:
- return -1;
-}
-
-int xas_script_add_set_position(xas_script *script,
- xas_spatial_object *object,
- struct timeval timestamp,
- xas_spatial_coord point) {
- xas_script_event *ev;
-
- if ((ev = malloc(sizeof(*ev))) == NULL) {
- goto error_malloc_ev;
- }
-
- ev->type = XAS_SCRIPT_EVENT_SET_POSITION;
- ev->objtype = XAS_SCRIPT_OBJECT_ANY;
- ev->object = object;
- ev->timestamp = timestamp;
- ev->point = point;
- ev->next = NULL;
-
- add_event(script, ev);
-
- return 0;
-
-error_malloc_ev:
- return -1;
-}
-
-int xas_script_add_set_gain(xas_script *script,
- xas_spatial_object *object,
- struct timeval timestamp,
- float gain) {
- xas_script_event *ev;
-
- if ((ev = malloc(sizeof(*ev))) == NULL) {
- goto error_malloc_ev;
- }
-
- ev->type = XAS_SCRIPT_EVENT_ON;
- ev->objtype = XAS_SCRIPT_OBJECT_ANY;
- ev->object = object;
- ev->timestamp = timestamp;
- ev->gain = gain;
- ev->next = NULL;
-
- add_event(script, ev);
-
- return 0;
-
-error_malloc_ev:
- return -1;
-}
-
-int xas_script_add_set_bank(xas_script *script,
- xas_spatial_object *object,
- struct timeval timestamp,
- size_t index) {
- xas_script_event *ev;
-
- if ((ev = malloc(sizeof(*ev))) == NULL) {
- goto error_malloc_ev;
- }
-
- ev->type = XAS_SCRIPT_EVENT_SET_BANK_INDEX;
- ev->objtype = XAS_SCRIPT_OBJECT_BANK_PLAYER;
- ev->object = object;
- ev->timestamp = timestamp;
- ev->next = NULL;
- ev->index = index;
-
- add_event(script, ev);
-
- return 0;
-
-error_malloc_ev:
- return -1;
-}
-
-int xas_script_add_set_frequency(xas_script *script,
- xas_spatial_object *object,
- struct timeval timestamp,
- size_t frequency) {
- xas_script_event *ev;
-
- if ((ev = malloc(sizeof(*ev))) == NULL) {
- goto error_malloc_ev;
- }
-
- ev->type = XAS_SCRIPT_EVENT_SET_FREQUENCY;
- ev->objtype = XAS_SCRIPT_OBJECT_SYNTH;
- ev->object = object;
- ev->timestamp = timestamp;
- ev->next = NULL;
- ev->frequency = frequency;
-
- add_event(script, ev);
-
- return 0;
-
-error_malloc_ev:
- return -1;
-}
-
-int xas_script_add_phrase(xas_script *script,
- xas_spatial_object *object,
- struct timeval timestamp,
- const char *phrase) {
- xas_script_event *ev;
-
- if ((ev = malloc(sizeof(*ev))) == NULL) {
- goto error_malloc_ev;
- }
-
- ev->type = XAS_SCRIPT_EVENT_SPEECH;
- ev->objtype = XAS_SCRIPT_OBJECT_VOX;
- ev->object = object;
- ev->timestamp = timestamp;
- ev->next = NULL;
- ev->phrase = phrase;
-
- add_event(script, ev);
-
- return 0;
-
-error_malloc_ev:
- return -1;
-}
-
-static int event_trigger(xas_spatial_scene *scene, xas_script_event *ev) {
- switch (ev->type) {
- case XAS_SCRIPT_EVENT_OFF:
- return xas_spatial_object_stop(ev->object);
-
- case XAS_SCRIPT_EVENT_ON:
- return xas_spatial_object_start(ev->object);
-
- case XAS_SCRIPT_EVENT_SET_POSITION:
- xas_spatial_scene_position_object(scene,
- ev->object,
- ev->point);
-
- break;
-
- case XAS_SCRIPT_EVENT_SET_GAIN:
- xas_object_set_gain(ev->object->ctx, ev->gain);
-
- break;
-
- case XAS_SCRIPT_EVENT_SET_FREQUENCY:
- if (ev->objtype != XAS_SCRIPT_OBJECT_SYNTH) {
- goto error_invalid_event;
- }
-
- xas_synth_set_frequency(ev->object->ctx, ev->frequency);
-
- break;
-
- case XAS_SCRIPT_EVENT_SET_BANK_INDEX:
- if (ev->objtype != XAS_SCRIPT_OBJECT_BANK_PLAYER) {
- goto error_invalid_event;
- }
-
- xas_bank_player_set_entry(ev->object->ctx, ev->gain);
-
- break;
-
- case XAS_SCRIPT_EVENT_SPEECH:
- if (ev->objtype != XAS_SCRIPT_OBJECT_VOX) {
- goto error_invalid_event;
- }
-
- xas_vox_say(ev->object->ctx, ev->phrase);
- xas_vox_generate(ev->object->ctx);
-
- break;
- }
-
- return 0;
-
-error_invalid_event:
- return -1;
-}
-
-static inline void timerupdate(struct timeval *tv,
- suseconds_t interval,
- size_t frame) {
- suseconds_t usec = frame * interval;
-
- tv->tv_sec = usec / 1000000;
- tv->tv_usec = usec % 1000000;
-}
-
-int xas_script_play(xas_script *script, xas_audio_stream *sink) {
- xas_script_event *ev = script->first;
- xas_audio_stream *source;
-
- size_t frame = 0,
- sample_rate = script->scene->format.sample_rate,
- buffer_size = script->buffer_size;
-
- suseconds_t interval = 1000000 / (sample_rate / buffer_size);
-
- int16_t *samples;
-
- if ((source = xas_spatial_scene_stream_new(script->scene,
- script->buffer_size)) == NULL) {
- goto error_spatial_scene_stream_new;
- }
-
- while (ev) {
- struct timeval tv;
-
- ssize_t readlen;
-
- timerupdate(&tv, interval, frame);
-
- while (ev && !timercmp(&tv, &ev->timestamp, <)) {
- if (event_trigger(script->scene, ev) < 0) {
- goto error_event_trigger;
- }
-
- ev = ev->next;
- }
-
- if ((readlen = xas_audio_stream_read(source,
- (void **)&samples,
- buffer_size)) < 0) {
- goto error_audio_stream_io;
- } else if (readlen == 0) {
- break;
- }
-
- if (xas_audio_stream_write(sink, samples, readlen) < 0) {
- goto error_audio_stream_io;
- }
-
- frame++;
- }
-
- return frame * buffer_size;
-
-error_audio_stream_io:
-error_event_trigger:
- xas_audio_stream_destroy(source);
-
-error_spatial_scene_stream_new:
- return -1;
-}