91 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | #ifndef INCLUDED_PORTAUDIO_DEVICE_HXX
 | ||
|  | #define INCLUDED_PORTAUDIO_DEVICE_HXX
 | ||
|  | 
 | ||
|  | // ---------------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | #include <iterator>
 | ||
|  | 
 | ||
|  | #include "portaudio.h"
 | ||
|  | 
 | ||
|  | #include "portaudiocpp/SampleDataFormat.hxx"
 | ||
|  | 
 | ||
|  | // ---------------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | // Forward declaration(s):
 | ||
|  | namespace portaudio | ||
|  | { | ||
|  |     class System; | ||
|  |     class HostApi; | ||
|  | } | ||
|  | 
 | ||
|  | // ---------------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | // Declaration(s):
 | ||
|  | namespace portaudio | ||
|  | { | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// @brief Class which represents a PortAudio device in the System.
 | ||
|  |     ///
 | ||
|  |     /// A single physical device in the system may have multiple PortAudio
 | ||
|  |     /// Device representations using different HostApi 's though. A Device
 | ||
|  |     /// can be half-duplex or full-duplex. A half-duplex Device can be used
 | ||
|  |     /// to create a half-duplex Stream. A full-duplex Device can be used to
 | ||
|  |     /// create a full-duplex Stream. If supported by the HostApi, two
 | ||
|  |     /// half-duplex Devices can even be used to create a full-duplex Stream.
 | ||
|  |     ///
 | ||
|  |     /// Note that Device objects are very light-weight and can be passed around
 | ||
|  |     /// by-value.
 | ||
|  |     //////
 | ||
|  |     class Device | ||
|  |     { | ||
|  |     public: | ||
|  |         // query info: name, max in channels, max out channels,
 | ||
|  |         // default low/high input/output latency, default sample rate
 | ||
|  |         PaDeviceIndex index() const; | ||
|  |         const char *name() const; | ||
|  |         int maxInputChannels() const; | ||
|  |         int maxOutputChannels() const; | ||
|  |         PaTime defaultLowInputLatency() const; | ||
|  |         PaTime defaultHighInputLatency() const; | ||
|  |         PaTime defaultLowOutputLatency() const; | ||
|  |         PaTime defaultHighOutputLatency() const; | ||
|  |         double defaultSampleRate() const; | ||
|  | 
 | ||
|  |         bool isInputOnlyDevice() const; // extended
 | ||
|  |         bool isOutputOnlyDevice() const; // extended
 | ||
|  |         bool isFullDuplexDevice() const; // extended
 | ||
|  |         bool isSystemDefaultInputDevice() const; // extended
 | ||
|  |         bool isSystemDefaultOutputDevice() const; // extended
 | ||
|  |         bool isHostApiDefaultInputDevice() const; // extended
 | ||
|  |         bool isHostApiDefaultOutputDevice() const; // extended
 | ||
|  | 
 | ||
|  |         bool operator==(const Device &rhs) const; | ||
|  |         bool operator!=(const Device &rhs) const; | ||
|  | 
 | ||
|  |         // host api reference
 | ||
|  |         HostApi &hostApi(); | ||
|  |         const HostApi &hostApi() const; | ||
|  | 
 | ||
|  |     private: | ||
|  |         PaDeviceIndex index_; | ||
|  |         const PaDeviceInfo *info_; | ||
|  | 
 | ||
|  |     private: | ||
|  |         friend class System; | ||
|  | 
 | ||
|  |         explicit Device(PaDeviceIndex index); | ||
|  |         ~Device(); | ||
|  | 
 | ||
|  |         Device(const Device &); // non-copyable
 | ||
|  |         Device &operator=(const Device &); // non-copyable
 | ||
|  |     }; | ||
|  | 
 | ||
|  |     // -----------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | } // namespace portaudio
 | ||
|  | 
 | ||
|  | // ---------------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | #endif // INCLUDED_PORTAUDIO_DEVICE_HXX
 |