Win32 API 日本語リファレンス
ホームMedia.Audio.XAudio2 › XAUDIO2FX_REVERB_PARAMETERS

XAUDIO2FX_REVERB_PARAMETERS

構造体
サイズx64: 57 バイト / x86: 57 バイトパッキング1

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
WetDryMixFLOAT4+0+0出力のうちリバーブとなる割合 (パーセント)。指定できる値は 0 から 100 です。
ReflectionsDelayDWORD4+4+4

直接音に対する最初の反射音の遅延時間。指定できる範囲は 0 から 300 ミリ秒です。

注意 サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のサンプリング レートを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。詳細については、後述の解説セクションを参照してください。
ReverbDelayBYTE1+8+8

最初の反射音に対するリバーブの遅延。指定できる範囲は 0 から 85 ミリ秒です。

注意 サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のサンプリング レートを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。詳細については、後述の解説セクションを参照してください。
RearDelayBYTE1+9+9

左リア出力と右リア出力の遅延。指定できる範囲は 0 から 5 ミリ秒です。

注意 サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のサンプリング レートを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。詳細については、後述の解説セクションを参照してください。
SideDelayBYTE1+10+10

左サイド出力と右サイド出力の遅延。指定できる範囲は 0 から 5 ミリ秒です。

注意 この値は Windows 10 以降でサポートされます。
注意 サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のサンプリング レートを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。詳細については、後述の解説セクションを参照してください。
PositionLeftBYTE1+11+11シミュレートされた空間内での、リスナーに対する左入力の位置。PositionLeft を最小値に設定すると、左入力はリスナーの近くに配置されます。この位置では初期反射音が支配的になり、リバーブの減衰は音場の奥に退いて振幅が小さくなります。PositionLeft を最大値に設定すると、左入力はシミュレートされた部屋の中でリスナーから最も離れた位置に配置されます。PositionLeft はリバーブの減衰時間 (部屋の響きの豊かさ) には影響せず、リスナーに対する音源の見かけの位置のみに影響します。指定できる範囲は 0 から 30 です (単位なし)。
PositionRightBYTE1+12+12

PositionLeft と同じですが、右入力のみに影響します。指定できる範囲は 0 から 30 です (単位なし)。

注意 PositionRight は、モノラル入力/モノラル出力モードでは無視されます。
PositionMatrixLeftBYTE1+13+13音源からリスナーまでの距離感を強めたり弱めたりします。指定できる範囲は 0 から 30 です (単位なし)。
PositionMatrixRightBYTE1+14+14

音源からリスナーまでの距離感を強めたり弱めたりします。指定できる範囲は 0 から 30 です (単位なし)。

注意 PositionMatrixRight は、モノラル入力/モノラル出力モードでは無視されます。
EarlyDiffusionBYTE1+15+15個々の壁面反射の特性を制御します。最小値に設定すると硬く平坦な面を、最大値に設定すると拡散する面をシミュレートします。指定できる範囲は 0 から 15 です (単位なし)。
LateDiffusionBYTE1+16+16個々の壁面残響の特性を制御します。最小値に設定すると硬く平坦な面を、最大値に設定すると拡散する面をシミュレートします。指定できる範囲は 0 から 15 です (単位なし)。
LowEQGainBYTE1+17+17

1 kHz における減衰時間を基準として、低域の減衰時間を調整します。値は次のように dB 単位のゲインに対応します。

0 1 2 3 4 5 6 7 8 9 10 11 12
ゲイン (dB) -8 -7 -6 -5 -4 -3 -2 -1 0 +1 +2 +3 +4
注意 LowEQGain の値が 8 の場合、低域の減衰時間は 1 kHz における減衰時間と等しくなります。
指定できる範囲は 0 から 12 です (単位なし)。
LowEQCutoffBYTE1+18+18

LowEQGain パラメーターによって制御されるローパス フィルターのコーナー周波数を設定します。値は次のように Hz 単位の周波数に対応します。

0 1 2 3 4 5 6 7 8 9
周波数 (Hz) 50 100 150 200 250 300 350 400 450 500

指定できる範囲は 0 から 9 です (単位なし)。

