#ifndef CONSISTENCYCOMPARETHREAD_H_ #define CONSISTENCYCOMPARETHREAD_H_ #include "BaseCalculateThread.h" #include "RingQueueManualMutex.hpp" #include "AudioData.h" #include "ConsistencyResult.h" class CreateWAVThread; /** @brief 计算一致性的线程类 1、一致性对比线程是调用动态库对比,没有对比参数,不和对比项有关联 2、这线程计算速度很快,8秒的对比文件20ms即可计算完成,可以将其合并到其他线程中 */ class ConsistencyCompareThread : public BaseCalculateThread { public: ConsistencyCompareThread(CalculateThreadInfo_t& threadInfo); ~ConsistencyCompareThread() override; /* 获取一致性比对的结果 */ StConsistencyResult getConsistencyResult(); /* 判断录音通道是否相等 */ bool isRoadEqual(const SoundCardRoadInfo_t& roadInfo1, const SoundCardRoadInfo_t& roadInfo2); /* 这几个函数给外部线程调用,无需单独开启子线程了 */ /* 初始化 */ bool initConsistencyCompare(); /* 比对函数 */ bool compareConsistencyData(); /* 清理数据 */ void clearConsistencyCompareData(); 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_