1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #ifndef _CREATEWAVTHREAD_H_
- #define _CREATEWAVTHREAD_H_
- #include "BaseRecordThread.h"
- #include "RingQueue.hpp"
- #include "RingQueueManualMutex.hpp"
- #include "AudioData.h"
- #include <QDir>
- struct AudioSrcData;
- /**
- * @brief 生成wav小文件的线程
- * 1、这里有一个环形队列,存储音频数据,队列中的每个元素大小是1秒的数据,队列默认60个元素
- * 2、这个线程也会生成噪音检测所需要的数据,主要是分离左右声道
- *
- */
- class CreateWAVThread : public BaseRecordThread
- {
- public:
- CreateWAVThread(RecordThreadInfo_t& threadInfo);
- ~CreateWAVThread() override;
- /* 设置数据 */
- bool setData(const AudioSrcData& srcData) override;
- /* 获取wav小文件路径队列 */
- RingQueueManualMutex<WavFilePath>* getQueueWavFilePath() { return m_queueWavFileName; }
- /* 获取最新的数据 */
- bool getLatestFileName(WavFilePath& wavName);
- /* 获取最新的左右声道数据 */
- bool getLatestLeftRightData(AudioLeftRightData& leftRightData);
- private:
- /* 执行任务函数 */
- void task() override;
- /* 初始化一些数据 */
- bool initData() override;
- /* 清理数据 */
- void clearData() override;
-
- /* 生成wav小文件 */
- bool createWAVFile(int secondCount);
- /* 删除wav小文件,传入留下的个数 */
- void deleteWAVFile(int remainCount);
- /* 从删除列表中删除wav小文件 */
- void removeWAVFileFromList(std::list<WavFilePath>& listDeleteFile);
- /* 将每秒的数据拆解成两个声道,给噪音检测线程使用 */
- bool splitLeftRightChannel();
- private:
- QDir m_wavDir; /* 当前目录 */
- RingQueue<AudioSrcData*> m_queueWavSrcData; /* 给生成wav小文件用的环形队列 */
- RingQueue<AudioSrcData*> m_queueLeftRightSrcData; /* 给分离左右声道用的环形队列 */
- int32_t m_wavFileDuration = 0; /* wav小文件时长,单位:秒 */
- int32_t m_noiseElementDuration = 0; /* 噪音检测元素大小,单位:秒 */
-
- std::list<WavFilePath> m_listDeleteFile; /* 将要删除的文件名列表 */
- std::string m_newFileName; /* 新文件名 */
- QDateTime m_newFileStartTime; /* 新文件开始时间 */
- int m_filePathNum = 60; /* wav小文件路径队列的容量,默认60个文件 */
- /* wav小文件路径队列,这个队列只给一致性检测线程用
- * 注意:这个队列可能会给多个一致性线程检测使用,队列中的元素由本线程管理删除,
- * 其他线程只能copy出去 */
- RingQueueManualMutex<WavFilePath>* m_queueWavFileName = nullptr;
- RingQueueManualMutex<AudioLeftRightData*> m_queueLeftRightData; /* 左右声道数据的环形队列 */
- };
- #endif // _CREATEWAVTHREAD_H_
|