From 37c97e345d12f95dde44e1d1a4c2f2aadd4615bc Mon Sep 17 00:00:00 2001 From: sanine Date: Thu, 25 Aug 2022 14:54:53 -0500 Subject: add initial structure --- src/mossrose.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/mossrose.h | 12 ++++++++++ 2 files changed, 82 insertions(+) create mode 100644 src/mossrose.c create mode 100644 src/mossrose.h (limited to 'src') diff --git a/src/mossrose.c b/src/mossrose.c new file mode 100644 index 0000000..fdaa10c --- /dev/null +++ b/src/mossrose.c @@ -0,0 +1,70 @@ +#include +#include +#include "mossrose.h" + + +PaStream *stream; + + +struct audio_output_t { + float l; + float r; +}; + + +static int callback( + const void *input, + void *output, + unsigned long frame_count, + const PaStreamCallbackTimeInfo *time_info, + void *userdata) +{ + static float left = 0; + static float right = 0; + + struct audio_output_t *out = output; + for (int i=0; i 1) left -= 2; + if (right > 1) right -= 2; + } + return 0; +} + + +int mr_init(double sample_rate, int n_channels) +{ + PaError err; + + err = Pa_Initialize(); + if (err != paNoError) { + fprintf(stderr, "failed to initialize PortAudio!\n"); + return 1; + } + + err = Pa_OpenDefaultStream(&stream, 0, 2, paFloat32, sample_rate, 0, callback, NULL); + if (err != paNoError) { + fprintf(stderr, "failed to open audio stream!\n"); + return 1; + } + + err = Pa_StartStream(stream); + if (err != paNoError) { + fprintf(stderr, "failed to start audio stream!\n"); + return 1; + } + + return 0; +}; + + +int mr_terminate(double sample_rate, int n_channels) +{ + Pa_AbortStream(stream); + Pa_CloseStream(stream); + Pa_Terminate(); + return 0; +} diff --git a/src/mossrose.h b/src/mossrose.h new file mode 100644 index 0000000..3d5bcd5 --- /dev/null +++ b/src/mossrose.h @@ -0,0 +1,12 @@ +#ifndef MOSSROSE_H +#define MOSSROSE_H + +#include + +int mr_init(double sample_rate, int n_channels); + +int mr_terminate(); + +int mr_play(float *left, float *right, size_t n_samples, int channel); + +#endif -- cgit v1.2.1