ConsistencyCompareThread.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #ifndef CONSISTENCYCOMPARETHREAD_H_
  2. #define CONSISTENCYCOMPARETHREAD_H_
  3. #include "BaseCalculateThread.h"
  4. #include "RingQueueManualMutex.hpp"
  5. #include "AudioData.h"
  6. #include "ConsistencyResult.h"
  7. class CreateWAVThread;
  8. /**
  9. * @brief 计算一致性的线程类
  10. * 1、一致性对比线程是调用动态库对比,没有对比参数,不和对比项有关联
  11. *
  12. */
  13. class ConsistencyCompareThread : public BaseCalculateThread
  14. {
  15. public:
  16. ConsistencyCompareThread(CalculateThreadInfo_t& threadInfo);
  17. ~ConsistencyCompareThread() override;
  18. /* 获取一致性比对的结果 */
  19. StConsistencyResult getConsistencyResult();
  20. /* 判断录音通道是否相等 */
  21. bool isRoadEqual(const SoundCardRoadInfo_t& roadInfo1, const SoundCardRoadInfo_t& roadInfo2);
  22. protected:
  23. /* 线程功能函数 */
  24. void task() override;
  25. /* 初始化数据 */
  26. bool initData() override;
  27. /* 清理数据 */
  28. void clearData() override;
  29. private:
  30. /* 比对两个wav文件的一致性 */
  31. bool compareConsistency();
  32. private:
  33. /* 两个录音通道的信息 */
  34. SoundCardRoadInfo_t m_roadInfo1; /* 录音通道1信息,这里不使用通道num */
  35. SoundCardRoadInfo_t m_roadInfo2; /* 录音通道2信息 */
  36. /* 两个录音通道的线程指针,直接通过录音类获取最新的数据 */
  37. CreateWAVThread* m_pCreateWAVThread1 = nullptr; /* 通道1的录音线程 */
  38. CreateWAVThread* m_pCreateWAVThread2 = nullptr; /* 通道2的录音线程 */
  39. WavFilePath m_wavFilePath1; /* 通道1的wav文件路径 */
  40. WavFilePath m_wavFilePath2; /* 通道2的wav文件路径 */
  41. WavFilePath m_prevWavFilePath1; /* 通道1的上一个wav文件路径 */
  42. WavFilePath m_prevWavFilePath2; /* 通道2的上一个wav文件路径 */
  43. double m_sensitivity = 20.0; /* 比对灵敏度,默认20,范围[0-100] */
  44. std::mutex m_mutexResult; /* 互斥锁,一致性比对的结果 */
  45. StConsistencyResult m_consistencyResult; /* 一致性计算结果 */
  46. double m_similarity = 0.0; /* 比对结果相似度 */
  47. };
  48. #endif // CONSISTENCYCOMPARETHREAD_H_