123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #ifndef _RECORDLONGFILETHREAD_H_
- #define _RECORDLONGFILETHREAD_H_
- #include "BaseRecordThread.h"
- #include "AudioData.h"
- #include <mutex>
- #include <QFile>
- #include <QDir>
- /**
- * @brief 这个线程类记录一个长的录音文件,1小时一个文件
- * 1、如果是刚开始录音,到下一个整点记录一个文件,后续都是满1小时一个文件
- * 2、数据先放到缓冲区中,满1分钟写一次文件
- *
- */
- class RecordLongFileThread : public BaseRecordThread
- {
- public:
- RecordLongFileThread(RecordThreadInfo_t& threadInfo);
- ~RecordLongFileThread() override;
- /* 生成长文件的线程函数 */
- void threadTask() override;
- /* 设置数据 */
- bool setData(const AudioSrcData& srcData) override;
- private:
- /* 初始化一些数据 */
- bool initData() override;
- /* 清理数据 */
- void clearData() override;
- /* 设置今日目录 */
- inline bool setTodayPath(bool isNewFile);
- /* 打开文件 */
- bool openFile(QFile& wavFile, bool isNewFile);
- /* 写入音频数据到文件 */
- bool writeAudioDataToFile(const AudioSrcData& audioData, const QString& fileName);
- /* 生成文件名 */
- inline QString generateFileName(const QDateTime& startTime, const QDateTime& endTime) const;
- /* 判断是否过了整点 */
- inline bool isOneHourPassed();
- private:
- /* 临时缓存数据, 一分钟写入一次,给这个分配2分钟的数据大小 */
- std::mutex m_mutexBuffer;
- AudioSrcData m_bufferData;
- uint32_t m_writeCriticalSize = 0; /* 写入文件的临界大小,单位:字节,缓存超过这个大小就写入文件 */
- uint32_t m_oneHourSize = 0; /* 一小时的音频数据大小 */
- int m_openFileErrorSize = 0; /* 打开文件错误次数 */
- QString m_recordPath; /* 记录长文件的路径 */
- QDir m_todayDir; /* 今日目录 */
- QString m_wavFileName; /* wav文件对象 */
- WavHeader m_wavHeader; /* 当前wav文件头信息 */
- uint64_t m_writtenSize = 0; /* 已经写入的数据大小 */
- QDateTime m_writtenStartTime; /* 已经写入数据的开始时间点 */
- QDateTime m_writtenNowTime; /* 已经写入数据的最后时间点 */
- };
- #endif // _RECORDLONGFILETHREAD_H_
|