#ifndef CONSISTENCYCOMPARETHREAD_H_ #define CONSISTENCYCOMPARETHREAD_H_ #include "BaseCalculateThread.h" #include "RingQueueManualMutex.hpp" #include "AudioData.h" #include "ConsistencyResult.h" class CreateWAVThread; /** * @brief 计算一致性的线程类 * 1、一致性对比线程是调用动态库对比,没有对比参数,不和对比项有关联 * */ class ConsistencyCompareThread : public BaseCalculateThread { public: ConsistencyCompareThread(CalculateThreadInfo_t& threadInfo); ~ConsistencyCompareThread() override; /* 获取一致性比对的结果 */ StConsistencyResult getConsistencyResult(); /* 判断录音通道是否相等 */ bool isRoadEqual(const SoundCardRoadInfo_t& roadInfo1, const SoundCardRoadInfo_t& roadInfo2); protected: /* 线程功能函数 */ void task() override; /* 初始化数据 */ bool initData() override; /* 清理数据 */ void clearData() override; private: /* 比对两个wav文件的一致性 */ bool compareConsistency(); private: /* 两个录音通道的信息 */ SoundCardRoadInfo_t m_roadInfo1; /* 录音通道1信息,这里不使用通道num */ SoundCardRoadInfo_t m_roadInfo2; /* 录音通道2信息 */ /* 两个录音通道的线程指针,直接通过录音类获取最新的数据 */ CreateWAVThread* m_pCreateWAVThread1 = nullptr; /* 通道1的录音线程 */ CreateWAVThread* m_pCreateWAVThread2 = nullptr; /* 通道2的录音线程 */ WavFilePath m_wavFilePath1; /* 通道1的wav文件路径 */ WavFilePath m_wavFilePath2; /* 通道2的wav文件路径 */ WavFilePath m_prevWavFilePath1; /* 通道1的上一个wav文件路径 */ WavFilePath m_prevWavFilePath2; /* 通道2的上一个wav文件路径 */ double m_sensitivity = 20.0; /* 比对灵敏度,默认20,范围[0-100] */ std::mutex m_mutexResult; /* 互斥锁,一致性比对的结果 */ StConsistencyResult m_consistencyResult; /* 一致性计算结果 */ double m_similarity = 0.0; /* 比对结果相似度 */ }; #endif // CONSISTENCYCOMPARETHREAD_H_