iaudiocapturer.h 1.3 KB

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