📄 filter_2.cc
字号:
/* MPEG/WAVE Sound library (C) 1997 by Jung woo-jae */// Filter.cc// Subbandsynthesis routines from maplay 1.2 for Linux// I've modified some macros for reducing source code.#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "mpegsound.h"voidMpegtoraw::computebuffer_2(REAL * fraction, REAL buffer[2][CALCBUFFERSIZE]){ REAL p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pa, pb, pc, pd, pe, pf; REAL q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, qa, qb, qc, qd, qe, qf; REAL *out1, *out2; out1 = buffer[currentcalcbuffer] + calcbufferoffset; out2 = buffer[currentcalcbuffer ^ 1] + calcbufferoffset;#define OUT1(v,t) out1[(32-(v))*16] =(-(out1[(v)*16]=t))#define OUT2(v) out2[(96-(v)-32)*16]=out2[((v)-32)*16] // compute new values via a fast cosine transform: /* { register REAL *x=fraction; p0=x[ 0]+x[31];p1=x[ 1]+x[30];p2=x[ 2]+x[29];p3=x[ 3]+x[28]; p4=x[ 4]+x[27];p5=x[ 5]+x[26];p6=x[ 6]+x[25];p7=x[ 7]+x[24]; p8=x[ 8]+x[23];p9=x[ 9]+x[22];pa=x[10]+x[21];pb=x[11]+x[20]; pc=x[12]+x[19];pd=x[13]+x[18];pe=x[14]+x[17];pf=x[15]+x[16]; } q0=p0+pf;q1=p1+pe;q2=p2+pd;q3=p3+pc; q4=p4+pb;q5=p5+pa;q6=p6+p9;q7=p7+p8; q8=hcos_32[0]*(p0-pf);q9=hcos_32[1]*(p1-pe); qa=hcos_32[2]*(p2-pd);qb=hcos_32[3]*(p3-pc); qc=hcos_32[4]*(p4-pb);qd=hcos_32[5]*(p5-pa); qe=hcos_32[6]*(p6-p9);qf=hcos_32[7]*(p7-p8); */ { register REAL *x = fraction; q0 = x[0] + x[15]; q1 = x[1] + x[14]; q2 = x[2] + x[13]; q3 = x[3] + x[12]; q4 = x[4] + x[11]; q5 = x[5] + x[10]; q6 = x[6] + x[9]; q7 = x[7] + x[8]; q8 = hcos_32[0] * (x[0] - x[15]); q9 = hcos_32[1] * (x[1] - x[14]); qa = hcos_32[2] * (x[2] - x[13]); qb = hcos_32[3] * (x[3] - x[12]); qc = hcos_32[4] * (x[4] - x[11]); qd = hcos_32[5] * (x[5] - x[10]); qe = hcos_32[6] * (x[6] - x[9]); qf = hcos_32[7] * (x[7] - x[8]); } p0 = q0 + q7; p1 = q1 + q6; p2 = q2 + q5; p3 = q3 + q4; p4 = hcos_16[0] * (q0 - q7); p5 = hcos_16[1] * (q1 - q6); p6 = hcos_16[2] * (q2 - q5); p7 = hcos_16[3] * (q3 - q4); p8 = q8 + qf; p9 = q9 + qe; pa = qa + qd; pb = qb + qc; pc = hcos_16[0] * (q8 - qf); pd = hcos_16[1] * (q9 - qe); pe = hcos_16[2] * (qa - qd); pf = hcos_16[3] * (qb - qc); q0 = p0 + p3; q1 = p1 + p2; q2 = hcos_8[0] * (p0 - p3); q3 = hcos_8[1] * (p1 - p2); q4 = p4 + p7; q5 = p5 + p6; q6 = hcos_8[0] * (p4 - p7); q7 = hcos_8[1] * (p5 - p6); q8 = p8 + pb; q9 = p9 + pa; qa = hcos_8[0] * (p8 - pb); qb = hcos_8[1] * (p9 - pa); qc = pc + pf; qd = pd + pe; qe = hcos_8[0] * (pc - pf); qf = hcos_8[1] * (pd - pe); p0 = q0 + q1; p1 = hcos_4 * (q0 - q1); p2 = q2 + q3; p3 = hcos_4 * (q2 - q3); p4 = q4 + q5; p5 = hcos_4 * (q4 - q5); p6 = q6 + q7; p7 = hcos_4 * (q6 - q7); p8 = q8 + q9; p9 = hcos_4 * (q8 - q9); pa = qa + qb; pb = hcos_4 * (qa - qb); pc = qc + qd; pd = hcos_4 * (qc - qd); pe = qe + qf; pf = hcos_4 * (qe - qf); { REAL tmp; tmp = p6 + p7; OUT2(36) = -(p5 + tmp); OUT2(44) = -(p4 + tmp); tmp = pb + pf; OUT1(10, tmp); OUT1(6, pd + tmp); tmp = pe + pf; OUT2(46) = -(p8 + pc + tmp); OUT2(34) = -(p9 + pd + tmp); tmp += pa + pb; OUT2(38) = -(pd + tmp); OUT2(42) = -(pc + tmp); OUT1(2, p9 + pd + pf); OUT1(4, p5 + p7); OUT2(48) = -p0; out2[0] = -(out1[0] = p1); OUT1(8, p3); OUT1(12, p7); OUT1(14, pf); OUT2(40) = -(p2 + p3); } { register REAL *x = fraction; /* p0=hcos_64[ 0]*(x[ 0]-x[31]);p1=hcos_64[ 1]*(x[ 1]-x[30]); p2=hcos_64[ 2]*(x[ 2]-x[29]);p3=hcos_64[ 3]*(x[ 3]-x[28]); p4=hcos_64[ 4]*(x[ 4]-x[27]);p5=hcos_64[ 5]*(x[ 5]-x[26]); p6=hcos_64[ 6]*(x[ 6]-x[25]);p7=hcos_64[ 7]*(x[ 7]-x[24]); p8=hcos_64[ 8]*(x[ 8]-x[23]);p9=hcos_64[ 9]*(x[ 9]-x[22]); pa=hcos_64[10]*(x[10]-x[21]);pb=hcos_64[11]*(x[11]-x[20]); pc=hcos_64[12]*(x[12]-x[19]);pd=hcos_64[13]*(x[13]-x[18]); pe=hcos_64[14]*(x[14]-x[17]);pf=hcos_64[15]*(x[15]-x[16]); */ p0 = hcos_64[0] * x[0]; p1 = hcos_64[1] * x[1]; p2 = hcos_64[2] * x[2]; p3 = hcos_64[3] * x[3]; p4 = hcos_64[4] * x[4]; p5 = hcos_64[5] * x[5]; p6 = hcos_64[6] * x[6]; p7 = hcos_64[7] * x[7]; p8 = hcos_64[8] * x[8]; p9 = hcos_64[9] * x[9]; pa = hcos_64[10] * x[10]; pb = hcos_64[11] * x[11]; pc = hcos_64[12] * x[12]; pd = hcos_64[13] * x[13]; pe = hcos_64[14] * x[14]; pf = hcos_64[15] * x[15]; } q0 = p0 + pf; q1 = p1 + pe; q2 = p2 + pd; q3 = p3 + pc; q4 = p4 + pb; q5 = p5 + pa; q6 = p6 + p9; q7 = p7 + p8; q8 = hcos_32[0] * (p0 - pf); q9 = hcos_32[1] * (p1 - pe); qa = hcos_32[2] * (p2 - pd); qb = hcos_32[3] * (p3 - pc); qc = hcos_32[4] * (p4 - pb); qd = hcos_32[5] * (p5 - pa); qe = hcos_32[6] * (p6 - p9); qf = hcos_32[7] * (p7 - p8); p0 = q0 + q7; p1 = q1 + q6; p2 = q2 + q5; p3 = q3 + q4; p4 = hcos_16[0] * (q0 - q7); p5 = hcos_16[1] * (q1 - q6); p6 = hcos_16[2] * (q2 - q5); p7 = hcos_16[3] * (q3 - q4); p8 = q8 + qf; p9 = q9 + qe; pa = qa + qd; pb = qb + qc; pc = hcos_16[0] * (q8 - qf); pd = hcos_16[1] * (q9 - qe); pe = hcos_16[2] * (qa - qd); pf = hcos_16[3] * (qb - qc); q0 = p0 + p3; q1 = p1 + p2; q2 = hcos_8[0] * (p0 - p3); q3 = hcos_8[1] * (p1 - p2); q4 = p4 + p7; q5 = p5 + p6; q6 = hcos_8[0] * (p4 - p7); q7 = hcos_8[1] * (p5 - p6); q8 = p8 + pb; q9 = p9 + pa; qa = hcos_8[0] * (p8 - pb); qb = hcos_8[1] * (p9 - pa); qc = pc + pf; qd = pd + pe; qe = hcos_8[0] * (pc - pf); qf = hcos_8[1] * (pd - pe); p0 = q0 + q1; p1 = hcos_4 * (q0 - q1); p2 = q2 + q3; p3 = hcos_4 * (q2 - q3); p4 = q4 + q5; p5 = hcos_4 * (q4 - q5); p6 = q6 + q7; p7 = hcos_4 * (q6 - q7); p8 = q8 + q9; p9 = hcos_4 * (q8 - q9); pa = qa + qb; pb = hcos_4 * (qa - qb); pc = qc + qd; pd = hcos_4 * (qc - qd); pe = qe + qf; pf = hcos_4 * (qe - qf); { REAL tmp; tmp = pd + pf; OUT1(5, p5 + p7 + pb + tmp); tmp += p9; OUT1(1, p1 + tmp); OUT2(33) = -(p1 + pe + tmp); tmp += p5 + p7; OUT1(3, tmp); OUT2(35) = -(p6 + pe + tmp); tmp = pa + pb + pc + pd + pe + pf; OUT2(39) = -(p2 + p3 + tmp - pc); OUT2(43) = -(p4 + p6 + p7 + tmp - pd); OUT2(37) = -(p5 + p6 + p7 + tmp - pc); OUT2(41) = -(p2 + p3 + tmp - pd); tmp = p8 + pc + pe + pf; OUT2(47) = -(p0 + tmp); OUT2(45) = -(p4 + p6 + p7 + tmp); tmp = pb + pf; OUT1(11, p7 + tmp); tmp += p3; OUT1(9, tmp); OUT1(7, pd + tmp); OUT1(13, p7 + pf); OUT1(15, pf); }}#ifdef FIXED_POINT#define RAW( r ) (r.x>>(FIXED_POINT_FRACBITS-15))#else#define RAW( r ) (int)(r*scalefactor)#endif#define SAVE \ raw=RAW(r); \ if(raw>MAXSCALE)raw=MAXSCALE;else if(raw<MINSCALE)raw=MINSCALE; \ putraw(raw); \ dp+=16;vp+=15+(15-14)#define OS r=*vp * *dp++#define XX vp+=15;r+=*vp * *dp++#define OP r+=*--vp * *dp++inline voidMpegtoraw::generatesingle_2(void){ int i; REAL r; register REAL *vp; register const REAL *dp; int raw; i = 32 / 2; dp = filter; vp = calcbufferL[currentcalcbuffer] + calcbufferoffset;// actual_v+actual_write_pos; switch (calcbufferoffset) { case 0: for (; i; i--, vp += 15) { OS; XX; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; SAVE; } break; case 1: for (; i; i--, vp += 15) { OS; OP; XX; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; SAVE; } break; case 2: for (; i; i--, vp += 15) { OS; OP; OP; XX; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; SAVE; } break; case 3: for (; i; i--, vp += 15) { OS; OP; OP; OP; XX; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; SAVE; } break; case 4: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP; XX; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; SAVE; } break; case 5: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP; OP; XX; OP; OP; OP; OP; OP; OP; OP; OP; OP; SAVE; } break; case 6: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP; OP; OP; XX; OP; OP; OP; OP; OP; OP; OP; OP; SAVE; } break; case 7: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP; OP; OP; OP; XX; OP; OP; OP; OP; OP; OP; OP; SAVE; } break; case 8: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP; OP; OP; OP; OP; XX; OP; OP; OP; OP; OP; OP; SAVE; } break; case 9: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP; OP; OP; OP; OP; OP; XX; OP; OP; OP; OP; OP; SAVE; } break; case 10: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP; OP;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -