iaudiocapturer.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef IAUDIOCAPTURER_H
  2. #define IAUDIOCAPTURER_H
  3. #include <cstdint>
  4. #include <functional>
  5. #include "basic/basic.h"
  6. // 平台无关的音频格式结构
  7. struct AudioFormat
  8. {
  9. uint32_t sampleRate; // 采样率 (Hz)
  10. uint16_t channels; // 通道数
  11. uint16_t bitsPerSample; // 每个样本的位数
  12. uint32_t avgBytesPerSec; // 平均每秒字节数
  13. uint16_t blockAlign; // 数据块对齐大小
  14. // 默认构造函数
  15. AudioFormat()
  16. : sampleRate(0)
  17. , channels(0)
  18. , bitsPerSample(0)
  19. , avgBytesPerSec(0)
  20. , blockAlign(0)
  21. {}
  22. // 带参数的构造函数
  23. AudioFormat(uint32_t rate, uint16_t ch, uint16_t bits)
  24. : sampleRate(rate)
  25. , channels(ch)
  26. , bitsPerSample(bits)
  27. {
  28. blockAlign = channels * bitsPerSample / 8;
  29. avgBytesPerSec = sampleRate * blockAlign;
  30. }
  31. };
  32. class IAudioCapturer
  33. {
  34. public:
  35. // 默认音频格式
  36. static AudioFormat GetDefaultFormat()
  37. {
  38. return AudioFormat(AUDIO_SAMPLE_RATE, AUDIO_CHANNEL, AUDIO_CAPTURE_BITS_PER_SAMPLE);
  39. }
  40. enum Type { Microphone, Speaker };
  41. virtual ~IAudioCapturer() = default;
  42. virtual bool Init(Type deviceType) = 0;
  43. virtual bool Start() = 0;
  44. virtual void Stop() = 0;
  45. // 获取音频格式
  46. virtual const AudioFormat& GetFormat() const = 0;
  47. // 主动拉取音频数据,返回实际读取字节数
  48. virtual int readAudioData(char* buf, int maxLen) = 0;
  49. };
  50. #endif // IAUDIOCAPTURER_H