Asterisk - The Open Source Telephony Project  GIT-master-a24979a
Data Structures | Enumerations | Functions
speech.h File Reference

Generic Speech Recognition API. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ast_speech
 
struct  ast_speech_engine
 
struct  ast_speech_result
 

Enumerations

enum  ast_speech_flags { AST_SPEECH_QUIET = (1 << 0) , AST_SPEECH_SPOKE = (1 << 1) , AST_SPEECH_HAVE_RESULTS = (1 << 2) }
 
enum  ast_speech_results_type { AST_SPEECH_RESULTS_TYPE_NORMAL = 0 , AST_SPEECH_RESULTS_TYPE_NBEST }
 
enum  ast_speech_states { AST_SPEECH_STATE_NOT_READY = 0 , AST_SPEECH_STATE_READY , AST_SPEECH_STATE_WAIT , AST_SPEECH_STATE_DONE }
 

Functions

int ast_speech_change (struct ast_speech *speech, const char *name, const char *value)
 Change an engine specific attribute. More...
 
int ast_speech_change_results_type (struct ast_speech *speech, enum ast_speech_results_type results_type)
 Change the type of results we want. More...
 
int ast_speech_change_state (struct ast_speech *speech, int state)
 Change state of a speech structure. More...
 
int ast_speech_destroy (struct ast_speech *speech)
 Destroy a speech structure. More...
 
int ast_speech_dtmf (struct ast_speech *speech, const char *dtmf)
 Signal to the engine that DTMF was received. More...
 
struct ast_speech_engineast_speech_find_engine (const char *engine_name)
 Retrieve a speech recognition engine. More...
 
int ast_speech_get_setting (struct ast_speech *speech, const char *name, char *buf, size_t len)
 Get an engine specific attribute. More...
 
int ast_speech_grammar_activate (struct ast_speech *speech, const char *grammar_name)
 Activate a grammar on a speech structure. More...
 
int ast_speech_grammar_deactivate (struct ast_speech *speech, const char *grammar_name)
 Deactivate a grammar on a speech structure. More...
 
int ast_speech_grammar_load (struct ast_speech *speech, const char *grammar_name, const char *grammar)
 Load a grammar on a speech structure (not globally) More...
 
int ast_speech_grammar_unload (struct ast_speech *speech, const char *grammar_name)
 Unload a grammar. More...
 
struct ast_speechast_speech_new (const char *engine_name, const struct ast_format_cap *formats)
 Create a new speech structure. More...
 
int ast_speech_register (struct ast_speech_engine *engine)
 Register a speech recognition engine. More...
 
int ast_speech_results_free (struct ast_speech_result *result)
 Free a set of results. More...
 
struct ast_speech_resultast_speech_results_get (struct ast_speech *speech)
 Get speech recognition results. More...
 
const char * ast_speech_results_type_to_string (enum ast_speech_results_type type)
 Convert a speech results type to a string. More...
 
void ast_speech_start (struct ast_speech *speech)
 Indicate to the speech engine that audio is now going to start being written. More...
 
int ast_speech_unregister (const char *engine_name)
 Unregister a speech recognition engine. More...
 
struct ast_speech_engineast_speech_unregister2 (const char *engine_name)
 Unregister a speech recognition engine. More...
 
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. More...
 
int ast_speech_write (struct ast_speech *speech, void *data, int len)
 Write audio to the speech engine. More...
 

Detailed Description

Generic Speech Recognition API.

Definition in file speech.h.

Enumeration Type Documentation

◆ ast_speech_flags

Enumerator
AST_SPEECH_QUIET 
AST_SPEECH_SPOKE 
AST_SPEECH_HAVE_RESULTS 

Definition at line 31 of file speech.h.

31  {
32  AST_SPEECH_QUIET = (1 << 0), /* Quiet down output... they are talking */
33  AST_SPEECH_SPOKE = (1 << 1), /* Speaker spoke! */
34  AST_SPEECH_HAVE_RESULTS = (1 << 2), /* Results are present */
35 };
@ AST_SPEECH_QUIET
Definition: speech.h:32
@ AST_SPEECH_HAVE_RESULTS
Definition: speech.h:34
@ AST_SPEECH_SPOKE
Definition: speech.h:33

