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
							 |