diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/say.c | 48 |
1 files changed, 41 insertions, 7 deletions
diff --git a/examples/say.c b/examples/say.c index 23b31a2..19dcb08 100644 --- a/examples/say.c +++ b/examples/say.c @@ -11,6 +11,7 @@ #include <xas/riff.h> #include <xas/synth.h> #include <xas/vox.h> +#include <xas/bank.h> #define SYNTH_STATUS_CLEAR 0 #define SYNTH_STATUS_ON (1 << 0) @@ -70,13 +71,15 @@ int main(int argc, char **argv) { xas_mixer *mixer; - xas_audio_stream *input, + xas_bank *bank; + xas_vox *vox; + + xas_audio_stream *voice, + *bank_stream, *synth_l, *synth_r, *output; - xas_vox *vox; - size_t sample_rate = 44100, buffer_size = 735, duration_frames = 3600, @@ -94,6 +97,13 @@ int main(int argc, char **argv) { goto error_vox_new; } + if ((bank = xas_bank_new(XAS_AUDIO_PCM_16_BIT, + 44100, + 2646000, + 4)) == NULL) { + goto error_bank_new; + } + if ((output = xas_riff_new_file(argv[1], XAS_AUDIO_STEREO, XAS_AUDIO_PCM_16_BIT, @@ -102,10 +112,14 @@ int main(int argc, char **argv) { goto error_riff_new_file; } - if ((input = xas_vox_stream_new(vox)) == NULL) { + if ((voice = xas_vox_stream_new(vox)) == NULL) { goto error_vox_stream_new; } + if ((bank_stream = xas_bank_stream_new(bank)) == NULL) { + goto error_bank_stream_new; + } + if ((synth_l = xas_synth_new(XAS_AUDIO_PCM_16_BIT, sample_rate, buffer_size, @@ -131,7 +145,7 @@ int main(int argc, char **argv) { goto error_mixer_new; } - if (xas_mixer_input_add(mixer, input, 1.0, 0.0) == NULL) { + if (xas_mixer_input_add(mixer, bank_stream, 1.0, 0.0) == NULL) { goto error_mixer_input_add; } @@ -143,14 +157,25 @@ int main(int argc, char **argv) { goto error_mixer_input_add; } + /* + * Time to fill the sample bank, meow! + */ xas_vox_say(vox, "I want to eat your soul. You don't understand. I really want to eat your soul.\n"); xas_vox_generate(vox); + if (xas_bank_record(bank, voice, 0, 247018) < 0) { + goto error_bank_record; + } + for (i=0; i<duration_frames; i++) { void *buf; ssize_t readlen; + if (i >= 300 && !xas_bank_active(bank)) { + xas_bank_play(bank, 0, 1.0); + } + if ((readlen = xas_audio_stream_read(mixer->output, &buf, buffer_size)) < 0) { @@ -167,15 +192,18 @@ int main(int argc, char **argv) { xas_mixer_destroy(mixer); xas_audio_stream_destroy(synth_r); xas_audio_stream_destroy(synth_l); - xas_audio_stream_destroy(input); + xas_audio_stream_destroy(bank_stream); + xas_audio_stream_destroy(voice); xas_audio_stream_destroy(output); + xas_bank_destroy(bank); xas_vox_destroy(vox); return EX_OK; error_audio_stream_write: error_audio_stream_read: +error_bank_record: error_mixer_input_add: xas_mixer_destroy(mixer); @@ -186,12 +214,18 @@ error_synth_new_r: xas_audio_stream_destroy(synth_l); error_synth_new_l: - xas_audio_stream_destroy(input); + xas_audio_stream_destroy(bank_stream); + +error_bank_stream_new: + xas_audio_stream_destroy(voice); error_vox_stream_new: xas_audio_stream_destroy(output); error_riff_new_file: + xas_bank_destroy(bank); + +error_bank_new: xas_vox_destroy(vox); error_vox_new: |