mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-06 17:13:49 +01:00
Reverting r12850...hopefully
Never removed one before, but I'm pretty sure it is correct.
This commit is contained in:
@@ -1,195 +1,195 @@
|
||||
#include "portaudiocpp/Stream.hxx"
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
#include "portaudiocpp/Exception.hxx"
|
||||
#include "portaudiocpp/System.hxx"
|
||||
|
||||
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
|
||||
#include "portaudiocpp/Stream.hxx"
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
#include "portaudiocpp/Exception.hxx"
|
||||
#include "portaudiocpp/System.hxx"
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user