Asterisk - The Open Source Telephony Project GIT-master-27fb039
Loading...
Searching...
No Matches
Data Structures | Functions | Variables
res_speech.c File Reference

Generic Speech Recognition API. More...

#include "asterisk.h"
#include "asterisk/channel.h"
#include "asterisk/module.h"
#include "asterisk/lock.h"
#include "asterisk/linkedlists.h"
#include "asterisk/cli.h"
#include "asterisk/term.h"
#include "asterisk/speech.h"
#include "asterisk/format_cache.h"
#include "asterisk/translate.h"
Include dependency graph for res_speech.c:

Go to the source code of this file.

Data Structures

struct  engines
 

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
int ast_speech_change (struct ast_speech *speech, const char *name, const char *value)
 Change an engine specific attribute.
 
int ast_speech_change_results_type (struct ast_speech *speech, enum ast_speech_results_type results_type)
 Change the type of results we want.
 
int ast_speech_change_state (struct ast_speech *speech, int state)
 Change state of a speech structure.
 
int ast_speech_destroy (struct ast_speech *speech)
 Destroy a speech structure.
 
int ast_speech_dtmf (struct ast_speech *speech, const char *dtmf)
 Signal to the engine that DTMF was received.
 
struct ast_speech_engineast_speech_find_engine (const char *engine_name)
 Find a speech recognition engine of specified name, if NULL then use the default one.
 
int ast_speech_get_setting (struct ast_speech *speech, const char *name, char *buf, size_t len)
 Get an engine specific attribute.
 
int ast_speech_grammar_activate (struct ast_speech *speech, const char *grammar_name)
 Activate a loaded (either local or global) grammar.
 
int ast_speech_grammar_deactivate (struct ast_speech *speech, const char *grammar_name)
 Deactivate a loaded grammar on a speech structure.
 
int ast_speech_grammar_load (struct ast_speech *speech, const char *grammar_name, const char *grammar)
 Load a local grammar on a speech structure.
 
int ast_speech_grammar_unload (struct ast_speech *speech, const char *grammar_name)
 Unload a local grammar from a speech structure.
 
struct ast_speechast_speech_new (const char *engine_name, const struct ast_format_cap *cap)
 Create a new speech structure using the engine specified.
 
int ast_speech_register (struct ast_speech_engine *engine)
 Register a speech recognition engine.
 
int ast_speech_results_free (struct ast_speech_result *result)
 Free a list of results.
 
struct ast_speech_resultast_speech_results_get (struct ast_speech *speech)
 Return the results of a recognition from the speech structure.
 
const char * ast_speech_results_type_to_string (enum ast_speech_results_type type)
 Convert a speech results type to a string.
 
void ast_speech_start (struct ast_speech *speech)
 Start speech recognition on a speech structure.
 
int ast_speech_unregister (const char *engine_name)
 Unregister a speech recognition engine.
 
struct ast_speech_engineast_speech_unregister2 (const char *engine_name)
 Unregister a speech recognition engine.
 
void ast_speech_unregister_engines (int(*should_unregister)(const struct ast_speech_engine *engine, void *data), void *data, void(*on_unregistered)(void *obj))
 Unregister all speech recognition engines told to by callback.
 
int ast_speech_write (struct ast_speech *speech, void *data, int len)
 Write in signed linear audio to be recognized.
 
static int load_module (void)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER , .description = "Generic Speech Recognition API" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_APP_DEPEND - 1, }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static struct ast_speech_enginedefault_engine = NULL
 
static struct engines engines = AST_RWLIST_HEAD_INIT_VALUE
 

Detailed Description

Generic Speech Recognition API.

Author
Joshua Colp jcolp.nosp@m.@dig.nosp@m.ium.c.nosp@m.om

Definition in file res_speech.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 426 of file res_speech.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 426 of file res_speech.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 426 of file res_speech.c.

◆ ast_speech_change()

int ast_speech_change ( struct ast_speech speech,
const char *  name,
const char *  value 
)

Change an engine specific attribute.

Definition at line 169 of file res_speech.c.

