370 lines
16 KiB
Diff
370 lines
16 KiB
Diff
diff --git festival.orig/src/modules/clustergen/HTS_vocoder_me.cc festival/src/modules/clustergen/HTS_vocoder_me.cc
|
|
index 038bf53..e7dac19 100644
|
|
--- festival.orig/src/modules/clustergen/HTS_vocoder_me.cc
|
|
+++ festival/src/modules/clustergen/HTS_vocoder_me.cc
|
|
@@ -90,8 +90,9 @@
|
|
|
|
HTS_VOCODER_ME_C_START;
|
|
|
|
+#include <math.h>
|
|
#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 --git festival.orig/src/modules/hts_engine/HTS_vocoder.c festival/src/modules/hts_engine/HTS_vocoder.c
|
|
index 3693584..e33cd82 100644
|
|
--- festival.orig/src/modules/hts_engine/HTS_vocoder.c
|
|
+++ festival/src/modules/hts_engine/HTS_vocoder.c
|
|
@@ -57,10 +57,12 @@ HTS_VOCODER_C_START;
|
|
|
|
#include <math.h> /* 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 @@ static const double HTS_pade[21] = {
|
|
};
|
|
|
|
/* 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 @@ static void HTS_movem(double *a, double *b, const int nitem)
|
|
}
|
|
|
|
/* 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 @@ static double HTS_mlsafir(const double x, const double *b, const int m, const do
|
|
}
|
|
|
|
/* 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 @@ static double HTS_mlsadf1(double x, const double *b, const int m, const double a
|
|
}
|
|
|
|
/* 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 @@ static double HTS_mlsadf2(double x, const double *b, const int m, const double a
|
|
}
|
|
|
|
/* 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 @@ static double HTS_mlsadf(double x, const double *b, const int m, const double a,
|
|
}
|
|
|
|
/* 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 @@ static double HTS_rnd(unsigned long *next)
|
|
}
|
|
|
|
/* 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 @@ static double HTS_nrandom(HTS_Vocoder * v)
|
|
}
|
|
|
|
/* 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 @@ static int HTS_mseq(HTS_Vocoder * v)
|
|
}
|
|
|
|
/* 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 @@ static void HTS_mc2b(double *mc, double *b, int m, const double a)
|
|
}
|
|
|
|
/* 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 @@ static void HTS_b2mc(const double *b, double *mc, int m, const double a)
|
|
}
|
|
|
|
/* 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 @@ static void HTS_freqt(HTS_Vocoder * v, const double *c1, const int m1, double *c
|
|
}
|
|
|
|
/* 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 @@ static void HTS_c2ir(const double *c, const int nc, double *h, const int leng)
|
|
}
|
|
|
|
/* 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 @@ static double HTS_b2en(HTS_Vocoder * v, const double *b, const int m, const doub
|
|
}
|
|
|
|
/* 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 @@ static void HTS_ignorm(double *c1, double *c2, int m, const double g)
|
|
}
|
|
|
|
/* 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 @@ static void HTS_gnorm(double *c1, double *c2, int m, const double g)
|
|
}
|
|
|
|
/* 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 @@ static void HTS_lsp2lpc(HTS_Vocoder * v, double *lsp, double *a, const int m)
|
|
}
|
|
|
|
/* 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 @@ static void HTS_gc2gc(HTS_Vocoder * v, double *c1, const int m1, const double g1
|
|
}
|
|
|
|
/* 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 @@ static void HTS_mgc2mgc(HTS_Vocoder * v, double *c1, const int m1, const double
|
|
}
|
|
|
|
/* 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 @@ static void HTS_lsp2mgc(HTS_Vocoder * v, double *lsp, double *mgc, const int m,
|
|
}
|
|
|
|
/* 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 @@ static double HTS_mglsadff(double x, const double *b, const int m, const double
|
|
}
|
|
|
|
/* 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 @@ static double HTS_mglsadf(double x, const double *b, const int m, const double a
|
|
}
|
|
|
|
/* 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 @@ static void HTS_check_lsp_stability(double *lsp, size_t m)
|
|
}
|
|
|
|
/* 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 @@ static double HTS_lsp2en(HTS_Vocoder * v, double *lsp, size_t m, double alpha)
|
|
}
|
|
|
|
/* 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 @@ static double HTS_white_noise(HTS_Vocoder * v)
|
|
}
|
|
|
|
/* 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 @@ static void HTS_ping_pulse(HTS_Vocoder * v, const int ping_place, const double p
|
|
}
|
|
|
|
/* 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 @@ static void HTS_ping_noise(HTS_Vocoder * v, const int ping_place, const int nlpf
|
|
}
|
|
|
|
/* 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 @@ static void HTS_Vocoder_initialize_excitation(HTS_Vocoder * v, size_t nlpf)
|
|
}
|
|
|
|
/* 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 @@ static void HTS_Vocoder_start_excitation(HTS_Vocoder * v, const double pitch, co
|
|
}
|
|
|
|
/* 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 @@ static double HTS_Vocoder_get_excitation(HTS_Vocoder * v, const int fprd_index,
|
|
}
|
|
|
|
/* 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 @@ static void HTS_Vocoder_end_excitation(HTS_Vocoder * v, const int nlpf)
|
|
}
|
|
|
|
/* 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 @@ static void HTS_Vocoder_postfilter_mcp(HTS_Vocoder * v, double *mcp, const int m
|
|
}
|
|
|
|
/* 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 --git festival/src/modules/hts_engine/HTS_vocoder.h festival/src/modules/hts_engine/HTS_vocoder.h
|
|
new file mode 100644
|
|
index 0000000..f3dd9a6
|
|
--- /dev/null
|
|
+++ festival/src/modules/hts_engine/HTS_vocoder.h
|
|
@@ -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
|