Author: achaloyan <achaloyan@f001bc3a-424a-0410-80a0-a715b8f413a8>
Date: Fri Jun 19 19:14:14 2009 +0000 svn-id: https://unimrcp.googlecode.com/svn/trunk@996 f001bc3a-424a-0410-80a0-a715b8f413a8 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13881 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
c57128abce
commit
acec4777c2
|
@ -1 +1 @@
|
|||
Tue Jun 16 17:36:06 CDT 2009
|
||||
Fri Jun 19 22:39:34 CDT 2009
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="windows-1251"?>
|
||||
<VisualStudioPropertySheet
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="pocketsphinx"
|
||||
InheritedPropertySheets="$(ProjectDir)..\..\build\vsprops\unibase.vsprops"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""$(PocketSphinxDir)\include";"$(SphinxBaseDir)\include""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="sphinxbase.lib pocketsphinx.lib"
|
||||
AdditionalLibraryDirectories=""$(PocketSphinxDir)\bin\$(ConfigurationName)";"$(SphinxBaseDir)\lib\$(ConfigurationName)""
|
||||
/>
|
||||
<UserMacro
|
||||
Name="PocketSphinxDir"
|
||||
Value="$(LibRootDir)libs\pocketsphinx"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="SphinxBaseDir"
|
||||
Value="$(LibRootDir)libs\sphinxbase"
|
||||
/>
|
||||
</VisualStudioPropertySheet>
|
|
@ -0,0 +1,16 @@
|
|||
MAINTAINERCLEANFILES = Makefile.in
|
||||
|
||||
INCLUDES = -Iinclude \
|
||||
-I$(top_srcdir)/libs/mrcp-engine/include \
|
||||
-I$(top_srcdir)/libs/mrcp/include \
|
||||
-I$(top_srcdir)/libs/mrcp/message/include \
|
||||
-I$(top_srcdir)/libs/mrcp/control/include \
|
||||
-I$(top_srcdir)/libs/mrcp/resources/include \
|
||||
-I$(top_srcdir)/libs/mpf/include \
|
||||
-I$(top_srcdir)/libs/apr-toolkit/include \
|
||||
$(UNIMRCP_APR_INCLUDES) $(UNIMRCP_APU_INCLUDES)
|
||||
|
||||
plugin_LTLIBRARIES = mrcppocketsphinx.la
|
||||
|
||||
mrcppocketsphinx_la_SOURCES = src/mrcp_pocketsphinx.c.c
|
||||
mrcppocketsphinx_la_LDFLAGS = -module $(PLUGIN_LT_VERSION)
|
|
@ -0,0 +1,165 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="mrcppocketsphinx"
|
||||
ProjectGUID="{3C614AE8-B611-4D43-A9AF-1CAA440A9F69}"
|
||||
RootNamespace="mrcppocketsphinx"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(ProjectDir)..\..\build\vsprops\unidebug.vsprops;$(ProjectDir)..\..\build\vsprops\pocketsphinx.vsprops;$(ProjectDir)..\..\build\vsprops\unimrcpplugin.vsprops"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="include"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets="$(ProjectDir)..\..\build\vsprops\unirelease.vsprops;$(ProjectDir)..\..\build\vsprops\pocketsphinx.vsprops;$(ProjectDir)..\..\build\vsprops\unimrcpplugin.vsprops"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="include"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="include"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="src"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\src\mrcp_pocketsphinx.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -0,0 +1,232 @@
|
|||
/*
|
||||
* Copyright 2008 Arsen Chaloyan
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Some mandatory rules for plugin implementation.
|
||||
* 1. Each plugin MUST contain the following function as an entry point of the plugin
|
||||
* MRCP_PLUGIN_DECLARE(mrcp_resource_engine_t*) mrcp_plugin_create(apr_pool_t *pool)
|
||||
* 2. One and only one response MUST be sent back to the received request.
|
||||
* 3. Methods (callbacks) of the MRCP engine channel MUST not block.
|
||||
* (asynch response can be sent from the context of other thread)
|
||||
* 4. Methods (callbacks) of the MPF engine stream MUST not block.
|
||||
*/
|
||||
|
||||
#include "mrcp_resource_engine.h"
|
||||
#include "mrcp_recog_resource.h"
|
||||
#include "mrcp_recog_header.h"
|
||||
#include "mrcp_generic_header.h"
|
||||
#include "mrcp_message.h"
|
||||
#include "mpf_activity_detector.h"
|
||||
#include "apt_log.h"
|
||||
|
||||
|
||||
typedef struct pocketsphinx_engine_t pocketsphinx_engine_t;
|
||||
typedef struct pocketsphinx_recognizer_t pocketsphinx_recognizer_t;
|
||||
|
||||
/** Declaration of recognizer engine methods */
|
||||
static apt_bool_t pocketsphinx_engine_destroy(mrcp_resource_engine_t *engine);
|
||||
static apt_bool_t pocketsphinx_engine_open(mrcp_resource_engine_t *engine);
|
||||
static apt_bool_t pocketsphinx_engine_close(mrcp_resource_engine_t *engine);
|
||||
static mrcp_engine_channel_t* pocketsphinx_recognizer_create(mrcp_resource_engine_t *engine, apr_pool_t *pool);
|
||||
|
||||
static const struct mrcp_engine_method_vtable_t engine_vtable = {
|
||||
pocketsphinx_engine_destroy,
|
||||
pocketsphinx_engine_open,
|
||||
pocketsphinx_engine_close,
|
||||
pocketsphinx_recognizer_create
|
||||
};
|
||||
|
||||
|
||||
/** Declaration of recognizer channel methods */
|
||||
static apt_bool_t pocketsphinx_recognizer_destroy(mrcp_engine_channel_t *channel);
|
||||
static apt_bool_t pocketsphinx_recognizer_open(mrcp_engine_channel_t *channel);
|
||||
static apt_bool_t pocketsphinx_recognizer_close(mrcp_engine_channel_t *channel);
|
||||
static apt_bool_t pocketsphinx_recognizer_request_process(mrcp_engine_channel_t *channel, mrcp_message_t *request);
|
||||
|
||||
static const struct mrcp_engine_channel_method_vtable_t channel_vtable = {
|
||||
pocketsphinx_recognizer_destroy,
|
||||
pocketsphinx_recognizer_open,
|
||||
pocketsphinx_recognizer_close,
|
||||
pocketsphinx_recognizer_request_process
|
||||
};
|
||||
|
||||
/** Declaration of recognizer audio stream methods */
|
||||
static apt_bool_t pocketsphinx_stream_destroy(mpf_audio_stream_t *stream);
|
||||
static apt_bool_t pocketsphinx_stream_open(mpf_audio_stream_t *stream);
|
||||
static apt_bool_t pocketsphinx_stream_close(mpf_audio_stream_t *stream);
|
||||
static apt_bool_t pocketsphinx_stream_write(mpf_audio_stream_t *stream, const mpf_frame_t *frame);
|
||||
|
||||
static const mpf_audio_stream_vtable_t audio_stream_vtable = {
|
||||
pocketsphinx_stream_destroy,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
pocketsphinx_stream_open,
|
||||
pocketsphinx_stream_close,
|
||||
pocketsphinx_stream_write
|
||||
};
|
||||
|
||||
/** Declaration of pocketsphinx engine */
|
||||
struct pocketsphinx_engine_t {
|
||||
mrcp_resource_engine_t *base;
|
||||
};
|
||||
|
||||
/** Declaration of pocketsphinx recognizer */
|
||||
struct pocketsphinx_recognizer_t {
|
||||
/** Back pointer to engine */
|
||||
pocketsphinx_engine_t *engine;
|
||||
/** Engine channel base */
|
||||
mrcp_engine_channel_t *channel;
|
||||
};
|
||||
|
||||
/** Declare this macro to use log routine of the server, plugin is loaded from */
|
||||
MRCP_PLUGIN_LOGGER_IMPLEMENT
|
||||
|
||||
|
||||
/** Create pocketsphinx engine (engine is an aggregation of recognizers) */
|
||||
MRCP_PLUGIN_DECLARE(mrcp_resource_engine_t*) mrcp_plugin_create(apr_pool_t *pool)
|
||||
{
|
||||
pocketsphinx_engine_t *engine = apr_palloc(pool,sizeof(pocketsphinx_engine_t));
|
||||
|
||||
/* create resource engine base */
|
||||
engine->base = mrcp_resource_engine_create(
|
||||
MRCP_RECOGNIZER_RESOURCE, /* MRCP resource identifier */
|
||||
engine, /* object to associate */
|
||||
&engine_vtable, /* virtual methods table of resource engine */
|
||||
pool); /* pool to allocate memory from */
|
||||
return engine->base;
|
||||
}
|
||||
|
||||
static apt_bool_t pocketsphinx_engine_destroy(mrcp_resource_engine_t *engine)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static apt_bool_t pocketsphinx_engine_open(mrcp_resource_engine_t *engine)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static apt_bool_t pocketsphinx_engine_close(mrcp_resource_engine_t *engine)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/** Create pocketsphinx recognizer */
|
||||
static mrcp_engine_channel_t* pocketsphinx_recognizer_create(mrcp_resource_engine_t *engine, apr_pool_t *pool)
|
||||
{
|
||||
mrcp_engine_channel_t *channel;
|
||||
pocketsphinx_recognizer_t *recognizer = apr_palloc(pool,sizeof(pocketsphinx_recognizer_t));
|
||||
|
||||
/* create engine channel base */
|
||||
channel = mrcp_engine_sink_channel_create(
|
||||
engine, /* resource engine */
|
||||
&channel_vtable, /* virtual methods table of engine channel */
|
||||
&audio_stream_vtable, /* virtual methods table of audio stream */
|
||||
recognizer, /* object to associate */
|
||||
NULL, /* codec descriptor might be NULL by default */
|
||||
pool); /* pool to allocate memory from */
|
||||
|
||||
recognizer->channel = channel;
|
||||
return channel;
|
||||
}
|
||||
|
||||
/** Destroy engine channel */
|
||||
static apt_bool_t pocketsphinx_recognizer_destroy(mrcp_engine_channel_t *channel)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/** Open engine channel (asynchronous response MUST be sent)*/
|
||||
static apt_bool_t pocketsphinx_recognizer_open(mrcp_engine_channel_t *channel)
|
||||
{
|
||||
return mrcp_engine_channel_open_respond(channel,TRUE);
|
||||
}
|
||||
|
||||
/** Close engine channel (asynchronous response MUST be sent)*/
|
||||
static apt_bool_t pocketsphinx_recognizer_close(mrcp_engine_channel_t *channel)
|
||||
{
|
||||
return mrcp_engine_channel_close_respond(channel);
|
||||
}
|
||||
|
||||
|
||||
/** Process RECOGNIZE request */
|
||||
static apt_bool_t pocketsphinx_recognize(pocketsphinx_recognizer_t *recognizer, mrcp_message_t *request, mrcp_message_t *response)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/** Process STOP request */
|
||||
static apt_bool_t pocketsphinx_stop(pocketsphinx_recognizer_t *recognizer, mrcp_message_t *request, mrcp_message_t *response)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static apt_bool_t pocketsphinx_recognizer_request_process(mrcp_engine_channel_t *channel, mrcp_message_t *request)
|
||||
{
|
||||
pocketsphinx_recognizer_t *recognizer = channel->method_obj;
|
||||
apt_bool_t processed = FALSE;
|
||||
mrcp_message_t *response = mrcp_response_create(request,request->pool);
|
||||
switch(request->start_line.method_id) {
|
||||
case RECOGNIZER_SET_PARAMS:
|
||||
break;
|
||||
case RECOGNIZER_GET_PARAMS:
|
||||
break;
|
||||
case RECOGNIZER_DEFINE_GRAMMAR:
|
||||
break;
|
||||
case RECOGNIZER_RECOGNIZE:
|
||||
processed = pocketsphinx_recognize(recognizer,request,response);
|
||||
break;
|
||||
case RECOGNIZER_GET_RESULT:
|
||||
break;
|
||||
case RECOGNIZER_START_INPUT_TIMERS:
|
||||
break;
|
||||
case RECOGNIZER_STOP:
|
||||
processed = pocketsphinx_stop(recognizer,request,response);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(processed == FALSE) {
|
||||
/* send asynchronous response for not handled request */
|
||||
mrcp_engine_channel_message_send(channel,response);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static apt_bool_t pocketsphinx_stream_destroy(mpf_audio_stream_t *stream)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static apt_bool_t pocketsphinx_stream_open(mpf_audio_stream_t *stream)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static apt_bool_t pocketsphinx_stream_close(mpf_audio_stream_t *stream)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static apt_bool_t pocketsphinx_stream_write(mpf_audio_stream_t *stream, const mpf_frame_t *frame)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
Loading…
Reference in New Issue