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

📄 copheader.c

📁 speech signal process tools
💻 C
字号:
/* * This material contains unpublished, proprietary software of  * Entropic Research Laboratory, Inc. Any reproduction, distribution,  * or publication of this work must be authorized in writing by Entropic  * Research Laboratory, Inc., and must bear the notice:  * *    "Copyright (c) 1987-1990  AT&T, Inc. *    "Copyright (c) 1986-1990  Entropic Speech, Inc.  *    "Copyright (c) 1990-1997  Entropic Research Laboratory, Inc.  *                   All rights reserved" * * The copyright notice above does not evidence any actual or intended  * publication of this source code.      * * Written by:  David Talkin * Checked by: * Revised by:  David Talkin, Rod Johnson, John Shore, Alan Parker * * Brief descripton:  Create a header for headerless files. */static char *sccs_id = "@(#)copheader.c	1.17	1/18/97	ATT/ESI/ERL";#include <Objects.h>#include <esps/esps.h> #include <sys/param.h>char default_header[MAXPATHLEN] = "def_head.feasd";int valid_header; /*ugly global; used to indicate case where header is ok 		    but couldn't read data for some reason (e.g., 		    requested segment not in file */extern int  w_verbose;extern int  debug_level;extern int  size_rec();Header *header_from_file(name)     char *name;{  Header *h = NULL, *get_header();  int fd;  if((!name) || (! *name)) name = default_header;    if((fd = open(name, O_RDONLY)) >= 0) {    h = get_header(fd);    close(fd);  } else    printf("Can't open file %s in header_from_file()\n",name);  return(h);}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/Signal *get_any_signal(name,start,page_size,access_proc)     char *name;     double start, page_size;     int (*access_proc)();{  Signal *s;  int fd, fdh, size, den, recsize;  Header *h;  void free_signal();  if (debug_level)     (void) fprintf(stderr, "get_any_signal(%s): function entered\n",		   name);    valid_header = 0;  s = get_signal(name,start,page_size,access_proc);      if (s)     return(s);  else if (valid_header)     return(FALSE);    #ifdef DEMO  return FALSE;#endif  if((fd = open(name, O_RDONLY)) >= 0) { /* conclude that header is missing */      /* NOTE that if the header was missing but read_header used        * the DEF HEADER environment variable, then that case would have        * been taken care of in get_signal - thus THE ENVIRONMENT VARIABLE       * OVERRIDES default_header (and the code below is not entered).       */    if (debug_level)       (void) fprintf(stderr, 		     "get_any_signal: missing header, will use default\n");    FIND_WAVES_INPUT(default_header, default_header);    fdh = open(default_header, O_RDONLY);      if (fdh < 0) {      find_esps_file(default_header, "def_head.feasd",		     "$ESPS_BASE/lib/waves/files", NULL);       printf("get_any_signal: no readable default_header\n");      printf("\ttrying %s as last resort\n", default_header);       fdh = open(default_header, O_RDONLY);      }       if(fdh >= 0) {      if((h = get_header(fdh))) {	if (debug_level) 	  (void) fprintf(stderr, "get_any_signal: got default header\n");	if (w_verbose) 	  (void) fprintf(stderr, "Headerless input file; using header %s\n", 			 default_header);	if(h->strm)	  fclose(h->strm);	/* won't be needing this again! */	h->strm = NULL;	close(fdh);	if((size = lseek(fd,0,2)) > 0) {	  lseek(fd,0,0);	  if((s = new_signal(name,fd,h,NULL,0,0.0,0))) {	    s->bytes_skip = 0;	/* recall: header is not in file! */	    if(access_proc) s->utils->read_data = access_proc;	    if (s->header->magic == ESPS_MAGIC) {	      if (debug_level) 		(void) fprintf(stderr, "get_any_signal: def header is ESPS\n");	      /* fill in stream pointer */	      s->header->strm = fdopen(fd, "r");	      recsize = size_rec(s->header->esps_hdr);	      if (recsize == -1)	      {		  /* Variable record size (e.g. Esignal Ascii).		   * Can't get the file size without reading the whole		   * file and counting, so use an overestimate		   * and assume that "check_file_size" will supply the		   * right value when we actually reach the end of file.		   */		  s->file_size = (s->dim > 1) ? size/s->dim : size;		  /* Assumes each element is at least one byte. */	      }	      else		s->file_size = size/recsize;	      if (debug_level > 1) 		(void) fprintf(stderr, 		     "get_any_signal: setting file_size to %d records\n", 		      s->file_size); 	      if(s->utils->read_data(s,start,page_size)) {		add_comment(s->header->esps_hdr, "Header created by waves+");		return(s);	      } else {		printf("Can't read_data() in get_any_signal(%s)\n",name);		free_signal(s);		return(NULL);	      }	    }	    else { /*sig or otherwise*/		if(!(s->type & SIG_ASCII)) {		  switch(s->type & VECTOR_SIGNALS) {		  case P_CHARS:		    den =  1; break;		  case P_UCHARS:		    den =  1; break;		  case P_USHORTS:		    den =  sizeof(short); break;		  case P_SHORTS:		    den =  sizeof(short); break;		  case P_INTS:		    den =  sizeof(int); break;		  case P_UINTS:		    den =   sizeof(int); break;		  case P_FLOATS:		    den =   sizeof(float); break;		  case P_DOUBLES:		    den =   sizeof(double); break;		  default:		    printf("Unknown type specified (%x)\n",s->type);		    free_signal(s);		    return(NULL);		  }		  s->file_size = size/den; /*number of records*/		}		else		  /* assume largest possible ascii file */		  s->file_size = size/(s->dim * 2); 		if(s->utils->read_data(s,start,page_size)) {		  head_printf(s->header, "samples", &(s->file_size));		  head_printf(s->header,"remark", "Header created by waves");		  return(s);		} else {		  printf("Can't read_data() in get_any_signal(%s)\n",name);		  free_signal(s);		  return(NULL);		}	    }	  } else	    printf("Can't make new_signal() in get_any_signal()\n");	} else	  printf("Can't seek in file %s in get_any_signal()\n",name);	free(h->header);	free(h);      } else	printf("Can't get_header(%s) in get_any_signal()\n",default_header);      close(fdh);    } else      printf("Can't open(%s) for header in get_any_signal()\n",default_header);    close(fd);  } else    printf("Can't open(%s) in get_any_signal()\n",name);  return(NULL);}

⌨️ 快捷键说明

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