📄 psearch.asm
字号:
PS_DEBUG .SET 0
.IF PS_DEBUG
.version 50
.mmregs
.MLIB "MAC.LIB"
.BSS ACCBUF,2
.BSS SIGNFLAG,1
.BSS FIRST_SUB,1
.BSS SUBCODE_I,1
.BSS BB,5
.BSS PINDEX,1
.DATA
E0 .int 1451,1316,1600,581,242,1467,1220,270,438,0,-1456,-158,143,-154,-1181,121,-287,-1060,1513,-156
.int 282,-237,127,21,-1458,-1456,0,-18,-40,-1526,2415,-89,-15,88,-1243,1330,12,949,1215,94
.int -1037,-209,-188,207,-922,0,-300,-80,-1330,106,-104,324,-2242,-1109,-403,1162,-1017,-846,-188,-304
IMP_H .int 8192,11557,8353,7750,8788,7475,4817,3201,2141,1103,372,-200,-551,-519,-382,-363,-304,-136,-12,27
.int 52,76,80,69,50,28,13,4,-6,-14,-15,-13,-12,-11,-9,-7,-5,-4,-4,-4
.int -4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4
D1B .int 1451,1316,1600,581,242,1467,1220,270,438,0
.int -1456,-158,143,-154,-1181,121,-287,-1060,1513,-156,282,-237,127,21,-1458,-1456,0,-18,-40,-1526
.int 2415,-89,-15,88,-1243,1330,12,949,1215,94,-1037,-209,-188,207,-922,0,-300,-80,-1330,106
.int -104,324,-2242,-1109,-403,1162,-1017,-846,-188,-304,0,1008,1439,1230,1436,818,-84,1528,2064,-1049
.int 108,-196,-1166,-89,-15,1010,-322,0,12,-1303,1134,1085,-89,-15,88,87,-1330,-1318,949,22
.int -1549,-2877,0,-20,-43,-2951,2564,-1425,-16,93,-1321,1412,12,1007,-40,99,-1102,-1552,-200,219
.int -980,0,-319,-85,-1413,112,1219,-986,-2381,-1178,-428,1233,-2411,-899,1130,-323,0,2400,1528,1306
.int 1524,868,-1420,1622,2191,-1114,114,1121,-1239,-95,-16,1072,-1672,0,12,-2714,1204,1152,-95,-125
.int -21,122,-1209,-524,-1838,1322,30,-2160,-4011,0,-1358,1270,-4114,3574,-657,-23,1459,-1842,1968,1346
.int 1403,-56,-1192,-1537,-2164,-279,305,-37,1330,-445,1211,-1970,156,1699,-1375,-3320,-1643,-597,1718,-3361
.int -2584,1575,-451,1330,3345,2130,1820,3454,1209,-3310,2261,3054,-223,158,1562,-1728,1197,-23,1494
.TEXT
CALL C50_INIT
LDP #ACCBUF
ZAP
SACL FIRST_SUB
LACC #4
SACL SUBCODE_I
CALL PSEARCH
HERE b $
.ENDIF
;===============================
; PS_V0[279]
;========================================
;------E0[60],IMP_H[60],D1B[229]
;====>PG_EMAX,BB[2](PINDEX),BB[0]=EMAX_PTR,PG_MATCH[256*2],PG_GAIN[256]
;========================================
.BSS PG_FIRST,1
.BSS MINPTR,1
.BSS MAXPTR,1
.bss OLDPTR,1
.BSS PS_START,1
.BSS PGAIN_LOOP,1
.BSS TOPPTR,1
;.BSS PG_EMAX,2 ;PGAIN
.BSS PS_I,1
.BSS TAUPTR,1
.BSS BIGPTR,1
;=======================
PSEARCH
;================================================================
; for (i = 0; i < MAXBUFPTR; i++) v0[i] = 0.0;
; for (i = 0; i < MAXPD; i++) g[i] = match[i] = 0.0;
;================================================================
CLR0 PS_V0,MAXBUFPTR
;================================================================
; bufptr = MMAX + no + 2*l + MAXNP - 1; //=279 //MMAX=147
; movefr(idb, d1b, &v0[bufptr - idb - l]); //idb=209, bufptr-idb-l=10
;================================================================
MOVEFR IDB,D1B,PS_V0+10
;================================================================
; if (nseg == 1)
; { bb[2] = 0.0; bb[0] = MMIN; }
;================================================================
LACC FIRST_SUB
BCND PS_NOT_FIRST,EQ
ZAC
;SACL BB+2
SACL TOPPGAIN
LACC #MMIN
;SACL BB
SACL TOPM
B PS_QUANT_TOPPGAIN
;================================================================
; else
; { if ((nseg % 2) == 0)
; { minptr = oldptr - (plevel2/2 - 1); //PLEVEL2==64, PLEVEL1=256
; maxptr = oldptr + (plevel2/2);
; if (minptr < 0)
; { minptr = 0;
; maxptr = plevel2 - 1; }
; if (maxptr > plevel1 - 1)
; { maxptr = plevel1 - 1;
; minptr = plevel1 - plevel2;
; } }
;================================================================
PS_NOT_FIRST
BIT SUBCODE_I,15
BCND PS_ODD,NTC ;JUMP IF SUBCODE_I(0) IS 0
LACC OLDPTR
ADD #1,5
SACL MAXPTR
LACC OLDPTR
SUB #PLEVEL2_1
SACL MINPTR
BCND PS_OVER_MINPTR,GEQ
SPLK #0,MINPTR
BD PS_OVER_ODD
SPLK #PLEVEL2_1,MAXPTR
PS_OVER_MINPTR
;=====================================
; if (maxptr > plevel1 - 1)
; { maxptr = plevel1 - 1;
; minptr = plevel1 - plevel2;}
;================================================================
LACC MAXPTR
SUB #PLEVEL1_1
BCND PS_OVER_ODD,LEQ
LACC #PLEVEL1_1
SACL MAXPTR
LACC #PLEVEL1-PLEVEL2
SACL MINPTR
B PS_OVER_ODD
PS_ODD
;================================================================
; else
; { minptr = 0;
; maxptr = plevel1 - 1; }
;================================================================
ZAP
SACL MINPTR
LACC #PLEVEL1_1
SACL MAXPTR
PS_OVER_ODD
;================================================================
; if (whole)
; { first = TRUE;
; emax=0; EMAX_PTR=0;
; for (i = minptr; i <= maxptr; i++)
; { m = (int) pdelay[i];
; //------------by wht
; if(m==oldm) { match[i]=0.; continue; }
; else oldm=m;
; //------------
;================================================================
LACC #TRUE
SACL PG_FIRST
;----------
;first = TRUE; pg_shift=0; oldbp_pg=0; oldmatch=0l; topm=minptr+20;
LACL #0
SACL PG_SHIFT
SACL TOPBP_PG
SLAC PG_EMAX
LACC MINPTR
ADD #20
sacl TOPM
;---------
LACC MINPTR
SACL PGAIN_LOOP
;ADD #20
ADD #19
SACL PG_M
LACC #30
SACL PG_LEN
;------
LAR AR0,#PG_X_E0+59
LACC #E0
SAMM BMAR
MAR *,AR0
RPT #59
BLDD BMAR,*-
;------------ALL INTEGER!!!! NO FRAC PART
;================================================================
; frac = pdelay[i] - m;
; if (fabs(frac) < 1.e-4)
; { lag = start - m;
; g[i] = pgain(&v0[lag-1], l, first, m, LEN, &match[i]);
; first = FALSE; }
; else match[i] = 0.0;
; }
;================================================================
PS_LOOP_PGAIN
LACC PG_M
CALLD PGAIN ;BB[2]=PGAIN, PG_EMAX=*MATCH, EMAX_PTR=TAUPTR--
ADD #1
SACL PG_M
;------
LACC PGAIN_LOOP
ADD #1
SACL PGAIN_LOOP
SUB MAXPTR
BCND PS_LOOP_PGAIN,LEQ ;LOOP IF .<=MAXPTR
;================================================================
LACC TOPM
SACL PG_M
SUB #20
SACL TAUPTR
SACL OLDPTR
;================================================================
; m = (int) pdelay[tauptr];
; lag = start - m;
; g[tauptr] = pgain(&v0[lag - 1], l, TRUE, m, l, &match[tauptr]);
; bb[0] = pdelay[tauptr];
; oldptr = tauptr;
;================================================================
LACC #60
SACL PG_LEN
LACC #TRUE
SACL PG_FIRST
;----------
;first = TRUE; pg_shift=0; oldbp_pg=0; oldmatch=0l;
LACL #0
SACL PG_SHIFT
SACL TOPBP_PG
SLAC PG_EMAX
;---------
CALL PGAIN
;================================================================
; TOPPGAIN = pitchencode(TOPPGAIN, &pindex);
;================================================================
PS_QUANT_TOPPGAIN
CALL PTENCODE
RET
.INCLUDE "PTENCODE.ASM"
.INCLUDE "PGAIN.ASM"
.IF PS_DEBUG
.INCLUDE "C50_INIT.ASM"
.INCLUDE "SET_CON.ASM"
.include "warray.asm"
.INCLUDE "DATA_SEG.ASM"
.ENDIF
;================================================================
; whole = 1; fraction = 0;
; sub = 0;
; neigh = 0; nrange = 3;
; for (i = 0; i < MAXBUFPTR; i++) v0[i] = 0.0;
; for (i = 0; i < MAXPD; i++) g[i] = match[i] = 0.0;
; bufptr = MMAX + no + 2*l + MAXNP - 1;
; movefr(idb, d1b, &v0[bufptr - idb - l]); //idb=209, bufptr-idb-l=10
; if (nseg == 1)
; { bb[2] = 0.0; bb[0] = MMIN; }
; else
; { if ((nseg % 2) == 0)
; { minptr = oldptr - (plevel2/2 - 1);
; maxptr = oldptr + (plevel2/2);
; if (minptr < 0)
; { minptr = 0;
; maxptr = plevel2 - 1; }
; if (maxptr > plevel1 - 1)
; { maxptr = plevel1 - 1;
; minptr = plevel1 - plevel2;
; } }
; else
; {
; minptr = 0;
; maxptr = plevel1 - 1;
; start = bufptr - l + 1;
; if (whole)
; { first = TRUE;
; for (i = minptr; i <= maxptr; i++)
; { m = (int) pdelay[i];
; //------------by wht
; if(m==oldm) { match[i]=0.; continue; }
; else oldm=m;
; //------------
; frac = pdelay[i] - m;
; if (fabs(frac) < 1.e-4)
; { lag = start - m;
; g[i] = pgain(&v0[lag-1], l, first, m, LEN, &match[i]);
; first = FALSE; }
; else match[i] = 0.0;
; }
; }
; topptr = minptr;
; emax = match[topptr];
; for (i = minptr; i <= maxptr; i++)
; {
; if (match[i] > emax)
; { topptr = i; emax = match[topptr];
; } }
; tauptr = topptr;
; m = (int) pdelay[tauptr];
; frac = pdelay[tauptr] - m;
; lag = start - m;
; frac=0.; //by wht
; g[tauptr] = pgain(&v0[lag - 1], l, TRUE, m, l, &match[tauptr]);
; bb[2] = g[tauptr];
; bb[0] = pdelay[tauptr];=TOPM
; oldptr = tauptr;
; }
; /* *pitch quantization bb[2] */
; bb[2] = pitchencode(bb[2], &pindex);=TOPPGAIN
;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -