 165b814f5d
			
		
	
	
		165b814f5d
		
	
	
	
	
		
			
			this is necessary in order to get Furnace to build using CMake 4.0. you should do: git submodule deinit extern/portaudio
		
			
				
	
	
		
			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
 |