@@ -300,11 +300,12 @@ namespace FDNReverb {
300300 // 長い残響ほど、コムフィルタのピークをぼかすために深いモジュレーションが必要。
301301 // Lexicon / Strymon 等の高品位リバーブの標準手法。
302302 //
303+ // ★ モジュレーション深さスケーリング(抑制版)
303304 // RT60 ≤ 1.0s → 1.0x (変化なし)
304- // RT60 = 3.0s → 2.6x
305- // RT60 ≥ 6 .0s → 5 .0x (上限)
305+ // RT60 = 3.0s → 2.0x
306+ // RT60 ≥ 5 .0s → 3 .0x (上限)
306307 // ─────────────────────────────────────────────────────────────────────────
307- modDepthScale = 1 .0f + juce::jlimit (0 .0f , 4 .0f , (rt60Mid - 1 .0f ) * 0 .8f );
308+ modDepthScale = 1 .0f + juce::jlimit (0 .0f , 2 .0f , (rt60Mid - 1 .0f ) * 0 .5f );
308309
309310 constexpr float baseDB = 16 .0f ;
310311 float decayCompDB = 7 .0f * std::log10 (rt60Mid);
@@ -408,8 +409,11 @@ namespace FDNReverb {
408409 // ★ CPU最適化: fs を float にキャッシュ(processBlock 全域で使用)
409410 const float fsf = static_cast <float >(fs);
410411
411- // ★ 金属音対策: モジュレーション深さをDecay依存でスケーリング
412- const float depthSamples = activeParams.modAmount * 0 .002f * fsf * modDepthScale;
412+ // ★ モジュレーション深さ: 二乗カーブ + ベース係数抑制
413+ // modAmount² でノブ低域を緩やかに、0.001f で全体深さを半減
414+ // 旧: modAmt=0.5 → 48smp(1ms) / 新: modAmt=0.5 → 12smp(0.25ms)
415+ const float modAmtCurved = activeParams.modAmount * activeParams.modAmount ;
416+ const float depthSamples = modAmtCurved * 0 .001f * fsf * modDepthScale;
413417 const float wetGain = juce::Decibels::decibelsToGain (activeParams.wetDB );
414418 const float stereoWidth = activeParams.stereoWidth ;
415419 const float erLevel = activeParams.erLevel ;
0 commit comments