/**
 * @file audio_capture.h
 * @brief 音频采集封装 - 基于 ALSA
 */

#ifndef AUDIO_CAPTURE_H
#define AUDIO_CAPTURE_H

#include <alsa/asoundlib.h>
#include <string>
#include <cstdint>

class AudioCapture {
public:
    /**
     * @brief 构造函数
     * @param device ALSA 设备名，如 "hw:0,0" 或 "default"
     * @param sample_rate 采样率 (Hz)
     * @param channels 声道数 (1=单声道, 2=立体声)
     */
    AudioCapture(const std::string& device, int sample_rate, int channels);
    ~AudioCapture();
    
    /**
     * @brief 初始化 ALSA 采集设备
     * @return true 成功, false 失败
     */
    bool init();
    
    /**
     * @brief 读取 PCM 数据
     * @param buffer 输出缓冲区 (int16_t 数组)
     * @param frames 帧数 (1帧 = channels * 2字节)
     * @return 实际读取的帧数，<0 表示错误
     */
    snd_pcm_sframes_t read(int16_t* buffer, snd_pcm_uframes_t frames);

private:
    std::string m_device;
    int m_sample_rate;
    int m_channels;
    
    snd_pcm_t* m_pcm_handle;
    
    // 配置混音器以启用麦克风输入
    bool setup_mixer(const char* card_name);
};

#endif // AUDIO_CAPTURE_H
