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