#pragma once

#include "kpi_impl.h"
#include "kpi_device.h"

class KbWasapiDeviceModule : public KbKpiUnknownImpl<IKpiOutDeviceModule>
{
private:
    KPI_DEVICE_MODULEINFO m_ModuleInfo;
    IKpiConfig *m_pConfig;
public:
    void  WINAPI GetModuleInfo(const KPI_DEVICE_MODULEINFO **ppInfo);
    BOOL  WINAPI Open(const wchar_t *cszDeviceName, //デバイス名
                      const wchar_t *cszId,         //識別文字列
                      const KPI_DEVICE_FORMAT *cpFormat, //再生周波数等
                      int nBufferSizeSample,     //再生バッファサイズ（サンプル単位）
                      IKpiOutDevice **ppOutDevice);  
    void  WINAPI EnumDevices(IKpiDeviceEnumerator *pEnumerator);//デバイス名の列挙
    BOOL  WINAPI EnumConfig(IKpiConfigEnumerator *pEnumerator); //設定情報の列挙
    DWORD WINAPI ApplyConfig(const wchar_t *cszSection, //セクション名
                             const wchar_t *cszKey,     //キー名
                             UINT64 nValue,             //変更後の値(INT)
                             double dValue,             //変更後の値(FLOAT)
                             const wchar_t *cszValue);  //変更後の値(STR)
    KbWasapiDeviceModule(IKpiConfig *pConfig);
    ~KbWasapiDeviceModule(void);
};

