PortAudioIO::ErrorCode err;
- err = _pcmio->pcm_setup(name_to_id(_input_audio_device),
- name_to_id(_output_audio_device),
- _samplerate,
- _samples_per_period);
+ err = _pcmio->open_blocking_stream(name_to_id(_input_audio_device),
+ name_to_id(_output_audio_device),
+ _samplerate,
+ _samples_per_period);
switch (err) {
case PortAudioIO::NoError:
if (timeout == 0 || !_active) {
DEBUG_AUDIO("Failed to start main audio thread\n");
- _pcmio->pcm_stop();
+ _pcmio->close_stream();
_run = false;
unregister_ports();
_active = false;
manager.registration_callback();
manager.graph_order_callback();
- if (_pcmio->pcm_start()) {
- _pcmio->pcm_stop ();
+ if (_pcmio->start_stream() != PortAudioIO::NoError) {
+ _pcmio->close_stream ();
_active = false;
engine.halted_callback(get_error_string(AudioDeviceIOError).c_str());
}
/* call engine process callback */
if (engine.process_callback (_samples_per_period)) {
- _pcmio->pcm_stop ();
+ _pcmio->close_stream ();
_active = false;
return 0;
}
// TODO clear midi or stop midi recv when entering fwheelin'
if (engine.process_callback (_samples_per_period)) {
- _pcmio->pcm_stop ();
+ _pcmio->close_stream();
_active = false;
return 0;
}
}
}
- _pcmio->pcm_stop ();
+ _pcmio->close_stream();
_active = false;
if (_run) {
engine.halted_callback(get_error_string(AudioDeviceIOError).c_str());
PortAudioIO::~PortAudioIO ()
{
- pcm_stop();
+ close_stream();
pa_deinitialize ();
clear_device_lists ();
_cur_output_latency = 0;
}
-void
-PortAudioIO::pcm_stop ()
+PortAudioIO::ErrorCode
+PortAudioIO::close_stream()
{
- if (_stream) {
- Pa_CloseStream (_stream);
+ if (!_stream) return NoError;
+
+ PaError err = Pa_CloseStream (_stream);
+
+ if (err != paNoError) {
+ return StreamCloseError;
}
_stream = NULL;
free (_input_buffer); _input_buffer = NULL;
free (_output_buffer); _output_buffer = NULL;
+ return NoError;
}
-int
-PortAudioIO::pcm_start()
+PortAudioIO::ErrorCode
+PortAudioIO::start_stream()
{
PaError err = Pa_StartStream (_stream);
if (err != paNoError) {
- return -1;
+ return StreamStartError;
}
- return 0;
+ return NoError;
}
bool
}
PortAudioIO::ErrorCode
-PortAudioIO::pcm_setup(int device_input,
- int device_output,
- double sample_rate,
- uint32_t samples_per_period)
+PortAudioIO::open_blocking_stream(int device_input,
+ int device_output,
+ double sample_rate,
+ uint32_t samples_per_period)
{
PaStreamParameters inputParam;
PaStreamParameters outputParam;
if (!set_sample_rate_and_latency_from_stream()) {
DEBUG_AUDIO ("PortAudio failed to query stream information.\n");
- pcm_stop();
+ close_stream();
return StreamOpenError;
}
if (!allocate_buffers_for_blocking_api(samples_per_period)) {
- pcm_stop();
+ close_stream();
return StreamOpenError;
}
return NoError;
std::string control_app_name (int device_id) const;
void launch_control_app (int device_id);
- void pcm_stop (void);
- int pcm_start (void);
+ ErrorCode open_blocking_stream(int device_input,
+ int device_output,
+ double sample_rate,
+ uint32_t samples_per_period);
+ ErrorCode start_stream(void);
- ErrorCode pcm_setup(int device_input,
- int device_output,
- double sample_rate,
- uint32_t samples_per_period);
+ ErrorCode close_stream(void);
uint32_t n_playback_channels (void) const { return _playback_channels; }
uint32_t n_capture_channels (void) const { return _capture_channels; }