170{
171 return (speech->engine->change ? speech->engine->change(speech, name, value) : -1);
172}
static const char name[]
Definition format_mp3.c:68
int(* change)(struct ast_speech *speech, const char *name, const char *value)
Definition speech.h:98
struct ast_speech_engine * engine
Definition speech.h:72
int value
Definition syslog.c:37

References ast_speech_engine::change, ast_speech::engine, name, and value.

Referenced by AST_TEST_DEFINE(), handle_speechset(), and speech_engine_write().

◆ ast_speech_change_results_type()

int ast_speech_change_results_type ( struct ast_speech speech,
enum ast_speech_results_type  results_type 
)

Change the type of results we want.

Definition at line 308 of file res_speech.c.

309{
310 speech->results_type = results_type;
311
312 return (speech->engine->change_results_type ? speech->engine->change_results_type(speech, results_type) : 0);
313}
int(* change_results_type)(struct ast_speech *speech, enum ast_speech_results_type results_type)
Definition speech.h:102
enum ast_speech_results_type results_type
Definition speech.h:70

References ast_speech_engine::change_results_type, ast_speech::engine, and ast_speech::results_type.

Referenced by AST_TEST_DEFINE(), and speech_results_type_write().

◆ ast_speech_change_state()

int ast_speech_change_state ( struct ast_speech speech,
int  state 
)

Change state of a speech structure.

Definition at line 278 of file res_speech.c.

279{
280 int res = 0;
281
282 switch (state) {
284 /* The engine heard audio, so they spoke */
286 default:
287 speech->state = state;
288 break;
289 }
290
291 return res;
292}
@ AST_SPEECH_STATE_WAIT
Definition speech.h:41
@ AST_SPEECH_SPOKE
Definition speech.h:33
int state
Definition speech.h:62
#define ast_set_flag(p, flag)
Definition utils.h:71

References ast_set_flag, AST_SPEECH_SPOKE, AST_SPEECH_STATE_WAIT, and ast_speech::state.

Referenced by ast_aeap_speech_on_error(), ast_speech_new(), handle_request_set(), handle_speechrecognize(), speech_aeap_engine_start(), and speech_background().

◆ ast_speech_destroy()

int ast_speech_destroy ( struct ast_speech speech)

Destroy a speech structure.

Definition at line 251 of file res_speech.c.

252{
253 int res = 0;
254
255 /* Call our engine so we are destroyed properly */
256 speech->engine->destroy(speech);
257
258 /* Deinitialize the lock */
259 ast_mutex_destroy(&speech->lock);
260
261 /* If results exist on the speech structure, destroy them */
262 if (speech->results)
264
265 /* If a processing sound is set - free the memory used by it */
266 if (speech->processing_sound)
267 ast_free(speech->processing_sound);
268
269 ao2_ref(speech->format, -1);
270
271 /* Aloha we are done */
272 ast_free(speech);
273
274 return res;
275}
#define ast_free(a)
Definition astmm.h:180
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition astobj2.h:459
#define ast_mutex_destroy(a)
Definition lock.h:195
int ast_speech_results_free(struct ast_speech_result *result)
Free a list of results.
Definition res_speech.c:96
int(* destroy)(struct ast_speech *speech)
Definition speech.h:82
char * processing_sound
Definition speech.h:60
struct ast_format * format
Definition speech.h:64
ast_mutex_t lock
Definition speech.h:56
struct ast_speech_result * results
Definition speech.h:68

References ao2_ref, ast_free, ast_mutex_destroy, ast_speech_results_free(), ast_speech_engine::destroy, ast_speech::engine, ast_speech::format, ast_speech::lock, ast_speech::processing_sound, and ast_speech::results.

Referenced by AST_TEST_DEFINE(), destroy_callback(), handle_speechdestroy(), launch_asyncagi(), run_agi(), and speech_create().

◆ ast_speech_dtmf()

int ast_speech_dtmf ( struct ast_speech speech,
const char *  dtmf 
)

Signal to the engine that DTMF was received.

Definition at line 154 of file res_speech.c.

