Spaces:
Runtime error
Runtime error
namespace portaudio | |
{ | |
// ----------------------------------------------------------------------------------- | |
Stream::Stream() : stream_(NULL) | |
{ | |
} | |
Stream::~Stream() | |
{ | |
// (can't call close here, | |
// the derived class should atleast call | |
// close() in it's deconstructor) | |
} | |
// ----------------------------------------------------------------------------------- | |
////// | |
/// Closes the Stream if it's open, else does nothing. | |
////// | |
void Stream::close() | |
{ | |
if (isOpen() && System::exists()) | |
{ | |
PaError err = Pa_CloseStream(stream_); | |
stream_ = NULL; | |
if (err != paNoError) | |
throw PaException(err); | |
} | |
} | |
////// | |
/// Returns true if the Stream is open. | |
////// | |
bool Stream::isOpen() const | |
{ | |
return (stream_ != NULL); | |
} | |
// ----------------------------------------------------------------------------------- | |
void Stream::setStreamFinishedCallback(PaStreamFinishedCallback *callback) | |
{ | |
PaError err = Pa_SetStreamFinishedCallback(stream_, callback); | |
if (err != paNoError) | |
throw PaException(err); | |
} | |
// ----------------------------------------------------------------------------------- | |
void Stream::start() | |
{ | |
PaError err = Pa_StartStream(stream_); | |
if (err != paNoError) | |
throw PaException(err); | |
} | |
void Stream::stop() | |
{ | |
PaError err = Pa_StopStream(stream_); | |
if (err != paNoError) | |
throw PaException(err); | |
} | |
void Stream::abort() | |
{ | |
PaError err = Pa_AbortStream(stream_); | |
if (err != paNoError) | |
throw PaException(err); | |
} | |
bool Stream::isStopped() const | |
{ | |
PaError ret = Pa_IsStreamStopped(stream_); | |
if (ret < 0) | |
throw PaException(ret); | |
return (ret == 1); | |
} | |
bool Stream::isActive() const | |
{ | |
PaError ret = Pa_IsStreamActive(stream_); | |
if (ret < 0) | |
throw PaException(ret); | |
return (ret == 1); | |
} | |
// ----------------------------------------------------------------------------------- | |
////// | |
/// Returns the best known input latency for the Stream. This value may differ from the | |
/// suggested input latency set in the StreamParameters. Includes all sources of | |
/// latency known to PortAudio such as internal buffering, and Host API reported latency. | |
/// Doesn't include any estimates of unknown latency. | |
////// | |
PaTime Stream::inputLatency() const | |
{ | |
const PaStreamInfo *info = Pa_GetStreamInfo(stream_); | |
if (info == NULL) | |
{ | |
throw PaException(paInternalError); | |
return PaTime(0.0); | |
} | |
return info->inputLatency; | |
} | |
////// | |
/// Returns the best known output latency for the Stream. This value may differ from the | |
/// suggested output latency set in the StreamParameters. Includes all sources of | |
/// latency known to PortAudio such as internal buffering, and Host API reported latency. | |
/// Doesn't include any estimates of unknown latency. | |
////// | |
PaTime Stream::outputLatency() const | |
{ | |
const PaStreamInfo *info = Pa_GetStreamInfo(stream_); | |
if (info == NULL) | |
{ | |
throw PaException(paInternalError); | |
return PaTime(0.0); | |
} | |
return info->outputLatency; | |
} | |
////// | |
/// Returns the sample rate of the Stream. Usually this will be the | |
/// best known estimate of the used sample rate. For instance when opening a | |
/// Stream setting 44100.0 Hz in the StreamParameters, the actual sample | |
/// rate might be something like 44103.2 Hz (due to imperfections in the | |
/// sound card hardware). | |
////// | |
double Stream::sampleRate() const | |
{ | |
const PaStreamInfo *info = Pa_GetStreamInfo(stream_); | |
if (info == NULL) | |
{ | |
throw PaException(paInternalError); | |
return 0.0; | |
} | |
return info->sampleRate; | |
} | |
// ----------------------------------------------------------------------------------- | |
PaTime Stream::time() const | |
{ | |
return Pa_GetStreamTime(stream_); | |
} | |
// ----------------------------------------------------------------------------------- | |
////// | |
/// Accessor (const) for PortAudio PaStream pointer, useful for interfacing with | |
/// PortAudio add-ons such as PortMixer for instance. Normally accessing this | |
/// pointer should not be needed as PortAudioCpp aims to provide all of PortAudio's | |
/// functionality. | |
////// | |
const PaStream *Stream::paStream() const | |
{ | |
return stream_; | |
} | |
////// | |
/// Accessor (non-const) for PortAudio PaStream pointer, useful for interfacing with | |
/// PortAudio add-ons such as PortMixer for instance. Normally accessing this | |
/// pointer should not be needed as PortAudioCpp aims to provide all of PortAudio's | |
/// functionality. | |
////// | |
PaStream *Stream::paStream() | |
{ | |
return stream_; | |
} | |
// ----------------------------------------------------------------------------------- | |
} // namespace portaudio | |