◆ ast_speech_results_type

Enumerator
AST_SPEECH_RESULTS_TYPE_NORMAL 
AST_SPEECH_RESULTS_TYPE_NBEST 

Definition at line 45 of file speech.h.

45  {
48 };
@ AST_SPEECH_RESULTS_TYPE_NBEST
Definition: speech.h:47
@ AST_SPEECH_RESULTS_TYPE_NORMAL
Definition: speech.h:46

◆ ast_speech_states

Enumerator
AST_SPEECH_STATE_NOT_READY 
AST_SPEECH_STATE_READY 
AST_SPEECH_STATE_WAIT 
AST_SPEECH_STATE_DONE 

Definition at line 38 of file speech.h.

38  {
39  AST_SPEECH_STATE_NOT_READY = 0, /* Not ready to accept audio */
40  AST_SPEECH_STATE_READY, /* Accepting audio */
41  AST_SPEECH_STATE_WAIT, /* Wait for results to become available */
42  AST_SPEECH_STATE_DONE, /* Processing is all done */
43 };
@ AST_SPEECH_STATE_DONE
Definition: speech.h:42
@ AST_SPEECH_STATE_READY
Definition: speech.h:40
@ AST_SPEECH_STATE_NOT_READY
Definition: speech.h:39
@ AST_SPEECH_STATE_WAIT
Definition: speech.h:41

Function Documentation

◆ 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 168 of file res_speech.c.

169 {
170  return (speech->engine->change ? speech->engine->change(speech, name, value) : -1);
171 }
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 297 of file res_speech.c.

298 {
299  speech->results_type = results_type;
300 
301  return (speech->engine->change_results_type ? speech->engine->change_results_type(speech, results_type) : 0);
302 }
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().

◆ ast_speech_change_state()

int ast_speech_change_state ( struct ast_speech speech,
int  state 
)

Change state of a speech structure.

Definition at line 267 of file res_speech.c.

268 {
269  int res = 0;
270 
271  switch (state) {
273  /* The engine heard audio, so they spoke */
275  default:
276  speech->state = state;
277  break;
278  }
279 
280  return res;
281 }
enum sip_cc_notify_state state
Definition: chan_sip.c:966
int state
Definition: speech.h:62
#define ast_set_flag(p, flag)
Definition: utils.h:70

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

Referenced by ast_speech_new(), handle_request_set(), 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 240 of file res_speech.c.

241 {
242  int res = 0;
243 
244  /* Call our engine so we are destroyed properly */
245  speech->engine->destroy(speech);
246 
247  /* Deinitialize the lock */
248  ast_mutex_destroy(&speech->lock);
249 
250  /* If results exist on the speech structure, destroy them */
251  if (speech->results)
253 
254  /* If a processing sound is set - free the memory used by it */
255  if (speech->processing_sound)
256  ast_free(speech->processing_sound);
257 
258  ao2_ref(speech->format, -1);
259 
260  /* Aloha we are done */
261  ast_free(speech);
262 
263  return res;
264 }
#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:186
int ast_speech_results_free(struct ast_speech_result *result)
Free a list of results.
Definition: res_speech.c:95
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(), 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 153 of file res_speech.c.

154 {
155  int res = 0;
156 
157  if (speech->state != AST_SPEECH_STATE_READY)
158  return -1;
159 
160  if (speech->engine->dtmf != NULL) {
161  res = speech->engine->dtmf(speech, dtmf);
162  }
163 
164  return res;
165 }
#define NULL
Definition: resample.c:96
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)

Retrieve a speech recognition engine.

Retrieve a speech recognition engine.

Definition at line 45 of file res_speech.c.

46 {
47  struct ast_speech_engine *engine = NULL;
48 
49  /* If no name is specified -- use the default engine */
50  if (ast_strlen_zero(engine_name))
51  return default_engine;
52 
54  AST_RWLIST_TRAVERSE(&engines, engine, list) {
55  if (!strcasecmp(engine->name, engine_name)) {
56  break;
57  }
58  }
60 
61  return engine;
62 }
#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.
Definition: linkedlists.h:151
#define AST_RWLIST_TRAVERSE
Definition: linkedlists.h:494
static struct ast_speech_engine * default_engine
Definition: res_speech.c:42
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
char * name
Definition: speech.h:78

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

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 174 of file res_speech.c.