155{
156 int res = 0;
157
158 if (speech->state != AST_SPEECH_STATE_READY)
159 return -1;
160
161 if (speech->engine->dtmf != NULL) {
162 res = speech->engine->dtmf(speech, dtmf);
163 }
164
165 return res;
166}
#define NULL
Definition resample.c:96
@ AST_SPEECH_STATE_READY
Definition speech.h:40
int(* dtmf)(struct ast_speech *speech, const char *dtmf)
Definition speech.h:94

References AST_SPEECH_STATE_READY, ast_speech_engine::dtmf, ast_speech::engine, NULL, and ast_speech::state.

Referenced by AST_TEST_DEFINE(), and speech_background().

◆ ast_speech_find_engine()

struct ast_speech_engine * ast_speech_find_engine ( const char *  engine_name)

Find a speech recognition engine of specified name, if NULL then use the default one.

Retrieve a speech recognition engine.

Definition at line 46 of file res_speech.c.

47{
48 struct ast_speech_engine *engine = NULL;
49
50 /* If no name is specified -- use the default engine */
52 return default_engine;
53
55 AST_RWLIST_TRAVERSE(&engines, engine, list) {
56 if (!strcasecmp(engine->name, engine_name)) {
57 break;
58 }
59 }
61
62 return engine;
63}
#define AST_RWLIST_RDLOCK(head)
Read locks a list.
Definition linkedlists.h:78
#define AST_RWLIST_UNLOCK(head)
Attempts to unlock a read/write based list.
#define AST_RWLIST_TRAVERSE
static struct ast_speech_engine * default_engine
Definition res_speech.c:43
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition strings.h:65
int(* start)(struct ast_speech *speech)
Definition speech.h:96

References AST_RWLIST_RDLOCK, AST_RWLIST_TRAVERSE, AST_RWLIST_UNLOCK, ast_strlen_zero(), default_engine, ast_speech_engine::name, NULL, and ast_speech_engine::start.

Referenced by ast_speech_new(), ast_speech_register(), and load_engine().

◆ ast_speech_get_setting()

int ast_speech_get_setting ( struct ast_speech speech,
const char *  name,
char *  buf,
size_t  len 
)

Get an engine specific attribute.

Definition at line 175 of file res_speech.c.

176{
177 return (speech->engine->get_setting ? speech->engine->get_setting(speech, name, buf, len) : -1);
178}
char buf[BUFSIZE]
Definition eagi_proxy.c:66
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
int(* get_setting)(struct ast_speech *speech, const char *name, char *buf, size_t len)
Definition speech.h:100

References buf, ast_speech::engine, ast_speech_engine::get_setting, len(), and name.

Referenced by AST_TEST_DEFINE(), and speech_engine_read().

◆ ast_speech_grammar_activate()

int ast_speech_grammar_activate ( struct ast_speech speech,
const char *  grammar_name 
)

Activate a loaded (either local or global) grammar.

Activate a grammar on a speech structure.

Definition at line 66 of file res_speech.c.

67{
68 return (speech->engine->activate ? speech->engine->activate(speech, grammar_name) : -1);
69}
int(* activate)(struct ast_speech *speech, const char *grammar_name)
Definition speech.h:88

References ast_speech_engine::activate, ast_speech::engine, and ast_speech_engine::start.

Referenced by handle_speechactivategrammar(), and speech_activate().

◆ ast_speech_grammar_deactivate()

int ast_speech_grammar_deactivate ( struct ast_speech speech,
const char *  grammar_name 
)

Deactivate a loaded grammar on a speech structure.

Deactivate a grammar on a speech structure.

Definition at line 72 of file res_speech.c.

73{
74 return (speech->engine->deactivate ? speech->engine->deactivate(speech, grammar_name) : -1);
75}
int(* deactivate)(struct ast_speech *speech, const char *grammar_name)
Definition speech.h:90

References ast_speech_engine::deactivate, ast_speech::engine, and ast_speech_engine::start.

Referenced by handle_speechdeactivategrammar(), and speech_deactivate().

◆ ast_speech_grammar_load()

int ast_speech_grammar_load ( struct ast_speech speech,
const char *  grammar_name,
const char *  grammar 
)

Load a local grammar on a speech structure.

Load a grammar on a speech structure (not globally)

Definition at line 78 of file res_speech.c.

79{
80 return (speech->engine->load ? speech->engine->load(speech, grammar_name, grammar) : -1);
81}
int(* load)(struct ast_speech *speech, const char *grammar_name, const char *grammar)
Definition speech.h:84

References ast_speech::engine, ast_speech_engine::load, and ast_speech_engine::start.

Referenced by handle_speechloadgrammar(), and speech_load().

◆ ast_speech_grammar_unload()

int ast_speech_grammar_unload ( struct ast_speech speech,
const char *  grammar_name 
)

Unload a local grammar from a speech structure.

Unload a grammar.

Definition at line 84 of file res_speech.c.

85{
86 return (speech->engine->unload ? speech->engine->unload(speech, grammar_name) : -1);
87}
int(* unload)(struct ast_speech *speech, const char *grammar_name)
Definition speech.h:86

References ast_speech::engine, ast_speech_engine::start, and ast_speech_engine::unload.

Referenced by handle_speechunloadgrammar(), and speech_unload().

◆ ast_speech_new()

struct ast_speech * ast_speech_new ( const char *  engine_name,
const struct ast_format_cap cap 
)

Create a new speech structure using the engine specified.

Create a new speech structure.

Definition at line 181 of file res_speech.c.

182{
183 struct ast_speech_engine *engine = NULL;
184 struct ast_speech *new_speech = NULL;
185 struct ast_format_cap *joint;
186 RAII_VAR(struct ast_format *, best, NULL, ao2_cleanup);
187 RAII_VAR(struct ast_format *, best_translated, NULL, ao2_cleanup);
188
189 /* Try to find the speech recognition engine that was requested */
190 if (!(engine = ast_speech_find_engine(engine_name)))
191 return NULL;
192
194 if (!joint) {
195 return NULL;
196 }
197
198 ast_format_cap_get_compatible(engine->formats, cap, joint);
199 best = ast_format_cap_get_format(joint, 0);
200 ao2_ref(joint, -1);
201
202 if (!best) {
205 } else {
206 /*
207 * If there is no overlap and the engine does not support slin, find the best
208 * format to translate to and set that as the 'best' input format for the engine.
209 * API consumer is responsible for translating to this format.
210 * Safe to cast cap as ast_translator_best_choice does not modify the caps
211 */
212 if (ast_translator_best_choice(engine->formats, (struct ast_format_cap *)cap, &best, &best_translated)) {
213 /* No overlapping formats and no translatable formats */
214 return NULL;
215 }
216 }
217 }
218
219 /* Allocate our own speech structure, and try to allocate a structure from the engine too */
220 if (!(new_speech = ast_calloc(1, sizeof(*new_speech)))) {
221 return NULL;
222 }
223
224 /* Initialize the lock */
225 ast_mutex_init(&new_speech->lock);
226
227 /* Make sure no results are present */
228 new_speech->results = NULL;
229
230 /* Copy over our engine pointer */
231 new_speech->engine = engine;
232
233 /* Can't forget the format audio is going to be in */
234 new_speech->format = ao2_bump(best);
235
236 /* We are not ready to accept audio yet */
238
239 /* Pass ourselves to the engine so they can set us up some more and if they error out then do not create a structure */
240 if (engine->create(new_speech, new_speech->format)) {
241 ast_mutex_destroy(&new_speech->lock);
242 ao2_ref(new_speech->format, -1);
243 ast_free(new_speech);
244 return NULL;
245 }
246
247 return new_speech;
248}
#define ast_calloc(num, len)
A wrapper for calloc()
Definition astmm.h:202
#define ao2_cleanup(obj)
Definition astobj2.h:1934
#define ao2_bump(obj)
Bump refcount on an AO2 object by one, returning the object.
Definition astobj2.h:480
@ AST_FORMAT_CMP_NOT_EQUAL
Definition format.h:38
struct ast_format * ast_format_slin
Built-in cached signed linear 8kHz format.
struct ast_format * ast_format_cap_get_format(const struct ast_format_cap *cap, int position)
Get the format at a specific index.
Definition format_cap.c:400
int ast_format_cap_get_compatible(const struct ast_format_cap *cap1, const struct ast_format_cap *cap2, struct ast_format_cap *result)
Find the compatible formats between two capabilities structures.
Definition format_cap.c:628
enum ast_format_cmp_res ast_format_cap_iscompatible_format(const struct ast_format_cap *cap, const struct ast_format *format)
Find if ast_format is within the capabilities of the ast_format_cap object.
Definition format_cap.c:581
@ AST_FORMAT_CAP_FLAG_DEFAULT
Definition format_cap.h:38
#define ast_format_cap_alloc(flags)
Allocate a new ast_format_cap structure.
Definition format_cap.h:49
#define ast_mutex_init(pmutex)
Definition lock.h:193
struct ast_speech_engine * ast_speech_find_engine(const char *engine_name)
Find a speech recognition engine of specified name, if NULL then use the default one.
Definition res_speech.c:46
int ast_speech_change_state(struct ast_speech *speech, int state)
Change state of a speech structure.
Definition res_speech.c:278
@ AST_SPEECH_STATE_NOT_READY
Definition speech.h:39
Format capabilities structure, holds formats + preference order + etc.
Definition format_cap.c:54
Definition of a media format.
Definition format.c:43
struct ast_format_cap * formats
Definition speech.h:106
int(* create)(struct ast_speech *speech, struct ast_format *format)
Definition speech.h:80
int ast_translator_best_choice(struct ast_format_cap *dst_cap, struct ast_format_cap *src_cap, struct ast_format **dst_fmt_out, struct ast_format **src_fmt_out)
Chooses the best translation path.
Definition translate.c:1402
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.
Definition utils.h:981

