From: fujishita t. <fjs...@us...> - 2017-06-19 02:03:24
|
Update of /cvsroot/sp-tk/SPTK/src/bin/csm2lpc In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv3087 Added Files: csm2lpc.c _csm2lpc.c Makefile.am .cvsignore Log Message: add csm2lpc command --- NEW FILE: .cvsignore --- Makefile csm2lpc Makefile.in .deps --- NEW FILE: _csm2lpc.c --- /* ----------------------------------------------------------------- */ /* The Speech Signal Processing Toolkit (SPTK) */ /* developed by SPTK Working Group */ /* http://sp-tk.sourceforge.net/ */ /* ----------------------------------------------------------------- */ /* */ /* Copyright (c) 1984-2007 Tokyo Institute of Technology */ /* Interdisciplinary Graduate School of */ /* Science and Engineering */ /* */ /* 1996-2017 Nagoya Institute of Technology */ /* Department of Computer Science */ /* */ /* All rights reserved. */ /* */ /* Redistribution and use in source and binary forms, with or */ /* without modification, are permitted provided that the following */ /* conditions are met: */ /* */ /* - Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* - Redistributions in binary form must reproduce the above */ /* copyright notice, this list of conditions and the following */ /* disclaimer in the documentation and/or other materials provided */ /* with the distribution. */ /* - Neither the name of the SPTK working group nor the names of its */ /* contributors may be used to endorse or promote products derived */ /* from this software without specific prior written permission. */ /* */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ /* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ /* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ /* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ /* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS */ /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */ /* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */ /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */ /* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, */ /* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY */ /* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ /* POSSIBILITY OF SUCH DAMAGE. */ /* ----------------------------------------------------------------- */ /*************************************************************** $Id: _csm2lpc.c,v 1.1 2017/06/19 02:03:22 fjst15124 Exp $ Transformation CSM to LPC void csm2lpc(csm, a, m, f) double *csm : Composite Sinusoidal Modeling double *a : LP coefficients int m : order of LPC double f : singular check (eps(if -1., 0.0 is assumed)) ****************************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> #if defined(WIN32) #include "SPTK.h" #else #include <SPTK.h> #endif void csm2lpc(double *csm, double *a, const int m, const double f) { int i, l, n; double *frequencies, *intensities; static double *v = NULL; static int size; n = (m + 1) / 2; if (v == NULL) { v = dgetmem(m + 1); size = m; } if (m > size) { free(v); v = dgetmem(m + 1); size = m; } frequencies = csm; intensities = csm + n; for (l = 0; l <= m; l++) { v[l] = 0.0; for (i = 0; i < n; i++) { v[l] += intensities[i] * cos(l * frequencies[i]); } } levdur(v, a, m, f); return; } --- NEW FILE: Makefile.am --- AM_CPPFLAGS = -I @top_srcdir@/include bin_PROGRAMS = csm2lpc csm2lpc_SOURCES = csm2lpc.c _csm2lpc.c csm2lpc_LDADD = @top_builddir@/lib/libSPTK.a --- NEW FILE: csm2lpc.c --- /* ----------------------------------------------------------------- */ /* The Speech Signal Processing Toolkit (SPTK) */ /* developed by SPTK Working Group */ /* http://sp-tk.sourceforge.net/ */ /* ----------------------------------------------------------------- */ /* */ /* Copyright (c) 1984-2007 Tokyo Institute of Technology */ /* Interdisciplinary Graduate School of */ /* Science and Engineering */ /* */ /* 1996-2017 Nagoya Institute of Technology */ /* Department of Computer Science */ /* */ /* All rights reserved. */ /* */ /* Redistribution and use in source and binary forms, with or */ /* without modification, are permitted provided that the following */ /* conditions are met: */ /* */ /* - Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* - Redistributions in binary form must reproduce the above */ /* copyright notice, this list of conditions and the following */ /* disclaimer in the documentation and/or other materials provided */ /* with the distribution. */ /* - Neither the name of the SPTK working group nor the names of its */ /* contributors may be used to endorse or promote products derived */ /* from this software without specific prior written permission. */ /* */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ /* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ /* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ /* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ /* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS */ /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */ /* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */ /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */ /* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, */ /* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY */ /* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ /* POSSIBILITY OF SUCH DAMAGE. */ /* ----------------------------------------------------------------- */ /************************************************************************ * * * Transform CSM to LPC * * * * 2013.12 T.Aritake * * * * usage: * * csm2lpc [ options ] [ infile ] > stdout * * options: * * -m M : order of LPC [25] * * -f f : mimimum value of the determinant * * of the normal matrix [0.0] * * infile: * * Composite Sinusoidal Modeling * * , w(1), ..., w((M+1)/2), m(1), ..., m((M+1)/2), * * stdout: * * LP Coefficients * * , K, a(1), ..., a(M), * * require: * * csm2lpc(), levdur() * * * ************************************************************************/ static char *rcs_id = "$Id: csm2lpc.c,v 1.1 2017/06/19 02:03:22 fjst15124 Exp $"; /* Standard C Libraries */ #include <stdio.h> #include <stdlib.h> #ifdef HAVE_STRING_H #include <string.h> #else #include <strings.h> #ifndef HAVE_STRRCHR #define strrchr rindex #endif #endif #if defined(WIN32) #include "SPTK.h" #else #include <SPTK.h> #endif /* Default Values */ #define ORDER 25 #define MINDET 0.0 /* Command Name */ char *cmnd; void usage(int status) { fprintf(stderr, "\n"); fprintf(stderr, " %s - transform CSM to LPC\n", cmnd); fprintf(stderr, "\n"); fprintf(stderr, " usage:\n"); fprintf(stderr, " %s [ options ] [ infile ] > stdout\n", cmnd); fprintf(stderr, " options:\n"); fprintf(stderr, " -m m : order of LPC [%d]\n", ORDER); fprintf(stderr, " -f f : mimimum value of the determinant [%g]\n", MINDET); fprintf(stderr, " of the normal matrix\n"); fprintf(stderr, " -h : print this message\n"); fprintf(stderr, " infile:\n"); fprintf(stderr, " CSM (%s) [stdin]\n", FORMAT); fprintf(stderr, " stdout:\n"); fprintf(stderr, " LP coefficients (%s)\n", FORMAT); #ifdef PACKAGE_VERSION fprintf(stderr, "\n"); fprintf(stderr, " SPTK: version %s\n", PACKAGE_VERSION); fprintf(stderr, " CVS Info: %s", rcs_id); #endif fprintf(stderr, "\n"); exit(status); } int main(int argc, char **argv) { int m = ORDER; char *filename; FILE *fp = stdin; double f = MINDET; double *csm, *a; if ((cmnd = strrchr(argv[0], '/')) == NULL) cmnd = argv[0]; else cmnd++; while (--argc) if (**++argv == '-') { switch (*(*argv + 1)) { case 'm': m = atoi(*++argv); --argc; break; case 'f': f = atof(*++argv); --argc; break; case 'h': usage(0); default: fprintf(stderr, "%s : Invalid option '%c'!\n", cmnd, *(*argv + 1)); usage(1); } } else fp = getfp(*argv, "rb"); if (m % 2 == 0) { fprintf(stderr, "%s : Order of LPC must be odd!\n", cmnd); return 1; } csm = dgetmem(m + 1 + m + 1); a = csm + m + 1; while (freadf(csm, sizeof(*csm), m + 1, fp) == m + 1) { csm2lpc(csm, a, m, f); fwritef(a, sizeof(*a), m + 1, stdout); } return 0; } |