82 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			2.3 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
							 |