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

📄 meter.c

📁 speech signal process tools
💻 C
📖 第 1 页 / 共 2 页
字号:
  XtAddInput( fileno(stdin), XtInputReadMask, get_input, NULL);  XtRealizeWidget(toplevel);  XtMainLoop();}static struct header *ihd, *ohd;   /* input and output file headers */static struct feasd *isd_rec, *z_rec; /* record for input and output data */static FILE *isdfile = stdin,         /* input and output file stream */  *osdfile = stdout;  static int buffer_len;             /* no. samps read by get_feasd_rec */void get_input(client_data, fid, id)     caddr_t client_data;     int *fid;     XtInputId *id;{  int truncate();  static int first_time = 1;  static long offset;  static char *iname = NULL,                /* input and output file names */         *oname = NULL;  static int num_chan = 1;  static int num_segs;               /* no. update in buffer_len long samples*/  static int nsamp_in_seg;           /* no. samps in an update */  static float time = 0;  int i,j;  float *values = NULL;    Arg args[10];  int n;  long num_rec;  char string[10];  XmString mystring;  if(first_time){    oname = eopen("meter",outfilename,"w",NONE, NONE, &ohd, &osdfile);    iname = eopen("meter", "-","r", FT_FEA, FEA_SD, &ihd, &isdfile);    num_chan = get_fea_siz("samples", ihd, (short *)NULL,(long **)NULL);    write_header( ihd, osdfile );    offset = ftell(osdfile);    nsamp_in_seg = TIMEOUT * (*get_genhd_d("record_freq", ihd));    num_segs = 1;    buffer_len = num_segs * nsamp_in_seg;    if( magic ){      short *zeros, **zeros_ptr;      if( num_chan == 1){	isd_rec = allo_feasd_recs( ihd, SHORT, buffer_len, (char*) NULL, NO);	z_rec = allo_feasd_recs( ihd, SHORT, 1, (char*) NULL, NO);	zeros = (short *) z_rec->data;	for(i=0; i<1; i++) zeros[i] = SHRT_MAX;      }      else{	isd_rec = allo_feasd_recs( ihd, SHORT, buffer_len, (char*) NULL, YES);	z_rec = allo_feasd_recs( ihd, SHORT, 1, (char*) NULL, YES);	zeros_ptr = (short**) z_rec->ptrs;	for(j=0; j<num_chan; j++)	  for(i=0; i<1; i++) zeros_ptr[i][j] = SHRT_MAX;      }    }    else{      if( num_chan == 1)	isd_rec = allo_feasd_recs( ihd, SHORT, buffer_len, (char*) NULL, NO);      else	isd_rec = allo_feasd_recs( ihd, SHORT, buffer_len, (char*) NULL, YES);    }    first_time = 0;  }  if((num_rec = get_feasd_recs( isd_rec, 0L, buffer_len, ihd, isdfile )) == 0){    fclose(osdfile);    fclose(isdfile);    exit(0);  }  if(DC_OFFSET == True)    (void) do_dc_offset( (short *) isd_rec->data,			(short **) isd_rec->ptrs , num_rec, num_chan);  if(METER == True || METER_READOUT == True)    values =  (float *) find_max( (short *) isd_rec->data,				 (short **) isd_rec->ptrs , num_rec, num_chan);  if(time >= INTERVAL && ((METER==True) || METER_READOUT==True)){    for( i = 0; i< num_chan; i++){      if( values[i] >= SHRT_MAX )	fprintf(stderr,"ERROR: clipping occured.\n");      values[i] =  20. * log10( values[i] + 1.01);      if(METER == True){	n = 0;	XtSetArg( args[n], XtNvalues, values+i); n++;	XtSetValues( Bar[i], args, n);      }      if(METER_READOUT == True){	n = 0;	sprintf(string, "%3.0f", values[i]);	mystring = XmStringCreateLtoR(string, "chset1");	XtSetArg( args[n], XmNlabelString, mystring); n++;	XtSetValues( dbval_label[i], args, n);	XmStringFree(mystring);      }    }    time = 0;  }  else    time += TIMEOUT;  if( PAUSE == False){    if( RESTART == False && START == True){   /* append */      put_feasd_recs( isd_rec, 0L, buffer_len, ihd, osdfile);    }    if( RESTART == True){      /* move the file pointer to beginning */      fseek( osdfile, offset, 0);      if(0> truncate( oname, offset)){	fprintf(stderr,"ERROR: Can't do ftruncate() for Re-start\n");	exit(1);      }      put_feasd_recs( isd_rec, 0L, buffer_len, ihd, osdfile);      RESTART = False;    }  }}  static void do_dc_offset( array, array2, size_array, chan_size)     short *array;     short **array2;     int size_array;     int chan_size;{  static long sum[] = {0,0,0,0};  /* sum1, cnt1, sum2, cnt2 */  static short time_dc_cnt = 0;  static int dc_offset[2];  register int i;  if(chan_size == 1){    register short *ptr = array;    register long *sum_ptr = sum;    register int *dc_ptr = dc_offset;    if( time_dc_cnt++ == TIME_DC ){      dc_ptr[0] = sum_ptr[0]/sum_ptr[1];      time_dc_cnt = 0;      sum_ptr[0] = 0; sum_ptr[1] = 0;    }    for(i = 0; i< size_array; i++){      sum_ptr[0] += ptr[i];      sum_ptr[1]++;      ptr[i] = ptr[i] - dc_ptr[0];    }  }  else {    register short **ptr2 = array2;    register long *sum_ptr = sum;    register int *dc_ptr = dc_offset;    if( time_dc_cnt++ == TIME_DC ){      dc_ptr[0] =  sum_ptr[0]/sum_ptr[1];      dc_ptr[1] = sum_ptr[2]/sum_ptr[3];      time_dc_cnt = 0;      sum_ptr[0] = 0; sum_ptr[2] = 0;      sum_ptr[1] = 0; sum_ptr[3] = 0;    }        for(i = 0; i< size_array; i++){      sum_ptr[0] += ptr2[i][0];      sum_ptr[2] += ptr2[i][1];      sum_ptr[1]++;      sum_ptr[3]++;            ptr2[i][0] = ptr2[i][0] - dc_ptr[0];      ptr2[i][1] = ptr2[i][1] - dc_ptr[1];    }  }}static float *find_max( array, array2, size_array, chan_size)     short *array;     short **array2;     int size_array;     int chan_size;{  register int i;  float max[2];  if(chan_size == 1){    register short *ptr;    ptr = array;    max[0] = -9999;    for(i = 0; i< size_array; i+=3){      if( ptr[i] <= 0) if( max[0] < -ptr[i]) max[0] = -ptr[i];      if( ptr[i] > 0) if( max[0] < ptr[i]) max[0] = ptr[i];    }    return(max);  }  else {    register short **ptr2;    ptr2 = array2;    max[0] = max[1] = -9999;    for(i = 0; i< size_array; i+=3){      if( ptr2[i][0] <= 0) if( max[0] < -ptr2[i][0]) max[0] = -ptr2[i][0];      if( ptr2[i][0] > 0) if( max[0] < ptr2[i][0]) max[0] = ptr2[i][0];      if( ptr2[i][1] <= 0) if( max[1] < -ptr2[i][1]) max[1] = -ptr2[i][1];      if( ptr2[i][1] > 0) if( max[1] < ptr2[i][1]) max[1] = ptr2[i][1];    }    return(max);  }}static void start_record(w, client_data, call_data)     Widget w;     caddr_t client_data;     XmAnyCallbackStruct *call_data;{  Arg args[10];  int n;  XmString mystring;  static firsttime = 1;  if(firsttime == 1){    START = True;    RESTART = False;    firsttime = 0;  }  else    RESTART = True;  if( RESTART == True) PAUSE = False;  if( RESTART == False && START == True) PAUSE = False;  mystring = XmStringCreateLtoR(MRestart, "chset1");  n = 0;  XtSetArg( args[n], XmNlabelString, mystring); n++;  XtSetValues( startB, args, n);  XmStringFree(mystring);  mystring = XmStringCreateLtoR(MRecording, "chset2");  n = 0;  XtSetArg( args[n], XmNfontList, myfontlist2); n++;  XtSetArg( args[n], XmNlabelString, mystring); n++;  XtSetValues( rc_label, args, n);  XmStringFree(mystring);  n = 0;  mystring = XmStringCreateLtoR(MPause, "chset1");  XtSetArg( args[n], XmNlabelString, mystring ); n++;  XtSetValues( pauseB, args, n);  XmStringFree(mystring);  n = 0;  XtSetArg( args[n], XmNsensitive, True); n++;  XtSetValues( pauseB, args, n);}static void pause_resume(w, client_data, call_data)     Widget w;     caddr_t client_data;     XmAnyCallbackStruct *call_data;{  Arg args[10];  int n;  XmString mystring;  PAUSE = (PAUSE == True) ? False : True;  if( PAUSE == True ){    if(magic) put_feasd_recs( z_rec, 0L, 1, ihd, osdfile);    n = 0;    mystring = XmStringCreateLtoR(MResume, "chset1");    XtSetArg( args[n], XmNlabelString, mystring ); n++;    XtSetValues( pauseB, args, n);    XmStringFree(mystring);    mystring = XmStringCreateLtoR(MNot_Recording, "chset2");    n = 0;    XtSetArg( args[n], XmNfontList, myfontlist2); n++;    XtSetArg( args[n], XmNlabelString, mystring); n++;    XtSetValues( rc_label, args, n);    XmStringFree(mystring);  }  else{    n = 0;    mystring = XmStringCreateLtoR(MPause, "chset1");    XtSetArg( args[n], XmNlabelString, mystring); n++;    XtSetValues( pauseB, args, n);    XmStringFree(mystring);    mystring = XmStringCreateLtoR(MRecording, "chset2");    n = 0;    XtSetArg( args[n], XmNfontList, myfontlist2); n++;    XtSetArg( args[n], XmNlabelString, mystring); n++;    XtSetValues( rc_label, args, n);    XmStringFree(mystring);  }}static void quit(w, client_data, call_data)     Widget w;     caddr_t client_data;     XmAnyCallbackStruct *call_data;{/*  if( RESTART == False && START == True){    put_feasd_recs( z_rec, 0L, buffer_len, ihd, osdfile);  }*/  XtCloseDisplay(XtDisplay(w));  exit(0);}static void dc_offset_onoff(w, client_data, call_data)     Widget w;     caddr_t client_data;     XmAnyCallbackStruct *call_data;{  DC_OFFSET = ((XmToggleButtonCallbackStruct *) call_data)->set;  DC_OFFSET = (DC_OFFSET == True)? False: True;}static void meter_onoff(w, client_data, call_data)     Widget w;     caddr_t client_data;     XmAnyCallbackStruct *call_data;{  METER = ((XmToggleButtonCallbackStruct *) call_data)->set;  METER = (METER == True)? False: True;}static void dc_read_onoff(w, client_data, call_data)     Widget w;     caddr_t client_data;     XmAnyCallbackStruct *call_data;{  METER_READOUT = ((XmToggleButtonCallbackStruct *) call_data)->set;  METER_READOUT = (METER_READOUT == True)? False: True;}

⌨️ 快捷键说明

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