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