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