| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /*
- * Copyright (c) 1983-2013 Trevor Wishart and Composers Desktop Project Ltd
- * http://www.trevorwishart.co.uk
- * http://www.composersdesktop.com
- *
- This file is part of the CDP System.
- The CDP System is free software; you can redistribute it
- and/or modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- The CDP System is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with the CDP System; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA
- *
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <sfsys.h>
- #include <string.h>
- /* RWD March 2012 changed sndsize to sndsizeEx */
- /* RWD Oct 2025 these symbols also now used in Windows*/
- #define FFAILED (-1)
- #define FSUCCEEDED (0)
- static int readfhead(int ifd);
- const char* cdp_version = "7.1.0";
- int main(int argc, char *argv[])
- {
- int ifd;
- FILE *fp;
- int specenvcnt, k, len;
- char *filename, out[64], *p, *q;
- float *buf;
- if(argc==2 && (strcmp(argv[1],"--version") == 0)) {
- fprintf(stdout,"%s\n",cdp_version);
- fflush(stdout);
- return 0;
- }
- if(argc!=2) {
- fprintf(stdout,"ERROR: Insufficient params:: vuform formantfile.\n");
- fflush(stdout);
- return(FFAILED);
- }
- if((ifd = sndopenEx(argv[1],0,CDP_OPEN_RDONLY)) < 0) {
- fprintf(stdout,"ERROR: Failure to open file %s for input.\n",argv[1]);
- fflush(stdout);
- return(FFAILED);
- }
- len = strlen(argv[1]);
- if((filename = (char *)malloc((len+1) * sizeof(char)))==NULL) {
- fprintf(stdout,"ERROR: Failure to allocate memory 1.\n");
- fflush(stdout);
- return(FFAILED);
- }
- strcpy(filename,argv[1]);
- p = filename;
- q = filename + len;
- while(p < q) {
- if(*p == '.')
- break;
- p++;
- }
- p--;
- *p++ = '1';
- *p++ = '.';
- *p++ = 't';
- *p++ = 'x';
- *p++ = 't';
- k = sndsizeEx(ifd);
- if(k <= 0) {
- fprintf(stdout,"ERROR: No data in file\n");
- fflush(stdout);
- return(FFAILED);
- }
- if((specenvcnt = readfhead(ifd)) < 0)
- return(FFAILED);
- specenvcnt *= 3;
- if(k < specenvcnt) {
- fprintf(stdout,"ERROR: Too little data in file\n");
- fflush(stdout);
- return(FFAILED);
- }
- if((buf = (float *)malloc(specenvcnt * sizeof(float)))==NULL) {
- fprintf(stdout,"ERROR: Failure to allocate memory 2.\n");
- fflush(stdout);
- return(FFAILED);
- }
- if(fgetfbufEx(buf,specenvcnt,ifd,0) < 0) {
- fprintf(stdout,"ERROR: Can't read samples from file.\n");
- fflush(stdout);
- return(FFAILED);
- }
- sndcloseEx(ifd);
- if((fp = fopen(filename,"w"))==NULL) {
- fprintf(stdout,"ERROR: Can't open outputfile\n");
- fflush(stdout);
- return(FFAILED);
- }
- specenvcnt /= 3;
- sprintf(out,"%d\n",specenvcnt);
- fputs(out,fp);
- for(k = specenvcnt;k < specenvcnt * 3;k++) {
- if(k % specenvcnt == 0)
- fputs("\n",fp);
- sprintf(out,"%.12lf\n",buf[k]);
- fputs(out,fp);
- }
- fclose(fp);
- return(FSUCCEEDED);
- }
- int readfhead(int ifd)
- {
- int isf;
- SFPROPS props = {0};
- if(!snd_headread(ifd,&props)) {
- fprintf(stdout,"ERROR: Failure to read properties\n");
- fflush(stdout);
- return(-1);
- }
- if(sndgetprop(ifd,"is a formant file",(char *) &isf,sizeof(int)) < 0) {
- fprintf(stdout,"ERROR: Not a formant file.\n");
- fflush(stdout);
- return(-1);
- }
- return props.specenvcnt;
- }
|