RecordThread.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #ifndef _RECORDTHREAD_H_
  2. #define _RECORDTHREAD_H_
  3. #include <mutex>
  4. #include <condition_variable>
  5. #include "AudioData.h"
  6. #include "RingQueue.hpp"
  7. #include "GlobalVariable.h"
  8. #include "BaseRecordThread.h"
  9. #include "AudioRecord.h"
  10. #include "spdlog/spdlog.h"
  11. #define RECORD_READFILE true
  12. class AssignSrcDataThread;
  13. /**
  14. * @brief 获取原始音频数据的线程
  15. *
  16. */
  17. class RecordThread : public BaseRecordThread
  18. {
  19. public:
  20. RecordThread(RecordThreadInfo_t& threadInfo);
  21. ~RecordThread() override;
  22. /* 设置声卡描述符 */
  23. void setAudioRecordDesc(const std::string& desc);
  24. /* 设置分派线程的指针 */
  25. void setAssignSrcDataThread(AssignSrcDataThread* pThread);
  26. private:
  27. /* 线程任务函数 */
  28. void task() override;
  29. /* 设置数据,这里用不到 */
  30. bool setData(const AudioSrcData& srcData) override;
  31. /* 初始化数据 */
  32. bool initData() override;
  33. /* 清除数据 */
  34. void clearData() override;
  35. /* 获取AssignSrcDataThread线程 */
  36. AssignSrcDataThread* getAssignSrcDataThread();
  37. /* 测试数据 */
  38. void testOpenData();
  39. void testGetData(char* buffer, int32_t bufferSize, int32_t recordFrames);
  40. void preciseSleepMs(int ms);
  41. private:
  42. AudioRecord m_audioRecord; /* 音频录制类 */
  43. std::string m_audioRecordDesc; /* 声卡描述符 */
  44. char* m_pRecordBuffer = nullptr; /* 录音数据缓存 */
  45. int32_t m_recordBufferSize = 0; /* 录音数据缓存大小 */
  46. int32_t m_oneRecordCount = 0; /* 每次录音的音频数据大小,单位音频帧,位深度 * 通道数 */
  47. AssignSrcDataThread* m_assignThread = nullptr; /* 分派数据线程指针 */
  48. /* ---------------------- 测试数据 ---------------------- */
  49. QByteArray m_testData; /* 测试数据 */
  50. int m_testReadSize = 0; /* 已读取的数据大小 */
  51. // std::chrono::steady_clock::time_point m_testLastTime; /* 上次读取数据的时间 */
  52. };
  53. #endif // _RECORDTHREAD_H_