Expand speech API so that the developer can interact with the engine more directly...
authorJoshua Colp <jcolp@digium.com>
Tue, 18 Jul 2006 16:22:26 +0000 (16:22 +0000)
committerJoshua Colp <jcolp@digium.com>
Tue, 18 Jul 2006 16:22:26 +0000 (16:22 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@37881 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_speech_utils.c
doc/speechrec.txt
include/asterisk/speech.h
res/res_speech.c

index c464576..a63eee8 100644 (file)
@@ -228,6 +228,29 @@ static struct ast_custom_function speech_grammar_function = {
         .write = NULL,
 };
 
+/*! \brief SPEECH_ENGINE() Dialplan Function */
+static int speech_engine_write(struct ast_channel *chan, char *cmd, char *data, const char *value)
+{
+       struct ast_speech *speech = find_speech(chan);
+
+       if (data == NULL || speech == NULL)
+               return -1;
+
+       ast_speech_change(speech, data, value);
+
+       return 0;
+}
+
+static struct ast_custom_function speech_engine_function = {
+       .name = "SPEECH_ENGINE",
+       .synopsis = "Change a speech engine specific attribute.",
+       .syntax = "SPEECH_ENGINE(name)=value",
+       .desc =
+       "Changes a speech engine specific attribute.\n",
+       .read = NULL,
+       .write = speech_engine_write,
+};
+
 /*! \brief SPEECH() Dialplan Function */
 static int speech_read(struct ast_channel *chan, char *cmd, char *data,
                        char *buf, size_t len)
@@ -746,6 +769,7 @@ static int unload_module(void *mod)
        res |= ast_custom_function_unregister(&speech_score_function);
        res |= ast_custom_function_unregister(&speech_text_function);
        res |= ast_custom_function_unregister(&speech_grammar_function);
+       res |= ast_custom_function_unregister(&speech_engine_function);
 
        STANDARD_HANGUP_LOCALUSERS;
 
@@ -769,6 +793,7 @@ static int load_module(void *mod)
        res |= ast_custom_function_register(&speech_score_function);
        res |= ast_custom_function_register(&speech_text_function);
        res |= ast_custom_function_register(&speech_grammar_function);
+       res |= ast_custom_function_register(&speech_engine_function);
 
        return res;
 }
index 7c4960e..8aa157d 100644 (file)
@@ -109,6 +109,10 @@ Returns the recognized text of a result.
 
 Returns the matched grammar of the result.
 
+- SPEECH_ENGINE(name)=value
+
+Sets a speech engine specific attribute.
+
 * Dialplan Flow:
 -----------------
 
index afd12af..0f1af15 100644 (file)
@@ -77,6 +77,8 @@ struct ast_speech_engine {
        int (*write)(struct ast_speech *speech, void *data, int len);
        /*! Prepare engine to accept audio */
        int (*start)(struct ast_speech *speech);
+       /*! Change an engine specific setting */
+       int (*change)(struct ast_speech *speech, char *name, const char *value);
        /*! Try to get results */
        struct ast_speech_result *(*get)(struct ast_speech *speech);
        /*! Accepted formats by the engine */
@@ -116,6 +118,8 @@ struct ast_speech *ast_speech_new(char *engine_name, int format);
 int ast_speech_destroy(struct ast_speech *speech);
 /*! \brief Write audio to the speech engine */
 int ast_speech_write(struct ast_speech *speech, void *data, int len);
+/*! \brief Change an engine specific attribute */
+int ast_speech_change(struct ast_speech *speech, char *name, const char *value);
 /*! \brief Change state of a speech structure */
 int ast_speech_change_state(struct ast_speech *speech, int state);
 /*! \brief Register a speech recognition engine */
index 6245817..f99c352 100644 (file)
@@ -191,6 +191,18 @@ int ast_speech_write(struct ast_speech *speech, void *data, int len)
        return res;
 }
 
+/*! \brief Change an engine specific attribute */
+int ast_speech_change(struct ast_speech *speech, char *name, const char *value)
+{
+       int res = 0;
+
+       if (speech->engine->change != NULL) {
+               res = speech->engine->change(speech, name, value);
+       }
+
+       return res;
+}
+
 /*! \brief Create a new speech structure using the engine specified */
 struct ast_speech *ast_speech_new(char *engine_name, int format)
 {