cannam@124: #ifndef INCLUDED_PORTAUDIO_DEVICE_HXX cannam@124: #define INCLUDED_PORTAUDIO_DEVICE_HXX cannam@124: cannam@124: // --------------------------------------------------------------------------------------- cannam@124: cannam@124: #include cannam@124: cannam@124: #include "portaudio.h" cannam@124: cannam@124: #include "portaudiocpp/SampleDataFormat.hxx" cannam@124: cannam@124: // --------------------------------------------------------------------------------------- cannam@124: cannam@124: // Forward declaration(s): cannam@124: namespace portaudio cannam@124: { cannam@124: class System; cannam@124: class HostApi; cannam@124: } cannam@124: cannam@124: // --------------------------------------------------------------------------------------- cannam@124: cannam@124: // Declaration(s): cannam@124: namespace portaudio cannam@124: { cannam@124: cannam@124: ////// cannam@124: /// @brief Class which represents a PortAudio device in the System. cannam@124: /// cannam@124: /// A single physical device in the system may have multiple PortAudio cannam@124: /// Device representations using different HostApi 's though. A Device cannam@124: /// can be half-duplex or full-duplex. A half-duplex Device can be used cannam@124: /// to create a half-duplex Stream. A full-duplex Device can be used to cannam@124: /// create a full-duplex Stream. If supported by the HostApi, two cannam@124: /// half-duplex Devices can even be used to create a full-duplex Stream. cannam@124: /// cannam@124: /// Note that Device objects are very light-weight and can be passed around cannam@124: /// by-value. cannam@124: ////// cannam@124: class Device cannam@124: { cannam@124: public: cannam@124: // query info: name, max in channels, max out channels, cannam@124: // default low/hight input/output latency, default sample rate cannam@124: PaDeviceIndex index() const; cannam@124: const char *name() const; cannam@124: int maxInputChannels() const; cannam@124: int maxOutputChannels() const; cannam@124: PaTime defaultLowInputLatency() const; cannam@124: PaTime defaultHighInputLatency() const; cannam@124: PaTime defaultLowOutputLatency() const; cannam@124: PaTime defaultHighOutputLatency() const; cannam@124: double defaultSampleRate() const; cannam@124: cannam@124: bool isInputOnlyDevice() const; // extended cannam@124: bool isOutputOnlyDevice() const; // extended cannam@124: bool isFullDuplexDevice() const; // extended cannam@124: bool isSystemDefaultInputDevice() const; // extended cannam@124: bool isSystemDefaultOutputDevice() const; // extended cannam@124: bool isHostApiDefaultInputDevice() const; // extended cannam@124: bool isHostApiDefaultOutputDevice() const; // extended cannam@124: cannam@124: bool operator==(const Device &rhs); cannam@124: bool operator!=(const Device &rhs); cannam@124: cannam@124: // host api reference cannam@124: HostApi &hostApi(); cannam@124: const HostApi &hostApi() const; cannam@124: cannam@124: private: cannam@124: PaDeviceIndex index_; cannam@124: const PaDeviceInfo *info_; cannam@124: cannam@124: private: cannam@124: friend class System; cannam@124: cannam@124: explicit Device(PaDeviceIndex index); cannam@124: ~Device(); cannam@124: cannam@124: Device(const Device &); // non-copyable cannam@124: Device &operator=(const Device &); // non-copyable cannam@124: }; cannam@124: cannam@124: // ----------------------------------------------------------------------------------- cannam@124: cannam@124: } // namespace portaudio cannam@124: cannam@124: // --------------------------------------------------------------------------------------- cannam@124: cannam@124: #endif // INCLUDED_PORTAUDIO_DEVICE_HXX cannam@124: