Using more folding on transients and less on non-transient
diff --git a/celt/celt_decoder.c b/celt/celt_decoder.c
index 58e7b75..66d8198 100644
--- a/celt/celt_decoder.c
+++ b/celt/celt_decoder.c
@@ -1028,7 +1028,7 @@
 
    codedBands = compute_allocation(mode, start, end, offsets, cap,
          alloc_trim, &intensity, &dual_stereo, bits, &balance, pulses,
-         fine_quant, fine_priority, C, LM, dec, 0, 0, 0);
+         fine_quant, fine_priority, C, LM, dec, 0, 0, 0, 0);
 
    unquant_fine_energy(mode, start, end, oldBandE, fine_quant, dec, C);
 
diff --git a/celt/celt_encoder.c b/celt/celt_encoder.c
index 6f1b1e4..86e20cb 100644
--- a/celt/celt_encoder.c
+++ b/celt/celt_encoder.c
@@ -2085,7 +2085,8 @@
       signalBandwidth = 1;
    codedBands = compute_allocation(mode, start, end, offsets, cap,
          alloc_trim, &st->intensity, &dual_stereo, bits, &balance, pulses,
-         fine_quant, fine_priority, C, LM, enc, 1, st->lastCodedBands, signalBandwidth);
+         fine_quant, fine_priority, C, LM, enc, 1, st->lastCodedBands,
+         signalBandwidth, isTransient);
    if (st->lastCodedBands)
       st->lastCodedBands = IMIN(st->lastCodedBands+1,IMAX(st->lastCodedBands-1,codedBands));
    else
diff --git a/celt/rate.c b/celt/rate.c
index 7dfa5be..c37948e 100644
--- a/celt/rate.c
+++ b/celt/rate.c
@@ -248,7 +248,8 @@
 static OPUS_INLINE int interp_bits2pulses(const CELTMode *m, int start, int end, int skip_start,
       const int *bits1, const int *bits2, const int *thresh, const int *cap, opus_int32 total, opus_int32 *_balance,
       int skip_rsv, int *intensity, int intensity_rsv, int *dual_stereo, int dual_stereo_rsv, int *bits,
-      int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth)
+      int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth,
+      int is_transient)
 {
    opus_int32 psum;
    int lo, hi;
@@ -350,10 +351,15 @@
                skip here must be explicitly signaled.*/
             /*Choose a threshold with some hysteresis to keep bands from
                fluctuating in and out.*/
+            int threshold;
+            if (is_transient)
+               threshold = j<prev?10:20;
+            else
+               threshold = j<prev?2:5;
 #ifdef FUZZING
             if ((rand()&0x1) == 0)
 #else
-            if (codedBands<=start+2 || (band_bits > ((j<prev?7:9)*band_width<<LM<<BITRES)>>4 && j<=signalBandwidth))
+            if (codedBands<=start+2 || (band_bits > ((threshold)*band_width<<LM<<BITRES)>>4 && j<=signalBandwidth))
 #endif
             {
                ec_enc_bit_logp(ec, 1, 1);
@@ -525,7 +531,8 @@
 }
 
 int compute_allocation(const CELTMode *m, int start, int end, const int *offsets, const int *cap, int alloc_trim, int *intensity, int *dual_stereo,
-      opus_int32 total, opus_int32 *balance, int *pulses, int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth)
+      opus_int32 total, opus_int32 *balance, int *pulses, int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth,
+      int is_transient)
 {
    int lo, hi, len, j;
    int codedBands;
@@ -632,7 +639,7 @@
    }
    codedBands = interp_bits2pulses(m, start, end, skip_start, bits1, bits2, thresh, cap,
          total, balance, skip_rsv, intensity, intensity_rsv, dual_stereo, dual_stereo_rsv,
-         pulses, ebits, fine_priority, C, LM, ec, encode, prev, signalBandwidth);
+         pulses, ebits, fine_priority, C, LM, ec, encode, prev, signalBandwidth, is_transient);
    RESTORE_STACK;
    return codedBands;
 }
diff --git a/celt/rate.h b/celt/rate.h
index 515f768..bb92b3b 100644
--- a/celt/rate.h
+++ b/celt/rate.h
@@ -96,6 +96,7 @@
  @return Total number of bits allocated
 */
 int compute_allocation(const CELTMode *m, int start, int end, const int *offsets, const int *cap, int alloc_trim, int *intensity, int *dual_stero,
-      opus_int32 total, opus_int32 *balance, int *pulses, int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth);
+      opus_int32 total, opus_int32 *balance, int *pulses, int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth,
+      int is_transient);
 
 #endif