cbkdsp.c

来自「speech signal process tools」· C语言 代码 · 共 184 行

C
184
字号
/* cbkdsp - produce a rosetta quant table from a CBK file   This material contains proprietary software of Entropic Processing, Inc.     Any reproduction, distribution, or publication without the the prior	     written permission of Entropic Processing, Inc. is strictly prohibited.  Any public distribution of copies of this work authorized in writing by  Entropic Processing, Inc. must bear the notice			 								               "Copyright 1986 Entropic Processing, Inc."*/ 				#ifdef SCCS  static char *sccs_id = "@(#)cbkdsp.c	1.3 10/17/86 EPI";#endif#include <stdio.h>#include <sps/sps.h>#include <sps/scbk.h>#define SYNTAX \ USAGE ("cbkdsp [-x debug-level] [-t {rc|p1|pd|r0|pwr}] [-n table name] file")#define MAX_P1	180.0#define MAX_PD	-1000.0#define R0_NORM_VAL 16char *type_codes[] = {"RC","P1","PD","R0","PWR",NULL};main (argc, argv)char  **argv;int     argc;{  int getopt(), c,i;  extern optind, errno;  extern char *optarg, *get_cmd_line();  struct scbk_data *cbk_rec;  struct header *ih;  FILE *in;  int debug=0, type=0;  char *name=NULL, *type_string="rc";  while ((c = getopt(argc, argv, "x:t:n:")) != EOF) {	switch (c) {	 case 'x':	  debug = atoi(optarg);	  break;	 case 't':	  if((type = lin_search(type_codes,optarg)) == -1) {	   SYNTAX;	  }	  type_string = optarg;	  break;	 case 'n':	  name = optarg;	  break;	 default:	  SYNTAX;	}  }  if (argc-optind != 1) SYNTAX;  TRYOPEN("cbkdsp",argv[optind],"r",in);  if(!(ih = read_header(in))) NOTSPS("cbkdsp",argv[optind]);  if(ih->common.type != FT_SCBK) {	fprintf(stderr,"cbkdsp: %s is not a SCBK file.\n",argv[optind]);	exit(1);  }    cbk_rec = allo_scbk_rec(ih);  if(get_scbk_rec(cbk_rec,ih,in) == EOF) {	fprintf(stderr,"cbkdsp: No data record in file.\n");	exit(1);  }  if(!name) name = type_string;  printf("; DSP enc/dec table produced by cbkdsp 1.3 of 10/17/86:\n");  printf("; %s\n",get_cmd_line(argc,argv));  printf(";\n");    switch (type) {	case 0: /* rc */	 if(!name) name = "rc";	 printf("%s_enc_tab:\n",name);		/* put out name of table */	 printf("\tdw\t-2.0\n");		/* start tables with -2 */	 for (i=0; i < ih->hd.scbk->num_cdwds - 1; i++) /* enc table */	  printf("\tdw\t%11.5f\n",cbk_rec->qtable[i].enc);	 printf("\tEND(%s_enc)\n",name);		 printf("%s_dec_tab:\n",name);	 for (i=0; i< ih->hd.scbk->num_cdwds; i++)	/* dec table */	  printf("\tdw\t%11.5f\n",cbk_rec->qtable[i].dec);	 printf("\tEND(%s_dec)\n",name);         break;	case 1: /* p1 */	 printf("%s_enc_tab:\n",name);		/* put out name of table */	 printf("\tdw\t-2.0\n");		/* start with -2 */	 for (i=0; i< ih->hd.scbk->num_cdwds - 1; i++)	  printf("\tdw\t%g\n",cbk_rec->qtable[i].enc+1);	 printf("\tdw\t%g\n",MAX_P1);	 printf("\tEND(%s_enc)\n",name);	 	 printf("%s_dec_tab:\n",name);			 for (i=0; i< ih->hd.scbk->num_cdwds; i++)	  printf("\tdw\t%g\n",cbk_rec->qtable[i].dec);	 printf("\tdw\t%g\n",MAX_P1);	 printf("\tEND(%s_dec)\n",name);	 break;	case 2: /* pd */	 printf("%s_enc_tab:\n",name);	 printf("\tdw\t%g\n",MAX_PD);	 for (i=0; i< ih->hd.scbk->num_cdwds - 1; i++)	  printf("\tdw\t%g\n",cbk_rec->qtable[i].enc+1);	 printf("\tEND(%s_enc)\n",name);	 printf("%s_dec_tab:\n",name);	 for (i=0; i< ih->hd.scbk->num_cdwds; i++)	  printf("\tdw\t%g\n",cbk_rec->qtable[i].dec);	 printf("\tEND(%s_dec)\n",name);	 break;	case 3: /* r0 */	 printf("R0_NORM:equ\t%d\n",R0_NORM_VAL);	 printf("%s_enc_tab:\n",name);	 printf("\tdw\t%f\n",-2.0);	 for (i=0; i< ih->hd.scbk->num_cdwds - 1; i++)	  printf("\tdw\t%g * R0_NORM\n",cbk_rec->qtable[i].enc+1);	 printf("\tEND(%s_enc)\n",name);	 printf("%s_dec_tab:\n",name);	 for (i=0; i< ih->hd.scbk->num_cdwds; i++)	  printf("\tdw\t%g * R0_NORM\n",cbk_rec->qtable[i].dec);	 printf("\tEND(%s_dec)\n",name);	 break;	case 4: /* pwr *//* there are limits on the size of DSP numbers, and we with to encode the   ratio (new power)/(old power).  If this ratio exceeds PWR_BOUND; that   is, if (new power) > (old power)*PWR_BOUND, we use the _g_ table to   encode (old/power)/(new/power) instead.*/	 for (i=0; i< ih->hd.scbk->num_cdwds - 1 && 		   cbk_rec->qtable[i].enc <= 1.0; i++) ;;	 printf("PWR_BOUND: equ\t%f\n",cbk_rec->qtable[i].enc);	 printf("\tglobal\tPWR_BOUND\n\n");	 printf("%s_l_enc_tab:\n",name);	/* do the l table */	 printf("\tdw\t%f\n",-2.0);	 for (i=0; i< ih->hd.scbk->num_cdwds - 1 && 		   cbk_rec->qtable[i].enc <= 1.0; i++)	  printf("\tdw\t%f\n",cbk_rec->qtable[i].enc);	 printf("\tEND(%s_l_enc)\n",name); 	 printf("%s_g_enc_tab:\n",name);	 printf("\tdw\t%f\n",-2.0);	 for (i=ih->hd.scbk->num_cdwds-2; cbk_rec->qtable[i-1].enc > 1.0; i--)	  printf("\tdw\t1.0/%f\n",cbk_rec->qtable[i].enc);	 printf("\tEND(%s_g_enc)\n",name);	 printf("%s_l_dec_tab:\n",name);	 for (i=0; i< ih->hd.scbk->num_cdwds &&		   cbk_rec->qtable[i].dec <= 1.0; i++)	  printf("\tdw\t%f\n",cbk_rec->qtable[i].dec);	 printf("\tEND(%s_l_dec)\n",name); 	 printf("%s_g_dec_tab:\n",name);	 for (i=ih->hd.scbk->num_cdwds-1; cbk_rec->qtable[i-1].dec > 1.0; i--)	  printf("\tdw\t1.0/%f\n",cbk_rec->qtable[i].dec);	 printf("\tEND(%s_g_dec)\n",name);	 break;  }}

⌨️ 快捷键说明

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