diff --git a/configure.ac b/configure.ac index 1bddd56c17..bd6b2892f0 100644 --- a/configure.ac +++ b/configure.ac @@ -1563,6 +1563,26 @@ PKG_CHECK_MODULES([AMQP], [librabbitmq >= 0.5.2], [ AM_CONDITIONAL([HAVE_AMQP], [false]) ]) +PKG_CHECK_MODULES([SPHINXBASE], [sphinxbase >= 5],[ + AM_CONDITIONAL([HAVE_SPHINXBASE],[true])],[ + AC_MSG_RESULT([no]); AM_CONDITIONAL([HAVE_SPHINXBASE],[false])]) + +PKG_CHECK_MODULES([POCKETSPHINX], [pocketsphinx >= 5],[ + AM_CONDITIONAL([HAVE_POCKETSPHINX],[true]) + # Extract the version of pocketsphinx + POCKETSPHINX_VERSION=`$PKG_CONFIG --modversion pocketsphinx` + AC_DEFINE_UNQUOTED([POCKETSPHINX_VERSION], ["$POCKETSPHINX_VERSION"], [Version of pocketsphinx]) + AC_MSG_NOTICE([POCKETSPHINX_VERSION is $POCKETSPHINX_VERSION]) + # Parse major version but take only first digit for now + POCKETSPHINX_MAJOR_VERSION=`echo $POCKETSPHINX_VERSION | cut -c1` + AC_MSG_NOTICE([POCKETSPHINX_MAJOR_VERSION is $POCKETSPHINX_MAJOR_VERSION]) + AC_DEFINE_UNQUOTED([POCKETSPHINX_MAJOR_VERSION], [$POCKETSPHINX_MAJOR_VERSION], [Major version of pocketsphinx]) + AC_SUBST(POCKETSPHINX_MAJOR_VERSION) + ], [ + AC_MSG_RESULT([no]) + AM_CONDITIONAL([HAVE_POCKETSPHINX],[false]) + ]) + PKG_CHECK_MODULES([H2O], [libh2o-evloop >= 0.11.0],[ AM_CONDITIONAL([HAVE_H2O],[true])],[ AC_MSG_RESULT([no]); AM_CONDITIONAL([HAVE_H2O],[false])]) diff --git a/debian/control-modules b/debian/control-modules index cef41733d4..2f58ed225e 100755 --- a/debian/control-modules +++ b/debian/control-modules @@ -231,6 +231,7 @@ Build-Depends: libflite-dev | flite1-dev Module: asr_tts/mod_pocketsphinx Description: mod_pocketsphinx Adds mod_pocketsphinx. +Build-Depends: libsphinxbase-dev, libpocketsphinx-dev Module: asr_tts/mod_tts_commandline Description: mod_tts_commandline diff --git a/src/mod/asr_tts/mod_pocketsphinx/Makefile.am b/src/mod/asr_tts/mod_pocketsphinx/Makefile.am index a396873250..525b3927ca 100644 --- a/src/mod/asr_tts/mod_pocketsphinx/Makefile.am +++ b/src/mod/asr_tts/mod_pocketsphinx/Makefile.am @@ -16,11 +16,16 @@ SPHINXMODEL=communicator_semi_6000_20080321 mod_LTLIBRARIES = mod_pocketsphinx.la mod_pocketsphinx_la_SOURCES = mod_pocketsphinx.c -mod_pocketsphinx_la_CFLAGS = $(AM_CFLAGS) -I$(SPHINXBASE_DIR)/include -I$(POCKETSPHINX_DIR)/include -mod_pocketsphinx_la_LIBADD = $(switch_builddir)/libfreeswitch.la $(POCKETSPHINX_LA) $(SPHINXBASE_LA) $(SPHINXBASE_LA2) mod_pocketsphinx_la_LDFLAGS = -avoid-version -module -no-undefined -shared +if HAVE_POCKETSPHINX +mod_pocketsphinx_la_CFLAGS = $(AM_CFLAGS) $(SPHINXBASE_CFLAGS) $(POCKETSPHINX_CFLAGS) -DPOCKETSPHINX_MAJOR_VERSION=$(POCKETSPHINX_MAJOR_VERSION) +mod_pocketsphinx_la_LIBADD = $(switch_builddir)/libfreeswitch.la $(POCKETSPHINX_LDFLAGS) $(SPHINXBASE_LDFLAGS) +else +mod_pocketsphinx_la_CFLAGS = $(AM_CFLAGS) -I$(SPHINXBASE_DIR)/include -I$(POCKETSPHINX_DIR)/include -DPOCKETSPHINX_MAJOR_VERSION=0 +mod_pocketsphinx_la_LIBADD = $(switch_builddir)/libfreeswitch.la $(POCKETSPHINX_LA) $(SPHINXBASE_LA) $(SPHINXBASE_LA2) BUILT_SOURCES=$(POCKETSPHINX_LA) $(SPHINXBASE_LA) $(SPHINXBASE_LA2) +endif $(SPHINXBASE_DIR): $(GETLIB) $(SPHINXBASE).tar.gz @@ -66,5 +71,8 @@ $(DESTDIR)$(grammardir)/model/communicator: dictionary: @install -m0644 $(POCKETSPHINX_DIR)/model/lm/en_US/cmu07a.dic $(DESTDIR)$(grammardir)/default.dic +if HAVE_POCKETSPHINX +install-data-local: $(POCKETSPHINX_DIR) $(DESTDIR)$(grammardir)/model $(DESTDIR)$(grammardir)/model/communicator dictionary +else install-data-local: $(DESTDIR)$(grammardir)/model $(DESTDIR)$(grammardir)/model/communicator dictionary - +endif diff --git a/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.2017.vcxproj b/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.2017.vcxproj index 03436810d9..05c38b75ca 100644 --- a/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.2017.vcxproj +++ b/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.2017.vcxproj @@ -48,6 +48,7 @@ $(DefaultPlatformToolset) + @@ -77,7 +78,7 @@ Disabled - ..\..\..\..\libs\sphinxbase-0.7\include;..\..\..\..\libs\pocketsphinx-0.7\include;%(AdditionalIncludeDirectories) + ..\..\..\..\libs\sphinxbase-0.7\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions) true EnableFastChecks @@ -103,7 +104,7 @@ Disabled - ..\..\..\..\libs\sphinxbase-0.7\include;..\..\..\..\libs\pocketsphinx-0.7\include;%(AdditionalIncludeDirectories) + ..\..\..\..\libs\sphinxbase-0.7\include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions) true EnableFastChecks @@ -126,7 +127,7 @@ MaxSpeed true - ..\..\..\..\libs\sphinxbase-0.7\include;..\..\..\..\libs\pocketsphinx-0.7\include;%(AdditionalIncludeDirectories) + ..\..\..\..\libs\sphinxbase-0.7\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -156,7 +157,7 @@ MaxSpeed true - ..\..\..\..\libs\sphinxbase-0.7\include;..\..\..\..\libs\pocketsphinx-0.7\include;%(AdditionalIncludeDirectories) + ..\..\..\..\libs\sphinxbase-0.7\include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL true diff --git a/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c b/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c index f7cef99573..abbbe2c26d 100644 --- a/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c +++ b/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c @@ -203,7 +203,12 @@ static switch_status_t pocketsphinx_asr_load_grammar(switch_asr_handle_t *ah, co } switch_mutex_unlock(ps->flag_mutex); +#if POCKETSPHINX_MAJOR_VERSION < 1 ps_start_utt(ps->ps, NULL); +#else + ps_start_utt(ps->ps); +#endif + ps->silence_time = switch_micro_time_now(); switch_clear_flag(ps, PSFLAG_START_OF_SPEECH); switch_clear_flag(ps, PSFLAG_NOINPUT_TIMEOUT); @@ -338,22 +343,38 @@ static switch_status_t pocketsphinx_asr_feed(switch_asr_handle_t *ah, void *data char const *hyp; switch_mutex_lock(ps->flag_mutex); +#if POCKETSPHINX_MAJOR_VERSION < 1 if ((hyp = ps_get_hyp(ps->ps, &ps->score, &ps->uttid))) { +#else + if ((hyp = ps_get_hyp(ps->ps, &ps->score))) { +#endif if (!zstr(hyp)) { ps_end_utt(ps->ps); switch_clear_flag(ps, PSFLAG_READY); +#if POCKETSPHINX_MAJOR_VERSION < 1 if ((hyp = ps_get_hyp(ps->ps, &ps->score, &ps->uttid))) { +#else + if ((hyp = ps_get_hyp(ps->ps, &ps->score))) { +#endif if (zstr(hyp)) { if (!switch_test_flag(ps, PSFLAG_SPEECH_TIMEOUT)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Lost the text, never mind....\n"); +#if POCKETSPHINX_MAJOR_VERSION < 1 ps_start_utt(ps->ps, NULL); +#else + ps_start_utt(ps->ps); +#endif switch_set_flag(ps, PSFLAG_READY); } } else { /* get match and confidence */ int32_t conf; +#if POCKETSPHINX_MAJOR_VERSION < 1 conf = ps_get_prob(ps->ps, &ps->uttid); +#else + conf = ps_get_prob(ps->ps); +#endif ps->confidence = (conf + 20000) / 200; @@ -427,7 +448,11 @@ static switch_status_t pocketsphinx_asr_resume(switch_asr_handle_t *ah) if (!switch_test_flag(ps, PSFLAG_READY)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Manually Resuming\n"); +#if POCKETSPHINX_MAJOR_VERSION < 1 if (ps_start_utt(ps->ps, NULL)) { +#else + if (ps_start_utt(ps->ps)) { +#endif status = SWITCH_STATUS_GENERR; } else { switch_set_flag(ps, PSFLAG_READY); @@ -474,7 +499,11 @@ static switch_status_t pocketsphinx_asr_get_results(switch_asr_handle_t *ah, cha switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Auto Resuming\n"); switch_set_flag(ps, PSFLAG_READY); +#if POCKETSPHINX_MAJOR_VERSION < 1 ps_start_utt(ps->ps, NULL); +#else + ps_start_utt(ps->ps); +#endif } status = SWITCH_STATUS_SUCCESS; diff --git a/w32/pocketsphinx-version.props b/w32/pocketsphinx-version.props new file mode 100644 index 0000000000..1332a7a84a --- /dev/null +++ b/w32/pocketsphinx-version.props @@ -0,0 +1,20 @@ + + + + + + + 0 + 0.7 + + + true + + + + + + $(pocketsphinxVersion) + + + diff --git a/w32/pocketsphinx.props b/w32/pocketsphinx.props new file mode 100644 index 0000000000..623e36354f --- /dev/null +++ b/w32/pocketsphinx.props @@ -0,0 +1,18 @@ + + + + + + + + $(BaseDir)libs\pocketsphinx-$(pocketsphinxVersion) + + + + + $(pocketsphinx_libDir)\include;%(AdditionalIncludeDirectories) + POCKETSPHINX_MAJOR_VERSION=$(pocketsphinxMajorVersion);%(PreprocessorDefinitions) + + + +