Skip to main content

if ( CG.blockLength >= 4 )
{
nrLevel = (char *)xTime - (char *)scratch;
v8 = &scratch[CG.blockLength];
v9 = xFreq + 1;
v10 = outBuf + 2;
v7 = 0;
do
{
*(v9 - 1) = xTime[v7];
v7 += 4;
v9 += 4;
*v8 = *(v10 - 2);
v8 += 4;
*(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);
v10 += 4;
*(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);
*(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);
*(v8 - 2) = *(v10 - 4);
*(v9 - 2) = xTime[v7 - 1];
*(v8 - 1) = *(v10 - 3);
}
while ( v7 < L - 3 );
}
if ( v7 < L )
{
v11 = &xFreq[v7];
v12 = &xFreq[v7 + L];
v13 = L - v7;
do
{
v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);
++v11;
*(v11 - 1) = v14;
++v12;
--v13;
*(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);
}
while ( v13 );
}

if ( CG.blockLength >= 4 )  
{  
    nrLevel = (char *)xTime - (char *)scratch;  
    v8 = &scratch[CG.blockLength];  
    v9 = xFreq + 1;  
    v10 = outBuf + 2;  
    v7 = 0;  
    do  
    {  
      *(v9 - 1) = xTime[v7];  
      v7 += 4;  
      v9 += 4;  
      *v8 = *(v10 - 2);  
      v8 += 4;  
      *(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);  
      v10 += 4;  
      *(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);  
      *(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);  
      *(v8 - 2) = *(v10 - 4);  
      *(v9 - 2) = xTime[v7 - 1];  
      *(v8 - 1) = *(v10 - 3);  
    }  
    while ( v7 < L - 3 );  
  }  
  if ( v7 < L )  
  {  
    v11 = &xFreq[v7];  
    v12 = &xFreq[v7 + L];  
    v13 = L - v7;  
    do  
    {  
      v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);  
      ++v11;  
      *(v11 - 1) = v14;  
      ++v12;  
      --v13;  
      *(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);  
    }  
    while ( v13 );  
  }  

Full function are here for quick reference
int __cdecl NR_Proc(NoiseReduction *Q, AudioSignal2 *signal)
{
float *scratch; // ecx@1
float *v3; // edx@1
float *xTime; // ebx@1
int v5; // esi@1
int v7; // edi@5
float *v8; // ecx@6
float *v9; // eax@6
float *v10; // edx@6
float *v11; // eax@9
float *v12; // edx@9
int v13; // ecx@9
double v14; // st7@10
double v15; // st7@14
float *v16; // eax@14
double v17; // st6@14
double v18; // rt0@15
float *v19; // ecx@16
double v20; // rt1@16
double v21; // st6@16
double v22; // st7@16
bool v23; // zf@16
double v24; // st7@18
double v25; // st6@18
double v26; // st5@18
double v27; // st4@18
double v28; // st3@18
int v29; // ecx@19
unsigned int v30; // edx@19
float *v31; // edi@19
double v32; // st2@21
double v33; // st7@21
double v34; // rtt@21
double v35; // st2@21
double v36; // st6@21
double v37; // rt0@23
double v38; // st2@23
double v39; // st4@23
double v40; // st5@23
double v41; // st2@23
double v42; // rt0@23
double v43; // st2@23
double v44; // rt1@23
double v45; // st2@23
double v46; // rtt@23
double v47; // rt0@24
double v48; // st2@24
double v49; // rtt@24
double v50; // rt0@25
double v51; // st2@25
double v52; // st7@25
double v53; // st2@26
double v54; // st6@26
double v55; // rt2@26
double v56; // st2@26
double v57; // st7@26
double v58; // rtt@28
double v59; // rtt@29
double v60; // rt1@30
double v61; // st2@30
double v62; // st6@30
double v63; // st2@31
double v64; // st7@31
double v65; // rtt@31
double v66; // st2@31
double v67; // st6@31
double v68; // rt0@33
double v69; // st2@33
double v70; // st4@33
double v71; // st5@33
double v72; // st2@33
double v73; // rt0@33
double v74; // st2@33
double v75; // rt1@33
double v76; // st2@33
double v77; // rtt@33
double v78; // rt0@34
double v79; // st2@34
double v80; // rtt@34
double v81; // rt0@35
double v82; // st2@35
double v83; // st7@35
double v84; // st2@36
double v85; // st6@36
double v86; // rt2@36
double v87; // st2@36
double v88; // rtt@38
double v89; // rtt@39
double v90; // st1@40
double v91; // rt1@40
double v92; // st2@40
float *v93; // ecx@42
int v94; // edx@42
double v95; // rt2@43
double v96; // st3@43
double v97; // rt0@43
double v98; // st2@45
double v99; // st7@45
double v100; // rt2@45
double v101; // st2@45
double v102; // st6@45
double v103; // rtt@47
double v104; // st2@47
double v105; // st4@47
double v106; // st5@47
double v107; // st2@47
double v108; // rtt@47
double v109; // st2@47
double v110; // rt0@47
double v111; // st2@47
double v112; // rt2@47
double v113; // rtt@48
double v114; // st2@48
double v115; // rt2@48
double v116; // st1@49
double v117; // rtt@49
double v118; // st2@49
double v119; // st7@49
int v120; // edx@51
int v121; // edi@51
int v122; // ecx@52
unsigned int v123; // edx@52
int v124; // eax@52
int v125; // eax@56
int v126; // edx@56
double v127; // st7@57
int v128; // edx@59
double v129; // st7@59
int v130; // edi@60
int v131; // ecx@60
float v132; // ST18_4@61
double v133; // ST30_8@61
double v134; // st1@61
bool v135; // c0@61
bool v136; // c3@61
double v137; // st1@61
float v138; // ST30_4@63
float v139; // ST30_4@63
float v140; // ST18_4@63
double v141; // ST30_8@63
double v142; // st1@63
bool v143; // c0@63
bool v144; // c3@63
double v145; // st1@63
float v146; // ST30_4@65
float v147; // ST30_4@65
float v148; // ST18_4@65
double v149; // ST30_8@65
double v150; // st1@65
bool v151; // c0@65
bool v152; // c3@65
double v153; // st1@65
float v154; // ST30_4@67
float v155; // ST30_4@67
float v156; // ST18_4@67
double v157; // ST30_8@67
double v158; // st1@67
bool v159; // c0@67
bool v160; // c3@67
double v161; // st1@67
float v162; // ST30_4@69
float v163; // ST30_4@69
int v164; // edi@71
int v165; // ecx@71
int v166; // esi@71
float v167; // ST18_4@72
double v168; // ST30_8@72
double v169; // st1@72
bool v170; // c0@72
bool v171; // c3@72
double v172; // st1@72
float v173; // ST4C_4@74
float v174; // ST4C_4@74
int v175; // edx@75
int v176; // esi@75
int v177; // ecx@76
unsigned int v178; // edx@76
int v179; // eax@76
int v180; // eax@80
int v181; // edx@80
double v182; // st7@81
float EXi; // [sp+10h] [bp-3Ch]@21 MAPDST
float y2; // [sp+14h] [bp-38h]@20 MAPDST
double y2j; // [sp+14h] [bp-38h]@61 MAPDST
int L; // [sp+20h] [bp-2Ch]@5
float *outBuf; // [sp+24h] [bp-28h]@3
float *N; // [sp+28h] [bp-24h]@1
int i; // [sp+2Ch] [bp-20h]@18
int nrLevel; // [sp+38h] [bp-14h]@6 MAPDST
float *G; // [sp+3Ch] [bp-10h]@1
float *xFreq; // [sp+40h] [bp-Ch]@1
int bufLength; // [sp+44h] [bp-8h]@1
int v218; // [sp+48h] [bp-4h]@60

scratch = CG.Scratch;
v3 = Q->G;
xTime = Q->xTime;
v5 = CG.ERB_Length;
++Q->count;
xFreq = scratch;
G = v3;
N = Q->N;
bufLength = v5;
if ( !(Q->Enabled & 0x10000000) )
return -5;
outBuf = signal->buffer;
if ( !signal->buffer )
return -1;
v7 = 0;
L = CG.blockLength;
if ( CG.blockLength >= 4 )
{
nrLevel = (char *)xTime - (char *)scratch;
v8 = &scratch[CG.blockLength];
v9 = xFreq + 1;
v10 = outBuf + 2;
v7 = 0;
do
{
*(v9 - 1) = xTime[v7];
v7 += 4;
v9 += 4;
*v8 = *(v10 - 2);
v8 += 4;
*(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);
v10 += 4;
*(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);
*(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);
*(v8 - 2) = *(v10 - 4);
*(v9 - 2) = xTime[v7 - 1];
*(v8 - 1) = *(v10 - 3);
}
while ( v7 < L - 3 );
}
if ( v7 < L )
{
v11 = &xFreq[v7];
v12 = &xFreq[v7 + L];
v13 = L - v7;
do
{
v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);
++v11;
*(v11 - 1) = v14;
++v12;
--v13;
*(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);
}
while ( v13 );
}
WindowFft(xFreq, L);
AmpSpectrum(xFreq, xTime);
if ( Q->count < 20 && signal->Silence )
{
if ( v5 > 0 )
{
v15 = 1.0;
v16 = N;
v17 = 0.5;
nrLevel = v5;
while ( 1 )
{
v19 = (float *)((char *)v16 + (char *)xTime - (char *)N);
v20 = v17;
v21 = v15;
v22 = v20;
*(float *)((char *)v19 + (char *)G - (char *)xTime) = v21;
++v16;
v23 = nrLevel-- == 1;
*(v16 - 1) = *v19 * v20 + *(v16 - 1) * v20;
if ( v23 )
break;
v18 = v21;
v17 = v22;
v15 = v18;
}
}
}
else
{
v24 = 0.94999999;
v25 = 0.050000001;
i = 0;
v26 = 0.99800003;
v27 = 0.0020000001;
v28 = 0.99980003;
if ( v5 >= 4 )
{
v29 = (int)(N + 1);
v30 = ((unsigned int)(v5 - 4) >> 2) + 1;
v31 = xTime + 3;
i = 4 * v30;
do
{
y2 = *(v31 - 3);
if ( *(float *)(v29 - 4) <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v47 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v48 = v24;
v33 = v47;
v49 = v48;
v35 = v25;
v36 = v49;
}
else
{
v37 = y2;
EXi = v26;
v38 = v27;
v39 = v26;
y2 = v38;
v40 = v38;
v41 = v24;
v33 = v37;
v42 = v41;
v43 = v25;
v36 = v42;
v44 = v43;
v45 = v40;
v26 = v39;
v46 = v45;
v35 = v44;
v27 = v46;
}
}
else
{
v32 = v24;
v33 = y2;
EXi = v32;
v34 = v32;
v35 = v25;
v36 = v34;
y2 = v35;
}
v50 = v35;
v51 = v33 * y2 + *(float *)(v29 - 4) * EXi;
v52 = v50;
*(float *)(v29 - 4) = v51;
y2 = *(float *)(v29 + (char *)xTime - (char *)N);
if ( *(float *)v29 <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v59 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v56 = v52;
v57 = v36;
v54 = v59;
}
else
{
v58 = y2;
EXi = v26;
y2 = v27;
v56 = v52;
v57 = v36;
v54 = v58;
}
}
else
{
v53 = v36;
v54 = y2;
EXi = v53;
v55 = v53;
v56 = v52;
v57 = v55;
y2 = v56;
}
v60 = v56;
v61 = v54 * y2 + *(float *)v29 * EXi;
v62 = v60;
*(float *)v29 = v61;
y2 = *(v31 - 1);
if ( *(float *)(v29 + 4) <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v78 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v79 = v57;
v64 = v78;
v80 = v79;
v66 = v62;
v67 = v80;
}
else
{
v68 = y2;
EXi = v26;
v69 = v27;
v70 = v26;
y2 = v69;
v71 = v69;
v72 = v57;
v64 = v68;
v73 = v72;
v74 = v62;
v67 = v73;
v75 = v74;
v76 = v71;
v26 = v70;
v77 = v76;
v66 = v75;
v27 = v77;
}
}
else
{
v63 = v57;
v64 = y2;
EXi = v63;
v65 = v63;
v66 = v62;
v67 = v65;
y2 = v66;
}
v81 = v66;
v82 = v64 * y2 + EXi * *(float *)(v29 + 4);
v83 = v81;
*(float *)(v29 + 4) = v82;
y2 = *v31;
if ( *(float *)(v29 + 8) <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v89 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v87 = v83;
v24 = v67;
v85 = v89;
}
else
{
v88 = y2;
EXi = v26;
y2 = v27;
v87 = v83;
v24 = v67;
v85 = v88;
}
}
else
{
v84 = v67;
v85 = y2;
EXi = v84;
v86 = v84;
v87 = v83;
v24 = v86;
y2 = v87;
}
v90 = *(float *)(v29 + 8);
v29 += 16;
v31 += 4;
--v30;
v91 = v87;
v92 = v85 * y2 + v90 * EXi;
v25 = v91;
*(float *)(v29 - 8) = v92;
}
while ( v30 );
}
if ( i < v5 )
{
v93 = &N[i];
v94 = v5 - i;
while ( 1 )
{
y2 = *(float *)((char *)v93 + (char *)xTime - (char *)N);
if ( *v93 <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v113 = y2;
EXi = v28;
y2 = 0.00019999999;
v114 = v24;
v99 = v113;
v115 = v114;
v101 = v25;
v102 = v115;
}
else
{
v103 = y2;
EXi = v26;
v104 = v27;
v105 = v26;
y2 = v104;
v106 = v104;
v107 = v24;
v99 = v103;
v108 = v107;
v109 = v25;
v102 = v108;
v110 = v109;
v111 = v106;
v26 = v105;
v112 = v111;
v101 = v110;
v27 = v112;
}
}
else
{
v98 = v24;
v99 = y2;
EXi = v98;
v100 = v98;
v101 = v25;
v102 = v100;
y2 = v101;
}
v116 = *v93;
++v93;
--v94;
v117 = v101;
v118 = v99 * y2 + v116 * EXi;
v119 = v117;
*(v93 - 1) = v118;
if ( !v94 )
break;
v95 = v28;
v96 = v119;
v24 = v102;
v97 = v96;
v28 = v95;
v25 = v97;
}
}
}
if ( Q->Enabled & 0x2000000 )
{
v128 = 0;
v129 = CG.dbTable[Q->nrLeveldB];
if ( v5 >= 4 )
{
v130 = (int)(N + 2);
v218 = (char *)N - (char *)G;
v131 = (int)(G + 1);
nrLevel = (char *)xTime - (char *)N;
do
{
EXi = xTime[v128];
v132 = *(float *)(v130 - 8) * 8.0;
v133 = EXi - v132;
v134 = EXi * v129;
y2j = v134;
v135 = v133 < v134;
v136 = v133 == v134;
v137 = v133;
if ( v135 || v136 )
v137 = y2j;
v138 = v137;
v139 = v138 / (EXi + 1.0 + 2.0);
*(float *)(v131 - 4) = v139 * 0.300000011920929 + *(float *)(v131 - 4) * 0.699999988079071;
EXi = *(float *)(nrLevel + v131 + v218);
v140 = *(float *)(v131 + v218) * 8.0;
v141 = EXi - v140;
v142 = EXi * v129;
y2j = v142;
v143 = v141 < v142;
v144 = v141 == v142;
v145 = v141;
if ( v143 || v144 )
v145 = y2j;
v146 = v145;
v147 = v146 / (EXi + 1.0 + 2.0);
*(float *)v131 = v147 * 0.300000011920929 + *(float *)v131 * 0.699999988079071;
EXi = *(float *)(v130 + nrLevel);
v148 = *(float *)v130 * 8.0;
v149 = EXi - v148;
v150 = EXi * v129;
y2j = v150;
v151 = v149 < v150;
v152 = v149 == v150;
v153 = v149;
if ( v151 || v152 )
v153 = y2j;
v154 = v153;
v155 = v154 / (EXi + 1.0 + 2.0);
*(float *)(v131 + 4) = v155 * 0.300000011920929 + *(float *)(v131 + 4) * 0.699999988079071;
EXi = xTime[v128 + 3];
v156 = *(float *)(v130 + 4) * 8.0;
v157 = EXi - v156;
v158 = EXi * v129;
y2j = v158;
v159 = v157 < v158;
v160 = v157 == v158;
v161 = v157;
if ( v159 || v160 )
v161 = y2j;
v162 = v161;
v5 = bufLength;
v128 += 4;
v131 += 16;
v130 += 16;
v163 = v162 / (EXi + 1.0 + 2.0);
*(float *)(v131 - 8) = v163 * 0.300000011920929 + *(float *)(v131 - 8) * 0.699999988079071;
}
while ( v128 < bufLength - 3 );
}
if ( v128 < v5 )
{
v164 = (char *)N - (char *)G;
v165 = (int)&G[v128];
v166 = v5 - v128;
do
{
EXi = *(float *)(v165 + v164 + (char *)xTime - (char *)N);
v167 = *(float *)(v165 + v164) * 8.0;
v168 = EXi - v167;
v169 = EXi * v129;
y2j = v169;
v170 = v168 < v169;
v171 = v168 == v169;
v172 = v168;
if ( v170 || v171 )
v172 = y2j;
v173 = v172;
v165 += 4;
--v166;
v174 = v173 / (EXi + 1.0 + 2.0);
*(float *)(v165 - 4) = v174 * 0.300000011920929 + *(float *)(v165 - 4) * 0.699999988079071;
}
while ( v166 );
}
FreqSmooth(G, xFreq, 0.5);
v175 = L;
v176 = 0;
if ( L >= 4 )
{
v177 = (int)(outBuf + 3);
v178 = ((unsigned int)(L - 4) >> 2) + 1;
v179 = (int)(xTime + 1);
v176 = 4 * v178;
do
{
v179 += 16;
*(float *)(v179 - 20) = *(float *)(v177 - 12);
v177 += 16;
--v178;
*(float *)(v179 - 16) = *(float *)(v179 + (char *)outBuf - (char *)xTime - 16);
*(float *)(v179 - 12) = *(float *)(v177 - 20);
*(float *)(v179 - 8) = *(float *)(v177 - 16);
}
while ( v178 );
v175 = L;
}
if ( v176 < v175 )
{
v180 = (int)&xTime[v176];
v181 = v175 - v176;
do
{
v182 = *(float *)((char *)outBuf - (char *)xTime + v180);
v180 += 4;
--v181;
*(float *)(v180 - 4) = v182;
}
while ( v181 );
}
Reconstruct(xFreq, outBuf, Q->by);
return 0;
}
v120 = L;
v121 = 0;
if ( L >= 4 )
{
v122 = (int)(outBuf + 3);
v123 = ((unsigned int)(L - 4) >> 2) + 1;
v124 = (int)(xTime + 1);
v121 = 4 * v123;
do
{
v124 += 16;
*(float *)(v124 - 20) = *(float *)(v122 - 12);
v122 += 16;
--v123;
*(float *)(v124 - 16) = *(float *)((char *)outBuf - (char *)xTime + v124 - 16);
*(float *)(v124 - 12) = *(float *)(v122 - 20);
*(float *)(v124 - 8) = *(float *)(v122 - 16);
}
while ( v123 );
v120 = L;
}
if ( v121 >= v120 )
return 0;
v125 = (int)&xTime[v121];
v126 = v120 - v121;
do
{
v127 = *(float *)(v125 + (char *)outBuf - (char *)xTime);
v125 += 4;
--v126;
*(float *)(v125 - 4) = v127;
}
while ( v126 );
return 0;
}

