#ifndef RSYNTH_H
#define RSYNTH_H
#ifdef __cplusplus
extern "C" {
#endif
#include "darray.h"
#include "trie.h"
typedef struct
{float stdy;
char prop;
char ed;
char id;
char rk;
} interp_t, *interp_ptr;
enum Eparm_e
{
fn, f1, f2, f3, b1, b2, b3, pn, a2, a3, a4, a5, a6, ab, av, avc, asp, af,
nEparm
};
extern char *Ep_name[nEparm];
typedef struct Elm_s
{
char *name;
char rk;
char du;
char ud;
char *unicode;
char *sampa;
long feat;
interp_t p[nEparm];
} Elm_t, *Elm_ptr;
extern Elm_t Elements[];
extern unsigned num_Elements;
typedef struct
{
float Gain0;
float F0Hz;
float F4hz;
float B4hz;
float F5hz;
float B5hz;
float F6hz;
float B6hz;
float FNPhz;
float BNhz;
float B4phz;
float B5phz;
float B6phz;
} speaker_t;
typedef struct rsynth_s rsynth_t;
typedef void *rsynth_sample_p(void *user_data,float sample, unsigned nsamp, rsynth_t *rsynth);
typedef void *rsynth_flush_p(void *user_data,unsigned nsamp, rsynth_t *rsynth);
struct rsynth_s
{
long flags;
long sr;
long samples_frame;
speaker_t *speaker;
float *ep;
FILE *voice_file;
FILE *parm_file;
rsynth_sample_p *sample_p;
rsynth_flush_p *flush_p;
void *user_data;
float speed;
float smooth;
struct rsynth_private *pvt;
};
#define RSYNTH_VERBOSE (1L << 0)
#define RSYNTH_ETRACE (1L << 1)
#define RSYNTH_MONOTONE (1L << 2)
#define RSYNTH_F0TRACE (1L << 3)
extern speaker_t *rsynth_speaker(float F0Hz, float gain, Elm_t *elements);
extern rsynth_t *rsynth_init(long samrate,
float ms_per_frame,
speaker_t *speaker,
rsynth_sample_p *sample_p,
rsynth_flush_p *flush_p,
void *user_data);
extern void rsynth_phones(struct rsynth_s *rsynth, char *s, int len);
extern void rsynth_pho(struct rsynth_s *rsynth, const char *path, int dodur,char *phoneset);
extern unsigned rsynth_interpolate(rsynth_t *rsynth,
unsigned char *elm, unsigned nelm,
float *f0, unsigned nf0);
extern void rsynth_flush(rsynth_t *rsynth,unsigned nsamp);
extern long rsynth_frame(rsynth_t *rsynth, float F0Hz, float *frame, const char *name);
extern void rsynth_term(rsynth_t *rsynth);
#define rsynth_verbose(rsynth) ((!rsynth) || (rsynth)->flags & RSYNTH_VERBOSE)
#ifdef __cplusplus
}
#endif
#endif