#if!defined WAVWRITER_HPP #define WAVWRITER_HPP #include #include #include #include #include #include #include "write_wav.h" class WavWriter { static constexpr unsigned int const ChannelCount = 2u; public: using Frame = rack::Frame; enum class Errors : std::uint8_t { NoError, BufferOverflow, UnableToOpenFile }; static std::string getErrorText(Errors const error); WavWriter(); ~WavWriter(); /*! Start writing thread \param outputFilePath Output file path. This file can be already existing, but in this case it must be writable. */ void start(std::string const& outputFilePath); /*! Stop writing */ void stop(); bool isRunning()const { return m_running; } bool haveError()const { return m_error != Errors::NoError; } void clearError() { m_error = Errors::NoError; } Errors error()const { return m_error; } /*! Push data to the buffer. */ void push(Frame const& frame); private: void run(std::string const& outputFilePath); void finishThread(); private: std::vector m_buffer; std::mutex m_mutexBuffer; std::thread m_thread; std::atomic m_running; std::atomic m_error; }; #endif