int __cdecl NR_Proc(_NoiseReduction *Q, AudioSignal2_ *signal)  
{  
  float *scratch; // ecx@1  
  float *v3; // edx@1  
  float *xTime; // ebx@1  
  int v5; // esi@1  
  int v7; // edi@5  
  float *v8; // ecx@6  
  float *v9; // eax@6  
  float *v10; // edx@6  
  float *v11; // eax@9  
  float *v12; // edx@9  
  int v13; // ecx@9  
  double v14; // st7@10  
  double v15; // st7@14  
  float *v16; // eax@14  
  double v17; // st6@14  
  double v18; // rt0@15  
  float *v19; // ecx@16  
  double v20; // rt1@16  
  double v21; // st6@16  
  double v22; // st7@16  
  bool v23; // zf@16  
  double v24; // st7@18  
  double v25; // st6@18  
  double v26; // st5@18  
  double v27; // st4@18  
  double v28; // st3@18  
  int v29; // ecx@19  
  unsigned int v30; // edx@19  
  float *v31; // edi@19  
  double v32; // st2@21  
  double v33; // st7@21  
  double v34; // rtt@21  
  double v35; // st2@21  
  double v36; // st6@21  
  double v37; // rt0@23  
  double v38; // st2@23  
  double v39; // st4@23  
  double v40; // st5@23  
  double v41; // st2@23  
  double v42; // rt0@23  
  double v43; // st2@23  
  double v44; // rt1@23  
  double v45; // st2@23  
  double v46; // rtt@23  
  double v47; // rt0@24  
  double v48; // st2@24  
  double v49; // rtt@24  
  double v50; // rt0@25  
  double v51; // st2@25  
  double v52; // st7@25  
  double v53; // st2@26  
  double v54; // st6@26  
  double v55; // rt2@26  
  double v56; // st2@26  
  double v57; // st7@26  
  double v58; // rtt@28  
  double v59; // rtt@29  
  double v60; // rt1@30  
  double v61; // st2@30  
  double v62; // st6@30  
  double v63; // st2@31  
  double v64; // st7@31  
  double v65; // rtt@31  
  double v66; // st2@31  
  double v67; // st6@31  
  double v68; // rt0@33  
  double v69; // st2@33  
  double v70; // st4@33  
  double v71; // st5@33  
  double v72; // st2@33  
  double v73; // rt0@33  
  double v74; // st2@33  
  double v75; // rt1@33  
  double v76; // st2@33  
  double v77; // rtt@33  
  double v78; // rt0@34  
  double v79; // st2@34  
  double v80; // rtt@34  
  double v81; // rt0@35  
  double v82; // st2@35  
  double v83; // st7@35  
  double v84; // st2@36  
  double v85; // st6@36  
  double v86; // rt2@36  
  double v87; // st2@36  
  double v88; // rtt@38  
  double v89; // rtt@39  
  double v90; // st1@40  
  double v91; // rt1@40  
  double v92; // st2@40  
  float *v93; // ecx@42  
  int v94; // edx@42  
  double v95; // rt2@43  
  double v96; // st3@43  
  double v97; // rt0@43  
  double v98; // st2@45  
  double v99; // st7@45  
  double v100; // rt2@45  
  double v101; // st2@45  
  double v102; // st6@45  
  double v103; // rtt@47  
  double v104; // st2@47  
  double v105; // st4@47  
  double v106; // st5@47  
  double v107; // st2@47  
  double v108; // rtt@47  
  double v109; // st2@47  
  double v110; // rt0@47  
  double v111; // st2@47  
  double v112; // rt2@47  
  double v113; // rtt@48  
  double v114; // st2@48  
  double v115; // rt2@48  
  double v116; // st1@49  
  double v117; // rtt@49  
  double v118; // st2@49  
  double v119; // st7@49  
  int v120; // edx@51  
  int v121; // edi@51  
  int v122; // ecx@52  
  unsigned int v123; // edx@52  
  int v124; // eax@52  
  int v125; // eax@56  
  int v126; // edx@56  
  double v127; // st7@57  
  int v128; // edx@59  
  double v129; // st7@59  
  int v130; // edi@60  
  int v131; // ecx@60  
  float v132; // ST18_4@61  
  double v133; // ST30_8@61  
  double v134; // st1@61  
  bool v135; // c0@61  
  bool v136; // c3@61  
  double v137; // st1@61  
  float v138; // ST30_4@63  
  float v139; // ST30_4@63  
  float v140; // ST18_4@63  
  double v141; // ST30_8@63  
  double v142; // st1@63  
  bool v143; // c0@63  
  bool v144; // c3@63  
  double v145; // st1@63  
  float v146; // ST30_4@65  
  float v147; // ST30_4@65  
  float v148; // ST18_4@65  
  double v149; // ST30_8@65  
  double v150; // st1@65  
  bool v151; // c0@65  
  bool v152; // c3@65  
  double v153; // st1@65  
  float v154; // ST30_4@67  
  float v155; // ST30_4@67  
  float v156; // ST18_4@67  
  double v157; // ST30_8@67  
  double v158; // st1@67  
  bool v159; // c0@67  
  bool v160; // c3@67  
  double v161; // st1@67  
  float v162; // ST30_4@69  
  float v163; // ST30_4@69  
  int v164; // edi@71  
  int v165; // ecx@71  
  int v166; // esi@71  
  float v167; // ST18_4@72  
  double v168; // ST30_8@72  
  double v169; // st1@72  
  bool v170; // c0@72  
  bool v171; // c3@72  
  double v172; // st1@72  
  float v173; // ST4C_4@74  
  float v174; // ST4C_4@74  
  int v175; // edx@75  
  int v176; // esi@75  
  int v177; // ecx@76  
  unsigned int v178; // edx@76  
  int v179; // eax@76  
  int v180; // eax@80  
  int v181; // edx@80  
  double v182; // st7@81  
  float EXi; // [sp+10h] [bp-3Ch]@21 MAPDST  
  float y2; // [sp+14h] [bp-38h]@20 MAPDST  
  double y2j; // [sp+14h] [bp-38h]@61 MAPDST  
  int L; // [sp+20h] [bp-2Ch]@5  
  float *outBuf; // [sp+24h] [bp-28h]@3  
  float *N; // [sp+28h] [bp-24h]@1  
  int i; // [sp+2Ch] [bp-20h]@18  
  int nrLevel; // [sp+38h] [bp-14h]@6 MAPDST  
  float *G; // [sp+3Ch] [bp-10h]@1  
  float *xFreq; // [sp+40h] [bp-Ch]@1  
  int bufLength; // [sp+44h] [bp-8h]@1  
  int v218; // [sp+48h] [bp-4h]@60  

  scratch = CG.Scratch;  
  v3 = Q->G;  
  xTime = Q->xTime;  
  v5 = CG.ERB_Length;  
  ++Q->count;  
  xFreq = scratch;  
  G = v3;  
  N = Q->N;  
  bufLength = v5;  
  if ( !(Q->Enabled & 0x10000000) )  
    return -5;  
  outBuf = signal->buffer;  
  if ( !signal->buffer )  
    return -1;  
  v7 = 0;  
  L = CG.blockLength;  
  if ( CG.blockLength >= 4 )  
  {  
    nrLevel = (char *)xTime - (char *)scratch;  
    v8 = &scratch[CG.blockLength];  
    v9 = xFreq + 1;  
    v10 = outBuf + 2;  
    v7 = 0;  
    do  
    {  
      *(v9 - 1) = xTime[v7];  
      v7 += 4;  
      v9 += 4;  
      *v8 = *(v10 - 2);  
      v8 += 4;  
      *(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);  
      v10 += 4;  
      *(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);  
      *(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);  
      *(v8 - 2) = *(v10 - 4);  
      *(v9 - 2) = xTime[v7 - 1];  
      *(v8 - 1) = *(v10 - 3);  
    }  
    while ( v7 < L - 3 );  
  }  
  if ( v7 < L )  
  {  
    v11 = &xFreq[v7];  
    v12 = &xFreq[v7 + L];  
    v13 = L - v7;  
    do  
    {  
      v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);  
      ++v11;  
      *(v11 - 1) = v14;  
      ++v12;  
      --v13;  
      *(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);  
    }  
    while ( v13 );  
  }  
  WindowFft(xFreq, L);  
  AmpSpectrum(xFreq, xTime);  
  if ( Q->count < 20 && signal->Silence )  
  {  
    if ( v5 > 0 )  
    {  
      v15 = 1.0;  
      v16 = N;  
      v17 = 0.5;  
      nrLevel = v5;  
      while ( 1 )  
      {  
        v19 = (float *)((char *)v16 + (char *)xTime - (char *)N);  
        v20 = v17;  
        v21 = v15;  
        v22 = v20;  
        *(float *)((char *)v19 + (char *)G - (char *)xTime) = v21;  
        ++v16;  
        v23 = nrLevel-- == 1;  
        *(v16 - 1) = *v19 * v20 + *(v16 - 1) * v20;  
        if ( v23 )  
          break;  
        v18 = v21;  
        v17 = v22;  
        v15 = v18;  
      }  
    }  
  }  
  else  
  {  
    v24 = 0.94999999;  
    v25 = 0.050000001;  
    i = 0;  
    v26 = 0.99800003;  
    v27 = 0.0020000001;  
    v28 = 0.99980003;  
    if ( v5 >= 4 )  
    {  
      v29 = (int)(N + 1);  
      v30 = ((unsigned int)(v5 - 4) >> 2) + 1;  
      v31 = xTime + 3;  
      i = 4 * v30;  
      do  
      {  
        y2 = *(v31 - 3);  
        if ( *(float *)(v29 - 4) <= (double)y2 )  
        {  
          if ( Q->count >= 2000 )  
          {  
            v47 = y2;  
            EXi = 0.99980003;  
            y2 = 0.00019999999;  
            v48 = v24;  
            v33 = v47;  
            v49 = v48;  
            v35 = v25;  
            v36 = v49;  
          }  
          else  
          {  
            v37 = y2;  
            EXi = v26;  
            v38 = v27;  
            v39 = v26;  
            y2 = v38;  
            v40 = v38;  
            v41 = v24;  
            v33 = v37;  
            v42 = v41;  
            v43 = v25;  
            v36 = v42;  
            v44 = v43;  
            v45 = v40;  
            v26 = v39;  
            v46 = v45;  
            v35 = v44;  
            v27 = v46;  
          }  
        }  
        else  
        {  
          v32 = v24;  
          v33 = y2;  
          EXi = v32;  
          v34 = v32;  
          v35 = v25;  
          v36 = v34;  
          y2 = v35;  
        }  
        v50 = v35;  
        v51 = v33 * y2 + *(float *)(v29 - 4) * EXi;  
        v52 = v50;  
        *(float *)(v29 - 4) = v51;  
        y2 = *(float *)(v29 + (char *)xTime - (char *)N);  
        if ( *(float *)v29 <= (double)y2 )  
        {  
          if ( Q->count >= 2000 )  
          {  
            v59 = y2;  
            EXi = 0.99980003;  
            y2 = 0.00019999999;  
            v56 = v52;  
            v57 = v36;  
            v54 = v59;  
          }  
          else  
          {  
            v58 = y2;  
            EXi = v26;  
            y2 = v27;  
            v56 = v52;  
            v57 = v36;  
            v54 = v58;  
          }  
        }  
        else  
        {  
          v53 = v36;  
          v54 = y2;  
          EXi = v53;  
          v55 = v53;  
          v56 = v52;  
          v57 = v55;  
          y2 = v56;  
        }  
        v60 = v56;  
        v61 = v54 * y2 + *(float *)v29 * EXi;  
        v62 = v60;  
        *(float *)v29 = v61;  
        y2 = *(v31 - 1);  
        if ( *(float *)(v29 + 4) <= (double)y2 )  
        {  
          if ( Q->count >= 2000 )  
          {  
            v78 = y2;  
            EXi = 0.99980003;  
            y2 = 0.00019999999;  
            v79 = v57;  
            v64 = v78;  
            v80 = v79;  
            v66 = v62;  
            v67 = v80;  
          }  
          else  
          {  
            v68 = y2;  
            EXi = v26;  
            v69 = v27;  
            v70 = v26;  
            y2 = v69;  
            v71 = v69;  
            v72 = v57;  
            v64 = v68;  
            v73 = v72;  
            v74 = v62;  
            v67 = v73;  
            v75 = v74;  
            v76 = v71;  
            v26 = v70;  
            v77 = v76;  
            v66 = v75;  
            v27 = v77;  
          }  
        }  
        else  
        {  
          v63 = v57;  
          v64 = y2;  
          EXi = v63;  
          v65 = v63;  
          v66 = v62;  
          v67 = v65;  
          y2 = v66;  
        }  
        v81 = v66;  
        v82 = v64 * y2 + EXi * *(float *)(v29 + 4);  
        v83 = v81;  
        *(float *)(v29 + 4) = v82;  
        y2 = *v31;  
        if ( *(float *)(v29 + 8) <= (double)y2 )  
        {  
          if ( Q->count >= 2000 )  
          {  
            v89 = y2;  
            EXi = 0.99980003;  
            y2 = 0.00019999999;  
            v87 = v83;  
            v24 = v67;  
            v85 = v89;  
          }  
          else  
          {  
            v88 = y2;  
            EXi = v26;  
            y2 = v27;  
            v87 = v83;  
            v24 = v67;  
            v85 = v88;  
          }  
        }  
        else  
        {  
          v84 = v67;  
          v85 = y2;  
          EXi = v84;  
          v86 = v84;  
          v87 = v83;  
          v24 = v86;  
          y2 = v87;  
        }  
        v90 = *(float *)(v29 + 8);  
        v29 += 16;  
        v31 += 4;  
        --v30;  
        v91 = v87;  
        v92 = v85 * y2 + v90 * EXi;  
        v25 = v91;  
        *(float *)(v29 - 8) = v92;  
      }  
      while ( v30 );  
    }  
    if ( i < v5 )  
    {  
      v93 = &N[i];  
      v94 = v5 - i;  
      while ( 1 )  
      {  
        y2 = *(float *)((char *)v93 + (char *)xTime - (char *)N);  
        if ( *v93 <= (double)y2 )  
        {  
          if ( Q->count >= 2000 )  
          {  
            v113 = y2;  
            EXi = v28;  
            y2 = 0.00019999999;  
            v114 = v24;  
            v99 = v113;  
            v115 = v114;  
            v101 = v25;  
            v102 = v115;  
          }  
          else  
          {  
            v103 = y2;  
            EXi = v26;  
            v104 = v27;  
            v105 = v26;  
            y2 = v104;  
            v106 = v104;  
            v107 = v24;  
            v99 = v103;  
            v108 = v107;  
            v109 = v25;  
            v102 = v108;  
            v110 = v109;  
            v111 = v106;  
            v26 = v105;  
            v112 = v111;  
            v101 = v110;  
            v27 = v112;  
          }  
        }  
        else  
        {  
          v98 = v24;  
          v99 = y2;  
          EXi = v98;  
          v100 = v98;  
          v101 = v25;  
          v102 = v100;  
          y2 = v101;  
        }  
        v116 = *v93;  
        ++v93;  
        --v94;  
        v117 = v101;  
        v118 = v99 * y2 + v116 * EXi;  
        v119 = v117;  
        *(v93 - 1) = v118;  
        if ( !v94 )  
          break;  
        v95 = v28;  
        v96 = v119;  
        v24 = v102;  
        v97 = v96;  
        v28 = v95;  
        v25 = v97;  
      }  
    }  
  }  
  if ( Q->Enabled & 0x2000000 )  
  {  
    v128 = 0;  
    v129 = CG.dbTable[Q->nrLeveldB];  
    if ( v5 >= 4 )  
    {  
      v130 = (int)(N + 2);  
      v218 = (char *)N - (char *)G;  
      v131 = (int)(G + 1);  
      nrLevel = (char *)xTime - (char *)N;  
      do  
      {  
        EXi = xTime[v128];  
        v132 = *(float *)(v130 - 8) * 8.0;  
        v133 = EXi - v132;  
        v134 = EXi * v129;  
        y2j = v134;  
        v135 = v133 < v134;  
        v136 = v133 == v134;  
        v137 = v133;  
        if ( v135 || v136 )  
          v137 = y2j;  
        v138 = v137;  
        v139 = v138 / (EXi + 1.0 + 2.0);  
        *(float *)(v131 - 4) = v139 * 0.300000011920929 + *(float *)(v131 - 4) * 0.699999988079071;  
        EXi = *(float *)(nrLevel + v131 + v218);  
        v140 = *(float *)(v131 + v218) * 8.0;  
        v141 = EXi - v140;  
        v142 = EXi * v129;  
        y2j = v142;  
        v143 = v141 < v142;  
        v144 = v141 == v142;  
        v145 = v141;  
        if ( v143 || v144 )  
          v145 = y2j;  
        v146 = v145;  
        v147 = v146 / (EXi + 1.0 + 2.0);  
        *(float *)v131 = v147 * 0.300000011920929 + *(float *)v131 * 0.699999988079071;  
        EXi = *(float *)(v130 + nrLevel);  
        v148 = *(float *)v130 * 8.0;  
        v149 = EXi - v148;  
        v150 = EXi * v129;  
        y2j = v150;  
        v151 = v149 < v150;  
        v152 = v149 == v150;  
        v153 = v149;  
        if ( v151 || v152 )  
          v153 = y2j;  
        v154 = v153;  
        v155 = v154 / (EXi + 1.0 + 2.0);  
        *(float *)(v131 + 4) = v155 * 0.300000011920929 + *(float *)(v131 + 4) * 0.699999988079071;  
        EXi = xTime[v128 + 3];  
        v156 = *(float *)(v130 + 4) * 8.0;  
        v157 = EXi - v156;  
        v158 = EXi * v129;  
        y2j = v158;  
        v159 = v157 < v158;  
        v160 = v157 == v158;  
        v161 = v157;  
        if ( v159 || v160 )  
          v161 = y2j;  
        v162 = v161;  
        v5 = bufLength;  
        v128 += 4;  
        v131 += 16;  
        v130 += 16;  
        v163 = v162 / (EXi + 1.0 + 2.0);  
        *(float *)(v131 - 8) = v163 * 0.300000011920929 + *(float *)(v131 - 8) * 0.699999988079071;  
      }  
      while ( v128 < bufLength - 3 );  
    }  
    if ( v128 < v5 )  
    {  
      v164 = (char *)N - (char *)G;  
      v165 = (int)&G[v128];  
      v166 = v5 - v128;  
      do  
      {  
        EXi = *(float *)(v165 + v164 + (char *)xTime - (char *)N);  
        v167 = *(float *)(v165 + v164) * 8.0;  
        v168 = EXi - v167;  
        v169 = EXi * v129;  
        y2j = v169;  
        v170 = v168 < v169;  
        v171 = v168 == v169;  
        v172 = v168;  
        if ( v170 || v171 )  
          v172 = y2j;  
        v173 = v172;  
        v165 += 4;  
        --v166;  
        v174 = v173 / (EXi + 1.0 + 2.0);  
        *(float *)(v165 - 4) = v174 * 0.300000011920929 + *(float *)(v165 - 4) * 0.699999988079071;  
      }  
      while ( v166 );  
    }  
    FreqSmooth(G, xFreq, 0.5);  
    v175 = L;  
    v176 = 0;  
    if ( L >= 4 )  
    {  
      v177 = (int)(outBuf + 3);  
      v178 = ((unsigned int)(L - 4) >> 2) + 1;  
      v179 = (int)(xTime + 1);  
      v176 = 4 * v178;  
      do  
      {  
        v179 += 16;  
        *(float *)(v179 - 20) = *(float *)(v177 - 12);  
        v177 += 16;  
        --v178;  
        *(float *)(v179 - 16) = *(float *)(v179 + (char *)outBuf - (char *)xTime - 16);  
        *(float *)(v179 - 12) = *(float *)(v177 - 20);  
        *(float *)(v179 - 8) = *(float *)(v177 - 16);  
      }  
      while ( v178 );  
      v175 = L;  
    }  
    if ( v176 < v175 )  
    {  
      v180 = (int)&xTime[v176];  
      v181 = v175 - v176;  
      do  
      {  
        v182 = *(float *)((char *)outBuf - (char *)xTime + v180);  
        v180 += 4;  
        --v181;  
        *(float *)(v180 - 4) = v182;  
      }  
      while ( v181 );  
    }  
    Reconstruct(xFreq, outBuf, Q->by);  
    return 0;  
  }  
  v120 = L;  
  v121 = 0;  
  if ( L >= 4 )  
  {  
    v122 = (int)(outBuf + 3);  
    v123 = ((unsigned int)(L - 4) >> 2) + 1;  
    v124 = (int)(xTime + 1);  
    v121 = 4 * v123;  
    do  
    {  
      v124 += 16;  
      *(float *)(v124 - 20) = *(float *)(v122 - 12);  
      v122 += 16;  
      --v123;  
      *(float *)(v124 - 16) = *(float *)((char *)outBuf - (char *)xTime + v124 - 16);  
      *(float *)(v124 - 12) = *(float *)(v122 - 20);  
      *(float *)(v124 - 8) = *(float *)(v122 - 16);  
    }  
    while ( v123 );  
    v120 = L;  
  }  
  if ( v121 >= v120 )  
    return 0;  
  v125 = (int)&xTime[v121];  
  v126 = v120 - v121;  
  do  
  {  
    v127 = *(float *)(v125 + (char *)outBuf - (char *)xTime);  
    v125 += 4;  
    --v126;  
    *(float *)(v125 - 4) = v127;  
  }  
  while ( v126 );  
  return 0;  
}  

