2016-10-16 44 views
0

私はWPAアプリケーション用のボリュームスライダを構築して、XAudio2経由で出力しているWAVファイルに適用しようとしています。XAudio2ソース/マスターボイスSetVolumeパラメータ

私は一緒にすべての文字列を持っているし、音を再生することができます。すばらしいです!

SetVolumeメソッドの引数が分かりません。

誰でもボリュームスライダの適切な値を説明できますか?

私は信じられないほど明白なものを紛失していると私は確信しています;私はちょうどオーディオファイルで遊ぶのに慣れていないので、私はかなり馬鹿です。

2つのスライダ、つまりマスタリング用のボイスとソースボイス用のスライダを実際に使用したいと思っています。

+0

チャックが私のためにそれを釘付けに感謝します。 – WyomingDoug

答えて

0

一般に、アプリケーションの出力の全体的な音量レベルを制御するには、「マスタリング音声」の音量コントロールを使用します。音源ごとの音量は、プレミックスの個々の音を制御するために利用できますが、ユーザーがアプリケーションの全体的な音量を制御するための特定の直観的な方法ではありません。

音量レベルを用いて、浮動小数点振幅乗算-XAUDIO2_MAX_VOLUME_LEVELとXAUDIO2_MAX_VOLUME_LEVEL間 (-2²⁴2²⁴まで)として表される:MSDNに次のように

volumeパラメータが何を意味するかについては、それが定義されてい最大利得は144.5dBです。 1.0の音量レベルは、減衰またはゲインがないことを意味し、0は無音を意味する。負のレベルを使用して、オーディオのフェーズを反転することができます。ボリュームコントロールの詳細については、「XAudio2ボリュームとピッチコントロール」を参照してください。

実際には、サウンドを持たないように0.0に設定し、元のマスタリングされたミックスの「フルボリューム」にするには1.0に設定すると、0.0から1.0までは開始するのが妥当な場所です。個々のサウンドの音量、実行しているエフェクト、特にリバーブや3D空間ポジショニングによっては、全体の音量を1.0以上に設定すると「クリッピング」が発生することがあります。

マスタリングボリュームが1.0の場合でも、複雑なミックスでクリッピングが発生する可能性があります。ここでの解決方法は、マスタリング音声にFXMasteringLimiter APOを使用することです。たとえば、マスタリングリミッタをDirectX Tool Kit for Audioに追加するコードを次に示します。

FXMASTERINGLIMITER_PARAMETERS params = {}; 
    params.Release = FXMASTERINGLIMITER_DEFAULT_RELEASE; 
    params.Loudness = FXMASTERINGLIMITER_DEFAULT_LOUDNESS; 

#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) 
    hr = CreateFX(__uuidof(FXMasteringLimiter), 
    mVolumeLimiter.ReleaseAndGetAddressOf(), 
    &params, sizeof(params)); 
#else 
    hr = CreateFX(__uuidof(FXMasteringLimiter), 
    mVolumeLimiter.ReleaseAndGetAddressOf()); 
#endif 
    if (FAILED(hr)) 
     // error 

    XAUDIO2_EFFECT_DESCRIPTOR desc = {}; 
    desc.InitialState = TRUE; 
    desc.OutputChannels = masterChannels; 
    desc.pEffect = mVolumeLimiter.Get(); 

    XAUDIO2_EFFECT_CHAIN chain = { 1, &desc }; 
    hr = mMasterVoice->SetEffectChain(&chain); 
    if (FAILED(hr)) 
     // error 

#if (_WIN32_WINNT < _WIN32_WINNT_WIN8) 
    hr = mMasterVoice->SetEffectParameters(0, &params, sizeof(params)); 
    if (FAILED(hr)) 
     // error 
#endif 

上記の条件付きコードパスは、XAudio 2.8とXAudio 2.7のAPIの違いを処理するためのものです。 this blog postを参照してください。