Files
extra/festival/festival-2.4-compat.patch
2025-06-22 20:39:04 -05:00

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