#ifndef _BASERECORDTHREAD_H_ #define _BASERECORDTHREAD_H_ #include "GlobalVariable.h" #include "spdlog/spdlog.h" class QDateTime; struct AudioSrcData; class BaseRecordThread { public: BaseRecordThread(RecordThreadInfo_t& threadInfo); virtual ~BaseRecordThread(); /* 线程任务函数,子类需要实现 */ virtual void threadTask() = 0; /* 停止线程 */ virtual void stopThread(); /* 获取录音通道信息 */ RecordThreadInfo_t getThreadInfo(); /* 设置数据 */ virtual bool setData(const AudioSrcData& srcData) = 0; protected: /* 初始化数据 */ virtual bool initData() = 0; /* 清除数据*/ virtual void clearData() = 0; /* 根据当前时间和数据大小向前推算时间 */ QDateTime previTime(QDateTime& currentTime, uint32_t dataSize); /*根据当前时间和数据大小向后推算时间 */ QDateTime nextTime(QDateTime& currentTime, uint32_t dataSize); /* 计算出到下一个整点秒需要去掉多少个字节 */ uint32_t calculateOffsetToNextSecond(QDateTime& currentTime); protected: std::shared_ptr m_logger = nullptr; /* 日志记录器 */ RecordThreadInfo_t m_threadInfo; /* 线程信息 */ std::atomic_bool m_isRunning = false; /* 线程运行标志 */ std::string m_logBase; /* 日志基础信息 */ uint32_t m_oneSecondSize = 0; /* 每秒钟的音频数据大小 */ /* 音频相关的默认参数 */ uint32_t m_sampleRate = 44100; /* 采样率 */ uint16_t m_numChannels = 2; /* 声道数 */ uint16_t m_bitsPerSample = 16; /* 每个采样点的位数 */ }; #endif // _BASERECORDTHREAD_H_