if ( CG.blockLength >= 4 )
{
nrLevel = (char *)xTime - (char *)scratch;
v8 = &scratch[CG.blockLength];
v9 = xFreq + 1;
v10 = outBuf + 2;
v7 = 0;
do
{
*(v9 - 1) = xTime[v7];
v7 += 4;
v9 += 4;
*v8 = *(v10 - 2);
v8 += 4;
*(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);
v10 += 4;
*(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);
*(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);
*(v8 - 2) = *(v10 - 4);
*(v9 - 2) = xTime[v7 - 1];
*(v8 - 1) = *(v10 - 3);
}
while ( v7 < L - 3 );
}
if ( v7 < L )
{
v11 = &xFreq[v7];
v12 = &xFreq[v7 + L];
v13 = L - v7;
do
{
v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);
++v11;
*(v11 - 1) = v14;
++v12;
--v13;
*(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);
}
while ( v13 );
}

Full function are here for quick reference
int __cdecl NR_Proc(NoiseReduction *Q, AudioSignal2 *signal)
{
float *scratch; // ecx@1
float *v3; // edx@1
float *xTime; // ebx@1
int v5; // esi@1
int v7; // edi@5
float *v8; // ecx@6
float *v9; // eax@6
float *v10; // edx@6
float *v11; // eax@9
float *v12; // edx@9
int v13; // ecx@9
double v14; // st7@10
double v15; // st7@14
float *v16; // eax@14
double v17; // st6@14
double v18; // rt0@15
float *v19; // ecx@16
double v20; // rt1@16
double v21; // st6@16
double v22; // st7@16
bool v23; // zf@16
double v24; // st7@18
double v25; // st6@18
double v26; // st5@18
double v27; // st4@18
double v28; // st3@18
int v29; // ecx@19
unsigned int v30; // edx@19
float *v31; // edi@19
double v32; // st2@21
double v33; // st7@21
double v34; // rtt@21
double v35; // st2@21
double v36; // st6@21
double v37; // rt0@23
double v38; // st2@23
double v39; // st4@23
double v40; // st5@23
double v41; // st2@23
double v42; // rt0@23
double v43; // st2@23
double v44; // rt1@23
double v45; // st2@23
double v46; // rtt@23
double v47; // rt0@24
double v48; // st2@24
double v49; // rtt@24
double v50; // rt0@25
double v51; // st2@25
double v52; // st7@25
double v53; // st2@26
double v54; // st6@26
double v55; // rt2@26
double v56; // st2@26
double v57; // st7@26
double v58; // rtt@28
double v59; // rtt@29
double v60; // rt1@30
double v61; // st2@30
double v62; // st6@30
double v63; // st2@31
double v64; // st7@31
double v65; // rtt@31
double v66; // st2@31
double v67; // st6@31
double v68; // rt0@33
double v69; // st2@33
double v70; // st4@33
double v71; // st5@33
double v72; // st2@33
double v73; // rt0@33
double v74; // st2@33
double v75; // rt1@33
double v76; // st2@33
double v77; // rtt@33
double v78; // rt0@34
double v79; // st2@34
double v80; // rtt@34
double v81; // rt0@35
double v82; // st2@35
double v83; // st7@35
double v84; // st2@36
double v85; // st6@36
double v86; // rt2@36
double v87; // st2@36
double v88; // rtt@38
double v89; // rtt@39
double v90; // st1@40
double v91; // rt1@40
double v92; // st2@40
float *v93; // ecx@42
int v94; // edx@42
double v95; // rt2@43
double v96; // st3@43
double v97; // rt0@43
double v98; // st2@45
double v99; // st7@45
double v100; // rt2@45
double v101; // st2@45
double v102; // st6@45
double v103; // rtt@47
double v104; // st2@47
double v105; // st4@47
double v106; // st5@47
double v107; // st2@47
double v108; // rtt@47
double v109; // st2@47
double v110; // rt0@47
double v111; // st2@47
double v112; // rt2@47
double v113; // rtt@48
double v114; // st2@48
double v115; // rt2@48
double v116; // st1@49
double v117; // rtt@49
double v118; // st2@49
double v119; // st7@49
int v120; // edx@51
int v121; // edi@51
int v122; // ecx@52
unsigned int v123; // edx@52
int v124; // eax@52
int v125; // eax@56
int v126; // edx@56
double v127; // st7@57
int v128; // edx@59
double v129; // st7@59
int v130; // edi@60
int v131; // ecx@60
float v132; // ST18_4@61
double v133; // ST30_8@61
double v134; // st1@61
bool v135; // c0@61
bool v136; // c3@61
double v137; // st1@61
float v138; // ST30_4@63
float v139; // ST30_4@63
float v140; // ST18_4@63
double v141; // ST30_8@63
double v142; // st1@63
bool v143; // c0@63
bool v144; // c3@63
double v145; // st1@63
float v146; // ST30_4@65
float v147; // ST30_4@65
float v148; // ST18_4@65
double v149; // ST30_8@65
double v150; // st1@65
bool v151; // c0@65
bool v152; // c3@65
double v153; // st1@65
float v154; // ST30_4@67
float v155; // ST30_4@67
float v156; // ST18_4@67
double v157; // ST30_8@67
double v158; // st1@67
bool v159; // c0@67
bool v160; // c3@67
double v161; // st1@67
float v162; // ST30_4@69
float v163; // ST30_4@69
int v164; // edi@71
int v165; // ecx@71
int v166; // esi@71
float v167; // ST18_4@72
double v168; // ST30_8@72
double v169; // st1@72
bool v170; // c0@72
bool v171; // c3@72
double v172; // st1@72
float v173; // ST4C_4@74
float v174; // ST4C_4@74
int v175; // edx@75
int v176; // esi@75
int v177; // ecx@76
unsigned int v178; // edx@76
int v179; // eax@76
int v180; // eax@80
int v181; // edx@80
double v182; // st7@81
float EXi; // [sp+10h] [bp-3Ch]@21 MAPDST
float y2; // [sp+14h] [bp-38h]@20 MAPDST
double y2j; // [sp+14h] [bp-38h]@61 MAPDST
int L; // [sp+20h] [bp-2Ch]@5
float *outBuf; // [sp+24h] [bp-28h]@3
float *N; // [sp+28h] [bp-24h]@1
int i; // [sp+2Ch] [bp-20h]@18
int nrLevel; // [sp+38h] [bp-14h]@6 MAPDST
float *G; // [sp+3Ch] [bp-10h]@1
float *xFreq; // [sp+40h] [bp-Ch]@1
int bufLength; // [sp+44h] [bp-8h]@1
int v218; // [sp+48h] [bp-4h]@60

scratch = CG.Scratch;
v3 = Q->G;
xTime = Q->xTime;
v5 = CG.ERB_Length;
++Q->count;
xFreq = scratch;
G = v3;
N = Q->N;
bufLength = v5;
if ( !(Q->Enabled & 0x10000000) )
return -5;
outBuf = signal->buffer;
if ( !signal->buffer )
return -1;
v7 = 0;
L = CG.blockLength;
if ( CG.blockLength >= 4 )
{
nrLevel = (char *)xTime - (char *)scratch;
v8 = &scratch[CG.blockLength];
v9 = xFreq + 1;
v10 = outBuf + 2;
v7 = 0;
do
{
*(v9 - 1) = xTime[v7];
v7 += 4;
v9 += 4;
*v8 = *(v10 - 2);
v8 += 4;
*(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);
v10 += 4;
*(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);
*(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);
*(v8 - 2) = *(v10 - 4);
*(v9 - 2) = xTime[v7 - 1];
*(v8 - 1) = *(v10 - 3);
}
while ( v7 < L - 3 );
}
if ( v7 < L )
{
v11 = &xFreq[v7];
v12 = &xFreq[v7 + L];
v13 = L - v7;
do
{
v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);
++v11;
*(v11 - 1) = v14;
++v12;
--v13;
*(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);
}
while ( v13 );
}
WindowFft(xFreq, L);
AmpSpectrum(xFreq, xTime);
if ( Q->count < 20 && signal->Silence )
{
if ( v5 > 0 )
{
v15 = 1.0;
v16 = N;
v17 = 0.5;
nrLevel = v5;
while ( 1 )
{
v19 = (float *)((char *)v16 + (char *)xTime - (char *)N);
v20 = v17;
v21 = v15;
v22 = v20;
*(float *)((char *)v19 + (char *)G - (char *)xTime) = v21;
++v16;
v23 = nrLevel-- == 1;
*(v16 - 1) = *v19 * v20 + *(v16 - 1) * v20;
if ( v23 )
break;
v18 = v21;
v17 = v22;
v15 = v18;
}
}
}
else
{
v24 = 0.94999999;
v25 = 0.050000001;
i = 0;
v26 = 0.99800003;
v27 = 0.0020000001;
v28 = 0.99980003;
if ( v5 >= 4 )
{
v29 = (int)(N + 1);
v30 = ((unsigned int)(v5 - 4) >> 2) + 1;
v31 = xTime + 3;
i = 4 * v30;
do
{
y2 = *(v31 - 3);
if ( *(float *)(v29 - 4) <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v47 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v48 = v24;
v33 = v47;
v49 = v48;
v35 = v25;
v36 = v49;
}
else
{
v37 = y2;
EXi = v26;
v38 = v27;
v39 = v26;
y2 = v38;
v40 = v38;
v41 = v24;
v33 = v37;
v42 = v41;
v43 = v25;
v36 = v42;
v44 = v43;
v45 = v40;
v26 = v39;
v46 = v45;
v35 = v44;
v27 = v46;
}
}
else
{
v32 = v24;
v33 = y2;
EXi = v32;
v34 = v32;
v35 = v25;
v36 = v34;
y2 = v35;
}
v50 = v35;
v51 = v33 * y2 + *(float *)(v29 - 4) * EXi;
v52 = v50;
*(float *)(v29 - 4) = v51;
y2 = *(float *)(v29 + (char *)xTime - (char *)N);
if ( *(float *)v29 <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v59 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v56 = v52;
v57 = v36;
v54 = v59;
}
else
{
v58 = y2;
EXi = v26;
y2 = v27;
v56 = v52;
v57 = v36;
v54 = v58;
}
}
else
{
v53 = v36;
v54 = y2;
EXi = v53;
v55 = v53;
v56 = v52;
v57 = v55;
y2 = v56;
}
v60 = v56;
v61 = v54 * y2 + *(float *)v29 * EXi;
v62 = v60;
*(float *)v29 = v61;
y2 = *(v31 - 1);
if ( *(float *)(v29 + 4) <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v78 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v79 = v57;
v64 = v78;
v80 = v79;
v66 = v62;
v67 = v80;
}
else
{
v68 = y2;
EXi = v26;
v69 = v27;
v70 = v26;
y2 = v69;
v71 = v69;
v72 = v57;
v64 = v68;
v73 = v72;
v74 = v62;
v67 = v73;
v75 = v74;
v76 = v71;
v26 = v70;
v77 = v76;
v66 = v75;
v27 = v77;
}
}
else
{
v63 = v57;
v64 = y2;
EXi = v63;
v65 = v63;
v66 = v62;
v67 = v65;
y2 = v66;
}
v81 = v66;
v82 = v64 * y2 + EXi * *(float *)(v29 + 4);
v83 = v81;
*(float *)(v29 + 4) = v82;
y2 = *v31;
if ( *(float *)(v29 + 8) <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v89 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v87 = v83;
v24 = v67;
v85 = v89;
}
else
{
v88 = y2;
EXi = v26;
y2 = v27;
v87 = v83;
v24 = v67;
v85 = v88;
}
}
else
{
v84 = v67;
v85 = y2;
EXi = v84;
v86 = v84;
v87 = v83;
v24 = v86;
y2 = v87;
}
v90 = *(float *)(v29 + 8);
v29 += 16;
v31 += 4;
--v30;
v91 = v87;
v92 = v85 * y2 + v90 * EXi;
v25 = v91;
*(float *)(v29 - 8) = v92;
}
while ( v30 );
}
if ( i < v5 )
{
v93 = &N[i];
v94 = v5 - i;
while ( 1 )
{
y2 = *(float *)((char *)v93 + (char *)xTime - (char *)N);
if ( *v93 <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v113 = y2;
EXi = v28;
y2 = 0.00019999999;
v114 = v24;
v99 = v113;
v115 = v114;
v101 = v25;
v102 = v115;
}
else
{
v103 = y2;
EXi = v26;
v104 = v27;
v105 = v26;
y2 = v104;
v106 = v104;
v107 = v24;
v99 = v103;
v108 = v107;
v109 = v25;
v102 = v108;
v110 = v109;
v111 = v106;
v26 = v105;
v112 = v111;
v101 = v110;
v27 = v112;
}
}
else
{
v98 = v24;
v99 = y2;
EXi = v98;
v100 = v98;
v101 = v25;
v102 = v100;
y2 = v101;
}
v116 = *v93;
++v93;
--v94;
v117 = v101;
v118 = v99 * y2 + v116 * EXi;
v119 = v117;
*(v93 - 1) = v118;
if ( !v94 )
break;
v95 = v28;
v96 = v119;
v24 = v102;
v97 = v96;
v28 = v95;
v25 = v97;
}
}
}
if ( Q->Enabled & 0x2000000 )
{
v128 = 0;
v129 = CG.dbTable[Q->nrLeveldB];
if ( v5 >= 4 )
{
v130 = (int)(N + 2);
v218 = (char *)N - (char *)G;
v131 = (int)(G + 1);
nrLevel = (char *)xTime - (char *)N;
do
{
EXi = xTime[v128];
v132 = *(float *)(v130 - 8) * 8.0;
v133 = EXi - v132;
v134 = EXi * v129;
y2j = v134;
v135 = v133 < v134;
v136 = v133 == v134;
v137 = v133;
if ( v135 || v136 )
v137 = y2j;
v138 = v137;
v139 = v138 / (EXi + 1.0 + 2.0);
*(float *)(v131 - 4) = v139 * 0.300000011920929 + *(float *)(v131 - 4) * 0.699999988079071;
EXi = *(float *)(nrLevel + v131 + v218);
v140 = *(float *)(v131 + v218) * 8.0;
v141 = EXi - v140;
v142 = EXi * v129;
y2j = v142;
v143 = v141 < v142;
v144 = v141 == v142;
v145 = v141;
if ( v143 || v144 )
v145 = y2j;
v146 = v145;
v147 = v146 / (EXi + 1.0 + 2.0);
*(float *)v131 = v147 * 0.300000011920929 + *(float *)v131 * 0.699999988079071;
EXi = *(float *)(v130 + nrLevel);
v148 = *(float *)v130 * 8.0;
v149 = EXi - v148;
v150 = EXi * v129;
y2j = v150;
v151 = v149 < v150;
v152 = v149 == v150;
v153 = v149;
if ( v151 || v152 )
v153 = y2j;
v154 = v153;
v155 = v154 / (EXi + 1.0 + 2.0);
*(float *)(v131 + 4) = v155 * 0.300000011920929 + *(float *)(v131 + 4) * 0.699999988079071;
EXi = xTime[v128 + 3];
v156 = *(float *)(v130 + 4) * 8.0;
v157 = EXi - v156;
v158 = EXi * v129;
y2j = v158;
v159 = v157 < v158;
v160 = v157 == v158;
v161 = v157;
if ( v159 || v160 )
v161 = y2j;
v162 = v161;
v5 = bufLength;
v128 += 4;
v131 += 16;
v130 += 16;
v163 = v162 / (EXi + 1.0 + 2.0);
*(float *)(v131 - 8) = v163 * 0.300000011920929 + *(float *)(v131 - 8) * 0.699999988079071;
}
while ( v128 < bufLength - 3 );
}
if ( v128 < v5 )
{
v164 = (char *)N - (char *)G;
v165 = (int)&G[v128];
v166 = v5 - v128;
do
{
EXi = *(float *)(v165 + v164 + (char *)xTime - (char *)N);
v167 = *(float *)(v165 + v164) * 8.0;
v168 = EXi - v167;
v169 = EXi * v129;
y2j = v169;
v170 = v168 < v169;
v171 = v168 == v169;
v172 = v168;
if ( v170 || v171 )
v172 = y2j;
v173 = v172;
v165 += 4;
--v166;
v174 = v173 / (EXi + 1.0 + 2.0);
*(float *)(v165 - 4) = v174 * 0.300000011920929 + *(float *)(v165 - 4) * 0.699999988079071;
}
while ( v166 );
}
FreqSmooth(G, xFreq, 0.5);
v175 = L;
v176 = 0;
if ( L >= 4 )
{
v177 = (int)(outBuf + 3);
v178 = ((unsigned int)(L - 4) >> 2) + 1;
v179 = (int)(xTime + 1);
v176 = 4 * v178;
do
{
v179 += 16;
*(float *)(v179 - 20) = *(float *)(v177 - 12);
v177 += 16;
--v178;
*(float *)(v179 - 16) = *(float *)(v179 + (char *)outBuf - (char *)xTime - 16);
*(float *)(v179 - 12) = *(float *)(v177 - 20);
*(float *)(v179 - 8) = *(float *)(v177 - 16);
}
while ( v178 );
v175 = L;
}
if ( v176 < v175 )
{
v180 = (int)&xTime[v176];
v181 = v175 - v176;
do
{
v182 = *(float *)((char *)outBuf - (char *)xTime + v180);
v180 += 4;
--v181;
*(float *)(v180 - 4) = v182;
}
while ( v181 );
}
Reconstruct(xFreq, outBuf, Q->by);
return 0;
}
v120 = L;
v121 = 0;
if ( L >= 4 )
{
v122 = (int)(outBuf + 3);
v123 = ((unsigned int)(L - 4) >> 2) + 1;
v124 = (int)(xTime + 1);
v121 = 4 * v123;
do
{
v124 += 16;
*(float *)(v124 - 20) = *(float *)(v122 - 12);
v122 += 16;
--v123;
*(float *)(v124 - 16) = *(float *)((char *)outBuf - (char *)xTime + v124 - 16);
*(float *)(v124 - 12) = *(float *)(v122 - 20);
*(float *)(v124 - 8) = *(float *)(v122 - 16);
}
while ( v123 );
v120 = L;
}
if ( v121 >= v120 )
return 0;
v125 = (int)&xTime[v121];
v126 = v120 - v121;
do
{
v127 = *(float *)(v125 + (char *)outBuf - (char *)xTime);
v125 += 4;
--v126;
*(float *)(v125 - 4) = v127;
}
while ( v126 );
return 0;
}

