AudioRecord.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #ifndef AUDIORECORD_H
  2. #define AUDIORECORD_H
  3. #include "alsa/asoundlib.h"
  4. #include "AudioDecoder.h"
  5. #include <functional>
  6. //#include <atomic>
  7. #include "Thread.h"
  8. typedef std::function<void(unsigned char* ,int)> AUDIORECORDFUNC;
  9. struct AudioData
  10. {
  11. unsigned char data[4096];
  12. uint length;
  13. };
  14. class AudioRecord : public ArkThread
  15. {
  16. public:
  17. AudioRecord();
  18. virtual ~AudioRecord();
  19. static AudioRecord *instance();
  20. //设置音频参数
  21. void setMediaParam(const uint rate, const uint bits, const uint channels);
  22. void registerRecordAudio(AUDIORECORDFUNC func);
  23. void stopRecordSound()
  24. {
  25. mbRecordStart = true;
  26. }
  27. void resumeRecordSound()
  28. {
  29. mbRecordStart = false;
  30. }
  31. int initDevice();
  32. void Release();
  33. int ReadMicAudioData(AudioData &buff);
  34. protected:
  35. virtual void run();
  36. int recSound(unsigned char *data, uint& len);
  37. int xrunRecover(snd_pcm_t *handle, int err);
  38. private:
  39. static AudioRecord *mInstance;
  40. snd_pcm_t *mpHandle;
  41. AUDIORECORDFUNC mFuncAudioRecord;
  42. bool mbRecordStart;
  43. int mBufferSize;
  44. int mFrameSize;
  45. AudioParam mParam;
  46. AudioData mData;
  47. };
  48. #endif // AUDIORECORDER_H