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