if ( CG.blockLength >= 4 )  
{  
    nrLevel = (char *)xTime - (char *)scratch;  
    v8 = &scratch[CG.blockLength];  
    v9 = xFreq + 1;  
    v10 = outBuf + 2;  
    v7 = 0;  
    do  
    {  
      *(v9 - 1) = xTime[v7];  
      v7 += 4;  
      v9 += 4;  
      *v8 = *(v10 - 2);  
      v8 += 4;  
      *(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);  
      v10 += 4;  
      *(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);  
      *(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);  
      *(v8 - 2) = *(v10 - 4);  
      *(v9 - 2) = xTime[v7 - 1];  
      *(v8 - 1) = *(v10 - 3);  
    }  
    while ( v7 < L - 3 );  
  }  
  if ( v7 < L )  
  {  
    v11 = &xFreq[v7];  
    v12 = &xFreq[v7 + L];  
    v13 = L - v7;  
    do  
    {  
      v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);  
      ++v11;  
      *(v11 - 1) = v14;  
      ++v12;  
      --v13;  
      *(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);  
    }  
    while ( v13 );  
  }  

Full function are here for quick reference

int __cdecl NR_Proc(_NoiseReduction *Q, AudioSignal2_ *signal)  
{  
  float *scratch; // ecx@1  
  float *v3; // edx@1  
  float *xTime; // ebx@1  
  int v5; // esi@1  
  int v7; // edi@5  
  float *v8; // ecx@6  
  float *v9; // eax@6  
  float *v10; // edx@6  
  float *v11; // eax@9  
  float *v12; // edx@9  
  int v13; // ecx@9  
  double v14; // st7@10  
  double v15; // st7@14  
  float *v16; // eax@14  
  double v17; // st6@14  
  double v18; // rt0@15  
  float *v19; // ecx@16  
  double v20; // rt1@16  
  double v21; // st6@16  
  double v22; // st7@16  
  bool v23; // zf@16  
  double v24; // st7@18  
  double v25; // st6@18  
  double v26; // st5@18  
  double v27; // st4@18  
  double v28; // st3@18  
  int v29; // ecx@19  
  unsigned int v30; // edx@19  
  float *v31; // edi@19  
  double v32; // st2@21  
  double v33; // st7@21  
  double v34; // rtt@21  
  double v35; // st2@21  
  double v36; // st6@21  
  double v37; // rt0@23  
  double v38; // st2@23  
  double v39; // st4@23  
  double v40; // st5@23  
  double v41; // st2@23  
  double v42; // rt0@23  
  double v43; // st2@23  
  double v44; // rt1@23  
  double v45; // st2@23  
  double v46; // rtt@23  
  double v47; // rt0@24  
  double v48; // st2@24  
  double v49; // rtt@24  
  double v50; // rt0@25  
  double v51; // st2@25  
  double v52; // st7@25  
  double v53; // st2@26  
  double v54; // st6@26  
  double v55; // rt2@26  
  double v56; // st2@26  
  double v57; // st7@26  
  double v58; // rtt@28  
  double v59; // rtt@29  
  double v60; // rt1@30  
  double v61; // st2@30  
  double v62; // st6@30  
  double v63; // st2@31  
  double v64; // st7@31  
  double v65; // rtt@31  
  double v66; // st2@31  
  double v67; // st6@31  
  double v68; // rt0@33  
  double v69; // st2@33  
  double v70; // st4@33  
  double v71; // st5@33  
  double v72; // st2@33  
  double v73; // rt0@33  
  double v74; // st2@33  
  double v75; // rt1@33  
  double v76; // st2@33  
  double v77; // rtt@33  
  double v78; // rt0@34  
  double v79; // st2@34  
  double v80; // rtt@34  
  double v81; // rt0@35  
  double v82; // st2@35  
  double v83; // st7@35  
  double v84; // st2@36  
  double v85; // st6@36  
  double v86; // rt2@36  
  double v87; // st2@36  
  double v88; // rtt@38  
  double v89; // rtt@39  
  double v90; // st1@40  
  double v91; // rt1@40  
  double v92; // st2@40  
  float *v93; // ecx@42  
  int v94; // edx@42  
  double v95; // rt2@43  
  double v96; // st3@43  
  double v97; // rt0@43  
  double v98; // st2@45  
  double v99; // st7@45  
  double v100; // rt2@45  
  double v101; // st2@45  
  double v102; // st6@45  
  double v103; // rtt@47  
  double v104; // st2@47  
  double v105; // st4@47  
  double v106; // st5@47  
  double v107; // st2@47  
  double v108; // rtt@47  
  double v109; // st2@47  
  double v110; // rt0@47  
  double v111; // st2@47  
  double v112; // rt2@47  
  double v113; // rtt@48  
  double v114; // st2@48  
  double v115; // rt2@48  
  double v116; // st1@49  
  double v117; // rtt@49  
  double v118; // st2@49  
  double v119; // st7@49  
  int v120; // edx@51  
  int v121; // edi@51  
  int v122; // ecx@52  
  unsigned int v123; // edx@52  
  int v124; // eax@52  
  int v125; // eax@56  
  int v126; // edx@56  
  double v127; // st7@57  
  int v128; // edx@59  
  double v129; // st7@59  
  int v130; // edi@60  
  int v131; // ecx@60  
  float v132; // ST18_4@61  
  double v133; // ST30_8@61  
  double v134; // st1@61  
  bool v135; // c0@61  
  bool v136; // c3@61  
  double v137; // st1@61  
  float v138; // ST30_4@63  
  float v139; // ST30_4@63  
  float v140; // ST18_4@63  
  double v141; // ST30_8@63  
  double v142; // st1@63  
  bool v143; // c0@63  
  bool v144; // c3@63  
  double v145; // st1@63  
  float v146; // ST30_4@65  
  float v147; // ST30_4@65  
  float v148; // ST18_4@65  
  double v149; // ST30_8@65  
  double v150; // st1@65  
  bool v151; // c0@65  
  bool v152; // c3@65  
  double v153; // st1@65  
  float v154; // ST30_4@67  
  float v155; // ST30_4@67  
  float v156; // ST18_4@67  
  double v157; // ST30_8@67  
  double v158; // st1@67  
  bool v159; // c0@67  
  bool v160; // c3@67  
  double v161; // st1@67  
  float v162; // ST30_4@69  
  float v163; // ST30_4@69  
  int v164; // edi@71  
  int v165; // ecx@71  
  int v166; // esi@71  
  float v167; // ST18_4@72  
  double v168; // ST30_8@72  
  double v169; // st1@72  
  bool v170; // c0@72  
  bool v171; // c3@72  
  double v172; // st1@72  
  float v173; // ST4C_4@74  
  float v174; // ST4C_4@74  
  int v175; // edx@75  
  int v176; // esi@75  
  int v177; // ecx@76  
  unsigned int v178; // edx@76  
  int v179; // eax@76  
  int v180; // eax@80  
  int v181; // edx@80  
  double v182; // st7@81  
  float EXi; // [sp+10h] [bp-3Ch]@21 MAPDST  
  float y2; // [sp+14h] [bp-38h]@20 MAPDST  
  double y2j; // [sp+14h] [bp-38h]@61 MAPDST  
  int L; // [sp+20h] [bp-2Ch]@5  
  float *outBuf; // [sp+24h] [bp-28h]@3  
  float *N; // [sp+28h] [bp-24h]@1  
  int i; // [sp+2Ch] [bp-20h]@18  
  int nrLevel; // [sp+38h] [bp-14h]@6 MAPDST  
  float *G; // [sp+3Ch] [bp-10h]@1  
  float *xFreq; // [sp+40h] [bp-Ch]@1  
  int bufLength; // [sp+44h] [bp-8h]@1  
  int v218; // [sp+48h] [bp-4h]@60  

  scratch = CG.Scratch;  
  v3 = Q->G;  
  xTime = Q->xTime;  
  v5 = CG.ERB_Length;  
  ++Q->count;  
  xFreq = scratch;  
  G = v3;  
  N = Q->N;  
  bufLength = v5;  
  if ( !(Q->Enabled & 0x10000000) )  
    return -5;  
  outBuf = signal->buffer;  
  if ( !signal->buffer )  
    return -1;  
  v7 = 0;  
  L = CG.blockLength;  
  if ( CG.blockLength >= 4 )  
  {  
    nrLevel = (char *)xTime - (char *)scratch;  
    v8 = &scratch[CG.blockLength];  
    v9 = xFreq + 1;  
    v10 = outBuf + 2;  
    v7 = 0;  
    do  
    {  
      *(v9 - 1) = xTime[v7];  
      v7 += 4;  
      v9 += 4;  
      *v8 = *(v10 - 2);  
      v8 += 4;  
      *(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);  
      v10 += 4;  
      *(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);  
      *(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);  
      *(v8 - 2) = *(v10 - 4);  
      *(v9 - 2) = xTime[v7 - 1];  
      *(v8 - 1) = *(v10 - 3);  
    }  
    while ( v7 < L - 3 );  
  }  
  if ( v7 < L )  
  {  
    v11 = &xFreq[v7];  
    v12 = &xFreq[v7 + L];  
    v13 = L - v7;  
    do  
    {  
      v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);  
      ++v11;  
      *(v11 - 1) = v14;  
      ++v12;  
      --v13;  
      *(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);  
    }  
    while ( v13 );  
  }  
  WindowFft(xFreq, L);  
  AmpSpectrum(xFreq, xTime);  
  if ( Q->count < 20 && signal->Silence )  
  {  
    if ( v5 > 0 )  
    {  
      v15 = 1.0;  
      v16 = N;  
      v17 = 0.5;  
      nrLevel = v5;  
      while ( 1 )  
      {  
        v19 = (float *)((char *)v16 + (char *)xTime - (char *)N);  
        v20 = v17;  
        v21 = v15;  
        v22 = v20;  
        *(float *)((char *)v19 + (char *)G - (char *)xTime) = v21;  
        ++v16;  
        v23 = nrLevel-- == 1;  
        *(v16 - 1) = *v19 * v20 + *(v16 - 1) * v20;  
        if ( v23 )  
          break;  
        v18 = v21;  
        v17 = v22;  
        v15 = v18;  
      }  
    }  
  }  
  else  
  {  
    v24 = 0.94999999;  
    v25 = 0.050000001;  
    i = 0;  
    v26 = 0.99800003;  
    v27 = 0.0020000001;  
    v28 = 0.99980003;  
    if ( v5 >= 4 )  
    {  
      v29 = (int)(N + 1);  
      v30 = ((unsigned int)(v5 - 4) >> 2) + 1;  
      v31 = xTime + 3;  
      i = 4 * v30;  
      do  
      {  
        y2 = *(v31 - 3);  
        if ( *(float *)(v29 - 4) <= (double)y2 )  
        {  
          if ( Q->count >= 2000 )  
          {  
            v47 = y2;  
            EXi = 0.99980003;  
            y2 = 0.00019999999;  
            v48 = v24;  
            v33 = v47;  
            v49 = v48;  
            v35 = v25;  
            v36 = v49;  
          }  
          else  
          {  
            v37 = y2;  
            EXi = v26;  
            v38 = v27;  
            v39 = v26;  
            y2 = v38;  
            v40 = v38;  
            v41 = v24;  
            v33 = v37;  
            v42 = v41;  
            v43 = v25;  
            v36 = v42;  
            v44 = v43;  
            v45 = v40;  
            v26 = v39;  
            v46 = v45;  
            v35 = v44;  
            v27 = v46;  
          }  
        }  
        else  
        {  
          v32 = v24;  
          v33 = y2;  
          EXi = v32;  
          v34 = v32;  
          v35 = v25;  
          v36 = v34;  
          y2 = v35;  
        }  
        v50 = v35;  
        v51 = v33 * y2 + *(float *)(v29 - 4) * EXi;  
        v52 = v50;  
        *(float *)(v29 - 4) = v51;  
        y2 = *(float *)(v29 + (char *)xTime - (char *)N);  
        if ( *(float *)v29 <= (double)y2 )  
        {  
          if ( Q->count >= 2000 )  
          {  
            v59 = y2;  
            EXi = 0.99980003;  
            y2 = 0.00019999999;  
            v56 = v52;  
            v57 = v36;  
            v54 = v59;  
          }  
          else  
          {  
            v58 = y2;  
            EXi = v26;  
            y2 = v27;  
            v56 = v52;  
            v57 = v36;  
            v54 = v58;  
          }  
        }  
        else  
        {  
          v53 = v36;  
          v54 = y2;  
          EXi = v53;  
          v55 = v53;  
          v56 = v52;  
          v57 = v55;  
          y2 = v56;  
        }  
        v60 = v56;  
        v61 = v54 * y2 + *(float *)v29 * EXi;  
        v62 = v60;  
        *(float *)v29 = v61;  
        y2 = *(v31 - 1);  
        if ( *(float *)(v29 + 4) <= (double)y2 )  
        {  
          if ( Q->count >= 2000 )  
          {  
            v78 = y2;  
            EXi = 0.99980003;  
            y2 = 0.00019999999;  
            v79 = v57;  
            v64 = v78;  
            v80 = v79;  
            v66 = v62;  
            v67 = v80;  
          }  
          else  
          {  
            v68 = y2;  
            EXi = v26;  
            v69 = v27;  
            v70 = v26;  
            y2 = v69;  
            v71 = v69;  
            v72 = v57;  
            v64 = v68;  
            v73 = v72;  
            v74 = v62;  
            v67 = v73;  
            v75 = v74;  
            v76 = v71;  
            v26 = v70;  
            v77 = v76;  
            v66 = v75;  
            v27 = v77;  
          }  
        }  
        else  
        {  
          v63 = v57;  
          v64 = y2;  
          EXi = v63;  
          v65 = v63;  
          v66 = v62;  
          v67 = v65;  
          y2 = v66;  
        }  
        v81 = v66;  
        v82 = v64 * y2 + EXi * *(float *)(v29 + 4);  
        v83 = v81;  
        *(float *)(v29 + 4) = v82;  
        y2 = *v31;  
        if ( *(float *)(v29 + 8) <= (double)y2 )  
        {  
          if ( Q->count >= 2000 )  
          {  
            v89 = y2;  
            EXi = 0.99980003;  
            y2 = 0.00019999999;  
            v87 = v83;  
            v24 = v67;  
            v85 = v89;  
          }  
          else  
          {  
            v88 = y2;  
            EXi = v26;  
            y2 = v27;  
            v87 = v83;  
            v24 = v67;  
            v85 = v88;  
          }  
        }  
        else  
        {  
          v84 = v67;  
          v85 = y2;  
          EXi = v84;  
          v86 = v84;  
          v87 = v83;  
          v24 = v86;  
          y2 = v87;  
        }  
        v90 = *(float *)(v29 + 8);  
        v29 += 16;  
        v31 += 4;  
        --v30;  
        v91 = v87;  
        v92 = v85 * y2 + v90 * EXi;  
        v25 = v91;  
        *(float *)(v29 - 8) = v92;  
      }  
      while ( v30 );  
    }  
    if ( i < v5 )  
    {  
      v93 = &N[i];  
      v94 = v5 - i;  
      while ( 1 )  
      {  
        y2 = *(float *)((char *)v93 + (char *)xTime - (char *)N);  
        if ( *v93 <= (double)y2 )  
        {  
          if ( Q->count >= 2000 )  
          {  
            v113 = y2;  
            EXi = v28;  
            y2 = 0.00019999999;  
            v114 = v24;  
            v99 = v113;  
            v115 = v114;  
            v101 = v25;  
            v102 = v115;  
          }  
          else  
          {  
            v103 = y2;  
            EXi = v26;  
            v104 = v27;  
            v105 = v26;  
            y2 = v104;  
            v106 = v104;  
            v107 = v24;  
            v99 = v103;  
            v108 = v107;  
            v109 = v25;  
            v102 = v108;  
            v110 = v109;  
            v111 = v106;  
            v26 = v105;  
            v112 = v111;  
            v101 = v110;  
            v27 = v112;  
          }  
        }  
        else  
        {  
          v98 = v24;  
          v99 = y2;  
          EXi = v98;  
          v100 = v98;  
          v101 = v25;  
          v102 = v100;  
          y2 = v101;  
        }  
        v116 = *v93;  
        ++v93;  
        --v94;  
        v117 = v101;  
        v118 = v99 * y2 + v116 * EXi;  
        v119 = v117;  
        *(v93 - 1) = v118;  
        if ( !v94 )  
          break;  
        v95 = v28;  
        v96 = v119;  
        v24 = v102;  
        v97 = v96;  
        v28 = v95;  
        v25 = v97;  
      }  
    }  
  }  
  if ( Q->Enabled & 0x2000000 )  
  {  
    v128 = 0;  
    v129 = CG.dbTable[Q->nrLeveldB];  
    if ( v5 >= 4 )  
    {  
      v130 = (int)(N + 2);  
      v218 = (char *)N - (char *)G;  
      v131 = (int)(G + 1);  
      nrLevel = (char *)xTime - (char *)N;  
      do  
      {  
        EXi = xTime[v128];  
        v132 = *(float *)(v130 - 8) * 8.0;  
        v133 = EXi - v132;  
        v134 = EXi * v129;  
        y2j = v134;  
        v135 = v133 < v134;  
        v136 = v133 == v134;  
        v137 = v133;  
        if ( v135 || v136 )  
          v137 = y2j;  
        v138 = v137;  
        v139 = v138 / (EXi + 1.0 + 2.0);  
        *(float *)(v131 - 4) = v139 * 0.300000011920929 + *(float *)(v131 - 4) * 0.699999988079071;  
        EXi = *(float *)(nrLevel + v131 + v218);  
        v140 = *(float *)(v131 + v218) * 8.0;  
        v141 = EXi - v140;  
        v142 = EXi * v129;  
        y2j = v142;  
        v143 = v141 < v142;  
        v144 = v141 == v142;  
        v145 = v141;  
        if ( v143 || v144 )  
          v145 = y2j;  
        v146 = v145;  
        v147 = v146 / (EXi + 1.0 + 2.0);  
        *(float *)v131 = v147 * 0.300000011920929 + *(float *)v131 * 0.699999988079071;  
        EXi = *(float *)(v130 + nrLevel);  
        v148 = *(float *)v130 * 8.0;  
        v149 = EXi - v148;  
        v150 = EXi * v129;  
        y2j = v150;  
        v151 = v149 < v150;  
        v152 = v149 == v150;  
        v153 = v149;  
        if ( v151 || v152 )  
          v153 = y2j;  
        v154 = v153;  
        v155 = v154 / (EXi + 1.0 + 2.0);  
        *(float *)(v131 + 4) = v155 * 0.300000011920929 + *(float *)(v131 + 4) * 0.699999988079071;  
        EXi = xTime[v128 + 3];  
        v156 = *(float *)(v130 + 4) * 8.0;  
        v157 = EXi - v156;  
        v158 = EXi * v129;  
        y2j = v158;  
        v159 = v157 < v158;  
        v160 = v157 == v158;  
        v161 = v157;  
        if ( v159 || v160 )  
          v161 = y2j;  
        v162 = v161;  
        v5 = bufLength;  
        v128 += 4;  
        v131 += 16;  
        v130 += 16;  
        v163 = v162 / (EXi + 1.0 + 2.0);  
        *(float *)(v131 - 8) = v163 * 0.300000011920929 + *(float *)(v131 - 8) * 0.699999988079071;  
      }  
      while ( v128 < bufLength - 3 );  
    }  
    if ( v128 < v5 )  
    {  
      v164 = (char *)N - (char *)G;  
      v165 = (int)&G[v128];  
      v166 = v5 - v128;  
      do  
      {  
        EXi = *(float *)(v165 + v164 + (char *)xTime - (char *)N);  
        v167 = *(float *)(v165 + v164) * 8.0;  
        v168 = EXi - v167;  
        v169 = EXi * v129;  
        y2j = v169;  
        v170 = v168 < v169;  
        v171 = v168 == v169;  
        v172 = v168;  
        if ( v170 || v171 )  
          v172 = y2j;  
        v173 = v172;  
        v165 += 4;  
        --v166;  
        v174 = v173 / (EXi + 1.0 + 2.0);  
        *(float *)(v165 - 4) = v174 * 0.300000011920929 + *(float *)(v165 - 4) * 0.699999988079071;  
      }  
      while ( v166 );  
    }  
    FreqSmooth(G, xFreq, 0.5);  
    v175 = L;  
    v176 = 0;  
    if ( L >= 4 )  
    {  
      v177 = (int)(outBuf + 3);  
      v178 = ((unsigned int)(L - 4) >> 2) + 1;  
      v179 = (int)(xTime + 1);  
      v176 = 4 * v178;  
      do  
      {  
        v179 += 16;  
        *(float *)(v179 - 20) = *(float *)(v177 - 12);  
        v177 += 16;  
        --v178;  
        *(float *)(v179 - 16) = *(float *)(v179 + (char *)outBuf - (char *)xTime - 16);  
        *(float *)(v179 - 12) = *(float *)(v177 - 20);  
        *(float *)(v179 - 8) = *(float *)(v177 - 16);  
      }  
      while ( v178 );  
      v175 = L;  
    }  
    if ( v176 < v175 )  
    {  
      v180 = (int)&xTime[v176];  
      v181 = v175 - v176;  
      do  
      {  
        v182 = *(float *)((char *)outBuf - (char *)xTime + v180);  
        v180 += 4;  
        --v181;  
        *(float *)(v180 - 4) = v182;  
      }  
      while ( v181 );  
    }  
    Reconstruct(xFreq, outBuf, Q->by);  
    return 0;  
  }  
  v120 = L;  
  v121 = 0;  
  if ( L >= 4 )  
  {  
    v122 = (int)(outBuf + 3);  
    v123 = ((unsigned int)(L - 4) >> 2) + 1;  
    v124 = (int)(xTime + 1);  
    v121 = 4 * v123;  
    do  
    {  
      v124 += 16;  
      *(float *)(v124 - 20) = *(float *)(v122 - 12);  
      v122 += 16;  
      --v123;  
      *(float *)(v124 - 16) = *(float *)((char *)outBuf - (char *)xTime + v124 - 16);  
      *(float *)(v124 - 12) = *(float *)(v122 - 20);  
      *(float *)(v124 - 8) = *(float *)(v122 - 16);  
    }  
    while ( v123 );  
    v120 = L;  
  }  
  if ( v121 >= v120 )  
    return 0;  
  v125 = (int)&xTime[v121];  
  v126 = v120 - v121;  
  do  
  {  
    v127 = *(float *)(v125 + (char *)outBuf - (char *)xTime);  
    v125 += 4;  
    --v126;  
    *(float *)(v125 - 4) = v127;  
  }  
  while ( v126 );  
  return 0;  
}  
improved caption for clarity in search engines/listing
Source Link
Guntram Blohm
  • 13k
  • 2
  • 22
  • 33

