NoiseDetectThread.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef NOISEDETECTTHREAD_H_
  2. #define NOISEDETECTTHREAD_H_
  3. #include "BaseCalculateThread.h"
  4. #include "AudioData.h"
  5. class CreateWAVThread;
  6. /**
  7. * @brief 噪音检测线程类
  8. * 1、噪音检测线程是调用动态库检测噪音
  9. * 2、噪音检测线程参数和对比项无关,是公共的参数,这里没有对比项信息
  10. *
  11. */
  12. class NoiseDetectThread : public BaseCalculateThread
  13. {
  14. public:
  15. NoiseDetectThread(CalculateThreadInfo_t& threadInfo);
  16. ~NoiseDetectThread() override;
  17. /* 获取通道信息 */
  18. const SoundCardRoadInfo_t& getRoadInfo() const { return m_roadInfo; }
  19. /* 获取噪音结果 */
  20. bool isNoise() const { return m_isNoise.load(); }
  21. protected:
  22. /* 线程功能函数 */
  23. void task() override;
  24. /* 初始化数据 */
  25. bool initData() override;
  26. /* 清理数据 */
  27. void clearData() override;
  28. private:
  29. /* 调用动态库检测噪音 */
  30. bool detectNoise();
  31. /* 保存结果 */
  32. void saveResult();
  33. private:
  34. SoundCardRoadInfo_t m_roadInfo; /* 录音通道编号 */
  35. std::string m_roadName; /* 录音通道名称 */
  36. CreateWAVThread* m_pWAVThread = nullptr; /* WAV小文件生成线程指针 */
  37. AudioLeftRightData m_leftRightData; /* 左右声道数据 */
  38. std::atomic_bool m_isNoise = false; /* 是否检测到噪音 */
  39. bool m_isNoiseLast = false; /* 上一次是否检测到噪音 */
  40. /* 噪音检测的一些参数 */
  41. const std::vector<std::string> m_window_params = {"tukey", "0.25"};
  42. double m_sample_rate = 48000; /* 采样率 */
  43. double m_silence_threshold = 3e-3; /* 静音检测阈值 */
  44. double m_db_threshold = -70.0; /* 分贝阈值 */
  45. double m_cv_threshold = -70.0; /* 变异系数阈值 */
  46. int m_nperseg = 256; /* 每段样本数 */
  47. int m_noverlap = 32; /* 重叠样本数 */
  48. int m_nfft = 256; /* FFT点数 */
  49. };
  50. #endif // NOISEDETECTTHREAD_H_