Share via


오디오 데이터 처리

[이 페이지와 연결된 기능인 Windows 미디어 플레이어 SDK는 레거시 기능입니다. MediaPlayer로 대체되었습니다. MediaPlayer는 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 Windows 미디어 플레이어 SDK 대신 MediaPlayer를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

DoProcessOutput의 기본 구현은 AllocateStreamingResources에서 수행한 것과 똑같이 유효한 WAVEFORMATEX 구조체에 대한 포인터를 검색하는 것으로 시작합니다. 그런 다음 해당 구조의 정보를 사용하여 처리 대기 중인 입력 버퍼의 샘플 수를 계산합니다. 다음 코드는 기본 구현에서 가져옵니다.

// Get a pointer to the valid WAVEFORMATEX structure
// for the current media type.
WAVEFORMATEX *pWave = ( WAVEFORMATEX * ) m_mtInput.pbFormat;

// Calculate the number of samples to process.
DWORD dwSamplesToProcess = (*cbBytesProcessed / pWave->nBlockAlign) * pWave->nChannels;

그런 다음, 코드는 wBitsPerSample 멤버를 검사하여 오디오의 비트 깊이를 확인합니다. 이 값은 switch 문에서 8비트 및 16비트 오디오에 대한 별도의 처리를 제공하는 데 사용됩니다.

8비트와 16비트 오디오의 차이점

8비트와 16비트 오디오 사이에는 중요한 차이점이 있습니다. 따라서 에코 효과를 만드는 처리 루틴은 다릅니다. 두 형식은 다음과 같은 방식으로 다릅니다.

  • 각 형식에는 서로 다른 샘플 크기가 있습니다. 8비트 샘플은 각각 1바이트의 메모리를 차지하고 16비트 샘플은 각각 2바이트를 차지합니다.
  • 각 형식은 오디오 진폭을 다르게 나타냅니다. 8비트 오디오는 0에서 255까지의 범위의 부호 없는 정수로 표시됩니다. 값이 128이면 무음이 표시됩니다. 16비트 오디오는 -32768에서 32767까지의 범위로 부 서명된 정수로 표시됩니다. 값이 0이면 무음이 표시됩니다.

에코 효과를 만드는 프로세스는 각 형식에 대해 근본적으로 동일하지만 세부 정보는 약간 달라야 합니다.

CEcho::D oProcessOutput 구현