c genrated Pointer arithmetic in C generated by ida / hexrays decompiler

pleasePlease help me understand the following function lines


there is confusion in float handling
One thing is very clear it is for. The loop and got optimized by compiler
butbody does some floating point arithmetic, but why does it cast float pointer are used by castingpointers to char *
ifchar *, and back?

if ( CG.blockLength >= 4 )
{
nrLevel = (char *)xTime - (char *)scratch;
v8 = &scratch[CG.blockLength];
v9 = xFreq + 1;
v10 = outBuf + 2;
v7 = 0;
do
{
*(v9 - 1) = xTime[v7];
v7 += 4;
v9 += 4;
*v8 = *(v10 - 2);
v8 += 4;
*(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);
v10 += 4;
*(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);
*(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);
*(v8 - 2) = *(v10 - 4);
*(v9 - 2) = xTime[v7 - 1];
*(v8 - 1) = *(v10 - 3);
}
while ( v7 < L - 3 );
}
if ( v7 < L )
{
v11 = &xFreq[v7];
v12 = &xFreq[v7 + L];
v13 = L - v7;
do
{
v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);
++v11;
*(v11 - 1) = v14;
++v12;
--v13;
*(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);
}
while ( v13 );
}

c genrated by ida decompiler

please help me understand the following function lines


