summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/Makefile2
-rw-r--r--examples/beep.c124
2 files changed, 125 insertions, 1 deletions
diff --git a/examples/Makefile b/examples/Makefile
index 1146600..72e4c3d 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -8,7 +8,7 @@ LIBNAME = xas
CFLAGS += -I$(INCLUDE_PATH)
LDFLAGS += -L../src -l$(LIBNAME) -lm
-EXAMPLES = test open say spatial seq pod
+EXAMPLES = test open say spatial seq pod beep
all: $(EXAMPLES)
diff --git a/examples/beep.c b/examples/beep.c
new file mode 100644
index 0000000..fce565a
--- /dev/null
+++ b/examples/beep.c
@@ -0,0 +1,124 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <sysexits.h>
+#include <fcntl.h>
+#include <math.h>
+
+#include <xas/audio.h>
+#include <xas/vox.h>
+#include <xas/bank.h>
+#include <xas/riff.h>
+#include <xas/spatial.h>
+#include <xas/drone.h>
+#include <xas/seq.h>
+
+static void usage(int argc, char **argv, const char *message, ...) {
+ va_list args;
+
+ va_start(args, message);
+
+ if (message) {
+ vfprintf(stderr, message, args);
+ fputc('\n', stderr);
+ }
+
+ va_end(args);
+
+ fprintf(stderr, "usage: %s output.wav\n", argv[0]);
+
+ exit(EX_USAGE);
+}
+
+int main(int argc, char **argv) {
+ xas_spatial_scene *scene;
+ xas_seq *seq;
+
+ xas_audio_stream *wave;
+
+ xas_audio_format format = {
+ .channels = XAS_AUDIO_STEREO,
+ .sample_size = XAS_AUDIO_PCM_16_BIT,
+ .sample_rate = 44100
+ };
+
+ size_t buffer_size = 735;
+
+ xas_spatial_coord speakers[2] = {
+ { -0.09, 0.0, 0.0 },
+ { 0.09, 0.0, 0.0 }
+ };
+
+ xas_drone *drone;
+
+ struct timeval cur = { 0, 0 };
+
+ int mood;
+
+ if (argc < 2) {
+ usage(argc, argv, "No output file provided");
+ }
+
+ if ((wave = xas_riff_new_file(argv[1],
+ format,
+ O_WRONLY | O_CREAT | O_TRUNC)) == NULL) {
+ goto error_riff_new_file;
+ }
+
+ if ((scene = xas_spatial_scene_new(format,
+ speakers[0],
+ speakers[1])) == NULL) {
+ goto error_spatial_scene_new;
+ }
+
+ if ((seq = xas_seq_new(scene, buffer_size)) == NULL) {
+ goto error_seq_new;
+ }
+
+ if ((drone = xas_drone_new(scene,
+ (xas_spatial_coord){ 0.0, 0.0, -1.0 },
+ 2646000,
+ 4)) == NULL) {
+ goto error_drone_new;
+ }
+
+ timerclear(&cur);
+
+ for (mood=0; mood<6; mood++) {
+ struct timeval interval = { 0, 250000 },
+ tmp;
+
+ xas_drone_seq_beep(drone,
+ seq,
+ mood,
+ &cur);
+
+ timeradd(&cur, &interval, &tmp);
+
+ cur = tmp;
+ }
+
+ xas_seq_add_stop(seq, cur);
+
+ xas_seq_play(seq, wave);
+
+ xas_drone_destroy(drone);
+ xas_seq_destroy(seq);
+ xas_spatial_scene_destroy(scene);
+ xas_audio_stream_destroy(wave);
+
+ return EX_OK;
+
+error_drone_new:
+ xas_seq_destroy(seq);
+
+error_seq_new:
+ xas_spatial_scene_destroy(scene);
+
+error_spatial_scene_new:
+ xas_audio_stream_destroy(wave);
+
+error_riff_new_file:
+ return EX_OSERR;
+}