387 lines
9.4 KiB
C
387 lines
9.4 KiB
C
/*++
|
|
|
|
Copyright (c) 1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
tapiaud.h
|
|
|
|
Abstract:
|
|
|
|
This module contains the definition of interfaces to the audio related
|
|
filters.
|
|
|
|
Author:
|
|
|
|
Mu Han (muhan) May-15-1999
|
|
|
|
--*/
|
|
|
|
#ifndef __tapiaud_h__
|
|
#define __tapiaud_h__
|
|
|
|
#include <mmreg.h>
|
|
#include <dsound.h>
|
|
#include "tapiqc.h"
|
|
|
|
|
|
// CLSIDs for the audio filters
|
|
|
|
struct DECLSPEC_UUID("581d09e5-0b45-11d3-a565-00c04f8ef6e3") TAPIAudioCapture;
|
|
struct DECLSPEC_UUID("8d5c6cb6-0b44-4a5a-b785-44c366d4e677") TAPIAudioEncoder;
|
|
struct DECLSPEC_UUID("65439c20-604f-49ca-aa82-dc01a10af171") TAPIAudioDecoder;
|
|
struct DECLSPEC_UUID("ad4e63da-c3ef-408f-8153-0fc7d5c29f72") TAPIAudioMixer;
|
|
struct DECLSPEC_UUID("44a3b142-cf81-42ea-b4d1-f43dd6f64ece") TAPIAudioRender;
|
|
|
|
struct DECLSPEC_UUID("3878e189-cfb5-4e75-bd92-3686ee6e6634") TAPIAudioPluginDecoder;
|
|
|
|
struct DECLSPEC_UUID("613ebf9e-c765-446f-bf96-7728ce579282") TAPIAudioDuplexController;
|
|
|
|
// It is really bad that we had to do this here.
|
|
struct DECLSPEC_UUID("b0210783-89cd-11d0-af08-00a0c925cd16") IDirectSoundNotify;
|
|
struct DECLSPEC_UUID("279AFA83-4981-11CE-A521-0020AF0BE560") IDirectSound;
|
|
struct DECLSPEC_UUID("C50A7E93-F395-4834-9EF6-7FA99DE50966") IDirectSound8;
|
|
struct DECLSPEC_UUID("b0210781-89cd-11d0-af08-00a0c925cd16") IDirectSoundCapture;
|
|
struct DECLSPEC_UUID("b0210782-89cd-11d0-af08-00a0c925cd16") IDirectSoundCaptureBuffer;
|
|
struct DECLSPEC_UUID("279AFA85-4981-11CE-A521-0020AF0BE560") IDirectSoundBuffer;
|
|
|
|
|
|
// the data structure to describe a audio device.
|
|
typedef interface tagAudioDeviceInfo
|
|
{
|
|
UINT WaveID;
|
|
GUID DSoundGUID;
|
|
WCHAR szDeviceDescription[MAX_PATH];
|
|
|
|
} AudioDeviceInfo, *PAudioDeviceInfo;
|
|
|
|
|
|
// device enumeration functions exposed by the tapi audio capture dll.
|
|
typedef HRESULT (WINAPI *PFNAudioGetDeviceInfo)(
|
|
OUT DWORD * pdwNumDevices,
|
|
OUT AudioDeviceInfo ** ppDeviceInfo
|
|
);
|
|
|
|
typedef HRESULT (WINAPI *PFNAudioReleaseDeviceInfo)(
|
|
IN AudioDeviceInfo * ppDeviceInfo
|
|
);
|
|
|
|
|
|
// This interface is supported by the duplex controller. It only supports
|
|
// dsound now.
|
|
typedef enum EFFECTS
|
|
{
|
|
EFFECTS_AEC = 0,
|
|
EFFECTS_AGC,
|
|
EFFECTS_NS,
|
|
EFFECTS_LAST
|
|
|
|
} EFFECTS;
|
|
|
|
interface DECLSPEC_UUID("864551a0-a822-48d7-a193-ddaa1c43d242") DECLSPEC_NOVTABLE
|
|
IAudioDuplexController : public IUnknown
|
|
{
|
|
STDMETHOD (SetCaptureBufferInfo) (
|
|
IN GUID * pDSoundCaptureGUID,
|
|
IN DSCBUFFERDESC * pDescription
|
|
) PURE;
|
|
|
|
STDMETHOD (SetRenderBufferInfo) (
|
|
IN GUID * pDSoundRenderGUID,
|
|
IN DSBUFFERDESC * pDescription,
|
|
IN HWND hWindow,
|
|
IN DWORD dwCooperateLevel
|
|
) PURE;
|
|
|
|
STDMETHOD (EnableEffects) (
|
|
IN DWORD dwNumberEffects,
|
|
IN EFFECTS * pEffects,
|
|
IN BOOL * pfEnable
|
|
);
|
|
|
|
STDMETHOD (GetCaptureDevice) (
|
|
LPLPDIRECTSOUNDCAPTURE ppDSoundCapture,
|
|
LPLPDIRECTSOUNDCAPTUREBUFFER ppCaptureBuffer
|
|
) PURE;
|
|
|
|
STDMETHOD (GetRenderDevice) (
|
|
LPLPDIRECTSOUND ppDirectSound,
|
|
LPLPDIRECTSOUNDBUFFER ppRenderBuffer
|
|
) PURE;
|
|
|
|
STDMETHOD (ReleaseCaptureDevice) () PURE;
|
|
|
|
STDMETHOD (ReleaseRenderDevice) () PURE;
|
|
|
|
STDMETHOD (GetEffect) (
|
|
IN EFFECTS Effect,
|
|
OUT BOOL *pfEnabled
|
|
);
|
|
};
|
|
|
|
|
|
// the device configuration interface on teh tapi audio capture filter.
|
|
interface DECLSPEC_UUID("3a12e2c1-1265-11d3-a56d-00c04f8ef6e3") DECLSPEC_NOVTABLE
|
|
IAudioDeviceConfig : public IUnknown
|
|
{
|
|
STDMETHOD (SetDeviceID) (
|
|
IN REFGUID pDSoundGUID,
|
|
IN UINT uiWaveID
|
|
) PURE;
|
|
|
|
STDMETHOD (SetDuplexController) (
|
|
IN IAudioDuplexController * pIAudioDuplexController
|
|
) PURE;
|
|
};
|
|
|
|
#if !defined(STREAM_INTERFACES_DEFINED)
|
|
|
|
typedef enum tagAudioDeviceProperty
|
|
{
|
|
AudioDevice_DuplexMode,
|
|
AudioDevice_AutomaticGainControl,
|
|
AudioDevice_AcousticEchoCancellation
|
|
|
|
} AudioDeviceProperty;
|
|
|
|
#endif
|
|
|
|
// IAudioDeviceControl interface.
|
|
interface DECLSPEC_UUID("3a12e2c2-1265-11d3-a56d-00c04f8ef6e3") DECLSPEC_NOVTABLE
|
|
IAudioDeviceControl : public IUnknown
|
|
{
|
|
STDMETHOD (GetRange) (
|
|
IN AudioDeviceProperty Property,
|
|
OUT long *plMin,
|
|
OUT long *plMax,
|
|
OUT long *plSteppingDelta,
|
|
OUT long *plDefault,
|
|
OUT TAPIControlFlags *plFlags
|
|
) PURE;
|
|
|
|
STDMETHOD (Get) (
|
|
IN AudioDeviceProperty Property,
|
|
OUT long *plValue,
|
|
OUT TAPIControlFlags *plFlags
|
|
) PURE;
|
|
|
|
STDMETHOD (Set) (
|
|
IN AudioDeviceProperty Property,
|
|
IN long lValue,
|
|
IN TAPIControlFlags lFlags
|
|
) PURE;
|
|
};
|
|
|
|
// IAudioAutoPlay interface
|
|
interface DECLSPEC_UUID("c5e7c28f-1446-4ebe-b7fc-72f599a72663") DECLSPEC_NOVTABLE
|
|
IAudioAutoPlay : public IUnknown
|
|
{
|
|
STDMETHOD (StartAutoPlay) (IN BOOL fRun) PURE;
|
|
|
|
STDMETHOD (StopAutoPlay) () PURE;
|
|
};
|
|
|
|
// IAudioEffectControl interface
|
|
interface DECLSPEC_UUID("8eb9f108-3447-4fee-a705-6c6cf35c660c") DECLSPEC_NOVTABLE
|
|
IAudioEffectControl : public IUnknown
|
|
{
|
|
// if enabled and AEC, use DSound AGC
|
|
STDMETHOD (SetDsoundAGC) (IN BOOL fEnable) PURE;
|
|
|
|
// if enabled and no AEC, revert gain to previous volume
|
|
STDMETHOD (SetGainIncRevert) (IN BOOL fEnable) PURE;
|
|
|
|
STDMETHOD (SetFixedMixLevel) (IN DOUBLE dLevel) PURE;
|
|
};
|
|
|
|
// IBasicAudioEx interface
|
|
interface DECLSPEC_UUID("9c31055a-24bd-4ac1-be2b-ebe7ce89890c") DECLSPEC_NOVTABLE
|
|
IBasicAudioEx : public IUnknown
|
|
{
|
|
STDMETHOD (SetMute) (IN BOOL fMute) PURE;
|
|
STDMETHOD (GetMute) (OUT LPBOOL pfMute) PURE;
|
|
};
|
|
|
|
// IAudioDTMFControl interface
|
|
interface DECLSPEC_UUID("dd1f3c26-5524-4d77-9fb2-7df5d62ffd87") DECLSPEC_NOVTABLE
|
|
IAudioDTMFControl : public IUnknown
|
|
{
|
|
STDMETHOD (SendDTMFEvent) (
|
|
IN DWORD dwEvent
|
|
) PURE;
|
|
};
|
|
|
|
// IAudioStatistics
|
|
interface DECLSPEC_UUID("20fc7641-f3b2-4384-96ad-bf3d986e8751") DECLSPEC_NOVTABLE
|
|
IAudioStatistics : public IUnknown
|
|
{
|
|
STDMETHOD (GetAudioLevel) (OUT LPLONG plAudioLevel) PURE;
|
|
STDMETHOD (GetAudioLevelRange) (
|
|
OUT LPLONG plMin,
|
|
OUT LPLONG plMax
|
|
) PURE;
|
|
};
|
|
|
|
// ISilenceControl interface
|
|
interface DECLSPEC_UUID("8804b7e4-2ef4-489f-a31b-740ac4278304") DECLSPEC_NOVTABLE
|
|
ISilenceControl : public IUnknown
|
|
{
|
|
STDMETHOD (SetSilenceDetection) (IN BOOL fEnable) PURE;
|
|
STDMETHOD (GetSilenceDetection) (OUT LPBOOL pfEnable) PURE;
|
|
|
|
STDMETHOD (SetSilenceCompression) (IN BOOL fEnable) PURE;
|
|
STDMETHOD (GetSilenceCompression) (OUT LPBOOL pfEnable) PURE;
|
|
|
|
STDMETHOD (GetAudioLevel) (
|
|
OUT LPLONG plAudioLevel
|
|
) PURE;
|
|
|
|
STDMETHOD (GetAudioLevelRange) (
|
|
OUT LPLONG plMin,
|
|
OUT LPLONG plMax,
|
|
OUT LPLONG plSteppingDelta
|
|
) PURE;
|
|
|
|
STDMETHOD (SetSilenceLevel) (
|
|
IN LONG lSilenceLevel,
|
|
IN TAPIControlFlags lFlags
|
|
) PURE;
|
|
|
|
STDMETHOD (GetSilenceLevel) (
|
|
OUT LPLONG plSilenceLevel,
|
|
OUT TAPIControlFlags * pFlags
|
|
) PURE;
|
|
|
|
STDMETHOD (GetSilenceLevelRange) (
|
|
OUT LPLONG plMin,
|
|
OUT LPLONG plMax,
|
|
OUT LPLONG plSteppingDelta,
|
|
OUT LPLONG plDefault,
|
|
OUT TAPIControlFlags * pFlags
|
|
) PURE;
|
|
};
|
|
|
|
#define VAD_EVENTBASE (100000)
|
|
|
|
// events for voice activity detection.
|
|
typedef enum VAD_EVENT
|
|
{
|
|
VAD_TALKING,
|
|
VAD_SILENCE
|
|
|
|
} VAD_EVENT;
|
|
|
|
#ifndef WAVEFORMATEX_RTPG711
|
|
typedef struct {
|
|
// Generic WAVEFORMATEX fields
|
|
WAVEFORMATEX WaveFormatEx;
|
|
|
|
// network specific field
|
|
WORD wPacketDuration;
|
|
|
|
// Reserved
|
|
DWORD dwReserved[2];
|
|
} WAVEFORMATEX_RTPG711, *PWAVEFORMATEX_RTPG711;
|
|
#endif
|
|
|
|
#ifndef WAVEFORMATEX_RTPG723_1
|
|
typedef struct {
|
|
// Generic WAVEFORMATEX fields
|
|
WAVEFORMATEX WaveFormatEx;
|
|
|
|
// network specific field
|
|
WORD wPacketDuration;
|
|
|
|
// Variable bitrate specific field
|
|
WORD wSamplesPerBlock;
|
|
|
|
// G.723.1 specific fields
|
|
WORD fSilenceDetection:1;
|
|
WORD fSilenceCompression:1;
|
|
WORD fLowDataRate:1;
|
|
WORD fReserved:13;
|
|
|
|
// Reserved
|
|
DWORD dwReserved[2];
|
|
} WAVEFORMATEX_RTPG723_1, *PWAVEFORMATEX_RTPG723_1;
|
|
#endif
|
|
|
|
#ifndef WAVEFORMATEX_RTPDVI4
|
|
typedef struct {
|
|
// Generic WAVEFORMATEX fields
|
|
WAVEFORMATEX WaveFormatEx;
|
|
|
|
// network specific field
|
|
WORD wPacketDuration;
|
|
|
|
} WAVEFORMATEX_RTPDVI4, *PWAVEFORMATEX_RTPDVI4;
|
|
#endif
|
|
|
|
#ifndef WAVEFORMATEX_RTPSIREN
|
|
|
|
/* WAVE form wFormatTag IDs (mmreg.h defines most of the tags) */
|
|
#define WAVE_FORMAT_SIREN 0x3001
|
|
|
|
typedef struct {
|
|
// Generic WAVEFORMATEX fields
|
|
WAVEFORMATEX WaveFormatEx;
|
|
|
|
// network specific field
|
|
WORD wPacketDuration;
|
|
|
|
} WAVEFORMATEX_RTPSIREN, *PWAVEFORMATEX_RTPSIREN;
|
|
#endif
|
|
|
|
#ifndef WAVEFORMATEX_RTPG722_1
|
|
|
|
#define WAVE_FORMAT_G722_1 0x3002
|
|
|
|
typedef struct {
|
|
// Generic WAVEFORMATEX fields
|
|
WAVEFORMATEX WaveFormatEx;
|
|
|
|
// network specific field
|
|
WORD wPacketDuration;
|
|
|
|
} WAVEFORMATEX_RTPG722_1, *PWAVEFORMATEX_RTPG722_1;
|
|
#endif
|
|
|
|
|
|
#ifndef WAVEFORMATEX_RTPMSAUDIO
|
|
typedef struct {
|
|
// Generic WAVEFORMATEX fields
|
|
WAVEFORMATEX WaveFormatEx;
|
|
|
|
// network specific field
|
|
WORD wPacketDuration;
|
|
|
|
} WAVEFORMATEX_RTPMSAUDIO, *PWAVEFORMATEX_RTPMSAUDIO;
|
|
#endif
|
|
|
|
#ifndef WAVEFORMATEX_RTPGSM
|
|
typedef struct {
|
|
// Generic WAVEFORMATEX fields
|
|
WAVEFORMATEX WaveFormatEx;
|
|
|
|
// network specific field
|
|
WORD wPacketDuration;
|
|
|
|
BOOL fMbone;
|
|
|
|
} WAVEFORMATEX_RTPGSM, *PWAVEFORMATEX_RTPGSM;
|
|
#endif
|
|
|
|
|
|
// IEncoderSampleRateControl, a private interface for the test team.
|
|
interface DECLSPEC_UUID("483f56a9-513f-4f8b-b0e5-bc6a7ba3f8b9") DECLSPEC_NOVTABLE
|
|
IEncoderSampleRateControl : public IUnknown
|
|
{
|
|
STDMETHOD (GetSampleRate) (OUT DWORD *pdwSampleRate) PURE;
|
|
STDMETHOD (SetSampleRate) (IN DWORD dwSampleRate) PURE;
|
|
};
|
|
|
|
|
|
#endif //__tapiaud_h__
|
|
|
|
|