/** @file * @author Edouard DUPIN * @copyright 2015, Edouard DUPIN, all right reserved * @license APACHE v2.0 (see license file) */ #ifndef __AIRTIO_IO_NODE_H__ #define __AIRTIO_IO_NODE_H__ #include #include #include #include #include #include #include #include #include "Manager.h" #include #include #include #include #include namespace airtio { namespace io { class Manager; class Node { private: mutable std::mutex m_mutex; std::shared_ptr m_config; std::shared_ptr m_volume; //!< if a volume is set it is set here ... private: /** * @brief Constructor */ Node(const std::string& _name, const std::shared_ptr& _config); public: static std::shared_ptr create(const std::string& _name, const std::shared_ptr& _config); /** * @brief Destructor */ virtual ~Node(); private: std::vector > m_list; public: void interfaceAdd(const std::shared_ptr& _interface); void interfaceRemove(const std::shared_ptr& _interface); private: airtaudio::Interface m_adac; //!< Real audio interface airtaudio::DeviceInfo m_info; unsigned int m_rtaudioFrameSize; public: int32_t rtAudioCallback(void* _outputBuffer, void * _inputBuffer, unsigned int _nBufferFrames, double _streamTime, airtaudio::streamStatus _status); private: std::string m_name; public: const std::string& getName() { return m_name; } private: airtalgo::IOFormatInterface m_interfaceFormat; public: const airtalgo::IOFormatInterface& getInterfaceFormat() { return m_interfaceFormat; } private: airtalgo::IOFormatInterface m_hardwareFormat; private: bool m_isInput; public: bool isInput() { return m_isInput; } bool isOutput() { return !m_isInput; } private: void start(); void stop(); public: const std::shared_ptr& getVolume() { return m_volume; } }; } } #endif