]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[mod_pocketsphinx] Use system libraries when possible 2856/head
authorAndrey Volk <andywolk@gmail.com>
Sat, 12 Jul 2025 22:38:29 +0000 (01:38 +0300)
committerAndrey Volk <andywolk@gmail.com>
Tue, 15 Jul 2025 09:14:31 +0000 (12:14 +0300)
configure.ac
debian/control-modules
src/mod/asr_tts/mod_pocketsphinx/Makefile.am
src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.2017.vcxproj
src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c
w32/pocketsphinx-version.props [new file with mode: 0644]
w32/pocketsphinx.props [new file with mode: 0644]

index 1bddd56c17cd9cbcded5c6da7828ea13dc92002f..bd6b2892f0478843211ede8d0c3d39a0723598d9 100644 (file)
@@ -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])])
index cef41733d44f337e003850bab52697c56a68e20c..2f58ed225e345e02c8b1b92f3aefd7a257a88f13 100755 (executable)
@@ -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
index a3968732509ba82ca928a72b61a329e5c1d2244a..525b3927ca43e27fcdd88a4bda068f8bf5836226 100644 (file)
@@ -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
index 03436810d9ef9b0eddaa49ae77f2e08cf03cd5f3..05c38b75ca96ca88ae4639054dfd12fd9ce8a32c 100644 (file)
@@ -48,6 +48,7 @@
     <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <Import Project="$(SolutionDir)w32\pocketsphinx.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
@@ -77,7 +78,7 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\..\..\libs\sphinxbase-0.7\include;..\..\..\..\libs\pocketsphinx-0.7\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\..\..\..\libs\sphinxbase-0.7\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
     </Midl>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\..\..\libs\sphinxbase-0.7\include;..\..\..\..\libs\pocketsphinx-0.7\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\..\..\..\libs\sphinxbase-0.7\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>..\..\..\..\libs\sphinxbase-0.7\include;..\..\..\..\libs\pocketsphinx-0.7\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\..\..\..\libs\sphinxbase-0.7\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>..\..\..\..\libs\sphinxbase-0.7\include;..\..\..\..\libs\pocketsphinx-0.7\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\..\..\..\libs\sphinxbase-0.7\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_POCKETSPHINX_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
index f7cef9957309ac6e8181a98a891ccae7377bfa95..abbbe2c26dba8907754aaa80ea457cd2ff6985d7 100644 (file)
@@ -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 (file)
index 0000000..1332a7a
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ImportGroup Label="PropertySheets">\r
+    <Import Project="basedir.props" Condition=" '$(BaseDirImported)' == ''"/>\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros">\r
+    <pocketsphinxMajorVersion>0</pocketsphinxMajorVersion>\r
+    <pocketsphinxVersion>0.7</pocketsphinxVersion>\r
+  </PropertyGroup>\r
+  <PropertyGroup>\r
+    <pocketsphinxVersionImported>true</pocketsphinxVersionImported>\r
+  </PropertyGroup>\r
+  <PropertyGroup />\r
+  <ItemDefinitionGroup />\r
+  <ItemGroup>\r
+    <BuildMacro Include="pocketsphinxVersion">\r
+      <Value>$(pocketsphinxVersion)</Value>\r
+    </BuildMacro>\r
+  </ItemGroup>\r
+</Project>\r
diff --git a/w32/pocketsphinx.props b/w32/pocketsphinx.props
new file mode 100644 (file)
index 0000000..623e363
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ImportGroup Label="PropertySheets">
+    <Import Project="pocketsphinx-version.props" Condition=" '$(pocketsphinxVersionImported)' == '' "/>
+  </ImportGroup>
+
+  <PropertyGroup Label="UserMacros">
+    <pocketsphinx_libDir>$(BaseDir)libs\pocketsphinx-$(pocketsphinxVersion)</pocketsphinx_libDir>
+  </PropertyGroup>
+
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(pocketsphinx_libDir)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>POCKETSPHINX_MAJOR_VERSION=$(pocketsphinxMajorVersion);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+  </ItemDefinitionGroup>
+
+</Project>