Alan W Blackfirst commite7e48689 years agoHistory
275 lines · 6.8 KB · C
RawDownload
/*  ---------------------------------------------------------------  *//*      The HMM-Based Speech Synthesis System (HTS): version 1.1b    *//*                        HTS Working Group                          *//*                                                                   *//*                   Department of Computer Science                  *//*                   Nagoya Institute of Technology                  *//*                                and                                *//*    Interdisciplinary Graduate School of Science and Engineering   *//*                   Tokyo Institute of Technology                   *//*                      Copyright (c) 2001-2003                      *//*                        All Rights Reserved.                       *//*                                                                   *//*  Permission is hereby granted, free of charge, to use and         *//*  distribute this software and its documentation without           *//*  restriction, including without limitation the rights to use,     *//*  copy, modify, merge, publish, distribute, sublicense, and/or     *//*  sell copies of this work, and to permit persons to whom this     *//*  work is furnished to do so, subject to the following conditions: *//*                                                                   *//*    1. The code must retain the above copyright notice, this list  *//*       of conditions and the following disclaimer.                 *//*                                                                   *//*    2. Any modifications must be clearly marked as such.           *//*                                                                   */    /*  NAGOYA INSTITUTE OF TECHNOLOGY, TOKYO INSITITUTE OF TECHNOLOGY,  *//*  HTS WORKING GROUP, AND THE CONTRIBUTORS TO THIS WORK DISCLAIM    *//*  ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL       *//*  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   *//*  SHALL NAGOYA INSTITUTE OF TECHNOLOGY, TOKYO INSITITUTE OF        *//*  TECHNOLOGY, HTS WORKING GROUP, NOR THE CONTRIBUTORS BE LIABLE    *//*  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY        *//*  DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,  *//*  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS   *//*  ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR          *//*  PERFORMANCE OF THIS SOFTWARE.                                    *//*                                                                   *//*  ---------------------------------------------------------------  *//*   This is Zen's MLSA filter as ported by Toda to festvox vc        *//*   and back ported into hts/festival so we can do MLSA filtering   *//*   If I took more time I could probably make this use the same as  *//*   as the other code in this directory -- awb@cs.cmu.edu 03JAN06   *//*  ---------------------------------------------------------------  *//*   and then ported into Flite (November 2007 awb@cs.cmu.edu)       */ /*********************************************************************//*                                                                   *//*  vector (etc) code common to mlpg and mlsa                        *//*-------------------------------------------------------------------*/ #include "cst_alloc.h"#include "cst_string.h"#include "cst_math.h"#include "cst_vc.h" /* from vector.cc */ LVECTOR xlvalloc(long length){    LVECTOR x;     length = MAX(length, 0);    x = cst_alloc(struct LVECTOR_STRUCT,1);    x->data = cst_alloc(long,MAX(length, 1));    x->imag = NULL;    x->length = length;     return x;} void xlvfree(LVECTOR x){    if (x != NULL) {	if (x->data != NULL) {	    cst_free(x->data);	}	if (x->imag != NULL) {	    cst_free(x->imag);	}	cst_free(x);    }     return;} DVECTOR xdvalloc(long length){    DVECTOR x;     length = MAX(length, 0);    x = cst_alloc(struct DVECTOR_STRUCT,1);    x->data = cst_alloc(double,MAX(length, 1));    x->imag = NULL;    x->length = length;     return x;} void xdvfree(DVECTOR x){    if (x != NULL) {	if (x->data != NULL) {	    cst_free(x->data);	}	if (x->imag != NULL) {	    cst_free(x->imag);	}	cst_free(x);    }     return;} void dvialloc(DVECTOR x){    if (x->imag != NULL) {	cst_free(x->imag);    }    x->imag = cst_alloc(double,x->length);     return;} DVECTOR xdvcut(DVECTOR x, long offset, long length){    long k;    long pos;    DVECTOR y;        y = xdvalloc(length);    if (x->imag != NULL) {	dvialloc(y);    }     for (k = 0; k < y->length; k++) {	pos = k + offset;	if (pos >= 0 && pos < x->length) {	    y->data[k] = x->data[pos];	    if (y->imag != NULL) {		y->imag[k] = x->imag[pos];	    }	} else {	    y->data[k] = 0.0;	    if (y->imag != NULL) {		y->imag[k] = 0.0;	    }	}    }     return y;} DMATRIX xdmalloc(long row, long col){    DMATRIX matrix;    int i;     matrix = cst_alloc(struct DMATRIX_STRUCT,1);    matrix->data = cst_alloc(double *,row);    for (i=0; i<row; i++)        matrix->data[i] = cst_alloc(double,col);    matrix->imag = NULL;    matrix->row = row;    matrix->col = col;     return matrix;} void xdmfree(DMATRIX matrix){    int i;     if (matrix != NULL) {	if (matrix->data != NULL) {            for (i=0; i<matrix->row; i++)                cst_free(matrix->data[i]);            cst_free(matrix->data);	}	if (matrix->imag != NULL) {            for (i=0; i<matrix->row; i++)                cst_free(matrix->imag[i]);            cst_free(matrix->imag);	}	cst_free(matrix);    }     return;} DVECTOR xdvinit(double j, double incr, double n){    long k;    long num;    DVECTOR x;     if ((incr > 0.0 && j > n) || (incr < 0.0 && j < n)) {	x = xdvnull();	return x;    }    if (incr == 0.0) {	num = (long)n;	if (num <= 0) {	    x = xdvnull();	    return x;	}    } else {	num = LABS((long)((n - j) / incr)) + 1;    }        /* memory allocate */    x = xdvalloc(num);     /* initailize data */    for (k = 0; k < x->length; k++) {	x->data[k] = j + (k * incr);    }     return x;} /* from voperate.cc */double dvmax(DVECTOR x, long *index){    long k;    long ind;    double max;     ind = 0;    max = x->data[ind];    for (k = 1; k < x->length; k++) {	if (max < x->data[k]) {	    ind = k;	    max = x->data[k];	}    }     if (index != NULL) {	*index = ind;    }     return max;} double dvmin(DVECTOR x, long *index){    long k;    long ind;    double min;     ind = 0;    min = x->data[ind];    for (k = 1; k < x->length; k++) {	if (min > x->data[k]) {	    ind = k;	    min = x->data[k];	}    }     if (index != NULL) {	*index = ind;    }     return min;} double dvsum(DVECTOR x){    long k;    double sum;     for (k = 0, sum = 0.0; k < x->length; k++) {	sum += x->data[k];    }     return sum;}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t