IAudioRenderer.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #ifndef IAUDIORENDERER_H
  2. #define IAUDIORENDERER_H
  3. #include <functional>
  4. #include <memory>
  5. #include <vector>
  6. namespace AVPlayer2 {
  7. namespace Core {
  8. /**
  9. * 音频渲染器状态枚举
  10. */
  11. enum class AudioRendererState {
  12. Stopped, // 停止状态
  13. Playing, // 播放状态
  14. Paused, // 暂停状态
  15. Error // 错误状态
  16. };
  17. } // namespace Core
  18. namespace Types {
  19. /**
  20. * 音频格式参数
  21. */
  22. struct AudioFormat {
  23. int sampleRate; // 采样率
  24. int channels; // 声道数
  25. int bitsPerSample; // 位深度
  26. int frameSize; // 帧大小
  27. };
  28. } // namespace Types
  29. namespace Core {
  30. /**
  31. * 音频渲染器抽象接口
  32. * 提供与平台无关的音频输出功能
  33. */
  34. class IAudioRenderer {
  35. public:
  36. virtual ~IAudioRenderer() = default;
  37. /**
  38. * 初始化音频渲染器
  39. * @param format 音频格式参数
  40. * @return 是否初始化成功
  41. */
  42. virtual bool initialize(const Types::AudioFormat& format) = 0;
  43. /**
  44. * 开始播放
  45. * @return 是否开始成功
  46. */
  47. virtual bool start() = 0;
  48. /**
  49. * 停止播放
  50. */
  51. virtual void stop() = 0;
  52. /**
  53. * 暂停播放
  54. */
  55. virtual void pause() = 0;
  56. /**
  57. * 恢复播放
  58. */
  59. virtual void resume() = 0;
  60. /**
  61. * 写入音频数据
  62. * @param data 音频数据指针
  63. * @param size 数据大小(字节)
  64. * @return 实际写入的字节数
  65. */
  66. virtual int writeData(const char* data, int size) = 0;
  67. /**
  68. * 设置音量
  69. * @param volume 音量值 (0.0 - 1.0)
  70. */
  71. virtual void setVolume(float volume) = 0;
  72. /**
  73. * 获取当前音量
  74. * @return 当前音量值 (0.0 - 1.0)
  75. */
  76. virtual float getVolume() const = 0;
  77. /**
  78. * 设置静音状态
  79. * @param muted 是否静音
  80. */
  81. virtual void setMuted(bool muted) = 0;
  82. /**
  83. * 获取静音状态
  84. * @return 是否静音
  85. */
  86. virtual bool isMuted() const = 0;
  87. /**
  88. * 获取当前状态
  89. * @return 渲染器状态
  90. */
  91. virtual AudioRendererState getState() const = 0;
  92. /**
  93. * 获取缓冲区大小
  94. * @return 缓冲区大小(字节)
  95. */
  96. virtual int getBufferSize() const = 0;
  97. /**
  98. * 获取可用缓冲区大小
  99. * @return 可用缓冲区大小(字节)
  100. */
  101. virtual int getAvailableBufferSize() const = 0;
  102. /**
  103. * 清空缓冲区
  104. */
  105. virtual void clearBuffer() = 0;
  106. /**
  107. * 设置状态变化回调
  108. * @param callback 状态变化回调函数
  109. */
  110. virtual void setStateCallback(std::function<void(AudioRendererState)> callback) = 0;
  111. /**
  112. * 设置缓冲区不足回调
  113. * @param callback 缓冲区不足回调函数
  114. */
  115. virtual void setUnderrunCallback(std::function<void()> callback) = 0;
  116. };
  117. /**
  118. * 音频渲染器工厂接口
  119. */
  120. class IAudioRendererFactory {
  121. public:
  122. virtual ~IAudioRendererFactory() = default;
  123. /**
  124. * 创建音频渲染器实例
  125. * @return 音频渲染器智能指针
  126. */
  127. virtual std::unique_ptr<IAudioRenderer> createRenderer() = 0;
  128. /**
  129. * 获取支持的音频格式列表
  130. * @return 支持的音频格式列表
  131. */
  132. virtual std::vector<Types::AudioFormat> getSupportedFormats() = 0;
  133. /**
  134. * 检查是否支持指定格式
  135. * @param format 音频格式
  136. * @return 是否支持
  137. */
  138. virtual bool isFormatSupported(const Types::AudioFormat& format) = 0;
  139. };
  140. } // namespace Core
  141. } // namespace AVPlayer2
  142. #endif // IAUDIORENDERER_H