mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-17 18:19:45 +00:00
Expand speech API so that the developer can interact with the engine more directly and use specific functions of the connector even if a generic API call is not available
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@37881 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -228,6 +228,29 @@ static struct ast_custom_function speech_grammar_function = {
|
|||||||
.write = NULL,
|
.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 */
|
/*! \brief SPEECH() Dialplan Function */
|
||||||
static int speech_read(struct ast_channel *chan, char *cmd, char *data,
|
static int speech_read(struct ast_channel *chan, char *cmd, char *data,
|
||||||
char *buf, size_t len)
|
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_score_function);
|
||||||
res |= ast_custom_function_unregister(&speech_text_function);
|
res |= ast_custom_function_unregister(&speech_text_function);
|
||||||
res |= ast_custom_function_unregister(&speech_grammar_function);
|
res |= ast_custom_function_unregister(&speech_grammar_function);
|
||||||
|
res |= ast_custom_function_unregister(&speech_engine_function);
|
||||||
|
|
||||||
STANDARD_HANGUP_LOCALUSERS;
|
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_score_function);
|
||||||
res |= ast_custom_function_register(&speech_text_function);
|
res |= ast_custom_function_register(&speech_text_function);
|
||||||
res |= ast_custom_function_register(&speech_grammar_function);
|
res |= ast_custom_function_register(&speech_grammar_function);
|
||||||
|
res |= ast_custom_function_register(&speech_engine_function);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@@ -109,6 +109,10 @@ Returns the recognized text of a result.
|
|||||||
|
|
||||||
Returns the matched grammar of the result.
|
Returns the matched grammar of the result.
|
||||||
|
|
||||||
|
- SPEECH_ENGINE(name)=value
|
||||||
|
|
||||||
|
Sets a speech engine specific attribute.
|
||||||
|
|
||||||
* Dialplan Flow:
|
* Dialplan Flow:
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
@@ -77,6 +77,8 @@ struct ast_speech_engine {
|
|||||||
int (*write)(struct ast_speech *speech, void *data, int len);
|
int (*write)(struct ast_speech *speech, void *data, int len);
|
||||||
/*! Prepare engine to accept audio */
|
/*! Prepare engine to accept audio */
|
||||||
int (*start)(struct ast_speech *speech);
|
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 */
|
/*! Try to get results */
|
||||||
struct ast_speech_result *(*get)(struct ast_speech *speech);
|
struct ast_speech_result *(*get)(struct ast_speech *speech);
|
||||||
/*! Accepted formats by the engine */
|
/*! 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);
|
int ast_speech_destroy(struct ast_speech *speech);
|
||||||
/*! \brief Write audio to the speech engine */
|
/*! \brief Write audio to the speech engine */
|
||||||
int ast_speech_write(struct ast_speech *speech, void *data, int len);
|
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 */
|
/*! \brief Change state of a speech structure */
|
||||||
int ast_speech_change_state(struct ast_speech *speech, int state);
|
int ast_speech_change_state(struct ast_speech *speech, int state);
|
||||||
/*! \brief Register a speech recognition engine */
|
/*! \brief Register a speech recognition engine */
|
||||||
|
@@ -191,6 +191,18 @@ int ast_speech_write(struct ast_speech *speech, void *data, int len)
|
|||||||
return res;
|
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 */
|
/*! \brief Create a new speech structure using the engine specified */
|
||||||
struct ast_speech *ast_speech_new(char *engine_name, int format)
|
struct ast_speech *ast_speech_new(char *engine_name, int format)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user