there is confusion in float handling
One thing is very clear it is for loop and got optimized by compiler
but float pointer are used by casting to char *
if ( CG.blockLength >= 4 )
{
nrLevel = (char *)xTime - (char *)scratch;
v8 = &scratch[CG.blockLength];
v9 = xFreq + 1;
v10 = outBuf + 2;
v7 = 0;
do
{
*(v9 - 1) = xTime[v7];
v7 += 4;
v9 += 4;
*v8 = *(v10 - 2);
v8 += 4;
*(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);
v10 += 4;
*(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);
*(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);
*(v8 - 2) = *(v10 - 4);
*(v9 - 2) = xTime[v7 - 1];
*(v8 - 1) = *(v10 - 3);
}
while ( v7 < L - 3 );
}
if ( v7 < L )
{
v11 = &xFreq[v7];
v12 = &xFreq[v7 + L];
v13 = L - v7;
do
{
v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);
++v11;
*(v11 - 1) = v14;
++v12;
--v13;
*(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);
}
while ( v13 );
}

Pointer arithmetic in C generated by ida / hexrays decompiler

Please help me understand the following function lines. The loop body does some floating point arithmetic, but why does it cast float pointers to char *, and back?

if ( CG.blockLength >= 4 )
{
nrLevel = (char *)xTime - (char *)scratch;
v8 = &scratch[CG.blockLength];
v9 = xFreq + 1;
v10 = outBuf + 2;
v7 = 0;
do
{
*(v9 - 1) = xTime[v7];
v7 += 4;
v9 += 4;
*v8 = *(v10 - 2);
v8 += 4;
*(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);
v10 += 4;
*(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);
*(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);
*(v8 - 2) = *(v10 - 4);
*(v9 - 2) = xTime[v7 - 1];
*(v8 - 1) = *(v10 - 3);
}
while ( v7 < L - 3 );
}
if ( v7 < L )
{
v11 = &xFreq[v7];
v12 = &xFreq[v7 + L];
v13 = L - v7;
do
{
v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);
++v11;
*(v11 - 1) = v14;
++v12;
--v13;
*(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);
}
while ( v13 );
}