References ao2_bump, ao2_cleanup, ao2_ref, ast_calloc, ast_format_cap_alloc, AST_FORMAT_CAP_FLAG_DEFAULT, ast_format_cap_get_compatible(), ast_format_cap_get_format(), ast_format_cap_iscompatible_format(), AST_FORMAT_CMP_NOT_EQUAL, ast_format_slin, ast_free, ast_mutex_destroy, ast_mutex_init, ast_speech_change_state(), ast_speech_find_engine(), AST_SPEECH_STATE_NOT_READY, ast_translator_best_choice(), ast_speech_engine::create, ast_speech::engine, ast_speech::format, ast_speech_engine::formats, ast_speech::lock, NULL, RAII_VAR, and ast_speech::results.

Referenced by AST_TEST_DEFINE(), handle_speechcreate(), and speech_create().

◆ ast_speech_register()

int ast_speech_register ( struct ast_speech_engine engine)

Register a speech recognition engine.

Definition at line 316 of file res_speech.c.

317{
318 int res = 0;
319
320 /* Confirm the engine meets the minimum API requirements */
321 if (!engine->create || !engine->write || !engine->destroy) {
322 ast_log(LOG_WARNING, "Speech recognition engine '%s' did not meet minimum API requirements.\n", engine->name);
323 return -1;
324 }
325
326 /* If an engine is already loaded with this name, error out */
327 if (ast_speech_find_engine(engine->name)) {
328 ast_log(LOG_WARNING, "Speech recognition engine '%s' already exists.\n", engine->name);
329 return -1;
330 }
331
332 ast_verb(5, "Registered speech recognition engine '%s'\n", engine->name);
333
334 /* Add to the engine linked list and make default if needed */
336 AST_RWLIST_INSERT_HEAD(&engines, engine, list);
337 if (!default_engine) {
338 default_engine = engine;
339 ast_verb(5, "Made '%s' the default speech recognition engine\n", engine->name);
340 }
342
343 return res;
344}
#define ast_log
Definition astobj2.c:42
#define ast_verb(level,...)
#define LOG_WARNING
#define AST_RWLIST_WRLOCK(head)
Write locks a list.
Definition linkedlists.h:52
#define AST_RWLIST_INSERT_HEAD
int(* write)(struct ast_speech *speech, void *data, int len)
Definition speech.h:92

References ast_log, AST_RWLIST_INSERT_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_speech_find_engine(), ast_verb, ast_speech_engine::create, default_engine, ast_speech_engine::destroy, LOG_WARNING, ast_speech_engine::name, and ast_speech_engine::write.

