⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkanal.c

📁 音频编码
💻 C
📖 第 1 页 / 共 4 页
字号:
    gpk_rectangle_draw(pcmbox,xcord,ycord,xmn,ymn,xmx,ymx,&yellow);  }  for (gr = 0 ; gr < mode_gr ; 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(pcmbox,xcord,ycord,xmn,ymn,xmx,ymx,&yellow);      }  }  /* bars representing FFT windows */  xcord[0] = 0;       ycord[0] = ymn+3000;  xcord[1] = 1024-1;  ycord[1] = ymn+1000;  gpk_rectangle_draw(pcmbox,xcord,ycord,xmn,ymn,xmx,ymx,grcolor[0]);  xcord[0] = 576;          ycord[0] = ymn+2000;  xcord[1] = 576+1024-1;   ycord[1] = ymn;  gpk_rectangle_draw(pcmbox,xcord,ycord,xmn,ymn,xmx,ymx,grcolor[1]);  /* plot PCM data */  for (i=0; i<n; i++) {    xcord[i] = i;    if (gtkinfo.msflag)       ycord[i] = ch ? .5*(pplot->pcmdata[0][i]-pplot->pcmdata[1][i]) :       .5*(pplot->pcmdata[0][i]+pplot->pcmdata[1][i]);    else       ycord[i]=pplot->pcmdata[ch][i];  }  /* skip plot if we are doing an mp3 file */  if (!gtkinfo.filetype) {    gpk_graph_draw(pcmbox,n,xcord,ycord,xmn,ymn,xmx,ymx,0,title2,&black);  }  /*******************************************************************/  /* draw the PCM re-synthesis data */  /*******************************************************************/  n = 1152;  /*  sprintf(title2,"Re-synthesis  mask_ratio=%3.2f  %3.2f  ener_ratio=%3.2f  %3.2f",	  pplot->ms_ratio[0],pplot->ms_ratio[1],	  pplot->ms_ener_ratio[0],pplot->ms_ener_ratio[1]);  */  title="Re-synthesis";  if (gtkinfo.difference)     title="Re-synthesis difference (amplified 20db)";  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);      }  }  /* this piece of PCM data from previous frame */  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];  }  /* this piece of PCM data from current frame */  n = 1152;  for (i=0; i<n; i++) {    xcord[i+224] = i+224;    if (gtkinfo.msflag)       ycord[i+224] = ch ? .5*(pplot2->pcmdata2[0][i]-pplot2->pcmdata2[1][i]) :       .5*(pplot2->pcmdata2[0][i]+pplot2->pcmdata2[1][i]);    else       ycord[i+224]=pplot2->pcmdata2[ch][i];  }  n=1152+224;  if (gtkinfo.difference) {    for (i=0; i<n; i++) {      if (gtkinfo.msflag) 	ycord[i] -= ch ? .5*(pplot->pcmdata[0][i]-pplot->pcmdata[1][i]) : 	.5*(pplot->pcmdata[0][i]+pplot->pcmdata[1][i]);      else 	ycord[i] -= pplot->pcmdata[ch][i];    }    ycord[i] *= 100;  }  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,bits2;    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];      bits2=pplot1->sfbits[gr][ch];    }else{      bits=pplot->LAMEmainbits[gr][ch];      bits2=pplot->LAMEsfbits[gr][ch];    }    sprintf(title2,"MDCT%1i(%s) bits=%i/%i ",gr,label,bits,bits2);    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;            i = nsfb-7;            fac=3;            scalefac = gfc->scalefac_band.s;        }else{            nsfb=SBMAX_l;            i = nsfb-10;            fac=1;            scalefac = gfc->scalefac_band.l;        }        for ( ; 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)); #if 0      if (ch==0) 	if (i==26) 	  if (data[i]!=0)	    printf("%i %i i=%i  mdct: (db) %f  %f \n",pplot->frameNum,gr,i,10*log10(data[i]*data[i]),10*log10(.33*(data[i-1]*data[i-1] + data[i]*data[i] + data[i+1]*data[i+1]))  );#endif      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 ",gr,label,bits);    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=%5.2fK  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];      if (en>999) en=999;      sprintf(title2,"FFT%1i pe=%5.2fK/%3.1f \nnoise ovr_b:%i/max:%3.1f/ovr:%3.1f/tot:%3.1f/ssd:%i",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],          pplot->over_SSD[gr][ch]);      barthick=3;      if (blocktype[gr][ch]==SHORT_TYPE) barthick=2;      if (!(subblock_draw[0] && subblock_draw[1] && subblock_draw[2]))	barthick=3;      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,barthick,barcolor);      for (i=0; i<n; i++) {	xcord[i] = i+1 + .20;        if (blocktype[gr][ch]==SHORT_TYPE && !subblock_draw[i % 3])          ycord[i] = 0;        else	  ycord[i] = log10( MAX( data2[i], (double) 1));      }      gpk_bargraph_draw(enerbox[gr],n,xcord,ycord,			xmn,ymn,xmx,ymx,0,title2,barthick,grcolor[gr]);      for (i=0; i<n; i++) {	xcord[i] = i+1 + .40;        if (blocktype[gr][ch]==SHORT_TYPE && !subblock_draw[i % 3])          ycord[i] = 0;        else	  ycord[i] = log10( MAX( data3[i], (double) 1));      }      gpk_bargraph_draw(enerbox[gr],n,xcord,ycord,			xmn,ymn,xmx,ymx,0,title2,barthick,&red);      }  }  /*******************************************************************   * draw scalefactors    *******************************************************************/  for (gr = 0 ; gr < mode_gr ; gr ++) {      int 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-2) ? ycord[i]+2 : ymx;	ymn=(ycord[i] < ymn) ? ycord[i]-1 : ymn;      }      if (blocktype[gr][ch]==2) {	sprintf(label2,		"SFB scale=%i preflag=%i  %i%i%i",		pplot1->scalefac_scale[gr][ch],		pplot1->preflag[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 preflag=%i",pplot1->scalefac_scale[gr][ch],		pplot1->preflag[gr][ch]);      }            if (gtkinfo.flag123) ggain = (pplot1->qss[gr][ch]);      else ggain = (pplot->LAMEqss[gr][ch]);      sprintf(title2," ggain=%i",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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -