]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
This version of flite has three new voices. rms, awb (male) and slt (female),
authorBrian West <brian@freeswitch.org>
Thu, 19 Feb 2009 16:38:23 +0000 (16:38 +0000)
committerBrian West <brian@freeswitch.org>
Thu, 19 Feb 2009 16:38:23 +0000 (16:38 +0000)
The build system will automatically download the correct flite build from our website and compile it.  You'll need to rm -rf libs/flite* to make sure that takes place.

Thanks,
/b

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12166 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/asr_tts/mod_flite/Makefile
src/mod/asr_tts/mod_flite/mod_flite.c

index f544e9625fffd44077d7085f0b63c856669a26f5..4cda8d6047c2157ec9e58f22c5653ce1d5d5a255 100644 (file)
@@ -1,7 +1,11 @@
 FLITE=flite-1.3.99
 FLITE_DIR=$(switch_srcdir)/libs/$(FLITE)
 FLITE_LIBDIR=$(FLITE_DIR)/build/libs
-FLITE_A=$(FLITE_LIBDIR)/libflite_cmu_us_kal.a $(FLITE_LIBDIR)/libflite_cmu_us_kal16.a $(FLITE_LIBDIR)/libflite_cmulex.a $(FLITE_LIBDIR)/libflite_usenglish.a $(FLITE_LIBDIR)/libflite.a
+FLITE_A=$(FLITE_LIBDIR)/libflite_cmu_us_awb.a \
+       $(FLITE_LIBDIR)/libflite_cmu_us_kal.a \
+       $(FLITE_LIBDIR)/libflite_cmu_us_rms.a \
+       $(FLITE_LIBDIR)/libflite_cmu_us_slt.a \
+       $(FLITE_LIBDIR)/libflite_cmulex.a $(FLITE_LIBDIR)/libflite_usenglish.a $(FLITE_LIBDIR)/libflite.a -lasound -lm
 
 LOCAL_CFLAGS=-I$(switch_srcdir)/libs/$(FLITE)/include
 LOCAL_LIBADD=$(FLITE_A)
index 24c35947e45ce3221790226caa480888d9a771da..4519aeb09a7f50e11e72e9ee6817c9b83141b0e5 100644 (file)
 #include <switch.h>
 #include <flite.h>
 
+cst_voice *register_cmu_us_awb(void);
+void unregister_cmu_us_awb(cst_voice * v);
+
 cst_voice *register_cmu_us_kal(void);
 void unregister_cmu_us_kal(cst_voice * v);
 
-cst_voice *register_cmu_us_kal16(void);
-void unregister_cmu_us_kal16(cst_voice * v);
+cst_voice *register_cmu_us_rms(void);
+void unregister_cmu_us_rms(cst_voice * v);
+
+cst_voice *register_cmu_us_slt(void);
+void unregister_cmu_us_slt(cst_voice * v);
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_flite_load);
 SWITCH_MODULE_DEFINITION(mod_flite, mod_flite_load, NULL, NULL);
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_flite_shutdown);
 
 static struct {
-       cst_voice *v8;
-       cst_voice *v16;
+       cst_voice *awb;
+       cst_voice *kal;
+       cst_voice *rms;
+       cst_voice *slt;
 } globals;
 
 struct flite_data {
@@ -52,6 +60,7 @@ struct flite_data {
        cst_wave *w;
        switch_buffer_t *audio_buffer;
 };
+
 typedef struct flite_data flite_t;
 
 #define free_wave(w) if (w) {delete_wave(w) ; w = NULL; }
@@ -60,13 +69,19 @@ typedef struct flite_data flite_t;
 static switch_status_t flite_speech_open(switch_speech_handle_t *sh, const char *voice_name, int rate, switch_speech_flag_t *flags)
 {
        flite_t *flite = switch_core_alloc(sh->memory_pool, sizeof(*flite));
+
+       sh->native_rate = 16000;
        
-       if (rate == 8000) {
-               flite->v = globals.v8;
-       } else if (rate == 16000) {
-               flite->v = globals.v16;
+       if (!strcasecmp(voice_name, "awb")) {
+               flite->v = globals.awb;
+       } else if (!strcasecmp(voice_name, "kal")) {
+               flite->v = globals.kal;
+       } else if (!strcasecmp(voice_name, "rms")) {
+               flite->v = globals.rms;
+       } else if (!strcasecmp(voice_name, "slt")) {
+               flite->v = globals.slt;
        } else {
-               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "invalid rate %d. Only 8000 and 16000 are supported.\n", rate);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Valid voice names are awb, kal, rms or slt.\n");
        }
 
        if (flite->v) {
@@ -109,7 +124,7 @@ static void flite_speech_flush_tts(switch_speech_handle_t *sh)
        free_wave(flite->w);
 }
 
-static switch_status_t flite_speech_read_tts(switch_speech_handle_t *sh, void *data, switch_size_t *datalen, switch_speech_flag_t *flags)
+static switch_status_t flite_speech_read_tts(switch_speech_handle_t *sh, void *data, size_t *datalen, switch_speech_flag_t *flags)
 {
        size_t bytes_read;
        flite_t *flite = (flite_t *) sh->private_info;
@@ -160,8 +175,10 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_flite_load)
        switch_speech_interface_t *speech_interface;
 
        flite_init();
-       globals.v8 = register_cmu_us_kal();
-       globals.v16 = register_cmu_us_kal16();
+       globals.awb = register_cmu_us_awb();
+       globals.kal = register_cmu_us_kal();
+       globals.rms = register_cmu_us_rms();
+       globals.slt = register_cmu_us_slt();
        
        /* connect my internal structure to the blank pointer passed to me */
        *module_interface = switch_loadable_module_create_module_interface(pool, modname);
@@ -182,13 +199,14 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_flite_load)
 
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_flite_shutdown)
 {
-       unregister_cmu_us_kal(globals.v8);
-       unregister_cmu_us_kal(globals.v16);
+       unregister_cmu_us_awb(globals.awb);
+       unregister_cmu_us_kal(globals.kal);
+       unregister_cmu_us_rms(globals.rms);
+       unregister_cmu_us_slt(globals.slt);
 
        return SWITCH_STATUS_UNLOAD;
 }
 
-
 /* For Emacs:
  * Local Variables:
  * mode:c