HighEQGainBYTE1+19+19

1 kHz における減衰時間を基準として、高域の減衰時間を調整します。0 に設定すると、高域は 1 kHz と同じ割合で減衰します。最大値に設定すると、高域は 1 kHz よりもはるかに速く減衰します。

0 1 2 3 4 5 6 7 8
ゲイン (dB) -8 -7 -6 -5 -4 -3 -2 -1 0

指定できる範囲は 0 から 8 です (単位なし)。

HighEQCutoffBYTE1+20+20

HighEQGain パラメーターによって制御されるハイパス フィルターのコーナー周波数を設定します。値は次のように kHz 単位の周波数に対応します。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
周波数 (kHz) 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8

指定できる範囲は 0 から 14 です (単位なし)。

RoomFilterFreqFLOAT4+21+21

ルーム エフェクト用のローパス フィルターのコーナー周波数を設定します。指定できる範囲は 20 から 20,000 Hz です。

注意 サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のサンプリング レートを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。詳細については、後述の解説セクションを参照してください。
RoomFilterMainFLOAT4+25+25初期反射音と後期残響の両方に適用されるローパス フィルターの通過帯域の強度レベルを設定します。指定できる範囲は -100 から 0 dB です。
RoomFilterHFFLOAT4+29+29コーナー周波数 (RoomFilterFreq) における、初期反射音と後期残響の両方に適用されるローパス フィルターの強度を設定します。指定できる範囲は -100 から 0 dB です。
ReflectionsGainFLOAT4+33+33初期反射音の強度を調整します。指定できる範囲は -100 から 20 dB です。
ReverbGainFLOAT4+37+37残響の強度を調整します。指定できる範囲は -100 から 20 dB です。
DecayTimeFLOAT4+41+411 kHz における残響の減衰時間。フルスケールの入力信号が 60 dB 減衰するまでの時間です。指定できる範囲は 0.1 秒から無限大です。
DensityFLOAT4+45+45後期残響におけるモード密度を制御します。色付けのない空間にするには、Density を最大値 (100) に設定します。Density を小さくすると、音は空洞のような (コム フィルターがかかったような) 響きになります。これはサイロなどをモデル化する場合に役立つ効果です。指定できる範囲はパーセントで 0 から 100 です。
RoomSizeFLOAT4+49+49音響空間の見かけの広さ。指定できる範囲は 1 から 100 フィートです。
DisableLateFieldBOOL4+53+53

TRUE に設定すると、後期反射音の計算を無効にします。後期反射音の計算を無効にすると、CPU 時間を大幅に節約できます。

注意 DirectX SDK バージョンの XAUDIO2 では、このメンバーはサポートされません。

公式ドキュメント

リバーブ APO で使用するパラメーターを記述します。

解説(Remarks)

サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のボイスを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。たとえば、ReflectionsDelay に 300ms を設定した場合、リバーブが 48kHz のボイスでホストされていれば実際に 300ms の遅延になりますが、24kHz のボイスでホストされている場合は 150ms の遅延になります。

プラットフォーム要件

