2017-01-26 18 views
1

저는 Windows Core Audio API에 대해 배우고 있습니다. 이 Rendering a Stream 예제를 사용하여, 나는 IAudioClient::GetMixFormat는 다음과 같습니다 모호한 WAVEFORMATEXTENSIBLE 반환 찾는거야 : Format.cbSize는 22IAudioClient :: GetMixFormat에서 WAVEFORMATEXTENSIBLE을 해석합니다.

Format 
    wFormatTag   = WAVE_FORMAT_EXTENSIBLE (65534) 
    nChannels   = 2 
    nSamplesPerSec  = 48000 
    nAvgBytesPerSec  = 384000 
    nBlockAlign   = 8 
    wBitsPerSample  = 32 
    cbSize    = 22 
Samples // this is a union 
    wValidBitsPerSample = 32 
    wSamplesPerBlock = 32 
    wReserved   = 32 

때문에,이 전체 구조를; 샘플에 대한 추가 정보를 제공하는 GUID는 SubFormat입니다. 형식 태그가 WAVE_FORMAT_EXTENSIBLE이기 때문에 이상하게 보입니다. 이는 실제 형식을 결정하기 위해 Subformat GUID를 사용해야한다는 것을 의미합니다.

두 채널의 32 비트 샘플이 있음을 알 수 있습니다. 샘플이 정수인지 또는 부동 소수점 값인지 어떻게 알 수 있습니까?

[ 태그는 Apple API 용입니다. 윈도우 코어 오디오에 대해 다른 태그가 있나요]

답변

4

(22)는 WAVEFORMATEX 데이터는 다음 추가 데이터의 크기입니다 : 추가 된 추가 포맷 정보,

cbSize

크기 (바이트)를 WAVEFORMATEX 구조의 끝까지. 이 정보는 비 PCM 형식으로 wFormatTag에 대한 추가 특성을 저장할 때 사용할 수 있습니다. wFormatTag에 추가 정보가 필요하지 않으면이 구성원을 0으로 설정해야합니다. WAVE_FORMAT_PCM 형식의 경우 (및 경우에만 WAVE_FORMAT_PCM 형식)이 구성원은 무시됩니다. 이 구조가 WAVEFORMATEXTENSIBLE 구조에 포함되어있는 경우이 값은 적어도 22이어야합니다. 당신이 WAVEFORMATEXTENSIBLE의 정의를 보면

, 그것은 뒤에 추가 데이터를 WAVEFORMATEX로 시작하고 다음이 포함되어 다음 WAVEFORMATEX 데이터 후 22 바이트의 최소가

typedef struct { 
    WAVEFORMATEX Format; 
    union { 
    WORD wValidBitsPerSample; 
    WORD wSamplesPerBlock; 
    WORD wReserved; 
    } Samples; 
    DWORD  dwChannelMask; 
    GUID   SubFormat; 
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; 

합니다.

SubFormat 필드는 찾고자하는 형식 값을 포함합니다.

+0

D' oh! 해명 해줘서 고마워. –