음성 캡처 DSP

음성 캡처와 관련된 여러 DSP를 캡슐화하는 개체입니다.

CLSID

CLSID_CWMAudioAEC

인터페이스

속성

속성 Description
MFPKEY_WMAAECMA_DEVICE_INDEXES DMO가 오디오를 캡처하고 렌더링하는 데 사용하는 오디오 디바이스를 지정합니다.
MFPKEY_WMAAECMA_DEVICEPAIR_GUID 애플리케이션에서 현재 사용 중인 오디오 디바이스의 조합을 식별합니다.
MFPKEY_WMAAECMA_DMO_SOURCE_MODE DMO가 원본 모드 또는 필터 모드를 사용하는지 여부를 지정합니다.
MFPKEY_WMAAECMA_FEATR_AES DMO가 잔차 신호에서 AES(음향 에코 억제)를 수행하는 횟수를 지정합니다.
MFPKEY_WMAAECMA_FEATR_AGC DMO가 자동 게인 제어를 수행하는지 여부를 지정합니다.
MFPKEY_WMAAECMA_FEATR_CENTER_CLIP DMO가 가운데 클리핑을 수행하는지 여부를 지정합니다.
MFPKEY_WMAAECMA_FEATR_ECHO_LENGTH AEC(음향 에코 취소) 알고리즘이 처리할 수 있는 에코 기간을 지정합니다.
MFPKEY_WMAAECMA_FEATR_FRAME_SIZE 오디오 프레임 크기를 지정합니다.
MFPKEY_WMAAECMA_FEATR_MICARR_BEAM DMO가 마이크 배열 처리에 사용하는 빔을 지정합니다.
MFPKEY_WMAAECMA_FEATR_MICARR_MODE DMO가 마이크 배열 처리를 수행하는 방법을 지정합니다.
MFPKEY_WMAAECMA_FEATR_MICARR_PREPROC DMO가 마이크 배열 전처리를 수행하는지 여부를 지정합니다.
MFPKEY_WMAAECMA_FEATR_NOISE_FILL DMO가 노이즈 채우기를 수행하는지 여부를 지정합니다.
MFPKEY_WMAAECMA_FEATR_NS DMO가 노이즈 억제를 수행하는지 여부를 지정합니다.
MFPKEY_WMAAECMA_FEATR_VAD DMO가 수행하는 음성 활동 검색 유형을 지정합니다.
MFPKEY_WMAAECMA_FEATURE_MODE 애플리케이션이 다양한 속성에 대한 기본 설정을 재정의할 수 있도록 합니다.
MFPKEY_WMAAECMA_MIC_GAIN_BOUNDER DMO가 마이크 게인 경계를 적용할지 여부를 지정합니다.
MFPKEY_WMAAECMA_MICARRAY_DESCPTR 마이크 배열 기하 도형을 지정합니다.
MFPKEY_WMAAECMA_QUALITY_METRICS AEC에 대한 품질 메트릭을 검색합니다.
MFPKEY_WMAAECMA_RETRIEVE_TS_STATS DMO가 레지스트리에 타임스탬프를 저장하는지 여부를 지정합니다.
MFPKEY_WMAAECMA_SYSTEM_MODE 처리 모드를 설정합니다.

 

설명

다른 DSP와 달리 음성 캡처 개체는 단일 개체에 여러 DSP를 캡슐화하며 개체는 DMO 개체에만 포함됩니다( IMFTransform을 구현하지 않음). 음성 캡처 DMO에는 다음 DSP 구성 요소가 포함됩니다.

  • AEC(음향 에코 취소)
  • 마이크 배열 처리
  • 노이즈 표시 안 함
  • 자동 게인 제어
  • 음성 활동 검색

애플리케이션은 각 구성 요소를 개별적으로 켜고 끌 수 있습니다.

음성 캡처 DMO는 필터 모드 및 소스 모드의 두 가지 작업 모드를 지원합니다. 필터 모드에서 애플리케이션은 마이크와 스피커 라인에서 DMO로 오디오 샘플을 보내고 DMO는 출력을 생성합니다.

원본 모드에서 애플리케이션은 DMO에 샘플을 제공할 필요가 없습니다. 대신 DMO는 디바이스 초기화, 오디오 스트림 캡처 및 동기화, 타임스탬프를 계산하고 마이크 배열의 기하 도형 검색을 포함하여 오디오 디바이스에서 모든 작업을 관리합니다. 원본 모드를 사용하여 애플리케이션은 DMO를 구성하기만 하면 DMO의 출력은 클린 처리된 마이크 신호입니다. 소스 모드는 필터 모드보다 훨씬 쉽게 사용할 수 있으며 대부분의 애플리케이션에 권장됩니다.

현재 음성 캡처 DMO는 AEC(단일 채널 음향 에코 취소)만 지원하므로 스피커 라인의 출력은 단일 채널이어야 합니다. 마이크 배열 처리를 사용하지 않도록 설정하면 AEC 처리를 위해 다중 채널 입력이 한 채널로 폴딩됩니다. 마이크 배열 처리와 AEC 처리를 모두 사용하도록 설정하면 마이크 배열 처리 전에 각 마이크 요소에서 AEC가 수행됩니다.

마이크 배열 처리

마이크 배열은 밀접하게 배치된 마이크 집합입니다. 마이크 배열은 음향파가 약간 다른 시간에 각 마이크에 도착하기 때문에 단일 마이크보다 더 나은 방향성을 달성합니다. 마이크 배열에 대한 자세한 내용은 웹 문서 Windows Vista의 마이크 배열 지원Windows Vista용 마이크 배열을 빌드하고 사용하는 방법을 참조하세요.

