annotate src/portaudio_20140130/bindings/cpp/source/portaudiocpp/Device.cxx @ 124:e3d5853d5918

Current stable PortAudio source
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 18 Oct 2016 13:11:05 +0100
parents
children
rev   line source
cannam@124 1 #include "portaudiocpp/Device.hxx"
cannam@124 2
cannam@124 3 #include <cstddef>
cannam@124 4
cannam@124 5 #include "portaudiocpp/HostApi.hxx"
cannam@124 6 #include "portaudiocpp/System.hxx"
cannam@124 7 #include "portaudiocpp/Exception.hxx"
cannam@124 8
cannam@124 9 namespace portaudio
cannam@124 10 {
cannam@124 11
cannam@124 12 // -------------------------------------------------------------------------------
cannam@124 13
cannam@124 14 Device::Device(PaDeviceIndex index) : index_(index)
cannam@124 15 {
cannam@124 16 if (index == paNoDevice)
cannam@124 17 info_ = NULL;
cannam@124 18 else
cannam@124 19 info_ = Pa_GetDeviceInfo(index);
cannam@124 20 }
cannam@124 21
cannam@124 22 Device::~Device()
cannam@124 23 {
cannam@124 24 }
cannam@124 25
cannam@124 26 PaDeviceIndex Device::index() const
cannam@124 27 {
cannam@124 28 return index_;
cannam@124 29 }
cannam@124 30
cannam@124 31 const char *Device::name() const
cannam@124 32 {
cannam@124 33 if (info_ == NULL)
cannam@124 34 return "";
cannam@124 35
cannam@124 36 return info_->name;
cannam@124 37 }
cannam@124 38
cannam@124 39 int Device::maxInputChannels() const
cannam@124 40 {
cannam@124 41 if (info_ == NULL)
cannam@124 42 return 0;
cannam@124 43
cannam@124 44 return info_->maxInputChannels;
cannam@124 45 }
cannam@124 46
cannam@124 47 int Device::maxOutputChannels() const
cannam@124 48 {
cannam@124 49 if (info_ == NULL)
cannam@124 50 return 0;
cannam@124 51
cannam@124 52 return info_->maxOutputChannels;
cannam@124 53 }
cannam@124 54
cannam@124 55 PaTime Device::defaultLowInputLatency() const
cannam@124 56 {
cannam@124 57 if (info_ == NULL)
cannam@124 58 return static_cast<PaTime>(0.0);
cannam@124 59
cannam@124 60 return info_->defaultLowInputLatency;
cannam@124 61 }
cannam@124 62
cannam@124 63 PaTime Device::defaultHighInputLatency() const
cannam@124 64 {
cannam@124 65 if (info_ == NULL)
cannam@124 66 return static_cast<PaTime>(0.0);
cannam@124 67
cannam@124 68 return info_->defaultHighInputLatency;
cannam@124 69 }
cannam@124 70
cannam@124 71 PaTime Device::defaultLowOutputLatency() const
cannam@124 72 {
cannam@124 73 if (info_ == NULL)
cannam@124 74 return static_cast<PaTime>(0.0);
cannam@124 75
cannam@124 76 return info_->defaultLowOutputLatency;
cannam@124 77 }
cannam@124 78
cannam@124 79 PaTime Device::defaultHighOutputLatency() const
cannam@124 80 {
cannam@124 81 if (info_ == NULL)
cannam@124 82 return static_cast<PaTime>(0.0);
cannam@124 83
cannam@124 84 return info_->defaultHighOutputLatency;
cannam@124 85 }
cannam@124 86
cannam@124 87 double Device::defaultSampleRate() const
cannam@124 88 {
cannam@124 89 if (info_ == NULL)
cannam@124 90 return 0.0;
cannam@124 91
cannam@124 92 return info_->defaultSampleRate;
cannam@124 93 }
cannam@124 94
cannam@124 95 // -------------------------------------------------------------------------------
cannam@124 96
cannam@124 97 bool Device::isInputOnlyDevice() const
cannam@124 98 {
cannam@124 99 return (maxOutputChannels() == 0);
cannam@124 100 }
cannam@124 101
cannam@124 102 bool Device::isOutputOnlyDevice() const
cannam@124 103 {
cannam@124 104 return (maxInputChannels() == 0);
cannam@124 105 }
cannam@124 106
cannam@124 107 bool Device::isFullDuplexDevice() const
cannam@124 108 {
cannam@124 109 return (maxInputChannels() > 0 && maxOutputChannels() > 0);
cannam@124 110 }
cannam@124 111
cannam@124 112 bool Device::isSystemDefaultInputDevice() const
cannam@124 113 {
cannam@124 114 return (System::instance().defaultInputDevice() == *this);
cannam@124 115 }
cannam@124 116
cannam@124 117 bool Device::isSystemDefaultOutputDevice() const
cannam@124 118 {
cannam@124 119 return (System::instance().defaultOutputDevice() == *this);
cannam@124 120 }
cannam@124 121
cannam@124 122 bool Device::isHostApiDefaultInputDevice() const
cannam@124 123 {
cannam@124 124 return (hostApi().defaultInputDevice() == *this);
cannam@124 125 }
cannam@124 126
cannam@124 127 bool Device::isHostApiDefaultOutputDevice() const
cannam@124 128 {
cannam@124 129 return (hostApi().defaultOutputDevice() == *this);
cannam@124 130 }
cannam@124 131
cannam@124 132 // -------------------------------------------------------------------------------
cannam@124 133
cannam@124 134 bool Device::operator==(const Device &rhs)
cannam@124 135 {
cannam@124 136 return (index_ == rhs.index_);
cannam@124 137 }
cannam@124 138
cannam@124 139 bool Device::operator!=(const Device &rhs)
cannam@124 140 {
cannam@124 141 return !(*this == rhs);
cannam@124 142 }
cannam@124 143
cannam@124 144 // -------------------------------------------------------------------------------
cannam@124 145
cannam@124 146 HostApi &Device::hostApi()
cannam@124 147 {
cannam@124 148 // NOTE: will cause an exception when called for the null device
cannam@124 149 if (info_ == NULL)
cannam@124 150 throw PaException(paInternalError);
cannam@124 151
cannam@124 152 return System::instance().hostApiByIndex(info_->hostApi);
cannam@124 153 }
cannam@124 154
cannam@124 155 const HostApi &Device::hostApi() const
cannam@124 156 {
cannam@124 157 // NOTE; will cause an exception when called for the null device
cannam@124 158 if (info_ == NULL)
cannam@124 159 throw PaException(paInternalError);
cannam@124 160
cannam@124 161 return System::instance().hostApiByIndex(info_->hostApi);
cannam@124 162 }
cannam@124 163
cannam@124 164 // -------------------------------------------------------------------------------
cannam@124 165
cannam@124 166 } // namespace portaudio
cannam@124 167
cannam@124 168