Windows 10 (XAudio2.9); Windows 8, Windows Phone 8 (XAudio 2.8); DirectX SDK (XAudio 2.7)
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// XAUDIO2FX_REVERB_PARAMETERS  (x64 57 / x86 57 バイト)
#pragma pack(push, 1)
typedef struct XAUDIO2FX_REVERB_PARAMETERS {
    FLOAT WetDryMix;
    DWORD ReflectionsDelay;
    BYTE ReverbDelay;
    BYTE RearDelay;
    BYTE SideDelay;
    BYTE PositionLeft;
    BYTE PositionRight;
    BYTE PositionMatrixLeft;
    BYTE PositionMatrixRight;
    BYTE EarlyDiffusion;
    BYTE LateDiffusion;
    BYTE LowEQGain;
    BYTE LowEQCutoff;
    BYTE HighEQGain;
    BYTE HighEQCutoff;
    FLOAT RoomFilterFreq;
    FLOAT RoomFilterMain;
    FLOAT RoomFilterHF;
    FLOAT ReflectionsGain;
    FLOAT ReverbGain;
    FLOAT DecayTime;
    FLOAT Density;
    FLOAT RoomSize;
    BOOL DisableLateField;
} XAUDIO2FX_REVERB_PARAMETERS;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct XAUDIO2FX_REVERB_PARAMETERS
{
    public float WetDryMix;
    public uint ReflectionsDelay;
    public byte ReverbDelay;
    public byte RearDelay;
    public byte SideDelay;
    public byte PositionLeft;
    public byte PositionRight;
    public byte PositionMatrixLeft;
    public byte PositionMatrixRight;
    public byte EarlyDiffusion;
    public byte LateDiffusion;
    public byte LowEQGain;
    public byte LowEQCutoff;
    public byte HighEQGain;
    public byte HighEQCutoff;
    public float RoomFilterFreq;
    public float RoomFilterMain;
    public float RoomFilterHF;
    public float ReflectionsGain;
    public float ReverbGain;
    public float DecayTime;
    public float Density;
    public float RoomSize;
    [MarshalAs(UnmanagedType.Bool)] public bool DisableLateField;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure XAUDIO2FX_REVERB_PARAMETERS
    Public WetDryMix As Single
    Public ReflectionsDelay As UInteger
    Public ReverbDelay As Byte
    Public RearDelay As Byte
    Public SideDelay As Byte
    Public PositionLeft As Byte
    Public PositionRight As Byte
    Public PositionMatrixLeft As Byte
    Public PositionMatrixRight As Byte
    Public EarlyDiffusion As Byte
    Public LateDiffusion As Byte
    Public LowEQGain As Byte
    Public LowEQCutoff As Byte
    Public HighEQGain As Byte
    Public HighEQCutoff As Byte
    Public RoomFilterFreq As Single
    Public RoomFilterMain As Single
    Public RoomFilterHF As Single
    Public ReflectionsGain As Single
    Public ReverbGain As Single
    Public DecayTime As Single
    Public Density As Single
    Public RoomSize As Single
    <MarshalAs(UnmanagedType.Bool)> Public DisableLateField As Boolean
End Structure
import ctypes
from ctypes import wintypes

class XAUDIO2FX_REVERB_PARAMETERS(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("WetDryMix", ctypes.c_float),
        ("ReflectionsDelay", wintypes.DWORD),
        ("ReverbDelay", ctypes.c_ubyte),
        ("RearDelay", ctypes.c_ubyte),
        ("SideDelay", ctypes.c_ubyte),
        ("PositionLeft", ctypes.c_ubyte),
        ("PositionRight", ctypes.c_ubyte),
        ("PositionMatrixLeft", ctypes.c_ubyte),
        ("PositionMatrixRight", ctypes.c_ubyte),
        ("EarlyDiffusion", ctypes.c_ubyte),
        ("LateDiffusion", ctypes.c_ubyte),
        ("LowEQGain", ctypes.c_ubyte),
        ("LowEQCutoff", ctypes.c_ubyte),
        ("HighEQGain", ctypes.c_ubyte),
        ("HighEQCutoff", ctypes.c_ubyte),
        ("RoomFilterFreq", ctypes.c_float),
        ("RoomFilterMain", ctypes.c_float),
        ("RoomFilterHF", ctypes.c_float),
        ("ReflectionsGain", ctypes.c_float),
        ("ReverbGain", ctypes.c_float),
        ("DecayTime", ctypes.c_float),
        ("Density", ctypes.c_float),
        ("RoomSize", ctypes.c_float),
        ("DisableLateField", wintypes.BOOL),
    ]
#[repr(C, packed(1))]
pub struct XAUDIO2FX_REVERB_PARAMETERS {
    pub WetDryMix: f32,
    pub ReflectionsDelay: u32,
    pub ReverbDelay: u8,
    pub RearDelay: u8,
    pub SideDelay: u8,
    pub PositionLeft: u8,
    pub PositionRight: u8,
    pub PositionMatrixLeft: u8,
    pub PositionMatrixRight: u8,
    pub EarlyDiffusion: u8,
    pub LateDiffusion: u8,
    pub LowEQGain: u8,
    pub LowEQCutoff: u8,
    pub HighEQGain: u8,
    pub HighEQCutoff: u8,
    pub RoomFilterFreq: f32,
    pub RoomFilterMain: f32,
    pub RoomFilterHF: f32,
    pub ReflectionsGain: f32,
    pub ReverbGain: f32,
    pub DecayTime: f32,
    pub Density: f32,
    pub RoomSize: f32,
    pub DisableLateField: i32,
}
import "golang.org/x/sys/windows"

type XAUDIO2FX_REVERB_PARAMETERS struct {
	WetDryMix float32
	ReflectionsDelay uint32
	ReverbDelay byte
	RearDelay byte
	SideDelay byte
	PositionLeft byte
	PositionRight byte
	PositionMatrixLeft byte
	PositionMatrixRight byte
	EarlyDiffusion byte
	LateDiffusion byte
	LowEQGain byte
	LowEQCutoff byte
	HighEQGain byte
	HighEQCutoff byte
	RoomFilterFreq float32
	RoomFilterMain float32
	RoomFilterHF float32
	ReflectionsGain float32
	ReverbGain float32
	DecayTime float32
	Density float32
	RoomSize float32
	DisableLateField int32
}
type
  XAUDIO2FX_REVERB_PARAMETERS = packed record
    WetDryMix: Single;
    ReflectionsDelay: DWORD;
    ReverbDelay: Byte;
    RearDelay: Byte;
    SideDelay: Byte;
    PositionLeft: Byte;
    PositionRight: Byte;
    PositionMatrixLeft: Byte;
    PositionMatrixRight: Byte;
    EarlyDiffusion: Byte;
    LateDiffusion: Byte;
    LowEQGain: Byte;
    LowEQCutoff: Byte;
    HighEQGain: Byte;
    HighEQCutoff: Byte;
    RoomFilterFreq: Single;
    RoomFilterMain: Single;
    RoomFilterHF: Single;
    ReflectionsGain: Single;
    ReverbGain: Single;
    DecayTime: Single;
    Density: Single;
    RoomSize: Single;
    DisableLateField: BOOL;
  end;
const XAUDIO2FX_REVERB_PARAMETERS = extern struct {
    WetDryMix: f32,
    ReflectionsDelay: u32,
    ReverbDelay: u8,
    RearDelay: u8,
    SideDelay: u8,
    PositionLeft: u8,
    PositionRight: u8,
    PositionMatrixLeft: u8,
    PositionMatrixRight: u8,
    EarlyDiffusion: u8,
    LateDiffusion: u8,
    LowEQGain: u8,
    LowEQCutoff: u8,
    HighEQGain: u8,
    HighEQCutoff: u8,
    RoomFilterFreq: f32,
    RoomFilterMain: f32,
    RoomFilterHF: f32,
    ReflectionsGain: f32,
    ReverbGain: f32,
    DecayTime: f32,
    Density: f32,
    RoomSize: f32,
    DisableLateField: i32,
};
type
  XAUDIO2FX_REVERB_PARAMETERS {.packed.} = object
    WetDryMix: float32
    ReflectionsDelay: uint32
    ReverbDelay: uint8
    RearDelay: uint8
    SideDelay: uint8
    PositionLeft: uint8
    PositionRight: uint8
    PositionMatrixLeft: uint8
    PositionMatrixRight: uint8
    EarlyDiffusion: uint8
    LateDiffusion: uint8
    LowEQGain: uint8
    LowEQCutoff: uint8
    HighEQGain: uint8
    HighEQCutoff: uint8
    RoomFilterFreq: float32
    RoomFilterMain: float32
    RoomFilterHF: float32
    ReflectionsGain: float32
    ReverbGain: float32
    DecayTime: float32
    Density: float32
    RoomSize: float32
    DisableLateField: int32
align(1)
struct XAUDIO2FX_REVERB_PARAMETERS
{
    float WetDryMix;
    uint ReflectionsDelay;
    ubyte ReverbDelay;
    ubyte RearDelay;
    ubyte SideDelay;
    ubyte PositionLeft;
    ubyte PositionRight;
    ubyte PositionMatrixLeft;
    ubyte PositionMatrixRight;
    ubyte EarlyDiffusion;
    ubyte LateDiffusion;
    ubyte LowEQGain;
    ubyte LowEQCutoff;
    ubyte HighEQGain;
    ubyte HighEQCutoff;
    float RoomFilterFreq;
    float RoomFilterMain;
    float RoomFilterHF;
    float ReflectionsGain;
    float ReverbGain;
    float DecayTime;
    float Density;
    float RoomSize;
    int DisableLateField;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; XAUDIO2FX_REVERB_PARAMETERS サイズ: 57 バイト(x64)
dim st, 15    ; 4byte整数×15(構造体サイズ 57 / 4 切り上げ)
; WetDryMix : FLOAT (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; ReflectionsDelay : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; ReverbDelay : BYTE (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; RearDelay : BYTE (+9, 1byte)  poke st,9,値  /  値 = peek(st,9)
; SideDelay : BYTE (+10, 1byte)  poke st,10,値  /  値 = peek(st,10)
; PositionLeft : BYTE (+11, 1byte)  poke st,11,値  /  値 = peek(st,11)
; PositionRight : BYTE (+12, 1byte)  poke st,12,値  /  値 = peek(st,12)
; PositionMatrixLeft : BYTE (+13, 1byte)  poke st,13,値  /  値 = peek(st,13)
; PositionMatrixRight : BYTE (+14, 1byte)  poke st,14,値  /  値 = peek(st,14)
; EarlyDiffusion : BYTE (+15, 1byte)  poke st,15,値  /  値 = peek(st,15)
; LateDiffusion : BYTE (+16, 1byte)  poke st,16,値  /  値 = peek(st,16)
; LowEQGain : BYTE (+17, 1byte)  poke st,17,値  /  値 = peek(st,17)
; LowEQCutoff : BYTE (+18, 1byte)  poke st,18,値  /  値 = peek(st,18)
; HighEQGain : BYTE (+19, 1byte)  poke st,19,値  /  値 = peek(st,19)
; HighEQCutoff : BYTE (+20, 1byte)  poke st,20,値  /  値 = peek(st,20)
; RoomFilterFreq : FLOAT (+21, 4byte)  lpoke st,21,値  /  値 = lpeek(st,21)
; RoomFilterMain : FLOAT (+25, 4byte)  lpoke st,25,値  /  値 = lpeek(st,25)
; RoomFilterHF : FLOAT (+29, 4byte)  lpoke st,29,値  /  値 = lpeek(st,29)
; ReflectionsGain : FLOAT (+33, 4byte)  lpoke st,33,値  /  値 = lpeek(st,33)
; ReverbGain : FLOAT (+37, 4byte)  lpoke st,37,値  /  値 = lpeek(st,37)
; DecayTime : FLOAT (+41, 4byte)  lpoke st,41,値  /  値 = lpeek(st,41)
; Density : FLOAT (+45, 4byte)  lpoke st,45,値  /  値 = lpeek(st,45)
; RoomSize : FLOAT (+49, 4byte)  lpoke st,49,値  /  値 = lpeek(st,49)
; DisableLateField : BOOL (+53, 4byte)  lpoke st,53,値  /  値 = lpeek(st,53)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global XAUDIO2FX_REVERB_PARAMETERS, pack=1
    #field float WetDryMix
    #field int ReflectionsDelay
    #field byte ReverbDelay
    #field byte RearDelay
    #field byte SideDelay
    #field byte PositionLeft
    #field byte PositionRight
    #field byte PositionMatrixLeft
    #field byte PositionMatrixRight
    #field byte EarlyDiffusion
    #field byte LateDiffusion
    #field byte LowEQGain
    #field byte LowEQCutoff
    #field byte HighEQGain
    #field byte HighEQCutoff
    #field float RoomFilterFreq
    #field float RoomFilterMain
    #field float RoomFilterHF
    #field float ReflectionsGain
    #field float ReverbGain
    #field float DecayTime
    #field float Density
    #field float RoomSize
    #field bool DisableLateField
#endstruct

stdim st, XAUDIO2FX_REVERB_PARAMETERS        ; NSTRUCT 変数を確保
st->WetDryMix = 100
mes "WetDryMix=" + st->WetDryMix