#ifndef __A2BWAVOUTPUT_H_ #define __A2BWAVOUTPUT_H_ #ifdef __cplusplus #include "icsneo/communication/message/callback/streamoutput/streamoutput.h" #include "icsneo/communication/message/a2bmessage.h" #include #include namespace icsneo { class A2BWAVOutput : public StreamOutput { public: A2BWAVOutput(const char* filename, uint32_t sampleRate = A2BPCM_SAMPLERATE_44100) : wavSampleRate(sampleRate), StreamOutput(filename) {} A2BWAVOutput(std::unique_ptr&& os, uint32_t sampleRate = A2BPCM_SAMPLERATE_44100) : wavSampleRate(sampleRate), StreamOutput(std::move(os)) {} void writeHeader(const std::shared_ptr& firstMsg) const; bool callIfMatch(const std::shared_ptr& message) const override; void close() const; ~A2BWAVOutput() { if(!closed) { close(); } } protected: bool writeSamples(const std::shared_ptr& msg, A2BMessage::A2BDirection dir) const; uint32_t wavSampleRate; mutable uint32_t streamStartPos; mutable bool firstMessageFlag = true; mutable bool closed = false; }; } #endif // __cplusplus #endif