cannam@140: #include "portaudiocpp/Device.hxx" cannam@140: cannam@140: #include cannam@140: cannam@140: #include "portaudiocpp/HostApi.hxx" cannam@140: #include "portaudiocpp/System.hxx" cannam@140: #include "portaudiocpp/Exception.hxx" cannam@140: cannam@140: namespace portaudio cannam@140: { cannam@140: cannam@140: // ------------------------------------------------------------------------------- cannam@140: cannam@140: Device::Device(PaDeviceIndex index) : index_(index) cannam@140: { cannam@140: if (index == paNoDevice) cannam@140: info_ = NULL; cannam@140: else cannam@140: info_ = Pa_GetDeviceInfo(index); cannam@140: } cannam@140: cannam@140: Device::~Device() cannam@140: { cannam@140: } cannam@140: cannam@140: PaDeviceIndex Device::index() const cannam@140: { cannam@140: return index_; cannam@140: } cannam@140: cannam@140: const char *Device::name() const cannam@140: { cannam@140: if (info_ == NULL) cannam@140: return ""; cannam@140: cannam@140: return info_->name; cannam@140: } cannam@140: cannam@140: int Device::maxInputChannels() const cannam@140: { cannam@140: if (info_ == NULL) cannam@140: return 0; cannam@140: cannam@140: return info_->maxInputChannels; cannam@140: } cannam@140: cannam@140: int Device::maxOutputChannels() const cannam@140: { cannam@140: if (info_ == NULL) cannam@140: return 0; cannam@140: cannam@140: return info_->maxOutputChannels; cannam@140: } cannam@140: cannam@140: PaTime Device::defaultLowInputLatency() const cannam@140: { cannam@140: if (info_ == NULL) cannam@140: return static_cast(0.0); cannam@140: cannam@140: return info_->defaultLowInputLatency; cannam@140: } cannam@140: cannam@140: PaTime Device::defaultHighInputLatency() const cannam@140: { cannam@140: if (info_ == NULL) cannam@140: return static_cast(0.0); cannam@140: cannam@140: return info_->defaultHighInputLatency; cannam@140: } cannam@140: cannam@140: PaTime Device::defaultLowOutputLatency() const cannam@140: { cannam@140: if (info_ == NULL) cannam@140: return static_cast(0.0); cannam@140: cannam@140: return info_->defaultLowOutputLatency; cannam@140: } cannam@140: cannam@140: PaTime Device::defaultHighOutputLatency() const cannam@140: { cannam@140: if (info_ == NULL) cannam@140: return static_cast(0.0); cannam@140: cannam@140: return info_->defaultHighOutputLatency; cannam@140: } cannam@140: cannam@140: double Device::defaultSampleRate() const cannam@140: { cannam@140: if (info_ == NULL) cannam@140: return 0.0; cannam@140: cannam@140: return info_->defaultSampleRate; cannam@140: } cannam@140: cannam@140: // ------------------------------------------------------------------------------- cannam@140: cannam@140: bool Device::isInputOnlyDevice() const cannam@140: { cannam@140: return (maxOutputChannels() == 0); cannam@140: } cannam@140: cannam@140: bool Device::isOutputOnlyDevice() const cannam@140: { cannam@140: return (maxInputChannels() == 0); cannam@140: } cannam@140: cannam@140: bool Device::isFullDuplexDevice() const cannam@140: { cannam@140: return (maxInputChannels() > 0 && maxOutputChannels() > 0); cannam@140: } cannam@140: cannam@140: bool Device::isSystemDefaultInputDevice() const cannam@140: { cannam@140: return (System::instance().defaultInputDevice() == *this); cannam@140: } cannam@140: cannam@140: bool Device::isSystemDefaultOutputDevice() const cannam@140: { cannam@140: return (System::instance().defaultOutputDevice() == *this); cannam@140: } cannam@140: cannam@140: bool Device::isHostApiDefaultInputDevice() const cannam@140: { cannam@140: return (hostApi().defaultInputDevice() == *this); cannam@140: } cannam@140: cannam@140: bool Device::isHostApiDefaultOutputDevice() const cannam@140: { cannam@140: return (hostApi().defaultOutputDevice() == *this); cannam@140: } cannam@140: cannam@140: // ------------------------------------------------------------------------------- cannam@140: cannam@140: bool Device::operator==(const Device &rhs) const cannam@140: { cannam@140: return (index_ == rhs.index_); cannam@140: } cannam@140: cannam@140: bool Device::operator!=(const Device &rhs) const cannam@140: { cannam@140: return !(*this == rhs); cannam@140: } cannam@140: cannam@140: // ------------------------------------------------------------------------------- cannam@140: cannam@140: HostApi &Device::hostApi() cannam@140: { cannam@140: // NOTE: will cause an exception when called for the null device cannam@140: if (info_ == NULL) cannam@140: throw PaException(paInternalError); cannam@140: cannam@140: return System::instance().hostApiByIndex(info_->hostApi); cannam@140: } cannam@140: cannam@140: const HostApi &Device::hostApi() const cannam@140: { cannam@140: // NOTE; will cause an exception when called for the null device cannam@140: if (info_ == NULL) cannam@140: throw PaException(paInternalError); cannam@140: cannam@140: return System::instance().hostApiByIndex(info_->hostApi); cannam@140: } cannam@140: cannam@140: // ------------------------------------------------------------------------------- cannam@140: cannam@140: } // namespace portaudio cannam@140: cannam@140: