diff options
| author | Stephen Sinclair <radarsat1@gmail.com> | 2020-06-05 10:12:21 +0200 |
|---|---|---|
| committer | Stephen Sinclair <radarsat1@gmail.com> | 2020-06-05 10:21:10 +0200 |
| commit | 7b534671b90286f0557bb8851d1454c0fd60b760 (patch) | |
| tree | 92c3acae274d12927d922dfde0c05ec27e1d2c60 /rtaudio_c.cpp | |
| parent | f65e492350127c2b7019bacd5cd642105f7bafd7 (diff) | |
Update C API and several backend APIs for no-exceptions branch.
Diffstat (limited to 'rtaudio_c.cpp')
| -rw-r--r-- | rtaudio_c.cpp | 199 |
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) { |
