83 lines
2.1 KiB
C++
83 lines
2.1 KiB
C++
#ifndef INCLUDED_PORTAUDIO_STREAM_HXX
|
|
#define INCLUDED_PORTAUDIO_STREAM_HXX
|
|
|
|
#include "portaudio.h"
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
|
|
// Forward declaration(s):
|
|
namespace portaudio
|
|
{
|
|
class StreamParameters;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
|
|
// Declaration(s):
|
|
namespace portaudio
|
|
{
|
|
|
|
|
|
//////
|
|
/// @brief A Stream represents an active or inactive input and/or output data
|
|
/// stream in the System.
|
|
///
|
|
/// Concrete Stream classes should ensure themselves being in a closed state at
|
|
/// destruction (i.e. by calling their own close() method in their deconstructor).
|
|
/// Following good C++ programming practices, care must be taken to ensure no
|
|
/// exceptions are thrown by the deconstructor of these classes. As a consequence,
|
|
/// clients need to explicitly call close() to ensure the stream closed successfully.
|
|
///
|
|
/// The Stream object can be used to manipulate the Stream's state. Also, time-constant
|
|
/// and time-varying information about the Stream can be retrieved.
|
|
//////
|
|
class Stream
|
|
{
|
|
public:
|
|
// Opening/closing:
|
|
virtual ~Stream();
|
|
|
|
virtual void close();
|
|
bool isOpen() const;
|
|
|
|
// Additional set up:
|
|
void setStreamFinishedCallback(PaStreamFinishedCallback *callback);
|
|
|
|
// State management:
|
|
void start();
|
|
void stop();
|
|
void abort();
|
|
|
|
bool isStopped() const;
|
|
bool isActive() const;
|
|
|
|
// Stream info (time-constant, but might become time-variant soon):
|
|
PaTime inputLatency() const;
|
|
PaTime outputLatency() const;
|
|
double sampleRate() const;
|
|
|
|
// Stream info (time-varying):
|
|
PaTime time() const;
|
|
|
|
// Accessors for PortAudio PaStream, useful for interfacing
|
|
// with PortAudio add-ons (such as PortMixer) for instance:
|
|
const PaStream *paStream() const;
|
|
PaStream *paStream();
|
|
|
|
protected:
|
|
Stream(); // abstract class
|
|
|
|
PaStream *stream_;
|
|
|
|
private:
|
|
Stream(const Stream &); // non-copyable
|
|
Stream &operator=(const Stream &); // non-copyable
|
|
};
|
|
|
|
|
|
} // namespace portaudio
|
|
|
|
|
|
#endif // INCLUDED_PORTAUDIO_STREAM_HXX
|
|
|