cannam@89: #include "portaudiocpp/AsioDeviceAdapter.hxx" cannam@89: cannam@89: #include "portaudio.h" cannam@89: #include "pa_asio.h" cannam@89: cannam@89: #include "portaudiocpp/Device.hxx" cannam@89: #include "portaudiocpp/HostApi.hxx" cannam@89: #include "portaudiocpp/Exception.hxx" cannam@89: cannam@89: namespace portaudio cannam@89: { cannam@89: AsioDeviceAdapter::AsioDeviceAdapter(Device &device) cannam@89: { cannam@89: if (device.hostApi().typeId() != paASIO) cannam@89: throw PaCppException(PaCppException::UNABLE_TO_ADAPT_DEVICE); cannam@89: cannam@89: device_ = &device; cannam@89: cannam@89: PaError err = PaAsio_GetAvailableLatencyValues(device_->index(), &minBufferSize_, &maxBufferSize_, cannam@89: &preferredBufferSize_, &granularity_); cannam@89: cannam@89: if (err != paNoError) cannam@89: throw PaException(err); cannam@89: cannam@89: } cannam@89: cannam@89: Device &AsioDeviceAdapter::device() cannam@89: { cannam@89: return *device_; cannam@89: } cannam@89: cannam@89: long AsioDeviceAdapter::minBufferSize() const cannam@89: { cannam@89: return minBufferSize_; cannam@89: } cannam@89: cannam@89: long AsioDeviceAdapter::maxBufferSize() const cannam@89: { cannam@89: return maxBufferSize_; cannam@89: } cannam@89: cannam@89: long AsioDeviceAdapter::preferredBufferSize() const cannam@89: { cannam@89: return preferredBufferSize_; cannam@89: } cannam@89: cannam@89: long AsioDeviceAdapter::granularity() const cannam@89: { cannam@89: return granularity_; cannam@89: } cannam@89: cannam@89: void AsioDeviceAdapter::showControlPanel(void *systemSpecific) cannam@89: { cannam@89: PaError err = PaAsio_ShowControlPanel(device_->index(), systemSpecific); cannam@89: cannam@89: if (err != paNoError) cannam@89: throw PaException(err); cannam@89: } cannam@89: cannam@89: const char *AsioDeviceAdapter::inputChannelName(int channelIndex) const cannam@89: { cannam@89: const char *channelName; cannam@89: PaError err = PaAsio_GetInputChannelName(device_->index(), channelIndex, &channelName); cannam@89: cannam@89: if (err != paNoError) cannam@89: throw PaException(err); cannam@89: cannam@89: return channelName; cannam@89: } cannam@89: cannam@89: const char *AsioDeviceAdapter::outputChannelName(int channelIndex) const cannam@89: { cannam@89: const char *channelName; cannam@89: PaError err = PaAsio_GetOutputChannelName(device_->index(), channelIndex, &channelName); cannam@89: cannam@89: if (err != paNoError) cannam@89: throw PaException(err); cannam@89: cannam@89: return channelName; cannam@89: } cannam@89: } cannam@89: cannam@89: