XAUDIO2FX_REVERB_PARAMETERS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| WetDryMix | FLOAT | 4 | +0 | +0 | 出力のうちリバーブとなる割合 (パーセント)。指定できる値は 0 から 100 です。 | ||||||||||||||||||||||||||||||||
| ReflectionsDelay | DWORD | 4 | +4 | +4 | 直接音に対する最初の反射音の遅延時間。指定できる範囲は 0 から 300 ミリ秒です。 注意 サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のサンプリング レートを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。詳細については、後述の解説セクションを参照してください。
| ||||||||||||||||||||||||||||||||
| ReverbDelay | BYTE | 1 | +8 | +8 | 最初の反射音に対するリバーブの遅延。指定できる範囲は 0 から 85 ミリ秒です。 注意 サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のサンプリング レートを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。詳細については、後述の解説セクションを参照してください。
| ||||||||||||||||||||||||||||||||
| RearDelay | BYTE | 1 | +9 | +9 | 左リア出力と右リア出力の遅延。指定できる範囲は 0 から 5 ミリ秒です。 注意 サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のサンプリング レートを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。詳細については、後述の解説セクションを参照してください。
| ||||||||||||||||||||||||||||||||
| SideDelay | BYTE | 1 | +10 | +10 | 左サイド出力と右サイド出力の遅延。指定できる範囲は 0 から 5 ミリ秒です。 注意 この値は Windows 10 以降でサポートされます。
注意 サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のサンプリング レートを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。詳細については、後述の解説セクションを参照してください。
| ||||||||||||||||||||||||||||||||
| PositionLeft | BYTE | 1 | +11 | +11 | シミュレートされた空間内での、リスナーに対する左入力の位置。PositionLeft を最小値に設定すると、左入力はリスナーの近くに配置されます。この位置では初期反射音が支配的になり、リバーブの減衰は音場の奥に退いて振幅が小さくなります。PositionLeft を最大値に設定すると、左入力はシミュレートされた部屋の中でリスナーから最も離れた位置に配置されます。PositionLeft はリバーブの減衰時間 (部屋の響きの豊かさ) には影響せず、リスナーに対する音源の見かけの位置のみに影響します。指定できる範囲は 0 から 30 です (単位なし)。 | ||||||||||||||||||||||||||||||||
| PositionRight | BYTE | 1 | +12 | +12 | PositionLeft と同じですが、右入力のみに影響します。指定できる範囲は 0 から 30 です (単位なし)。 注意 PositionRight は、モノラル入力/モノラル出力モードでは無視されます。
| ||||||||||||||||||||||||||||||||
| PositionMatrixLeft | BYTE | 1 | +13 | +13 | 音源からリスナーまでの距離感を強めたり弱めたりします。指定できる範囲は 0 から 30 です (単位なし)。 | ||||||||||||||||||||||||||||||||
| PositionMatrixRight | BYTE | 1 | +14 | +14 | 音源からリスナーまでの距離感を強めたり弱めたりします。指定できる範囲は 0 から 30 です (単位なし)。 注意 PositionMatrixRight は、モノラル入力/モノラル出力モードでは無視されます。
| ||||||||||||||||||||||||||||||||
| EarlyDiffusion | BYTE | 1 | +15 | +15 | 個々の壁面反射の特性を制御します。最小値に設定すると硬く平坦な面を、最大値に設定すると拡散する面をシミュレートします。指定できる範囲は 0 から 15 です (単位なし)。 | ||||||||||||||||||||||||||||||||
| LateDiffusion | BYTE | 1 | +16 | +16 | 個々の壁面残響の特性を制御します。最小値に設定すると硬く平坦な面を、最大値に設定すると拡散する面をシミュレートします。指定できる範囲は 0 から 15 です (単位なし)。 | ||||||||||||||||||||||||||||||||
| LowEQGain | BYTE | 1 | +17 | +17 | 1 kHz における減衰時間を基準として、低域の減衰時間を調整します。値は次のように dB 単位のゲインに対応します。
注意 LowEQGain の値が 8 の場合、低域の減衰時間は 1 kHz における減衰時間と等しくなります。
| ||||||||||||||||||||||||||||||||
| LowEQCutoff | BYTE | 1 | +18 | +18 | LowEQGain パラメーターによって制御されるローパス フィルターのコーナー周波数を設定します。値は次のように Hz 単位の周波数に対応します。
指定できる範囲は 0 から 9 です (単位なし)。 | ||||||||||||||||||||||||||||||||
| HighEQGain | BYTE | 1 | +19 | +19 | 1 kHz における減衰時間を基準として、高域の減衰時間を調整します。0 に設定すると、高域は 1 kHz と同じ割合で減衰します。最大値に設定すると、高域は 1 kHz よりもはるかに速く減衰します。
指定できる範囲は 0 から 8 です (単位なし)。 | ||||||||||||||||||||||||||||||||
| HighEQCutoff | BYTE | 1 | +20 | +20 | HighEQGain パラメーターによって制御されるハイパス フィルターのコーナー周波数を設定します。値は次のように kHz 単位の周波数に対応します。
指定できる範囲は 0 から 14 です (単位なし)。 | ||||||||||||||||||||||||||||||||
| RoomFilterFreq | FLOAT | 4 | +21 | +21 | ルーム エフェクト用のローパス フィルターのコーナー周波数を設定します。指定できる範囲は 20 から 20,000 Hz です。 注意 サンプリング レートまたは時間に関連するすべてのパラメーターは 48kHz のサンプリング レートを基準としており、他のサンプリング レートで使用する場合はスケーリングする必要があります。詳細については、後述の解説セクションを参照してください。
| ||||||||||||||||||||||||||||||||
| RoomFilterMain | FLOAT | 4 | +25 | +25 | 初期反射音と後期残響の両方に適用されるローパス フィルターの通過帯域の強度レベルを設定します。指定できる範囲は -100 から 0 dB です。 | ||||||||||||||||||||||||||||||||
| RoomFilterHF | FLOAT | 4 | +29 | +29 | コーナー周波数 (RoomFilterFreq) における、初期反射音と後期残響の両方に適用されるローパス フィルターの強度を設定します。指定できる範囲は -100 から 0 dB です。 | ||||||||||||||||||||||||||||||||
| ReflectionsGain | FLOAT | 4 | +33 | +33 | 初期反射音の強度を調整します。指定できる範囲は -100 から 20 dB です。 | ||||||||||||||||||||||||||||||||
| ReverbGain | FLOAT | 4 | +37 | +37 | 残響の強度を調整します。指定できる範囲は -100 から 20 dB です。 | ||||||||||||||||||||||||||||||||
| DecayTime | FLOAT | 4 | +41 | +41 | 1 kHz における残響の減衰時間。フルスケールの入力信号が 60 dB 減衰するまでの時間です。指定できる範囲は 0.1 秒から無限大です。 | ||||||||||||||||||||||||||||||||
| Density | FLOAT | 4 | +45 | +45 | 後期残響におけるモード密度を制御します。色付けのない空間にするには、Density を最大値 (100) に設定します。Density を小さくすると、音は空洞のような (コム フィルターがかかったような) 響きになります。これはサイロなどをモデル化する場合に役立つ効果です。指定できる範囲はパーセントで 0 から 100 です。 | ||||||||||||||||||||||||||||||||
| RoomSize | FLOAT | 4 | +49 | +49 | 音響空間の見かけの広さ。指定できる範囲は 1 から 100 フィートです。 | ||||||||||||||||||||||||||||||||
| DisableLateField | BOOL | 4 | +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 公式リファレンス: 英語 (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 Structureimport 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: int32align(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