다음을 통해 공유


방법: 소리 이동

이 항목에서는 왼쪽 스피커와 오른쪽 스피커 간의 이동이 가능하도록 스테레오 마스터링 음성으로 출력되는 모노 소스 음성의 출력 매트릭스를 설정하는 방법을 보여 줍니다.

이동 설정

  1. IXAudio2MasteringVoice::GetChannelMask를 사용하여 스피커 구성을 검색합니다.

    DWORD dwChannelMask;       
    pMasteringVoice->GetChannelMask( &dwChannelMask );       
    
  2. 출력 행렬을 저장할 배열을 만듭니다. 출력 매트릭스의 최소 크기는 원본 음성의 채널 수와 출력 음성의 채널 수입니다. 이 경우 8개 요소 배열은 최대 7.1개의 서라운드 사운드 출력 형식으로 출력되는 모노 음성을 처리합니다.

    float outputMatrix[ 8 ];
    for (int i=0; i<8; i++) outputMatrix[i] = 0;
    
  3. 왼쪽 스피커와 오른쪽 스피커 사이의 원하는 이동에 따라 보내기 수준을 계산합니다. 이 예제에서 이동 값의 범위는 -1에서 1까지이며 , -1은 왼쪽 스피커의 모든 소리를 나타내고 1은 오른쪽 스피커의 모든 소리를 나타냅니다.

    // pan of -1.0 indicates all left speaker, 
    // 1.0 is all right speaker, 0.0 is split between left and right
    float left = 0.5f - pan / 2;
    float right = 0.5f + pan / 2; 
    
  4. 이전 단계에서 계산된 값을 사용하여 왼쪽 및 오른쪽 스피커에 해당하는 출력 행렬 인덱스를 설정합니다. 왼쪽 및 오른쪽 스피커는 IXAudio2MasteringVoice::GetChannelMask에서 반환된 채널 마스크를 확인하여 결정됩니다. 채널은 항상 WAVEFORMATEXTENSIBLE 참조 페이지에 지정된 순서로 인코딩되어야 하므로 개별 스피커에 해당하는 배열 인덱스를 확인할 수 있습니다.

    switch (dwChannelMask)
    {
    case SPEAKER_MONO:
        outputMatrix[0] = 1.0;
        break;
    case SPEAKER_STEREO:
    case SPEAKER_2POINT1:
    case SPEAKER_SURROUND:
        outputMatrix[0] = left;
        outputMatrix[1] = right;
        break;
    case SPEAKER_QUAD:
        outputMatrix[0] = outputMatrix[2] = left;
        outputMatrix[1] = outputMatrix[3] = right;
        break;
    case SPEAKER_4POINT1:
        outputMatrix[ 0 ] = outputMatrix[ 3 ] = left;
        outputMatrix[ 1 ] = outputMatrix[ 4 ] = right;
        break;
    case SPEAKER_5POINT1:
    case SPEAKER_7POINT1:
    case SPEAKER_5POINT1_SURROUND:
        outputMatrix[ 0 ] = outputMatrix[ 4 ] = left;
        outputMatrix[ 1 ] = outputMatrix[ 5 ] = right;
        break;
    case SPEAKER_7POINT1_SURROUND:
        outputMatrix[ 0 ] = outputMatrix[ 4 ] = outputMatrix[ 6 ] = left;
        outputMatrix[ 1 ] = outputMatrix[ 5 ] = outputMatrix[ 7 ] = right;
        break;
    }
    
  5. IXAudio2Voice::SetOutputMatrix를 사용하여 출력 매트릭스를 원래 음성에 적용합니다. 원래 음성은 서브믹스 음성 또는 마스터링 음성으로 보내는 원본 음성 또는 서브믹스 음성입니다. IXAudio2Voice::GetVoiceDetails를 사용하여 채널 수와 같은 원래 음성 및 대상 음성에 대한 정보를 얻을 수 있습니다.

    // Assuming pVoice sends to pMasteringVoice
    
    XAUDIO2_VOICE_DETAILS VoiceDetails;
    pVoice->GetVoiceDetails(&VoiceDetails);
    
    XAUDIO2_VOICE_DETAILS MasterVoiceDetails;
    pMasteringVoice->GetVoiceDetails(&MasterVoiceDetails);
    
    pVoice->SetOutputMatrix( NULL, VoiceDetails.InputChannels, MasterVoiceDetails.InputChannels, outputMatrix );
    

XAudio2 프로그래밍 지침

방법: 기본 오디오 처리 그래프 빌드

XAudio2 볼륨 및 피치 컨트롤