#ifndef ACOUSTIC_ANALYZER_IO_AUDIO_SOURCE_H_
#define ACOUSTIC_ANALYZER_IO_AUDIO_SOURCE_H_

#include <cstddef>
#include <string>
#include <vector>

namespace acoustic {

/**
 * @brief 音频源抽象基类
 *
 * 统一封装麦克风阵列、WAV 文件、手机 UDP 等多种音频输入。
 */
class AudioSource {
   public:
    virtual ~AudioSource() = default;

    /**
     * @brief 打开音频源
     * @return true 表示成功
     */
    virtual bool Open() = 0;

    /**
     * @brief 读取音频采样
     * @param num_samples 希望读取的每通道采样数（总返回样本数 = num_samples * NumChannels()）
     * @return 扁平化音频数据；为空表示 EOF 或错误
     */
    virtual std::vector<float> Read(std::size_t num_samples) = 0;

    /**
     * @brief 关闭音频源并释放资源
     */
    virtual void Close() = 0;

    /**
     * @brief 当前音频源通道数
     */
    virtual std::size_t NumChannels() const = 0;

    /**
     * @brief 采样率 (Hz)
     */
    virtual int SampleRate() const = 0;

    /**
     * @brief 检查是否已打开
     */
    virtual bool IsOpen() const = 0;
};

}  // namespace acoustic

#endif  // ACOUSTIC_ANALYZER_IO_AUDIO_SOURCE_H_