Referenced by speech_engine_alloc_and_register().

◆ ast_speech_results_free()

int ast_speech_results_free ( struct ast_speech_result result)

Free a list of results.

Free a set of results.

Definition at line 96 of file res_speech.c.

97{
98 struct ast_speech_result *current_result = result, *prev_result = NULL;
99 int res = 0;
100
101 while (current_result != NULL) {
102 prev_result = current_result;
103 /* Deallocate what we can */
104 if (current_result->text != NULL) {
105 ast_free(current_result->text);
106 current_result->text = NULL;
107 }
108 if (current_result->grammar != NULL) {
109 ast_free(current_result->grammar);
110 current_result->grammar = NULL;
111 }
112 /* Move on and then free ourselves */
113 current_result = AST_LIST_NEXT(current_result, list);
114 ast_free(prev_result);
115 prev_result = NULL;
116 }
117
118 return res;
119}
static PGresult * result
Definition cel_pgsql.c:84
#define AST_LIST_NEXT(elm, field)
Returns the next entry in the list after the given entry.

References ast_free, AST_LIST_NEXT, ast_speech_result::grammar, NULL, result, and ast_speech_result::text.

Referenced by ast_speech_destroy(), ast_speech_start(), and AST_TEST_DEFINE().

◆ ast_speech_results_get()

struct ast_speech_result * ast_speech_results_get ( struct ast_speech speech)

Return the results of a recognition from the speech structure.

Get speech recognition results.

Definition at line 90 of file res_speech.c.

91{
92 return (speech->engine->get ? speech->engine->get(speech) : NULL);
93}
struct ast_speech_result *(* get)(struct ast_speech *speech)
Definition speech.h:104

References ast_speech::engine, ast_speech_engine::get, and NULL.

Referenced by AST_TEST_DEFINE(), handle_speechrecognize(), and speech_background().

◆ ast_speech_results_type_to_string()

const char * ast_speech_results_type_to_string ( enum ast_speech_results_type  type)

Convert a speech results type to a string.

Definition at line 294 of file res_speech.c.

295{
296 switch (type) {
298 return "normal";
300 return "nbest";
301 default:
302 ast_assert(0);
303 return "unknown";
304 }
305}
static const char type[]
@ AST_SPEECH_RESULTS_TYPE_NBEST
Definition speech.h:47
@ AST_SPEECH_RESULTS_TYPE_NORMAL
Definition speech.h:46
#define ast_assert(a)
Definition utils.h:779

References ast_assert, AST_SPEECH_RESULTS_TYPE_NBEST, AST_SPEECH_RESULTS_TYPE_NORMAL, and type.

Referenced by speech_aeap_engine_change_results_type().

◆ ast_speech_start()

void ast_speech_start ( struct ast_speech speech)

Start speech recognition on a speech structure.

Indicate to the speech engine that audio is now going to start being written.

Definition at line 122 of file res_speech.c.

123{
124
125 /* Clear any flags that may affect things */
129
130 /* If results are on the structure, free them since we are starting again */
131 if (speech->results) {
133 speech->results = NULL;
134 }
135
136 /* If the engine needs to start stuff up, do it */
137 if (speech->engine->start)
138 speech->engine->start(speech);
139
140 return;
141}
@ AST_SPEECH_QUIET
Definition speech.h:32
@ AST_SPEECH_HAVE_RESULTS
Definition speech.h:34
#define ast_clear_flag(p, flag)
Definition utils.h:78

References ast_clear_flag, AST_SPEECH_HAVE_RESULTS, AST_SPEECH_QUIET, ast_speech_results_free(), AST_SPEECH_SPOKE, ast_speech::engine, NULL, ast_speech::results, and ast_speech_engine::start.

Referenced by AST_TEST_DEFINE(), handle_speechrecognize(), speech_background(), and speech_start().

◆ ast_speech_unregister()

int ast_speech_unregister ( const char *  engine_name)

Unregister a speech recognition engine.

Definition at line 347 of file res_speech.c.