Source Link
Arun
  • 59
  • 2
  • 4

c genrated by ida decompiler

please help me understand the following function lines


there is confusion in float handling
One thing is very clear it is for loop and got optimized by compiler
but float pointer are used by casting to char *
if ( CG.blockLength >= 4 )
{
nrLevel = (char *)xTime - (char *)scratch;
v8 = &scratch[CG.blockLength];
v9 = xFreq + 1;
v10 = outBuf + 2;
v7 = 0;
do
{
*(v9 - 1) = xTime[v7];
v7 += 4;
v9 += 4;
*v8 = *(v10 - 2);
v8 += 4;
*(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);
v10 += 4;
*(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);
*(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);
*(v8 - 2) = *(v10 - 4);
*(v9 - 2) = xTime[v7 - 1];
*(v8 - 1) = *(v10 - 3);
}
while ( v7 < L - 3 );
}
if ( v7 < L )
{
v11 = &xFreq[v7];
v12 = &xFreq[v7 + L];
v13 = L - v7;
do
{
v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);
++v11;
*(v11 - 1) = v14;
++v12;
--v13;
*(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);
}
while ( v13 );
}


Full function are here for quick reference
int __cdecl NR_Proc(NoiseReduction *Q, AudioSignal2 *signal)
{
float *scratch; // ecx@1
float *v3; // edx@1
float *xTime; // ebx@1
int v5; // esi@1
int v7; // edi@5
float *v8; // ecx@6
float *v9; // eax@6
float *v10; // edx@6
float *v11; // eax@9
float *v12; // edx@9
int v13; // ecx@9
double v14; // st7@10
double v15; // st7@14
float *v16; // eax@14
double v17; // st6@14
double v18; // rt0@15
float *v19; // ecx@16
double v20; // rt1@16
double v21; // st6@16
double v22; // st7@16
bool v23; // zf@16
double v24; // st7@18
double v25; // st6@18
double v26; // st5@18
double v27; // st4@18
double v28; // st3@18
int v29; // ecx@19
unsigned int v30; // edx@19
float *v31; // edi@19
double v32; // st2@21
double v33; // st7@21
double v34; // rtt@21
double v35; // st2@21
double v36; // st6@21
double v37; // rt0@23
double v38; // st2@23
double v39; // st4@23
double v40; // st5@23
double v41; // st2@23
double v42; // rt0@23
double v43; // st2@23
double v44; // rt1@23
double v45; // st2@23
double v46; // rtt@23
double v47; // rt0@24
double v48; // st2@24
double v49; // rtt@24
double v50; // rt0@25
double v51; // st2@25
double v52; // st7@25
double v53; // st2@26
double v54; // st6@26
double v55; // rt2@26
double v56; // st2@26
double v57; // st7@26
double v58; // rtt@28
double v59; // rtt@29
double v60; // rt1@30
double v61; // st2@30
double v62; // st6@30
double v63; // st2@31
double v64; // st7@31
double v65; // rtt@31
double v66; // st2@31
double v67; // st6@31
double v68; // rt0@33
double v69; // st2@33
double v70; // st4@33
double v71; // st5@33
double v72; // st2@33
double v73; // rt0@33
double v74; // st2@33
double v75; // rt1@33
double v76; // st2@33
double v77; // rtt@33
double v78; // rt0@34
double v79; // st2@34
double v80; // rtt@34
double v81; // rt0@35
double v82; // st2@35
double v83; // st7@35
double v84; // st2@36
double v85; // st6@36
double v86; // rt2@36
double v87; // st2@36
double v88; // rtt@38
double v89; // rtt@39
double v90; // st1@40
double v91; // rt1@40
double v92; // st2@40
float *v93; // ecx@42
int v94; // edx@42
double v95; // rt2@43
double v96; // st3@43
double v97; // rt0@43
double v98; // st2@45
double v99; // st7@45
double v100; // rt2@45
double v101; // st2@45
double v102; // st6@45
double v103; // rtt@47
double v104; // st2@47
double v105; // st4@47
double v106; // st5@47
double v107; // st2@47
double v108; // rtt@47
double v109; // st2@47
double v110; // rt0@47
double v111; // st2@47
double v112; // rt2@47
double v113; // rtt@48
double v114; // st2@48
double v115; // rt2@48
double v116; // st1@49
double v117; // rtt@49
double v118; // st2@49
double v119; // st7@49
int v120; // edx@51
int v121; // edi@51
int v122; // ecx@52
unsigned int v123; // edx@52
int v124; // eax@52
int v125; // eax@56
int v126; // edx@56
double v127; // st7@57
int v128; // edx@59
double v129; // st7@59
int v130; // edi@60
int v131; // ecx@60
float v132; // ST18_4@61
double v133; // ST30_8@61
double v134; // st1@61
bool v135; // c0@61
bool v136; // c3@61
double v137; // st1@61
float v138; // ST30_4@63
float v139; // ST30_4@63
float v140; // ST18_4@63
double v141; // ST30_8@63
double v142; // st1@63
bool v143; // c0@63
bool v144; // c3@63
double v145; // st1@63
float v146; // ST30_4@65
float v147; // ST30_4@65
float v148; // ST18_4@65
double v149; // ST30_8@65
double v150; // st1@65
bool v151; // c0@65
bool v152; // c3@65
double v153; // st1@65
float v154; // ST30_4@67
float v155; // ST30_4@67
float v156; // ST18_4@67
double v157; // ST30_8@67
double v158; // st1@67
bool v159; // c0@67
bool v160; // c3@67
double v161; // st1@67
float v162; // ST30_4@69
float v163; // ST30_4@69
int v164; // edi@71
int v165; // ecx@71
int v166; // esi@71
float v167; // ST18_4@72
double v168; // ST30_8@72
double v169; // st1@72
bool v170; // c0@72
bool v171; // c3@72
double v172; // st1@72
float v173; // ST4C_4@74
float v174; // ST4C_4@74
int v175; // edx@75
int v176; // esi@75
int v177; // ecx@76
unsigned int v178; // edx@76
int v179; // eax@76
int v180; // eax@80
int v181; // edx@80
double v182; // st7@81
float EXi; // [sp+10h] [bp-3Ch]@21 MAPDST
float y2; // [sp+14h] [bp-38h]@20 MAPDST
double y2j; // [sp+14h] [bp-38h]@61 MAPDST
int L; // [sp+20h] [bp-2Ch]@5
float *outBuf; // [sp+24h] [bp-28h]@3
float *N; // [sp+28h] [bp-24h]@1
int i; // [sp+2Ch] [bp-20h]@18
int nrLevel; // [sp+38h] [bp-14h]@6 MAPDST
float *G; // [sp+3Ch] [bp-10h]@1
float *xFreq; // [sp+40h] [bp-Ch]@1
int bufLength; // [sp+44h] [bp-8h]@1
int v218; // [sp+48h] [bp-4h]@60

scratch = CG.Scratch;
v3 = Q->G;
xTime = Q->xTime;
v5 = CG.ERB_Length;
++Q->count;
xFreq = scratch;
G = v3;
N = Q->N;
bufLength = v5;
if ( !(Q->Enabled & 0x10000000) )
return -5;
outBuf = signal->buffer;
if ( !signal->buffer )
return -1;
v7 = 0;
L = CG.blockLength;
if ( CG.blockLength >= 4 )
{
nrLevel = (char *)xTime - (char *)scratch;
v8 = &scratch[CG.blockLength];
v9 = xFreq + 1;
v10 = outBuf + 2;
v7 = 0;
do
{
*(v9 - 1) = xTime[v7];
v7 += 4;
v9 += 4;
*v8 = *(v10 - 2);
v8 += 4;
*(v9 - 4) = *(float *)((char *)v9 + nrLevel - 16);
v10 += 4;
*(v8 - 3) = *(float *)((char *)v9 + (char *)outBuf - (char *)xFreq - 16);
*(v9 - 3) = *(float *)((char *)v10 + (char *)xTime - (char *)outBuf - 16);
*(v8 - 2) = *(v10 - 4);
*(v9 - 2) = xTime[v7 - 1];
*(v8 - 1) = *(v10 - 3);
}
while ( v7 < L - 3 );
}
if ( v7 < L )
{
v11 = &xFreq[v7];
v12 = &xFreq[v7 + L];
v13 = L - v7;
do
{
v14 = *(float *)((char *)v11 + (char *)xTime - (char *)xFreq);
++v11;
*(v11 - 1) = v14;
++v12;
--v13;
*(v12 - 1) = *(float *)((char *)v11 + (char *)outBuf - (char *)xFreq - 4);
}
while ( v13 );
}
WindowFft(xFreq, L);
AmpSpectrum(xFreq, xTime);
if ( Q->count < 20 && signal->Silence )
{
if ( v5 > 0 )
{
v15 = 1.0;
v16 = N;
v17 = 0.5;
nrLevel = v5;
while ( 1 )
{
v19 = (float *)((char *)v16 + (char *)xTime - (char *)N);
v20 = v17;
v21 = v15;
v22 = v20;
*(float *)((char *)v19 + (char *)G - (char *)xTime) = v21;
++v16;
v23 = nrLevel-- == 1;
*(v16 - 1) = *v19 * v20 + *(v16 - 1) * v20;
if ( v23 )
break;
v18 = v21;
v17 = v22;
v15 = v18;
}
}
}
else
{
v24 = 0.94999999;
v25 = 0.050000001;
i = 0;
v26 = 0.99800003;
v27 = 0.0020000001;
v28 = 0.99980003;
if ( v5 >= 4 )
{
v29 = (int)(N + 1);
v30 = ((unsigned int)(v5 - 4) >> 2) + 1;
v31 = xTime + 3;
i = 4 * v30;
do
{
y2 = *(v31 - 3);
if ( *(float *)(v29 - 4) <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v47 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v48 = v24;
v33 = v47;
v49 = v48;
v35 = v25;
v36 = v49;
}
else
{
v37 = y2;
EXi = v26;
v38 = v27;
v39 = v26;
y2 = v38;
v40 = v38;
v41 = v24;
v33 = v37;
v42 = v41;
v43 = v25;
v36 = v42;
v44 = v43;
v45 = v40;
v26 = v39;
v46 = v45;
v35 = v44;
v27 = v46;
}
}
else
{
v32 = v24;
v33 = y2;
EXi = v32;
v34 = v32;
v35 = v25;
v36 = v34;
y2 = v35;
}
v50 = v35;
v51 = v33 * y2 + *(float *)(v29 - 4) * EXi;
v52 = v50;
*(float *)(v29 - 4) = v51;
y2 = *(float *)(v29 + (char *)xTime - (char *)N);
if ( *(float *)v29 <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v59 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v56 = v52;
v57 = v36;
v54 = v59;
}
else
{
v58 = y2;
EXi = v26;
y2 = v27;
v56 = v52;
v57 = v36;
v54 = v58;
}
}
else
{
v53 = v36;
v54 = y2;
EXi = v53;
v55 = v53;
v56 = v52;
v57 = v55;
y2 = v56;
}
v60 = v56;
v61 = v54 * y2 + *(float *)v29 * EXi;
v62 = v60;
*(float *)v29 = v61;
y2 = *(v31 - 1);
if ( *(float *)(v29 + 4) <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v78 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v79 = v57;
v64 = v78;
v80 = v79;
v66 = v62;
v67 = v80;
}
else
{
v68 = y2;
EXi = v26;
v69 = v27;
v70 = v26;
y2 = v69;
v71 = v69;
v72 = v57;
v64 = v68;
v73 = v72;
v74 = v62;
v67 = v73;
v75 = v74;
v76 = v71;
v26 = v70;
v77 = v76;
v66 = v75;
v27 = v77;
}
}
else
{
v63 = v57;
v64 = y2;
EXi = v63;
v65 = v63;
v66 = v62;
v67 = v65;
y2 = v66;
}
v81 = v66;
v82 = v64 * y2 + EXi * *(float *)(v29 + 4);
v83 = v81;
*(float *)(v29 + 4) = v82;
y2 = *v31;
if ( *(float *)(v29 + 8) <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v89 = y2;
EXi = 0.99980003;
y2 = 0.00019999999;
v87 = v83;
v24 = v67;
v85 = v89;
}
else
{
v88 = y2;
EXi = v26;
y2 = v27;
v87 = v83;
v24 = v67;
v85 = v88;
}
}
else
{
v84 = v67;
v85 = y2;
EXi = v84;
v86 = v84;
v87 = v83;
v24 = v86;
y2 = v87;
}
v90 = *(float *)(v29 + 8);
v29 += 16;
v31 += 4;
--v30;
v91 = v87;
v92 = v85 * y2 + v90 * EXi;
v25 = v91;
*(float *)(v29 - 8) = v92;
}
while ( v30 );
}
if ( i < v5 )
{
v93 = &N[i];
v94 = v5 - i;
while ( 1 )
{
y2 = *(float *)((char *)v93 + (char *)xTime - (char *)N);
if ( *v93 <= (double)y2 )
{
if ( Q->count >= 2000 )
{
v113 = y2;
EXi = v28;
y2 = 0.00019999999;
v114 = v24;
v99 = v113;
v115 = v114;
v101 = v25;
v102 = v115;
}
else
{
v103 = y2;
EXi = v26;
v104 = v27;
v105 = v26;
y2 = v104;
v106 = v104;
v107 = v24;
v99 = v103;
v108 = v107;
v109 = v25;
v102 = v108;
v110 = v109;
v111 = v106;
v26 = v105;
v112 = v111;
v101 = v110;
v27 = v112;
}
}
else
{
v98 = v24;
v99 = y2;
EXi = v98;
v100 = v98;
v101 = v25;
v102 = v100;
y2 = v101;
}
v116 = *v93;
++v93;
--v94;
v117 = v101;
v118 = v99 * y2 + v116 * EXi;
v119 = v117;
*(v93 - 1) = v118;
if ( !v94 )
break;
v95 = v28;
v96 = v119;
v24 = v102;
v97 = v96;
v28 = v95;
v25 = v97;
}
}
}
if ( Q->Enabled & 0x2000000 )
{
v128 = 0;
v129 = CG.dbTable[Q->nrLeveldB];
if ( v5 >= 4 )
{
v130 = (int)(N + 2);
v218 = (char *)N - (char *)G;
v131 = (int)(G + 1);
nrLevel = (char *)xTime - (char *)N;
do
{
EXi = xTime[v128];
v132 = *(float *)(v130 - 8) * 8.0;
v133 = EXi - v132;
v134 = EXi * v129;
y2j = v134;
v135 = v133 < v134;
v136 = v133 == v134;
v137 = v133;
if ( v135 || v136 )
v137 = y2j;
v138 = v137;
v139 = v138 / (EXi + 1.0 + 2.0);
*(float *)(v131 - 4) = v139 * 0.300000011920929 + *(float *)(v131 - 4) * 0.699999988079071;
EXi = *(float *)(nrLevel + v131 + v218);
v140 = *(float *)(v131 + v218) * 8.0;
v141 = EXi - v140;
v142 = EXi * v129;
y2j = v142;
v143 = v141 < v142;
v144 = v141 == v142;
v145 = v141;
if ( v143 || v144 )
v145 = y2j;
v146 = v145;
v147 = v146 / (EXi + 1.0 + 2.0);
*(float *)v131 = v147 * 0.300000011920929 + *(float *)v131 * 0.699999988079071;
EXi = *(float *)(v130 + nrLevel);
v148 = *(float *)v130 * 8.0;
v149 = EXi - v148;
v150 = EXi * v129;
y2j = v150;
v151 = v149 < v150;
v152 = v149 == v150;
v153 = v149;
if ( v151 || v152 )
v153 = y2j;
v154 = v153;
v155 = v154 / (EXi + 1.0 + 2.0);
*(float *)(v131 + 4) = v155 * 0.300000011920929 + *(float *)(v131 + 4) * 0.699999988079071;
EXi = xTime[v128 + 3];
v156 = *(float *)(v130 + 4) * 8.0;
v157 = EXi - v156;
v158 = EXi * v129;
y2j = v158;
v159 = v157 < v158;
v160 = v157 == v158;
v161 = v157;
if ( v159 || v160 )
v161 = y2j;
v162 = v161;
v5 = bufLength;
v128 += 4;
v131 += 16;
v130 += 16;
v163 = v162 / (EXi + 1.0 + 2.0);
*(float *)(v131 - 8) = v163 * 0.300000011920929 + *(float *)(v131 - 8) * 0.699999988079071;
}
while ( v128 < bufLength - 3 );
}
if ( v128 < v5 )
{
v164 = (char *)N - (char *)G;
v165 = (int)&G[v128];
v166 = v5 - v128;
do
{
EXi = *(float *)(v165 + v164 + (char *)xTime - (char *)N);
v167 = *(float *)(v165 + v164) * 8.0;
v168 = EXi - v167;
v169 = EXi * v129;
y2j = v169;
v170 = v168 < v169;
v171 = v168 == v169;
v172 = v168;
if ( v170 || v171 )
v172 = y2j;
v173 = v172;
v165 += 4;
--v166;
v174 = v173 / (EXi + 1.0 + 2.0);
*(float *)(v165 - 4) = v174 * 0.300000011920929 + *(float *)(v165 - 4) * 0.699999988079071;
}
while ( v166 );
}
FreqSmooth(G, xFreq, 0.5);
v175 = L;
v176 = 0;
if ( L >= 4 )
{
v177 = (int)(outBuf + 3);
v178 = ((unsigned int)(L - 4) >> 2) + 1;
v179 = (int)(xTime + 1);
v176 = 4 * v178;
do
{
v179 += 16;
*(float *)(v179 - 20) = *(float *)(v177 - 12);
v177 += 16;
--v178;
*(float *)(v179 - 16) = *(float *)(v179 + (char *)outBuf - (char *)xTime - 16);
*(float *)(v179 - 12) = *(float *)(v177 - 20);
*(float *)(v179 - 8) = *(float *)(v177 - 16);
}
while ( v178 );
v175 = L;
}
if ( v176 < v175 )
{
v180 = (int)&xTime[v176];
v181 = v175 - v176;
do
{
v182 = *(float *)((char *)outBuf - (char *)xTime + v180);
v180 += 4;
--v181;
*(float *)(v180 - 4) = v182;
}
while ( v181 );
}
Reconstruct(xFreq, outBuf, Q->by);
return 0;
}
v120 = L;
v121 = 0;
if ( L >= 4 )
{
v122 = (int)(outBuf + 3);
v123 = ((unsigned int)(L - 4) >> 2) + 1;
v124 = (int)(xTime + 1);
v121 = 4 * v123;
do
{
v124 += 16;
*(float *)(v124 - 20) = *(float *)(v122 - 12);
v122 += 16;
--v123;
*(float *)(v124 - 16) = *(float *)((char *)outBuf - (char *)xTime + v124 - 16);
*(float *)(v124 - 12) = *(float *)(v122 - 20);
*(float *)(v124 - 8) = *(float *)(v122 - 16);
}
while ( v123 );
v120 = L;
}
if ( v121 >= v120 )
return 0;
v125 = (int)&xTime[v121];
v126 = v120 - v121;
do
{
v127 = *(float *)(v125 + (char *)outBuf - (char *)xTime);
v125 += 4;
--v126;
*(float *)(v125 - 4) = v127;
}
while ( v126 );
return 0;
}