 165b814f5d
			
		
	
	
		165b814f5d
		
	
	
	
	
		
			
			this is necessary in order to get Furnace to build using CMake 4.0. you should do: git submodule deinit extern/portaudio
		
			
				
	
	
		
			167 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "portaudiocpp/Device.hxx"
 | |
| 
 | |
| #include <cstddef>
 | |
| 
 | |
| #include "portaudiocpp/HostApi.hxx"
 | |
| #include "portaudiocpp/System.hxx"
 | |
| #include "portaudiocpp/Exception.hxx"
 | |
| 
 | |
| namespace portaudio
 | |
| {
 | |
| 
 | |
|         // -------------------------------------------------------------------------------
 | |
| 
 | |
|         Device::Device(PaDeviceIndex index) : index_(index)
 | |
|         {
 | |
|             if (index == paNoDevice)
 | |
|                 info_ = NULL;
 | |
|             else
 | |
|                 info_ = Pa_GetDeviceInfo(index);
 | |
|         }
 | |
| 
 | |
|         Device::~Device()
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         PaDeviceIndex Device::index() const
 | |
|         {
 | |
|             return index_;
 | |
|         }
 | |
| 
 | |
|         const char *Device::name() const
 | |
|         {
 | |
|             if (info_ == NULL)
 | |
|                 return "";
 | |
| 
 | |
|             return info_->name;
 | |
|         }
 | |
| 
 | |
|         int Device::maxInputChannels() const
 | |
|         {
 | |
|             if (info_ == NULL)
 | |
|                 return 0;
 | |
| 
 | |
|             return info_->maxInputChannels;
 | |
|         }
 | |
| 
 | |
|         int Device::maxOutputChannels() const
 | |
|         {
 | |
|             if (info_ == NULL)
 | |
|                 return 0;
 | |
| 
 | |
|             return info_->maxOutputChannels;
 | |
|         }
 | |
| 
 | |
|         PaTime Device::defaultLowInputLatency() const
 | |
|         {
 | |
|             if (info_ == NULL)
 | |
|                 return static_cast<PaTime>(0.0);
 | |
| 
 | |
|             return info_->defaultLowInputLatency;
 | |
|         }
 | |
| 
 | |
|         PaTime Device::defaultHighInputLatency() const
 | |
|         {
 | |
|             if (info_ == NULL)
 | |
|                 return static_cast<PaTime>(0.0);
 | |
| 
 | |
|             return info_->defaultHighInputLatency;
 | |
|         }
 | |
| 
 | |
|         PaTime Device::defaultLowOutputLatency() const
 | |
|         {
 | |
|             if (info_ == NULL)
 | |
|                 return static_cast<PaTime>(0.0);
 | |
| 
 | |
|             return info_->defaultLowOutputLatency;
 | |
|         }
 | |
| 
 | |
|         PaTime Device::defaultHighOutputLatency() const
 | |
|         {
 | |
|             if (info_ == NULL)
 | |
|                 return static_cast<PaTime>(0.0);
 | |
| 
 | |
|             return info_->defaultHighOutputLatency;
 | |
|         }
 | |
| 
 | |
|         double Device::defaultSampleRate() const
 | |
|         {
 | |
|             if (info_ == NULL)
 | |
|                 return 0.0;
 | |
| 
 | |
|             return info_->defaultSampleRate;
 | |
|         }
 | |
| 
 | |
|         // -------------------------------------------------------------------------------
 | |
| 
 | |
|         bool Device::isInputOnlyDevice() const
 | |
|         {
 | |
|             return (maxOutputChannels() == 0);
 | |
|         }
 | |
| 
 | |
|         bool Device::isOutputOnlyDevice() const
 | |
|         {
 | |
|             return (maxInputChannels() == 0);
 | |
|         }
 | |
| 
 | |
|         bool Device::isFullDuplexDevice() const
 | |
|         {
 | |
|             return (maxInputChannels() > 0 && maxOutputChannels() > 0);
 | |
|         }
 | |
| 
 | |
|         bool Device::isSystemDefaultInputDevice() const
 | |
|         {
 | |
|             return (System::instance().defaultInputDevice() == *this);
 | |
|         }
 | |
| 
 | |
|         bool Device::isSystemDefaultOutputDevice() const
 | |
|         {
 | |
|             return (System::instance().defaultOutputDevice() == *this);
 | |
|         }
 | |
| 
 | |
|         bool Device::isHostApiDefaultInputDevice() const
 | |
|         {
 | |
|             return (hostApi().defaultInputDevice() == *this);
 | |
|         }
 | |
| 
 | |
|         bool Device::isHostApiDefaultOutputDevice() const
 | |
|         {
 | |
|             return (hostApi().defaultOutputDevice() == *this);
 | |
|         }
 | |
| 
 | |
|         // -------------------------------------------------------------------------------
 | |
| 
 | |
|         bool Device::operator==(const Device &rhs) const
 | |
|         {
 | |
|             return (index_ == rhs.index_);
 | |
|         }
 | |
| 
 | |
|         bool Device::operator!=(const Device &rhs) const
 | |
|         {
 | |
|             return !(*this == rhs);
 | |
|         }
 | |
| 
 | |
|         // -------------------------------------------------------------------------------
 | |
| 
 | |
|         HostApi &Device::hostApi()
 | |
|         {
 | |
|             // NOTE: will cause an exception when called for the null device
 | |
|             if (info_ == NULL)
 | |
|                 throw PaException(paInternalError);
 | |
| 
 | |
|             return System::instance().hostApiByIndex(info_->hostApi);
 | |
|         }
 | |
| 
 | |
|         const HostApi &Device::hostApi() const
 | |
|         {
 | |
|             // NOTE; will cause an exception when called for the null device
 | |
|             if (info_ == NULL)
 | |
|                 throw PaException(paInternalError);
 | |
| 
 | |
|             return System::instance().hostApiByIndex(info_->hostApi);
 | |
|         }
 | |
| 
 | |
|         // -------------------------------------------------------------------------------
 | |
| 
 | |
| } // namespace portaudio
 |