AudioDecoder.h 951 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #ifndef AUDIODECODER_H
  2. #define AUDIODECODER_H
  3. #include "alsa/asoundlib.h"
  4. #include <mutex>
  5. #include <atomic>
  6. //媒体参数
  7. struct AudioParam
  8. {
  9. uint rate; //采样率Hz
  10. uint bits; //位数8、16
  11. uint channels; //通道数
  12. };
  13. class AudioDecoder
  14. {
  15. public:
  16. AudioDecoder(const char *device = "default");
  17. virtual ~AudioDecoder();
  18. public:
  19. void setMediaParam(const uint rate, const uint bits, const uint channels);
  20. void release();
  21. int playSound(unsigned char *data, uint len);
  22. void stopPlaySound() {
  23. mHasInit = false;
  24. }
  25. void resumePlaySound() {
  26. mHasInit = true;
  27. }
  28. private:
  29. bool Init();
  30. void Uninit();
  31. int xrunRecover(snd_pcm_t *handle, int err);
  32. private:
  33. char *mpDevice;
  34. snd_pcm_t *mpHandle;
  35. AudioParam mAudioParam;
  36. std::atomic_bool mHasInit;
  37. std::mutex mMutex;
  38. };
  39. #endif // AUDIODECODER_H