#ifndef _RECORDTHREAD_H_ #define _RECORDTHREAD_H_ #include #include #include "AudioData.h" #include "RingQueue.hpp" #include "GlobalVariable.h" #include "BaseRecordThread.h" #include "AudioRecord.h" #include "spdlog/spdlog.h" /* 设置为true,读取本地文件模拟录音 */ #define RECORD_READFILE false class AssignSrcDataThread; /** * @brief 获取原始音频数据的线程 * */ class RecordThread : public BaseRecordThread { public: RecordThread(RecordThreadInfo_t& threadInfo); ~RecordThread() override; /* 设置声卡描述符 */ void setAudioRecordDesc(const std::string& desc); /* 设置分派线程的指针 */ void setAssignSrcDataThread(AssignSrcDataThread* pThread); private: /* 线程任务函数 */ void task() override; /* 设置数据,这里用不到 */ bool setData(const AudioSrcData& srcData) override; /* 初始化数据 */ bool initData() override; /* 清除数据 */ void clearData() override; /* 获取AssignSrcDataThread线程 */ AssignSrcDataThread* getAssignSrcDataThread(); /* 测试数据 */ void testOpenData(); void testGetData(char* buffer, int32_t bufferSize, int32_t recordFrames); void preciseSleepMs(int ms); private: AudioRecord m_audioRecord; /* 音频录制类 */ std::string m_audioRecordDesc; /* 声卡描述符 */ char* m_pRecordBuffer = nullptr; /* 录音数据缓存 */ int32_t m_recordBufferSize = 0; /* 录音数据缓存大小 */ int32_t m_oneRecordCount = 0; /* 每次录音的音频数据大小,单位音频帧,位深度 * 通道数 */ AssignSrcDataThread* m_assignThread = nullptr; /* 分派数据线程指针 */ /* ---------------------- 测试数据 ---------------------- */ QByteArray m_testData; /* 测试数据 */ int m_testReadSize = 0; /* 已读取的数据大小 */ // std::chrono::steady_clock::time_point m_testLastTime; /* 上次读取数据的时间 */ }; #endif // _RECORDTHREAD_H_