348{
349 return ast_speech_unregister2(engine_name) == NULL ? -1 : 0;
350}
struct ast_speech_engine * ast_speech_unregister2(const char *engine_name)
Unregister a speech recognition engine.
Definition res_speech.c:352

References ast_speech_unregister2(), and NULL.

◆ ast_speech_unregister2()

struct ast_speech_engine * ast_speech_unregister2 ( const char *  engine_name)

Unregister a speech recognition engine.

Definition at line 352 of file res_speech.c.

353{
354 struct ast_speech_engine *engine = NULL;
355
357 return NULL;
358 }
359
362 if (!strcasecmp(engine->name, engine_name)) {
363 /* We have our engine... removed it */
365 /* If this was the default engine, we need to pick a new one */
366 if (engine == default_engine) {
368 }
369 ast_verb(5, "Unregistered speech recognition engine '%s'\n", engine_name);
370 /* All went well */
371 break;
372 }
373 }
376
377 return engine;
378}
#define AST_RWLIST_REMOVE_CURRENT
#define AST_RWLIST_TRAVERSE_SAFE_BEGIN
#define AST_RWLIST_FIRST
#define AST_RWLIST_TRAVERSE_SAFE_END

References AST_RWLIST_FIRST, AST_RWLIST_REMOVE_CURRENT, AST_RWLIST_TRAVERSE_SAFE_BEGIN, AST_RWLIST_TRAVERSE_SAFE_END, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_strlen_zero(), ast_verb, default_engine, ast_speech_engine::name, NULL, and ast_speech_engine::start.

Referenced by ast_speech_unregister(), load_engine(), unload_engine(), and unload_module().

◆ ast_speech_unregister_engines()

void ast_speech_unregister_engines ( int(*)(const struct ast_speech_engine *engine, void *data)  should_unregister,
void *  data,
void(*)(void *obj)  on_unregistered 
)

Unregister all speech recognition engines told to by callback.

Definition at line 380 of file res_speech.c.

383{
384 struct ast_speech_engine *engine = NULL;
385
386 if (!should_unregister) {
387 return;
388 }
389
392 if (should_unregister(engine, data)) {
393 /* We have our engine... removed it */
395 /* If this was the default engine, we need to pick a new one */
396 if (engine == default_engine) {
398 }
399 ast_verb(5, "Unregistered speech recognition engine '%s'\n", engine->name);
400 /* All went well */
401 if (on_unregistered) {
402 on_unregistered(engine);
403 }
404 }
405 }
408}
static int should_unregister(const struct ast_speech_engine *engine, void *data)

References AST_RWLIST_FIRST, AST_RWLIST_REMOVE_CURRENT, AST_RWLIST_TRAVERSE_SAFE_BEGIN, AST_RWLIST_TRAVERSE_SAFE_END, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, ast_verb, default_engine, ast_speech_engine::name, NULL, should_unregister(), and ast_speech_engine::start.

Referenced by speech_observer_loaded().

◆ ast_speech_write()

int ast_speech_write ( struct ast_speech speech,
void *  data,
int  len 
)

Write in signed linear audio to be recognized.

Write audio to the speech engine.

Definition at line 144 of file res_speech.c.

145{
146 /* Make sure the speech engine is ready to accept audio */
147 if (speech->state != AST_SPEECH_STATE_READY)
148 return -1;
149
150 return speech->engine->write(speech, data, len);
151}

References AST_SPEECH_STATE_READY, ast_speech::engine, len(), ast_speech::state, and ast_speech_engine::write.

Referenced by handle_speechrecognize(), and speech_background().

◆ load_module()

static int load_module ( void  )
static

Definition at line 416 of file res_speech.c.

417{
419}
@ AST_MODULE_LOAD_SUCCESS
Definition module.h:70

References AST_MODULE_LOAD_SUCCESS.

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 410 of file res_speech.c.

411{
412 /* We can not be unloaded */
413 return -1;
414}

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER , .description = "Generic Speech Recognition API" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_APP_DEPEND - 1, }
static

Definition at line 426 of file res_speech.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 426 of file res_speech.c.

◆ default_engine

struct ast_speech_engine* default_engine = NULL
static

◆ engines