📄 filter.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(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); 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]); } 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; \ if(raw<MINSCALE)raw=MINSCALE; \ putraw(raw);#define OS r=*vp * *dp++#define XX vp+=15;r+=*vp * *dp++#define OP r+=*--vp * *dp++inline voidMpegtoraw::generatesingle(void){ int i; REAL r; register REAL *vp; register const REAL *dp; int raw; i = 32; dp = filter; vp = calcbufferL[currentcalcbuffer] + calcbufferoffset;// actual_v+actual_write_pos;#if 0 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; OP; OP; OP; OP; OP; XX; OP; OP; OP; OP; SAVE; } break; case 11: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; XX; OP; OP; OP; SAVE; } break; case 12: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; XX; OP; OP; SAVE; } break; case 13: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; OP; XX; OP; SAVE; } break; case 14: for (; i; i--, vp += 15) { OS; OP; OP; OP; OP;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -