diff -Naur festival.orig/src/modules/clustergen/HTS_vocoder_me.cc festival/src/modules/clustergen/HTS_vocoder_me.cc --- festival.orig/src/modules/clustergen/HTS_vocoder_me.cc 2013-02-18 16:10:50.000000000 +0100 +++ festival/src/modules/clustergen/HTS_vocoder_me.cc 2015-07-28 18:25:52.846670680 +0200 @@ -90,8 +90,9 @@ HTS_VOCODER_ME_C_START; +#include #include "./HTS_vocoder_me.h" -#include "../hts_engine/HTS_vocoder.c" +#include "../hts_engine/HTS_vocoder.h" /* HTS_Vocoder_initialize_me: initialize vocoder (mixed excitation) */ void HTS_Vocoder_initialize_me(HTS_Vocoder_ME * v_me, diff -Naur festival.orig/src/modules/hts_engine/HTS_vocoder.c festival/src/modules/hts_engine/HTS_vocoder.c --- festival.orig/src/modules/hts_engine/HTS_vocoder.c 2013-02-18 16:10:52.000000000 +0100 +++ festival/src/modules/hts_engine/HTS_vocoder.c 2015-07-28 18:26:22.680173336 +0200 @@ -57,10 +57,12 @@ #include /* for sqrt(),log(),exp(),pow(),cos() */ +//#include "HTS_vocoder.h" + /* hts_engine libraries */ #include "HTS_hidden.h" -static const double HTS_pade[21] = { +const double HTS_pade[21] = { 1.00000000000, 1.00000000000, 0.00000000000, @@ -85,7 +87,7 @@ }; /* HTS_movem: move memory */ -static void HTS_movem(double *a, double *b, const int nitem) +void HTS_movem(double *a, double *b, const int nitem) { long i = (long) nitem; @@ -101,7 +103,7 @@ } /* HTS_mlsafir: sub functions for MLSA filter */ -static double HTS_mlsafir(const double x, const double *b, const int m, const double a, const double aa, double *d) +double HTS_mlsafir(const double x, const double *b, const int m, const double a, const double aa, double *d) { double y = 0.0; int i; @@ -122,7 +124,7 @@ } /* HTS_mlsadf1: sub functions for MLSA filter */ -static double HTS_mlsadf1(double x, const double *b, const int m, const double a, const double aa, const int pd, double *d, const double *ppade) +double HTS_mlsadf1(double x, const double *b, const int m, const double a, const double aa, const int pd, double *d, const double *ppade) { double v, out = 0.0, *pt; int i; @@ -144,7 +146,7 @@ } /* HTS_mlsadf2: sub functions for MLSA filter */ -static double HTS_mlsadf2(double x, const double *b, const int m, const double a, const double aa, const int pd, double *d, const double *ppade) +double HTS_mlsadf2(double x, const double *b, const int m, const double a, const double aa, const int pd, double *d, const double *ppade) { double v, out = 0.0, *pt; int i; @@ -166,7 +168,7 @@ } /* HTS_mlsadf: functions for MLSA filter */ -static double HTS_mlsadf(double x, const double *b, const int m, const double a, const int pd, double *d) +double HTS_mlsadf(double x, const double *b, const int m, const double a, const int pd, double *d) { const double aa = 1 - a * a; const double *ppade = &(HTS_pade[pd * (pd + 1) / 2]); @@ -178,7 +180,7 @@ } /* HTS_rnd: functions for random noise generation */ -static double HTS_rnd(unsigned long *next) +double HTS_rnd(unsigned long *next) { double r; @@ -189,7 +191,7 @@ } /* HTS_nrandom: functions for gaussian random noise generation */ -static double HTS_nrandom(HTS_Vocoder * v) +double HTS_nrandom(HTS_Vocoder * v) { if (v->sw == 0) { v->sw = 1; @@ -207,7 +209,7 @@ } /* HTS_mceq: function for M-sequence random noise generation */ -static int HTS_mseq(HTS_Vocoder * v) +int HTS_mseq(HTS_Vocoder * v) { int x0, x28; @@ -229,7 +231,7 @@ } /* HTS_mc2b: transform mel-cepstrum to MLSA digital fillter coefficients */ -static void HTS_mc2b(double *mc, double *b, int m, const double a) +void HTS_mc2b(double *mc, double *b, int m, const double a) { if (mc != b) { if (a != 0.0) { @@ -244,7 +246,7 @@ } /* HTS_b2bc: transform MLSA digital filter coefficients to mel-cepstrum */ -static void HTS_b2mc(const double *b, double *mc, int m, const double a) +void HTS_b2mc(const double *b, double *mc, int m, const double a) { double d, o; @@ -257,7 +259,7 @@ } /* HTS_freqt: frequency transformation */ -static void HTS_freqt(HTS_Vocoder * v, const double *c1, const int m1, double *c2, const int m2, const double a) +void HTS_freqt(HTS_Vocoder * v, const double *c1, const int m1, double *c2, const int m2, const double a) { int i, j; const double b = 1 - a * a; @@ -287,7 +289,7 @@ } /* HTS_c2ir: The minimum phase impulse response is evaluated from the minimum phase cepstrum */ -static void HTS_c2ir(const double *c, const int nc, double *h, const int leng) +void HTS_c2ir(const double *c, const int nc, double *h, const int leng) { int n, k, upl; double d; @@ -303,7 +305,7 @@ } /* HTS_b2en: calculate frame energy */ -static double HTS_b2en(HTS_Vocoder * v, const double *b, const int m, const double a) +double HTS_b2en(HTS_Vocoder * v, const double *b, const int m, const double a) { int i; double en = 0.0; @@ -330,7 +332,7 @@ } /* HTS_ignorm: inverse gain normalization */ -static void HTS_ignorm(double *c1, double *c2, int m, const double g) +void HTS_ignorm(double *c1, double *c2, int m, const double g) { double k; if (g != 0.0) { @@ -345,7 +347,7 @@ } /* HTS_gnorm: gain normalization */ -static void HTS_gnorm(double *c1, double *c2, int m, const double g) +void HTS_gnorm(double *c1, double *c2, int m, const double g) { double k; if (g != 0.0) { @@ -360,7 +362,7 @@ } /* HTS_lsp2lpc: transform LSP to LPC */ -static void HTS_lsp2lpc(HTS_Vocoder * v, double *lsp, double *a, const int m) +void HTS_lsp2lpc(HTS_Vocoder * v, double *lsp, double *a, const int m) { int i, k, mh1, mh2, flag_odd; double xx, xf, xff; @@ -451,7 +453,7 @@ } /* HTS_gc2gc: generalized cepstral transformation */ -static void HTS_gc2gc(HTS_Vocoder * v, double *c1, const int m1, const double g1, double *c2, const int m2, const double g2) +void HTS_gc2gc(HTS_Vocoder * v, double *c1, const int m1, const double g1, double *c2, const int m2, const double g2) { int i, min, k, mk; double ss1, ss2, cc; @@ -484,7 +486,7 @@ } /* HTS_mgc2mgc: frequency and generalized cepstral transformation */ -static void HTS_mgc2mgc(HTS_Vocoder * v, double *c1, const int m1, const double a1, const double g1, double *c2, const int m2, const double a2, const double g2) +void HTS_mgc2mgc(HTS_Vocoder * v, double *c1, const int m1, const double a1, const double g1, double *c2, const int m2, const double a2, const double g2) { double a; @@ -502,7 +504,7 @@ } /* HTS_lsp2mgc: transform LSP to MGC */ -static void HTS_lsp2mgc(HTS_Vocoder * v, double *lsp, double *mgc, const int m, const double alpha) +void HTS_lsp2mgc(HTS_Vocoder * v, double *lsp, double *mgc, const int m, const double alpha) { int i; /* lsp2lpc */ @@ -531,7 +533,7 @@ } /* HTS_mglsadff: sub functions for MGLSA filter */ -static double HTS_mglsadff(double x, const double *b, const int m, const double a, double *d) +double HTS_mglsadff(double x, const double *b, const int m, const double a, double *d) { int i; @@ -550,7 +552,7 @@ } /* HTS_mglsadf: sub functions for MGLSA filter */ -static double HTS_mglsadf(double x, const double *b, const int m, const double a, const int n, double *d) +double HTS_mglsadf(double x, const double *b, const int m, const double a, const int n, double *d) { int i; @@ -561,7 +563,7 @@ } /* THS_check_lsp_stability: check LSP stability */ -static void HTS_check_lsp_stability(double *lsp, size_t m) +void HTS_check_lsp_stability(double *lsp, size_t m) { size_t i, j; double tmp; @@ -595,7 +597,7 @@ } /* HTS_lsp2en: calculate frame energy */ -static double HTS_lsp2en(HTS_Vocoder * v, double *lsp, size_t m, double alpha) +double HTS_lsp2en(HTS_Vocoder * v, double *lsp, size_t m, double alpha) { size_t i; double en = 0.0; @@ -632,7 +634,7 @@ } /* HTS_white_noise: return white noise */ -static double HTS_white_noise(HTS_Vocoder * v) +double HTS_white_noise(HTS_Vocoder * v) { if (v->gauss) return (double) HTS_nrandom(v); @@ -641,7 +643,7 @@ } /* HTS_ping_pulse: ping pulse using low-pass filter */ -static void HTS_ping_pulse(HTS_Vocoder * v, const int ping_place, const double p, const int nlpf, const double *lpf) +void HTS_ping_pulse(HTS_Vocoder * v, const int ping_place, const double p, const int nlpf, const double *lpf) { int i, j; const double power = sqrt(p); @@ -652,7 +654,7 @@ } /* HTS_ping_noise: ping noise using low-pass filter */ -static void HTS_ping_noise(HTS_Vocoder * v, const int ping_place, const int nlpf, const double *lpf) +void HTS_ping_noise(HTS_Vocoder * v, const int ping_place, const int nlpf, const double *lpf) { int i, j; const double power = HTS_white_noise(v); @@ -667,7 +669,7 @@ } /* HTS_Vocoder_initialize_excitation: initialize excitation */ -static void HTS_Vocoder_initialize_excitation(HTS_Vocoder * v, size_t nlpf) +void HTS_Vocoder_initialize_excitation(HTS_Vocoder * v, size_t nlpf) { size_t i; @@ -684,7 +686,7 @@ } /* HTS_Vocoder_start_excitation: start excitation of each frame */ -static void HTS_Vocoder_start_excitation(HTS_Vocoder * v, const double pitch, const int nlpf) +void HTS_Vocoder_start_excitation(HTS_Vocoder * v, const double pitch, const int nlpf) { if (v->p1 != 0.0 && pitch != 0.0) v->inc = (pitch - v->p1) * IPERIOD / v->fprd; @@ -699,7 +701,7 @@ } /* HTS_Vocoder_get_excitation: get excitation of each sample */ -static double HTS_Vocoder_get_excitation(HTS_Vocoder * v, const int fprd_index, const int iprd_index, const int nlpf, const double *lpf) +double HTS_Vocoder_get_excitation(HTS_Vocoder * v, const int fprd_index, const int iprd_index, const int nlpf, const double *lpf) { double x; int i, j; @@ -755,7 +757,7 @@ } /* HTS_Vocoder_end_excitation: end excitation of each frame */ -static void HTS_Vocoder_end_excitation(HTS_Vocoder * v, const int nlpf) +void HTS_Vocoder_end_excitation(HTS_Vocoder * v, const int nlpf) { int i; @@ -771,7 +773,7 @@ } /* HTS_Vocoder_postfilter_mcp: postfilter for MCP */ -static void HTS_Vocoder_postfilter_mcp(HTS_Vocoder * v, double *mcp, const int m, double alpha, double beta) +void HTS_Vocoder_postfilter_mcp(HTS_Vocoder * v, double *mcp, const int m, double alpha, double beta) { double e1, e2; int k; @@ -797,7 +799,7 @@ } /* HTS_Vocoder_postfilter_lsp: postfilter for LSP */ -static void HTS_Vocoder_postfilter_lsp(HTS_Vocoder * v, double *lsp, size_t m, double alpha, double beta) +void HTS_Vocoder_postfilter_lsp(HTS_Vocoder * v, double *lsp, size_t m, double alpha, double beta) { double e1, e2; size_t i; diff -Naur festival.orig/src/modules/hts_engine/HTS_vocoder.h festival/src/modules/hts_engine/HTS_vocoder.h --- festival.orig/src/modules/hts_engine/HTS_vocoder.h 1970-01-01 01:00:00.000000000 +0100 +++ festival/src/modules/hts_engine/HTS_vocoder.h 2015-07-28 18:21:15.431802892 +0200 @@ -0,0 +1,42 @@ +#ifndef HTS_VOCODER_H +#define HTS_VOCODER_H + +/* hts_engine libraries */ +#include "HTS_hidden.h" + +void HTS_Vocoder_clear(HTS_Vocoder *v); +void HTS_Vocoder_synthesize(HTS_Vocoder *v,size_t m,double lf0,double *spectrum,size_t nlpf,double *lpf,double alpha,double beta,double volume,double *rawdata,HTS_Audio *audio); +void HTS_Vocoder_initialize(HTS_Vocoder *v,size_t m,size_t stage,HTS_Boolean use_log_gain,size_t rate,size_t fperiod); +void HTS_Vocoder_postfilter_lsp(HTS_Vocoder *v,double *lsp,size_t m,double alpha,double beta); +void HTS_Vocoder_postfilter_mcp(HTS_Vocoder *v,double *mcp,const int m,double alpha,double beta); +void HTS_Vocoder_end_excitation(HTS_Vocoder *v,const int nlpf); +double HTS_Vocoder_get_excitation(HTS_Vocoder *v,const int fprd_index,const int iprd_index,const int nlpf,const double *lpf); +void HTS_Vocoder_start_excitation(HTS_Vocoder *v,const double pitch,const int nlpf); +void HTS_Vocoder_initialize_excitation(HTS_Vocoder *v,size_t nlpf); +void HTS_ping_noise(HTS_Vocoder *v,const int ping_place,const int nlpf,const double *lpf); +void HTS_ping_pulse(HTS_Vocoder *v,const int ping_place,const double p,const int nlpf,const double *lpf); +double HTS_white_noise(HTS_Vocoder *v); +double HTS_lsp2en(HTS_Vocoder *v,double *lsp,size_t m,double alpha); +void HTS_check_lsp_stability(double *lsp,size_t m); +double HTS_mglsadf(double x,const double *b,const int m,const double a,const int n,double *d); +double HTS_mglsadff(double x,const double *b,const int m,const double a,double *d); +void HTS_lsp2mgc(HTS_Vocoder *v,double *lsp,double *mgc,const int m,const double alpha); +void HTS_mgc2mgc(HTS_Vocoder *v,double *c1,const int m1,const double a1,const double g1,double *c2,const int m2,const double a2,const double g2); +void HTS_gc2gc(HTS_Vocoder *v,double *c1,const int m1,const double g1,double *c2,const int m2,const double g2); +void HTS_lsp2lpc(HTS_Vocoder *v,double *lsp,double *a,const int m); +void HTS_gnorm(double *c1,double *c2,int m,const double g); +void HTS_ignorm(double *c1,double *c2,int m,const double g); +double HTS_b2en(HTS_Vocoder *v,const double *b,const int m,const double a); +void HTS_c2ir(const double *c,const int nc,double *h,const int leng); +void HTS_freqt(HTS_Vocoder *v,const double *c1,const int m1,double *c2,const int m2,const double a); +void HTS_b2mc(const double *b,double *mc,int m,const double a); +void HTS_mc2b(double *mc,double *b,int m,const double a); +int HTS_mseq(HTS_Vocoder *v); +double HTS_nrandom(HTS_Vocoder *v); +double HTS_rnd(unsigned long *next); +double HTS_mlsadf(double x,const double *b,const int m,const double a,const int pd,double *d); +double HTS_mlsadf2(double x,const double *b,const int m,const double a,const double aa,const int pd,double *d,const double *ppade); +double HTS_mlsadf1(double x,const double *b,const int m,const double a,const double aa,const int pd,double *d,const double *ppade); +double HTS_mlsafir(const double x,const double *b,const int m,const double a,const double aa,double *d); +void HTS_movem(double *a,double *b,const int nitem); +#endif