175 {
176  return (speech->engine->get_setting ? speech->engine->get_setting(speech, name, buf, len) : -1);
177 }
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().

◆ ast_speech_grammar_activate()

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

Activate a grammar on a speech structure.

Activate a grammar on a speech structure.

Definition at line 65 of file res_speech.c.

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

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

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 grammar on a speech structure.

Deactivate a grammar on a speech structure.

Definition at line 71 of file res_speech.c.

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

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

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 grammar on a speech structure (not globally)

Load a grammar on a speech structure (not globally)

Definition at line 77 of file res_speech.c.

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

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

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 grammar.

Unload a grammar.

Definition at line 83 of file res_speech.c.

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

References ast_speech::engine, 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.

Create a new speech structure.

Definition at line 180 of file res_speech.c.

181 {
182  struct ast_speech_engine *engine = NULL;
183  struct ast_speech *new_speech = NULL;
184  struct ast_format_cap *joint;
185  RAII_VAR(struct ast_format *, best, NULL, ao2_cleanup);
186 
187  /* Try to find the speech recognition engine that was requested */
188  if (!(engine = ast_speech_find_engine(engine_name)))
189  return NULL;
190 
192  if (!joint) {
193  return NULL;
194  }
195 
196  ast_format_cap_get_compatible(engine->formats, cap, joint);
197  best = ast_format_cap_get_format(joint, 0);
198  ao2_ref(joint, -1);
199 
200  if (!best) {
202  best = ao2_bump(ast_format_slin);
203  } else {
204  return NULL;
205  }
206  }
207 
208  /* Allocate our own speech structure, and try to allocate a structure from the engine too */
209  if (!(new_speech = ast_calloc(1, sizeof(*new_speech)))) {
210  return NULL;
211  }
212 
213  /* Initialize the lock */
214  ast_mutex_init(&new_speech->lock);
215 
216  /* Make sure no results are present */
217  new_speech->results = NULL;
218 
219  /* Copy over our engine pointer */
220  new_speech->engine = engine;
221 
222  /* Can't forget the format audio is going to be in */
223  new_speech->format = ao2_bump(best);
224 
225  /* We are not ready to accept audio yet */
227 
228  /* Pass ourselves to the engine so they can set us up some more and if they error out then do not create a structure */
229  if (engine->create(new_speech, new_speech->format)) {
230  ast_mutex_destroy(&new_speech->lock);
231  ao2_ref(new_speech->format, -1);
232  ast_free(new_speech);
233  return NULL;
234  }
235 
236  return new_speech;
237 }
#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.
Definition: format_cache.c:41
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
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
#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:184
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:45
int ast_speech_change_state(struct ast_speech *speech, int state)
Change state of a speech structure.
Definition: res_speech.c:267
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
#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:936

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_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 305 of file res_speech.c.

306 {
307  int res = 0;
308 
309  /* Confirm the engine meets the minimum API requirements */
310  if (!engine->create || !engine->write || !engine->destroy) {
311  ast_log(LOG_WARNING, "Speech recognition engine '%s' did not meet minimum API requirements.\n", engine->name);
312  return -1;
313  }
314 
315  /* If an engine is already loaded with this name, error out */
316  if (ast_speech_find_engine(engine->name)) {
317  ast_log(LOG_WARNING, "Speech recognition engine '%s' already exists.\n", engine->name);
318  return -1;
319  }
320 
321  ast_verb(2, "Registered speech recognition engine '%s'\n", engine->name);
322 
323  /* Add to the engine linked list and make default if needed */
325  AST_RWLIST_INSERT_HEAD(&engines, engine, list);
326  if (!default_engine) {
327  default_engine = engine;
328  ast_verb(2, "Made '%s' the default speech recognition engine\n", engine->name);
329  }
331 
332  return res;
333 }
#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
Definition: linkedlists.h:718
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 set of results.

Free a set of results.

Definition at line 95 of file res_speech.c.

