summaryrefslogtreecommitdiff
path: root/rtaudio_c.cpp
diff options
context:
space:
mode:
authorStephen Sinclair <radarsat1@gmail.com>2020-06-05 10:12:21 +0200
committerStephen Sinclair <radarsat1@gmail.com>2020-06-05 10:21:10 +0200
commit7b534671b90286f0557bb8851d1454c0fd60b760 (patch)
tree92c3acae274d12927d922dfde0c05ec27e1d2c60 /rtaudio_c.cpp
parentf65e492350127c2b7019bacd5cd642105f7bafd7 (diff)
Update C API and several backend APIs for no-exceptions branch.
Diffstat (limited to 'rtaudio_c.cpp')
-rw-r--r--rtaudio_c.cpp199
1 files changed, 77 insertions, 122 deletions
diff --git a/rtaudio_c.cpp b/rtaudio_c.cpp
index 42c4489..6def530 100644
--- a/rtaudio_c.cpp
+++ b/rtaudio_c.cpp
@@ -50,7 +50,7 @@ rtaudio_api_t rtaudio_compiled_api_by_name(const char *name) {
}
const char *rtaudio_error(rtaudio_t audio) {
- if (audio->errtype == RTAUDIO_NO_ERROR) {
+ if (audio->errtype == RTAUDIO_ERROR_NONE) {
return NULL;
}
return audio->errmsg;
@@ -62,13 +62,12 @@ rtaudio_error_t rtaudio_error_type(rtaudio_t audio) {
rtaudio_t rtaudio_create(rtaudio_api_t api) {
rtaudio_t audio = new struct rtaudio();
- try {
- audio->errtype = RTAUDIO_NO_ERROR;
- audio->audio = new RtAudio((RtAudio::Api)api);
- } catch (RtAudioError &err) {
- audio->errtype = (rtaudio_error_t)err.getType();
- strncpy(audio->errmsg, err.what(), sizeof(audio->errmsg) - 1);
- }
+ audio->errtype = RTAUDIO_ERROR_NONE;
+ audio->audio = new RtAudio((RtAudio::Api)api,
+ [audio](RtAudioErrorType type, const std::string &errorText){
+ audio->errtype = (rtaudio_error_t)type;
+ strncpy(audio->errmsg, errorText.c_str(), errorText.size() - 1);
+ });
return audio;
}
@@ -85,26 +84,25 @@ int rtaudio_device_count(rtaudio_t audio) {
rtaudio_device_info_t rtaudio_get_device_info(rtaudio_t audio, int i) {
rtaudio_device_info_t result;
std::memset(&result, 0, sizeof(result));
- try {
- audio->errtype = RTAUDIO_NO_ERROR;;
- RtAudio::DeviceInfo info = audio->audio->getDeviceInfo(i);
- result.probed = info.probed;
- result.output_channels = info.outputChannels;
- result.input_channels = info.inputChannels;
- result.duplex_channels = info.duplexChannels;
- result.is_default_output = info.isDefaultOutput;
- result.is_default_input = info.isDefaultInput;
- result.native_formats = info.nativeFormats;
- result.preferred_sample_rate = info.preferredSampleRate;
- strncpy(result.name, info.name.c_str(), sizeof(result.name) - 1);
- for (unsigned int j = 0; j < info.sampleRates.size(); j++) {
- if (j < sizeof(result.sample_rates) / sizeof(result.sample_rates[0])) {
- result.sample_rates[j] = info.sampleRates[j];
- }
+
+ audio->errtype = RTAUDIO_ERROR_NONE;
+ RtAudio::DeviceInfo info = audio->audio->getDeviceInfo(i);
+ if (audio->errtype != RTAUDIO_ERROR_NONE)
+ return result;
+
+ result.probed = info.probed;
+ result.output_channels = info.outputChannels;
+ result.input_channels = info.inputChannels;
+ result.duplex_channels = info.duplexChannels;
+ result.is_default_output = info.isDefaultOutput;
+ result.is_default_input = info.isDefaultInput;
+ result.native_formats = info.nativeFormats;
+ result.preferred_sample_rate = info.preferredSampleRate;
+ strncpy(result.name, info.name.c_str(), sizeof(result.name) - 1);
+ for (unsigned int j = 0; j < info.sampleRates.size(); j++) {
+ if (j < sizeof(result.sample_rates) / sizeof(result.sample_rates[0])) {
+ result.sample_rates[j] = info.sampleRates[j];
}
- } catch (RtAudioError &err) {
- audio->errtype = (rtaudio_error_t)err.getType();
- strncpy(audio->errmsg, err.what(), sizeof(audio->errmsg) - 1);
}
return result;
}
@@ -130,84 +128,64 @@ int rtaudio_open_stream(rtaudio_t audio,
rtaudio_format_t format, unsigned int sample_rate,
unsigned int *buffer_frames, rtaudio_cb_t cb,
void *userdata, rtaudio_stream_options_t *options,
- rtaudio_error_cb_t /*errcb*/) {
- try {
- audio->errtype = RTAUDIO_NO_ERROR;;
- RtAudio::StreamParameters *in = NULL;
- RtAudio::StreamParameters *out = NULL;
- RtAudio::StreamOptions *opts = NULL;
-
- RtAudio::StreamParameters inparams;
- RtAudio::StreamParameters outparams;
- RtAudio::StreamOptions stream_opts;
-
- if (input_params != NULL) {
- inparams.deviceId = input_params->device_id;
- inparams.nChannels = input_params->num_channels;
- inparams.firstChannel = input_params->first_channel;
- in = &inparams;
- }
- if (output_params != NULL) {
- outparams.deviceId = output_params->device_id;
- outparams.nChannels = output_params->num_channels;
- outparams.firstChannel = output_params->first_channel;
- out = &outparams;
- }
+ rtaudio_error_cb_t /*errcb*/)
+{
+ audio->errtype = RTAUDIO_ERROR_NONE;
+ RtAudio::StreamParameters *in = NULL;
+ RtAudio::StreamParameters *out = NULL;
+ RtAudio::StreamOptions *opts = NULL;
+
+ RtAudio::StreamParameters inparams;
+ RtAudio::StreamParameters outparams;
+ RtAudio::StreamOptions stream_opts;
+
+ if (input_params != NULL) {
+ inparams.deviceId = input_params->device_id;
+ inparams.nChannels = input_params->num_channels;
+ inparams.firstChannel = input_params->first_channel;
+ in = &inparams;
+ }
+ if (output_params != NULL) {
+ outparams.deviceId = output_params->device_id;
+ outparams.nChannels = output_params->num_channels;
+ outparams.firstChannel = output_params->first_channel;
+ out = &outparams;
+ }
- if (options != NULL) {
- stream_opts.flags = (RtAudioStreamFlags)options->flags;
- stream_opts.numberOfBuffers = options->num_buffers;
- stream_opts.priority = options->priority;
- if (strlen(options->name) > 0) {
- stream_opts.streamName = std::string(options->name);
- }
- opts = &stream_opts;
+ if (options != NULL) {
+ stream_opts.flags = (RtAudioStreamFlags)options->flags;
+ stream_opts.numberOfBuffers = options->num_buffers;
+ stream_opts.priority = options->priority;
+ if (strlen(options->name) > 0) {
+ stream_opts.streamName = std::string(options->name);
}
- audio->cb = cb;
- audio->userdata = userdata;
- audio->audio->openStream(out, in, (RtAudioFormat)format, sample_rate,
- buffer_frames, proxy_cb_func, (void *)audio, opts); //, NULL);
- return 0;
- } catch (RtAudioError &err) {
- audio->errtype = (rtaudio_error_t)err.getType();
- strncpy(audio->errmsg, err.what(), sizeof(audio->errmsg) - 1);
- return -1;
+ opts = &stream_opts;
}
+ audio->cb = cb;
+ audio->userdata = userdata;
+ audio->audio->openStream(out, in, (RtAudioFormat)format, sample_rate,
+ buffer_frames, proxy_cb_func, (void *)audio, opts); //, NULL);
+ return audio->errtype;
}
void rtaudio_close_stream(rtaudio_t audio) { audio->audio->closeStream(); }
int rtaudio_start_stream(rtaudio_t audio) {
- try {
- audio->errtype = RTAUDIO_NO_ERROR;;
- audio->audio->startStream();
- } catch (RtAudioError &err) {
- audio->errtype = (rtaudio_error_t)err.getType();
- strncpy(audio->errmsg, err.what(), sizeof(audio->errmsg) - 1);
- }
- return 0;
+ audio->errtype = RTAUDIO_ERROR_NONE;
+ audio->audio->startStream();
+ return audio->errtype;
}
int rtaudio_stop_stream(rtaudio_t audio) {
- try {
- audio->errtype = RTAUDIO_NO_ERROR;;
- audio->audio->stopStream();
- } catch (RtAudioError &err) {
- audio->errtype = (rtaudio_error_t)err.getType();
- strncpy(audio->errmsg, err.what(), sizeof(audio->errmsg) - 1);
- }
- return 0;
+ audio->errtype = RTAUDIO_ERROR_NONE;
+ audio->audio->stopStream();
+ return audio->errtype;
}
int rtaudio_abort_stream(rtaudio_t audio) {
- try {
- audio->errtype = RTAUDIO_NO_ERROR;;
- audio->audio->abortStream();
- } catch (RtAudioError &err) {
- audio->errtype = (rtaudio_error_t)err.getType();
- strncpy(audio->errmsg, err.what(), sizeof(audio->errmsg) - 1);
- }
- return 0;
+ audio->errtype = RTAUDIO_ERROR_NONE;
+ audio->audio->abortStream();
+ return audio->errtype;
}
int rtaudio_is_stream_open(rtaudio_t audio) {
@@ -219,46 +197,23 @@ int rtaudio_is_stream_running(rtaudio_t audio) {
}
double rtaudio_get_stream_time(rtaudio_t audio) {
- try {
- audio->errtype = RTAUDIO_NO_ERROR;;
- return audio->audio->getStreamTime();
- } catch (RtAudioError &err) {
- audio->errtype = (rtaudio_error_t)err.getType();
- strncpy(audio->errmsg, err.what(), sizeof(audio->errmsg) - 1);
- return 0;
- }
+ audio->errtype = RTAUDIO_ERROR_NONE;
+ return audio->audio->getStreamTime();
}
void rtaudio_set_stream_time(rtaudio_t audio, double time) {
- try {
- audio->errtype = RTAUDIO_NO_ERROR;;
- audio->audio->setStreamTime(time);
- } catch (RtAudioError &err) {
- audio->errtype = (rtaudio_error_t)err.getType();
- strncpy(audio->errmsg, err.what(), sizeof(audio->errmsg) - 1);
- }
+ audio->errtype = RTAUDIO_ERROR_NONE;
+ audio->audio->setStreamTime(time);
}
int rtaudio_get_stream_latency(rtaudio_t audio) {
- try {
- audio->errtype = RTAUDIO_NO_ERROR;
- return audio->audio->getStreamLatency();
- } catch (RtAudioError &err) {
- audio->errtype = (rtaudio_error_t)err.getType();
- strncpy(audio->errmsg, err.what(), sizeof(audio->errmsg) - 1);
- return -1;
- }
+ audio->errtype = RTAUDIO_ERROR_NONE;
+ return audio->audio->getStreamLatency();
}
unsigned int rtaudio_get_stream_sample_rate(rtaudio_t audio) {
- try {
- audio->errtype = RTAUDIO_NO_ERROR;
- return audio->audio->getStreamSampleRate();
- } catch (RtAudioError &err) {
- audio->errtype = (rtaudio_error_t)err.getType();
- strncpy(audio->errmsg, err.what(), sizeof(audio->errmsg) - 1);
- return -1;
- }
+ audio->errtype = RTAUDIO_ERROR_NONE;
+ return audio->audio->getStreamSampleRate();
}
void rtaudio_show_warnings(rtaudio_t audio, int show) {