음성 캡처 DSP 사용

음성 캡처 DSP를 사용하려면 다음 단계를 수행합니다.

1. DMO 초기화

CLSID CLSID_CWMAudioAEC사용하여 CoCreateInstance를 호출하여 음성 캡처 DMO를 만듭니다. 음성 캡처 DSDP는 IMediaObjectIPropertyStore 인터페이스만 노출하므로 DMO로만 사용할 수 있습니다.

DMO는 기본적으로 원본 모드로 설정됩니다. 필터 모드를 선택하려면 MFPKEY_WMAAECMA_DMO_SOURCE_MODE 속성을 VARIANT_FALSE 설정합니다.

다음으로, IPropertyStore 인터페이스를 사용하여 DMO의 내부 속성을 구성합니다. 애플리케이션에서 설정해야 하는 유일한 속성은 MFPKEY_WMAAECMA_SYSTEM_MODE 속성입니다. 이 속성은 DMO 내에서 처리 파이프라인을 구성합니다. 다른 속성은 선택 사항입니다.

2. 입력 및 출력 형식 설정

필터 모드에서 DMO를 사용하는 경우 IMediaObject::SetInputType을 호출하여 입력 형식을 설정합니다. 입력 형식은 거의 모든 유효한 압축되지 않은 PCM 또는 IEEE 부동 소수점 오디오 유형일 수 있습니다. 입력 형식이 출력 형식과 일치하지 않으면 DMO에서 샘플 속도 변환을 자동으로 수행합니다.

원본 모드에서 DMO를 사용하는 경우 입력 형식을 설정하지 마세요. DMO는 오디오 디바이스에 따라 입력 형식을 자동으로 구성합니다.

두 모드에서 IMediaObject::SetOutputType을 호출하여 출력 형식을 설정합니다. DMO는 다음 출력 형식을 수락할 수 있습니다.

  • 하위 유형: MEDIASUBTYPE_PCM 또는 MEDIASUBTYPE_IEEE_FLOAT
  • 서식 블록: WAVEFORMAT 또는 WAVEFORMATEX
  • 초당 샘플 수: 8,000개; 11,025; 16,000; 또는 22,050
  • 채널: AEC 전용 모드의 경우 1, 마이크 배열 처리의 경우 2 또는 4
  • 샘플당 비트 수: 16

다음 코드는 출력 형식을 16비트 단일 채널 PCM 오디오로 설정합니다.

DMO_MEDIA_TYPE mt;  // Media type.
mt.majortype = MEDIATYPE_Audio;
mt.subtype = MEDIASUBTYPE_PCM;
mt.lSampleSize = 0;
mt.bFixedSizeSamples = TRUE;
mt.bTemporalCompression = FALSE;
mt.formattype = FORMAT_WaveFormatEx;

// Allocate the format block to hold the WAVEFORMATEX structure.
hr = MoInitMediaType(&mt, sizeof(WAVEFORMATEX));
if (SUCCEEDED(hr))
{
    WAVEFORMATEX *pwav = (WAVEFORMATEX*)mt.pbFormat;
    pwav->wFormatTag = WAVE_FORMAT_PCM;
    pwav->nChannels = 1;
    pwav->nSamplesPerSec = 16000;
    pwav->nAvgBytesPerSec = 32000;
    pwav->nBlockAlign = 2;
    pwav->wBitsPerSample = 16;
    pwav->cbSize = 0;

    // Set the output type.
    if (SUCCEEDED(hr))
    {
        hr = pDMO->SetOutputType(0, &mt, 0); 
    }
    // Free the format block.
    MoFreeMediaType(&mt);
}

3. 데이터 처리

데이터를 처리하기 전에 IMediaObject::AllocateStreamingResources를 호출하는 것이 좋습니다. 이 메서드는 DMO에서 내부적으로 사용하는 리소스를 할당합니다. 이전에 나열된 단계가 아닌 다음에 AllocateStreamingResources 를 호출합니다. 이 메서드를 호출하지 않으면 DMO는 데이터 처리가 시작될 때 리소스를 자동으로 할당합니다.

필터 모드에서 DMO를 사용하는 경우 IMediaObject::P rocessInput을 호출하여 DMO에 입력 데이터를 전달해야 합니다. 마이크의 오디오 데이터는 스트림 0으로 이동하고 스피커 라인의 오디오 데이터는 스트림 1로 이동합니다. 원본 모드에서 DMO를 사용하는 경우 ProcessInput을 호출할 필요가 없습니다.

DSP에서 출력 데이터를 얻으려면 다음 단계를 수행합니다.

  1. 출력 데이터를 저장할 버퍼 개체를 만듭니다. 버퍼 개체는 IMediaBuffer 인터페이스를 구현해야 합니다. 버퍼의 크기는 애플리케이션의 요구 사항에 따라 달라집니다. 더 큰 버퍼를 할당하면 결함이 발생할 가능성을 줄일 수 있습니다.
  2. DMO_OUTPUT_DATA_BUFFER 구조를 선언하고 pBuffer 멤버를 버퍼 개체를 가리키도록 설정합니다.
  3. DMO_OUTPUT_DATA_BUFFER 구조를 IMediaObject::P rocessOutput 메서드에 전달합니다.
  4. DMO에 출력 데이터가 있는 한 이 메서드를 계속 호출합니다. DSP는 DMO_OUTPUT_DATA_BUFFER 구조체dwStatus 멤버에서 DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE 플래그를 설정하여 더 많은 출력이 있음을 신호합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버
Windows Server 2008 [데스크톱 앱만 해당]
헤더
Wmcodecdsp.h
DLL
Mfwmaaec.dll

추가 정보

디지털 신호 프로세서