#ifndef IAUDIORENDERER_H #define IAUDIORENDERER_H #include #include #include namespace AVPlayer2 { namespace Core { /** * 音频渲染器状态枚举 */ enum class AudioRendererState { Stopped, // 停止状态 Playing, // 播放状态 Paused, // 暂停状态 Error // 错误状态 }; } // namespace Core namespace Types { /** * 音频格式参数 */ struct AudioFormat { int sampleRate; // 采样率 int channels; // 声道数 int bitsPerSample; // 位深度 int frameSize; // 帧大小 }; } // namespace Types namespace Core { /** * 音频渲染器抽象接口 * 提供与平台无关的音频输出功能 */ class IAudioRenderer { public: virtual ~IAudioRenderer() = default; /** * 初始化音频渲染器 * @param format 音频格式参数 * @return 是否初始化成功 */ virtual bool initialize(const Types::AudioFormat& format) = 0; /** * 开始播放 * @return 是否开始成功 */ virtual bool start() = 0; /** * 停止播放 */ virtual void stop() = 0; /** * 暂停播放 */ virtual void pause() = 0; /** * 恢复播放 */ virtual void resume() = 0; /** * 写入音频数据 * @param data 音频数据指针 * @param size 数据大小(字节) * @return 实际写入的字节数 */ virtual int writeData(const char* data, int size) = 0; /** * 设置音量 * @param volume 音量值 (0.0 - 1.0) */ virtual void setVolume(float volume) = 0; /** * 获取当前音量 * @return 当前音量值 (0.0 - 1.0) */ virtual float getVolume() const = 0; /** * 设置静音状态 * @param muted 是否静音 */ virtual void setMuted(bool muted) = 0; /** * 获取静音状态 * @return 是否静音 */ virtual bool isMuted() const = 0; /** * 获取当前状态 * @return 渲染器状态 */ virtual AudioRendererState getState() const = 0; /** * 获取缓冲区大小 * @return 缓冲区大小(字节) */ virtual int getBufferSize() const = 0; /** * 获取可用缓冲区大小 * @return 可用缓冲区大小(字节) */ virtual int getAvailableBufferSize() const = 0; /** * 清空缓冲区 */ virtual void clearBuffer() = 0; /** * 设置状态变化回调 * @param callback 状态变化回调函数 */ virtual void setStateCallback(std::function callback) = 0; /** * 设置缓冲区不足回调 * @param callback 缓冲区不足回调函数 */ virtual void setUnderrunCallback(std::function callback) = 0; }; /** * 音频渲染器工厂接口 */ class IAudioRendererFactory { public: virtual ~IAudioRendererFactory() = default; /** * 创建音频渲染器实例 * @return 音频渲染器智能指针 */ virtual std::unique_ptr createRenderer() = 0; /** * 获取支持的音频格式列表 * @return 支持的音频格式列表 */ virtual std::vector getSupportedFormats() = 0; /** * 检查是否支持指定格式 * @param format 音频格式 * @return 是否支持 */ virtual bool isFormatSupported(const Types::AudioFormat& format) = 0; }; } // namespace Core } // namespace AVPlayer2 #endif // IAUDIORENDERER_H