BaseRecordThread.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #ifndef _BASERECORDTHREAD_H_
  2. #define _BASERECORDTHREAD_H_
  3. #include "GlobalVariable.h"
  4. #include "spdlog/spdlog.h"
  5. class QDateTime;
  6. struct AudioSrcData;
  7. class BaseRecordThread
  8. {
  9. public:
  10. BaseRecordThread(RecordThreadInfo_t& threadInfo);
  11. virtual ~BaseRecordThread();
  12. /* 线程任务函数,子类需要实现 */
  13. virtual void threadTask() = 0;
  14. /* 停止线程 */
  15. virtual void stopThread();
  16. /* 获取录音通道信息 */
  17. RecordThreadInfo_t getThreadInfo();
  18. /* 设置数据 */
  19. virtual bool setData(const AudioSrcData& srcData) = 0;
  20. protected:
  21. /* 初始化数据 */
  22. virtual bool initData() = 0;
  23. /* 清除数据*/
  24. virtual void clearData() = 0;
  25. /* 根据当前时间和数据大小向前推算时间 */
  26. QDateTime previTime(QDateTime& currentTime, uint32_t dataSize);
  27. /*根据当前时间和数据大小向后推算时间 */
  28. QDateTime nextTime(QDateTime& currentTime, uint32_t dataSize);
  29. /* 计算出到下一个整点秒需要去掉多少个字节 */
  30. uint32_t calculateOffsetToNextSecond(QDateTime& currentTime);
  31. protected:
  32. std::shared_ptr<spdlog::logger> m_logger = nullptr; /* 日志记录器 */
  33. RecordThreadInfo_t m_threadInfo; /* 线程信息 */
  34. std::atomic_bool m_isRunning = false; /* 线程运行标志 */
  35. std::string m_logBase; /* 日志基础信息 */
  36. uint32_t m_oneSecondSize = 0; /* 每秒钟的音频数据大小 */
  37. /* 音频相关的默认参数 */
  38. uint32_t m_sampleRate = 44100; /* 采样率 */
  39. uint16_t m_numChannels = 2; /* 声道数 */
  40. uint16_t m_bitsPerSample = 16; /* 每个采样点的位数 */
  41. };
  42. #endif // _BASERECORDTHREAD_H_