96 {
97  struct ast_speech_result *current_result = result, *prev_result = NULL;
98  int res = 0;
99 
100  while (current_result != NULL) {
101  prev_result = current_result;
102  /* Deallocate what we can */
103  if (current_result->text != NULL) {
104  ast_free(current_result->text);
105  current_result->text = NULL;
106  }
107  if (current_result->grammar != NULL) {
108  ast_free(current_result->grammar);
109  current_result->grammar = NULL;
110  }
111  /* Move on and then free ourselves */
112  current_result = AST_LIST_NEXT(current_result, list);
113  ast_free(prev_result);
114  prev_result = NULL;
115  }
116 
117  return res;
118 }
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.
Definition: linkedlists.h:439
char * grammar
Definition: speech.h:119

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)

Get speech recognition results.

Get speech recognition results.

Definition at line 89 of file res_speech.c.

90 {
91  return (speech->engine->get ? speech->engine->get(speech) : NULL);
92 }
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(), 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 283 of file res_speech.c.

284 {
285  switch (type) {
287  return "normal";
289  return "nbest";
290  default:
291  ast_assert(0);
292  return "unknown";
293  }
294 }
static const char type[]
Definition: chan_ooh323.c:109
#define ast_assert(a)
Definition: utils.h:734

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)

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

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

Definition at line 121 of file res_speech.c.

122 {
123 
124  /* Clear any flags that may affect things */
128 
129  /* If results are on the structure, free them since we are starting again */
130  if (speech->results) {
132  speech->results = NULL;
133  }
134 
135  /* If the engine needs to start stuff up, do it */
136  if (speech->engine->start)
137  speech->engine->start(speech);
138 
139  return;
140 }
int(* start)(struct ast_speech *speech)
Definition: speech.h:96
#define ast_clear_flag(p, flag)
Definition: utils.h:77

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(), speech_background(), and speech_start().

◆ ast_speech_unregister()

int ast_speech_unregister ( const char *  engine_name)

Unregister a speech recognition engine.

Definition at line 336 of file res_speech.c.

337 {
338  return ast_speech_unregister2(engine_name) == NULL ? -1 : 0;
339 }
struct ast_speech_engine * ast_speech_unregister2(const char *engine_name)
Unregister a speech recognition engine.
Definition: res_speech.c:341

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 341 of file res_speech.c.

342 {
343  struct ast_speech_engine *engine = NULL;
344 
345  if (ast_strlen_zero(engine_name)) {
346  return NULL;
347  }
348 
350  AST_RWLIST_TRAVERSE_SAFE_BEGIN(&engines, engine, list) {
351  if (!strcasecmp(engine->name, engine_name)) {
352  /* We have our engine... removed it */
354  /* If this was the default engine, we need to pick a new one */
355  if (engine == default_engine) {
357  }
358  ast_verb(2, "Unregistered speech recognition engine '%s'\n", engine_name);
359  /* All went well */
360  break;
361  }
362  }
365 
366  return engine;
367 }
#define AST_RWLIST_REMOVE_CURRENT
Definition: linkedlists.h:570
#define AST_RWLIST_TRAVERSE_SAFE_BEGIN
Definition: linkedlists.h:545
#define AST_RWLIST_FIRST
Definition: linkedlists.h:423
#define AST_RWLIST_TRAVERSE_SAFE_END
Definition: linkedlists.h:617

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, and NULL.

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 369 of file res_speech.c.

372 {
373  struct ast_speech_engine *engine = NULL;
374 
375  if (!should_unregister) {
376  return;
377  }
378 
380  AST_RWLIST_TRAVERSE_SAFE_BEGIN(&engines, engine, list) {
381  if (should_unregister(engine, data)) {
382  /* We have our engine... removed it */
384  /* If this was the default engine, we need to pick a new one */
385  if (engine == default_engine) {
387  }
388  ast_verb(2, "Unregistered speech recognition engine '%s'\n", engine->name);
389  /* All went well */
390  if (on_unregistered) {
391  on_unregistered(engine);
392  }
393  }
394  }
397 }
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, and should_unregister().

◆ ast_speech_write()

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

Write audio to the speech engine.

Write audio to the speech engine.

Definition at line 143 of file res_speech.c.

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

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

Referenced by speech_background().