次の方法で共有


方法: サウンドをパンする

このトピックでは、左右のスピーカー間のパンを実現するために、ステレオ マスタリング音声に出力するモノラル ソース音声の出力マトリックスを設定する方法について説明します。

パンを設定するには

  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 音量とピッチコントロール