iaudiocapturer.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. using CallBack = std::function<void(void* data, size_t size, void* userInfo)>;
  36. virtual ~IAudioCapturer() = default;
  37. virtual bool Init(Type deviceType, CallBack callback, void* userInfo = nullptr) = 0;
  38. virtual bool Start() = 0;
  39. virtual void Stop() = 0;
  40. // 获取音频格式
  41. virtual const AudioFormat& GetFormat() const = 0;
  42. // // 获取音频格式信息
  43. // virtual int GetSampleRate() const = 0;
  44. // virtual int GetChannels() const = 0;
  45. // virtual int GetBitsPerSample() const = 0;
  46. // // 用于兼容现有代码的格式获取方法
  47. // virtual void* GetNativeFormat() const = 0;
  48. };
  49. #endif // IAUDIOCAPTURER_H