📄 gtkanal.c
字号:
title="Re-synthesis";
ymn = -32767 ;
ymx = 32767;
xmn = 0;
xmx = 1600-1;
gpk_graph_draw(winbox,0,xcord,ycord,
xmn,ymn,xmx,ymx,1,title,&black);
/* draw some hash marks dividing the frames */
ycord[0] = ymx*.8; ycord[1] = ymn*.8;
for (gr=0 ; gr<=2; gr++) {
xcord[0] = 223.5 + gr*576; xcord[1] = 223.5 +gr*576;
gpk_rectangle_draw(winbox,xcord,ycord,xmn,ymn,xmx,ymx,&yellow);
}
for (gr = 0 ; gr < 2 ; gr++) {
if (blocktype[gr][ch]==2)
for (i=1 ; i<=2; i++) {
xcord[0] = 223.5+gr*576 + i*192;
xcord[1] = 223.5+gr*576 + i*192;
gpk_rectangle_draw(winbox,xcord,ycord,xmn,ymn,xmx,ymx,&yellow);
}
}
n = 224;
for (j=1152-n,i=0; i<=n; i++,j++) {
xcord[i] = i;
if (gtkinfo.msflag)
ycord[i] = ch ? .5*(pplot1->pcmdata2[0][j]-
pplot1->pcmdata2[1][j]) :
.5*(pplot1->pcmdata2[0][j]+pplot1->pcmdata2[1][j]);
else
ycord[i]=pplot1->pcmdata2[ch][j];
}
gpk_graph_draw(winbox,n+1,xcord,ycord,
xmn,ymn,xmx,ymx,0,title,&black);
n = 1152;
for (i=0; i<n; i++) {
xcord[i] = i+224;
if (gtkinfo.msflag)
ycord[i] = ch ? .5*(pplot2->pcmdata2[0][i]-pplot2->pcmdata2[1][i]) :
.5*(pplot2->pcmdata2[0][i]+pplot2->pcmdata2[1][i]);
else
ycord[i]=pplot2->pcmdata2[ch][i];
}
gpk_graph_draw(winbox,n,xcord,ycord,
xmn,ymn,xmx,ymx,0,title,&black);
/*******************************************************************/
/* draw the MDCT energy spectrum */
/*******************************************************************/
for (gr = 0 ; gr < mode_gr ; gr ++) {
int bits;
char *blockname="";
switch (blocktype[gr][ch]) {
case 0: blockname = "normal"; break;
case 1: blockname = "start"; break;
case 2: blockname = "short"; break;
case 3: blockname = "end"; break;
}
strcpy(label,blockname);
if (pplot1->mixed[gr][ch]) strcat(label,"(mixed)");
n = 576;
if (gtkinfo.flag123) {
data = pplot1->mpg123xr[gr][0];
data2 = pplot1->mpg123xr[gr][1];
}else{
data = pplot->xr[gr][0];
data2 = pplot->xr[gr][1];
}
xmn = 0;
xmx = n-1;
ymn=0;
ymx=11;
/* draw title, erase old plot */
if (gtkinfo.flag123) bits=pplot1->mainbits[gr][ch];
else bits=pplot->LAMEmainbits[gr][ch];
sprintf(title2,"MDCT%1i(%s) bits=%i q=%i ",gr,label,bits,
pplot1->qss[gr][ch]);
gpk_bargraph_draw(mdctbox[gr],0,xcord,ycord,
xmn,ymn,xmx,ymx,1,title2,0,barcolor);
/* draw some hash marks showing scalefactor bands */
if (gtkinfo.sfblines) {
int fac,nsfb, *scalefac;
if (blocktype[gr][ch]==SHORT_TYPE) {
nsfb=SBMAX_s;
fac=3;
scalefac = scalefac_band.s;
}else{
nsfb=SBMAX_l;
fac=1;
scalefac = scalefac_band.l;
}
for (i=nsfb-7 ; i<nsfb; i++) {
ycord[0] = .8*ymx; ycord[1] = ymn;
xcord[0] = fac*scalefac[i];
xcord[1] = xcord[0];
gpk_rectangle_draw(mdctbox[gr],xcord,ycord,xmn,ymn,xmx,ymx,&yellow);
}
}
ymn=9e20;
ymx=-9e20;
for (i=0; i<n; i++) {
double coeff;
xcord[i] = i;
if (gtkinfo.msflag){
coeff = ch ? .5*(data[i]-data2[i]) : .5*(data[i]+data2[i]) ;
}else{
coeff = ch ? data2[i] : data[i];
}
if (blocktype[gr][ch]==SHORT_TYPE && !subblock_draw[i % 3])
coeff = 0;
ycord[i]=coeff*coeff*1e10;
ycord[i] = log10( MAX( ycord[i],(double) 1));
ymx=(ycord[i] > ymx) ? ycord[i] : ymx;
ymn=(ycord[i] < ymn) ? ycord[i] : ymn;
}
/* print the min/max
sprintf(title2,"MDCT%1i %5.2f %5.2f bits=%i",gr,ymn,ymx,
pplot1->mainbits[gr][ch]);
*/
if (gtkinfo.flag123) bits=pplot1->mainbits[gr][ch];
else bits=pplot->LAMEmainbits[gr][ch];
sprintf(title2,"MDCT%1i(%s) bits=%i q=%i ",gr,label,bits,
pplot1->qss[gr][ch]);
xmn = 0;
xmx = n-1;
ymn=0;
ymx=11;
gpk_bargraph_draw(mdctbox[gr],n,xcord,ycord,
xmn,ymn,xmx,ymx,0,title2,0,barcolor);
}
/*******************************************************************
* draw the psy model energy spectrum (k space)
* l3psy.c computes pe, en, thm for THIS granule.
*******************************************************************/
if (gtkinfo.kbflag){
for (gr = 0 ; gr < mode_gr ; gr ++) {
n = HBLKSIZE; /* only show half the spectrum */
data = &pplot->energy[gr][ch][0];
ymn=9e20;
ymx=-9e20;
for (i=0; i<n; i++) {
xcord[i] = i+1;
if (blocktype[gr][ch]==SHORT_TYPE && !subblock_draw[i % 3])
ycord[i] = 0;
else
ycord[i] = log10( MAX( data[i],(double) 1));
ymx=(ycord[i] > ymx) ? ycord[i] : ymx;
ymn=(ycord[i] < ymn) ? ycord[i] : ymn;
}
for (en=0 , j=0; j<BLKSIZE ; j++)
en += pplot->energy[gr][ch][j];
sprintf(title2,"FFT%1i pe=%4.1fK en=%5.2e ",gr,
pplot->pe[gr][ch]/1000,en);
ymn = 3;
ymx = 15;
xmn = 1;
xmx = n;
gpk_bargraph_draw(enerbox[gr],n,xcord,ycord,
xmn,ymn,xmx,ymx,1,title2,0,barcolor);
}
}else{
/*******************************************************************
* draw the psy model energy spectrum (scalefactor bands)
*******************************************************************/
for (gr = 0 ; gr < mode_gr ; gr ++) {
if (blocktype[gr][ch]==2) {
n = 3*SBMAX_s;
data = &pplot->en_s[gr][ch][0];
data2 = &pplot->thr_s[gr][ch][0];
data3 = &pplot->xfsf_s[gr][ch][0];
} else {
n = SBMAX_l;
data = &pplot->en[gr][ch][0];
data2 = &pplot->thr[gr][ch][0];
data3 = &pplot->xfsf[gr][ch][0];
}
ymn=9e20;
ymx=-9e20;
for (i=0; i<n; i++) {
xcord[i] = i+1;
if (blocktype[gr][ch]==SHORT_TYPE && !subblock_draw[i % 3])
ycord[i] = 0;
else
ycord[i] = log10( MAX( data[i],(double) 1));
ymx=(ycord[i] > ymx) ? ycord[i] : ymx;
ymn=(ycord[i] < ymn) ? ycord[i] : ymn;
}
/* en = max energy difference amoung the 3 short FFTs for this granule */
en = pplot->ers[gr][ch];
sprintf(title2,"FFT%1i pe=%4.1fK/%3.1f n=%i/%3.1f/%3.1f/%3.1f",gr,
pplot->pe[gr][ch]/1000,en,pplot->over[gr][ch],
pplot->max_noise[gr][ch],
pplot->over_noise[gr][ch],
pplot->tot_noise[gr][ch]);
ymn = 3;
ymx = 15;
xmn = 1;
xmx = n+1; /* a little extra because of the bar thickness */
gpk_bargraph_draw(enerbox[gr],n,xcord,ycord,
xmn,ymn,xmx,ymx,1,title2,0,barcolor);
for (i=0; i<n; i++) {
xcord[i] = i+1;
if (blocktype[gr][ch]==SHORT_TYPE && !subblock_draw[i % 3])
ycord[i] = 0;
else
ycord[i] = log10( MAX( data3[i], (double) 1));
ymx=(ycord[i] > ymx) ? ycord[i] : ymx;
ymn=(ycord[i] < ymn) ? ycord[i] : ymn;
}
gpk_bargraph_draw(enerbox[gr],n,xcord,ycord,
xmn,ymn,xmx,ymx,0,title2,3,&red);
for (i=0; i<n; i++) {
xcord[i] = i+1 + (.25*n)/SBMAX_l;
if (blocktype[gr][ch]==SHORT_TYPE && !subblock_draw[i % 3])
ycord[i] = 0;
else
ycord[i] = log10( MAX( data2[i], (double) 1));
ymx=(ycord[i] > ymx) ? ycord[i] : ymx;
ymn=(ycord[i] < ymn) ? ycord[i] : ymn;
}
gpk_bargraph_draw(enerbox[gr],n,xcord,ycord,
xmn,ymn,xmx,ymx,0,title2,3,grcolor[gr]);
}
}
/*******************************************************************
* draw scalefactors
*******************************************************************/
for (gr = 0 ; gr < mode_gr ; gr ++) {
double ggain;
if (blocktype[gr][ch]==2) {
n = 3*SBMAX_s;
if (gtkinfo.flag123) data = pplot1->sfb_s[gr][ch];
else data = pplot->LAMEsfb_s[gr][ch];
} else {
n = SBMAX_l;
if (gtkinfo.flag123) data = pplot1->sfb[gr][ch];
else data = pplot->LAMEsfb[gr][ch];
}
ymn=-1;
ymx=10;
for (i=0; i<n; i++) {
xcord[i] = i+1;
if (blocktype[gr][ch]==SHORT_TYPE && !subblock_draw[i % 3])
ycord[i] = 0;
else
ycord[i] = -data[i];
ymx=(ycord[i] > ymx) ? ycord[i] : ymx;
ymn=(ycord[i] < ymn) ? ycord[i] : ymn;
}
if (blocktype[gr][ch]==2) {
sprintf(label2,
"SFB scale=%i %i%i%i",
pplot1->scalefac_scale[gr][ch],
pplot1->sub_gain[gr][ch][0],
pplot1->sub_gain[gr][ch][1],
pplot1->sub_gain[gr][ch][2]);
}else{
sprintf(label2,"SFB scale=%i",pplot1->scalefac_scale[gr][ch]);
}
if (gtkinfo.flag123) ggain = -(pplot1->qss[gr][ch]-210)/4.0;
else ggain = -(pplot->LAMEqss[gr][ch]-210)/4.0;
sprintf(title2," gain=%4.1f",ggain);
strcat(label2,title2);
xmn = 1;
xmx = n+1;
gpk_bargraph_draw(sfbbox[gr],n,xcord,ycord,
xmn,ymn,xmx,ymx,1,label2,0,grcolor[gr]);
ycord[0] = ycord[1] = 0;
xcord[0] = 1;
xcord[1] = n+1;
gpk_rectangle_draw(sfbbox[gr],xcord,ycord,xmn,ymn,xmx,ymx,&yellow);
}
}
static void update_progress(void)
{
char label[80];
int tf=gfp->totalframes;
if (gtkinfo.totalframes>0) tf=gtkinfo.totalframes;
sprintf(label,"Frame:%4i/%4i %6.2fs",
pplot->frameNum,(int)tf-1, pplot->frametime);
gtk_progress_set_value (GTK_PROGRESS (frameprogress), (gdouble) pplot->frameNum);
gtk_label_set_text(GTK_LABEL(framecounter),label);
}
static void analyze(void)
{
if ( idle_keepgoing) {
idle_count = 0;
idle_count_max=0;
idle_keepgoing=0;
idle_end=0;
}
plot_frame();
update_progress();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -