pangdudu-swiftly 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +57 -0
- data/external/include/swift.h +1040 -0
- data/external/include/swift_defs.h +132 -0
- data/external/include/swift_exports.h +45 -0
- data/external/include/swift_params.h +361 -0
- data/lib/Swiftly.c +47 -0
- data/lib/extconf.rb +14 -0
- data/test/test_swiftly.rb +11 -0
- metadata +63 -0
data/README.rdoc
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
== swiftly
|
2
|
+
|
3
|
+
Hi everybody!
|
4
|
+
|
5
|
+
I always wanted my ruby apps to tell me when something is wrong. :)
|
6
|
+
|
7
|
+
This is inspired by the gem flite4r I found after lunch. After looking around a
|
8
|
+
bit I found http://www.cepstral.com, which makes some pretty decent unit selection
|
9
|
+
based text to speech stuff.
|
10
|
+
|
11
|
+
They have some demo voices, but most of their voices cost around 29$. I couldn't
|
12
|
+
find any "free" TTS unit selection corpora, so if you know one, text me. :)
|
13
|
+
|
14
|
+
Oki, it's still pretty basic. It essentially just offers one method:
|
15
|
+
|
16
|
+
speak "something"
|
17
|
+
|
18
|
+
That's all I need right now, it will be pretty easy to bloat the whole thing with
|
19
|
+
all the stuff cepstrals swift can also do: SSML input, pitch, speed, other voices, etc ...
|
20
|
+
|
21
|
+
If you want to do that, feel free, fork or text me and I'll add you to the maintainors.
|
22
|
+
|
23
|
+
This is also the first time i've written a C extension for ruby (which is easy, so try it),
|
24
|
+
so if know a prettier way to do what Swiftly.c does, text me.
|
25
|
+
|
26
|
+
INSTALL:
|
27
|
+
|
28
|
+
Before this will work, you'll need to install a cepstral (5.1) voice and the
|
29
|
+
swift-app and sdk.
|
30
|
+
|
31
|
+
It's pretty easy, just go here: http://www.cepstral.com/downloads/
|
32
|
+
download a voice (comes with the swift-app and sdk) and install it.
|
33
|
+
|
34
|
+
then go to lib (that's where my code is) and run: ruby extconf.rb && make
|
35
|
+
|
36
|
+
Tada!
|
37
|
+
|
38
|
+
I'll build a gem later or so, lazy...
|
39
|
+
|
40
|
+
Example code:
|
41
|
+
|
42
|
+
require 'swiftly'
|
43
|
+
include Swiftly
|
44
|
+
|
45
|
+
class String
|
46
|
+
def to_speech
|
47
|
+
speak self
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
"Test. Test.".to_speech
|
52
|
+
|
53
|
+
|
54
|
+
Have fun!
|
55
|
+
|
56
|
+
,nick
|
57
|
+
|
@@ -0,0 +1,1040 @@
|
|
1
|
+
/* swift.h: Swift API for text-to-speech
|
2
|
+
*
|
3
|
+
* Copyright (c) 2002-2006 Cepstral LLC. All rights reserved.
|
4
|
+
*
|
5
|
+
* Redistribution of this file, in whole or in part, with or without
|
6
|
+
* modification, is not allowed without express written permission of
|
7
|
+
* the copyright holder.
|
8
|
+
*/
|
9
|
+
|
10
|
+
#ifndef _SWIFT_H_
|
11
|
+
#define _SWIFT_H_
|
12
|
+
|
13
|
+
#ifdef __cplusplus
|
14
|
+
extern "C" {
|
15
|
+
#endif /* __cplusplus */
|
16
|
+
|
17
|
+
/**
|
18
|
+
* \file swift.h
|
19
|
+
* Main include file for Swift text-to-speech engine.
|
20
|
+
**/
|
21
|
+
|
22
|
+
#include "swift_exports.h"
|
23
|
+
#include "swift_defs.h"
|
24
|
+
#include "swift_params.h"
|
25
|
+
|
26
|
+
/* swift_version strings exposed through SWIFT_API */
|
27
|
+
/** Contains the name of the Swift engine, as a string. */
|
28
|
+
SWIFT_API extern const char *swift_engine_name;
|
29
|
+
/** Contains the version of the Swift library, as a string. */
|
30
|
+
SWIFT_API extern const char *swift_version;
|
31
|
+
/** Contains the date of the Swift library, as a string. */
|
32
|
+
SWIFT_API extern const char *swift_date;
|
33
|
+
/** Contains the platform for which the Swift library was built,
|
34
|
+
* as a string. */
|
35
|
+
SWIFT_API extern const char *swift_platform;
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Open an instance of the Swift TTS engine.
|
39
|
+
*
|
40
|
+
* @param params A swift_params object with engine initialization parameters.
|
41
|
+
* <br>Parameters recognized are:
|
42
|
+
* - config/voice-path (string): A colon (most platforms) or semicolon
|
43
|
+
* (Windows) delimited list of directories to be searched for voices.
|
44
|
+
* - config/default-voice (string): The name of the default voice to
|
45
|
+
* use for text-to-speech.
|
46
|
+
* - NOTE: The engine retains ownership of this object, so you should not
|
47
|
+
* call swift_params_delete() on it.
|
48
|
+
* @return a new engine if successful, NULL for failure.
|
49
|
+
**/
|
50
|
+
SWIFT_API
|
51
|
+
swift_engine * SWIFT_CALLCONV swift_engine_open(swift_params *params);
|
52
|
+
|
53
|
+
/**
|
54
|
+
* Close and delete a Swift TTS engine.
|
55
|
+
*
|
56
|
+
* @param engine A swift_engine object
|
57
|
+
* @return SWIFT_SUCCESS if successful, SWIFT_ENGINE_INUSE if engine
|
58
|
+
* still has open ports associated with it
|
59
|
+
**/
|
60
|
+
SWIFT_API
|
61
|
+
swift_result_t SWIFT_CALLCONV swift_engine_close(swift_engine *engine);
|
62
|
+
|
63
|
+
/**
|
64
|
+
* Set the voice retention policy for the engine. Voice settings and
|
65
|
+
* parameters will be allocated as the voice is loaded. The retention
|
66
|
+
* policy dictates when this information will be released, allowing for
|
67
|
+
* the adjustment of voice-load overhead.
|
68
|
+
*
|
69
|
+
* NOTE: This function currently has no effect. The engine uses a retention
|
70
|
+
* policy of SWIFT_VOICE_RETAIN_FOREVER regardless of the actual setting.
|
71
|
+
*
|
72
|
+
* @param engine A swift_engine object
|
73
|
+
* @param policy A voice retention (i.e.: garbage collection policy). May
|
74
|
+
* be one of:
|
75
|
+
* - SWIFT_VOICE_RETAIN_FOREVER: retain voice information for the
|
76
|
+
* lifetime of the engine.
|
77
|
+
* - SWIFT_VOICE_RETAIN_PORT_USAGE: retain voice information for the
|
78
|
+
* lifetime of the ports using it.
|
79
|
+
* - SWIFT_VOICE_RETAIN_NONE: retain voice information only as long as
|
80
|
+
* the voice is in use.
|
81
|
+
* @return void
|
82
|
+
**/
|
83
|
+
SWIFT_API
|
84
|
+
void SWIFT_CALLCONV
|
85
|
+
swift_engine_set_voice_retention_policy(swift_engine *engine,
|
86
|
+
swift_voice_retention_policy_t policy);
|
87
|
+
|
88
|
+
/**
|
89
|
+
* Get the voice retention policy for the engine.
|
90
|
+
*
|
91
|
+
* @param engine A swift_engine object
|
92
|
+
* @return The voice retention (i.e.: garbage collection policy). May be
|
93
|
+
* one of:
|
94
|
+
* - SWIFT_VOICE_RETAIN_FOREVER: retain voice information for the
|
95
|
+
* lifetime of the engine.
|
96
|
+
* - SWIFT_VOICE_RETAIN_PORT_USAGE: retain voice information for the
|
97
|
+
* lifetime of the ports using it.
|
98
|
+
* - SWIFT_VOICE_RETAIN_NONE: retain voice information only as long as
|
99
|
+
* the voice is in use.
|
100
|
+
**/
|
101
|
+
SWIFT_API
|
102
|
+
swift_voice_retention_policy_t SWIFT_CALLCONV
|
103
|
+
swift_engine_get_voice_retention_policy(swift_engine *engine);
|
104
|
+
|
105
|
+
/**
|
106
|
+
* Open a new TTS port.
|
107
|
+
*
|
108
|
+
* @param engine An instance of a swift engine from swift_engine_open
|
109
|
+
* @param params A swift_params object with port initialization
|
110
|
+
* parameters and port-wide synthesis parameters.
|
111
|
+
* - NOTE: The port retains ownership of this object, so you should not
|
112
|
+
* call swift_params_delete() on it.
|
113
|
+
* @return The new port, or NULL for failure.
|
114
|
+
**/
|
115
|
+
SWIFT_API
|
116
|
+
swift_port * SWIFT_CALLCONV swift_port_open(swift_engine *engine,
|
117
|
+
swift_params *params);
|
118
|
+
|
119
|
+
/**
|
120
|
+
* Release resources of a TTS port. This is meant to be used when doing
|
121
|
+
* asynchronous processing. If called when SWIFT_EVENT_END is true, the concurrency
|
122
|
+
* license is released in the thread - thus relieving the main thread (which is
|
123
|
+
* calling swift_port_open) to allocate a port.
|
124
|
+
*
|
125
|
+
* Using this call eliminates the need for having a timeout of swift_port_open or
|
126
|
+
* the license server from cleaning dormant licenses.
|
127
|
+
*
|
128
|
+
* @param port The swift_port to close.
|
129
|
+
* @return SWIFT_SUCCESS on successful close, or one of several
|
130
|
+
* swift_result_t values.
|
131
|
+
**/
|
132
|
+
SWIFT_API
|
133
|
+
swift_result_t SWIFT_CALLCONV
|
134
|
+
swift_port_done_on_thread(swift_port *port);
|
135
|
+
|
136
|
+
/**
|
137
|
+
* Close a TTS port and dispose of its resources.
|
138
|
+
*
|
139
|
+
* @param port The swift_port to close.
|
140
|
+
* @return SWIFT_SUCCESS on successful close, or one of several
|
141
|
+
* swift_result_t values.
|
142
|
+
**/
|
143
|
+
SWIFT_API
|
144
|
+
swift_result_t SWIFT_CALLCONV swift_port_close(swift_port *port);
|
145
|
+
|
146
|
+
/**
|
147
|
+
* User-Defined callback function type (for audio, events, errors, etc).
|
148
|
+
* Pointer to this function is passed to swift_port_set_callback().
|
149
|
+
*
|
150
|
+
* @param event The event object this callback is being called for.
|
151
|
+
* @param type The type of this event.
|
152
|
+
* @param udata The user data pointer passed to swift_port_set_callback().
|
153
|
+
* @return Your callback should return SWIFT_SUCCESS (or 0), unless
|
154
|
+
* you wish to halt synthesis immediately, in which case
|
155
|
+
* you should return SWIFT_INTERRUPTED.
|
156
|
+
**/
|
157
|
+
typedef swift_result_t (*swift_callback_t)(swift_event *event,
|
158
|
+
swift_event_t type,
|
159
|
+
void *udata);
|
160
|
+
|
161
|
+
/**
|
162
|
+
* Set a callback for a port. This allows a user-defined function to
|
163
|
+
* handle swift_events as they are sent by the engine.
|
164
|
+
*
|
165
|
+
* @param port The port for which this callback is to be set.
|
166
|
+
* @param callback The callback function to set up, or NULL to remove
|
167
|
+
* an existing callback function.
|
168
|
+
* @param mask A bitmask of events you wish this function to be called
|
169
|
+
* for (see enum swift_event_t).
|
170
|
+
* @param udata User Data - pointer to anything you want to pass to the
|
171
|
+
* callback function.
|
172
|
+
* @return The previous callback function, or NULL if none.
|
173
|
+
**/
|
174
|
+
SWIFT_API
|
175
|
+
swift_callback_t SWIFT_CALLCONV
|
176
|
+
swift_port_set_callback(swift_port *port, swift_callback_t callback,
|
177
|
+
unsigned int mask, void *udata);
|
178
|
+
|
179
|
+
/**
|
180
|
+
* Get the string name of the given event type.
|
181
|
+
*
|
182
|
+
* @param type The event type of which to get the string name.
|
183
|
+
* @return The string name of the event, or NULL if no such event.
|
184
|
+
**/
|
185
|
+
SWIFT_API
|
186
|
+
const char * SWIFT_CALLCONV swift_event_type_get_name(swift_event_t type);
|
187
|
+
|
188
|
+
/**
|
189
|
+
* Get the event type for the given string name.
|
190
|
+
*
|
191
|
+
* @param name The string event name for which to get the type.
|
192
|
+
* @return The swift_event_t corresponding to the name, or 0 if none.
|
193
|
+
**/
|
194
|
+
SWIFT_API
|
195
|
+
swift_event_t SWIFT_CALLCONV swift_event_name_get_type(const char *name);
|
196
|
+
|
197
|
+
/**
|
198
|
+
* Get the swift_port and swift_background_t thread ID from which an event
|
199
|
+
* was generated.
|
200
|
+
*
|
201
|
+
* @param event The event for which to get the information.
|
202
|
+
* @param port Output - the swift_port from which the event was generated.
|
203
|
+
* @param async Output - the swift_background_t thread ID from wich the event
|
204
|
+
* was generated.
|
205
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if event is NULL
|
206
|
+
**/
|
207
|
+
SWIFT_API
|
208
|
+
swift_result_t SWIFT_CALLCONV
|
209
|
+
swift_event_get_context(swift_event *event, swift_port **port,
|
210
|
+
swift_background_t *async);
|
211
|
+
|
212
|
+
/**
|
213
|
+
* Get the timepoints for an event of type sentence, phrase, word, token,
|
214
|
+
* syllable, or phoneme.
|
215
|
+
*
|
216
|
+
* @param event The event for which to get the information.
|
217
|
+
* @param start Output - The starting time of the event with relation to
|
218
|
+
* the start of synthesis.
|
219
|
+
* @param len Output - The length of the event
|
220
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if event is NULL
|
221
|
+
**/
|
222
|
+
SWIFT_API
|
223
|
+
swift_result_t SWIFT_CALLCONV swift_event_get_times(swift_event *event,
|
224
|
+
float *start, float *len);
|
225
|
+
|
226
|
+
/**
|
227
|
+
* Get the text positions for an event of type sentence, phrase, word, or
|
228
|
+
* token.
|
229
|
+
*
|
230
|
+
* @param event The event for which to get the information.
|
231
|
+
* @param start Output - The starting position in the synthesis input text
|
232
|
+
* corresponding to the event.
|
233
|
+
* @param len Output - The length in characters of the text corresponding
|
234
|
+
* to the event.
|
235
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if event is NULL,
|
236
|
+
* or SWIFT_WRONG_EVENT if event type isn't
|
237
|
+
* SWIFT_EVENT_[SENTENCE/PHRASE/TOKEN/WORDBOOKMARK].
|
238
|
+
**/
|
239
|
+
SWIFT_API
|
240
|
+
swift_result_t SWIFT_CALLCONV swift_event_get_textpos(swift_event *event,
|
241
|
+
int *start, int *len);
|
242
|
+
|
243
|
+
/**
|
244
|
+
* Get the text string associated with an event of type sentence, phrase,
|
245
|
+
* word, or phoneme.
|
246
|
+
*
|
247
|
+
* @param event The event for which to get the information.
|
248
|
+
* @param text Output - pointer to the text associated with the event.
|
249
|
+
* @return SWIFT_SUCCESS, or one of several swift_result_t values.
|
250
|
+
**/
|
251
|
+
SWIFT_API
|
252
|
+
swift_result_t SWIFT_CALLCONV swift_event_get_text(swift_event *event,
|
253
|
+
char **text);
|
254
|
+
|
255
|
+
/**
|
256
|
+
* Get the audio buffer for an audio event.
|
257
|
+
*
|
258
|
+
* @param event The event for which to get the audio buffer.
|
259
|
+
* @param buf Output - The buffer that will receive the waveform.
|
260
|
+
* @param nbytes Output - The number of bytes copied into the buffer.
|
261
|
+
* @return SWIFT_SUCCESS, or one of several swift_result_t values.
|
262
|
+
**/
|
263
|
+
SWIFT_API
|
264
|
+
swift_result_t SWIFT_CALLCONV swift_event_get_audio(swift_event *event,
|
265
|
+
void **buf, int *nbytes);
|
266
|
+
|
267
|
+
/**
|
268
|
+
* Get the swift_waveform structure for an audio event.
|
269
|
+
*
|
270
|
+
* @param event The event for which to get the audio buffer.
|
271
|
+
* @param wave Input/Output - A pointer to a wave structure.
|
272
|
+
* @param concatenate Boolean - If true, audio will be concatenated onto the
|
273
|
+
* wave structure passed in. If false, the synthesized
|
274
|
+
* audio will overwrite any audio that may already be in
|
275
|
+
* the wave structure.
|
276
|
+
* @return SWIFT_SUCCESS, or one of several swift_result_t values.
|
277
|
+
**/
|
278
|
+
SWIFT_API
|
279
|
+
swift_result_t SWIFT_CALLCONV swift_event_get_wave(swift_event *event,
|
280
|
+
swift_waveform **wave,
|
281
|
+
int concatenate);
|
282
|
+
|
283
|
+
/**
|
284
|
+
* Get the error code and string message for an error event.
|
285
|
+
*
|
286
|
+
* @param event The error event for which to get the error information.
|
287
|
+
* @param rv Output - The error code of the error event.
|
288
|
+
* @param errmsg Output - The string message for the error event.
|
289
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if event is
|
290
|
+
* NULL, or SWIFT_WRONG_EVENT if event type is not
|
291
|
+
* SWIFT_EVENT_ERROR.
|
292
|
+
**/
|
293
|
+
SWIFT_API
|
294
|
+
swift_result_t SWIFT_CALLCONV swift_event_get_error(swift_event *event,
|
295
|
+
swift_result_t *rv,
|
296
|
+
const char **errmsg);
|
297
|
+
|
298
|
+
/**
|
299
|
+
* Set a port parameter.
|
300
|
+
*
|
301
|
+
* @param port The port being modified.
|
302
|
+
* @param name The name of the parameter.
|
303
|
+
* @param val The value (as a swift_val) of the parameter.
|
304
|
+
* @param async The background job in which to set this parameter.
|
305
|
+
* @return SWIFT_SUCCESS if successful, SWIFT_INVALID_PARAM if
|
306
|
+
* no such parameter exists.
|
307
|
+
*
|
308
|
+
* This function sets a synthesis parameter in a port, and optionally
|
309
|
+
* sets it in some or all of that port's running background jobs. The
|
310
|
+
* parameter and value described by NAME and VAL must be valid,
|
311
|
+
* i.e. NAME must specify a parameter that exists, and VAL must be a
|
312
|
+
* proper value for that parameter. swift_param_validate() is used to
|
313
|
+
* check this, against swift_param_descriptors.
|
314
|
+
**/
|
315
|
+
SWIFT_API
|
316
|
+
swift_result_t SWIFT_CALLCONV swift_port_set_param(swift_port *port,
|
317
|
+
const char *name,
|
318
|
+
swift_val *val,
|
319
|
+
swift_background_t async);
|
320
|
+
/**
|
321
|
+
* Set a list of parameters in a port.
|
322
|
+
*
|
323
|
+
* @param port The port on which to set the parameters list.
|
324
|
+
* @param params The list of parameters to set on the port.
|
325
|
+
* @param async The background job, if any, to set this paramters
|
326
|
+
* list in.
|
327
|
+
* @return SWIFT_SUCCESS, or one of several swift_result_t values.
|
328
|
+
**/
|
329
|
+
SWIFT_API
|
330
|
+
swift_result_t SWIFT_CALLCONV swift_port_set_params(swift_port *port,
|
331
|
+
swift_params *params,
|
332
|
+
swift_background_t async);
|
333
|
+
|
334
|
+
/** Set an integer or boolean parameter in a port. */
|
335
|
+
#define swift_port_set_param_int(p,n,i,a) \
|
336
|
+
swift_port_set_param(p,n,swift_val_int((int)(i)),a)
|
337
|
+
|
338
|
+
/** Set a floating-point parameter in a port. */
|
339
|
+
#define swift_port_set_param_float(p,n,f,a) \
|
340
|
+
swift_port_set_param(p,n,swift_val_float((float)(f)),a)
|
341
|
+
|
342
|
+
/** Set a string parameter in a port. */
|
343
|
+
#define swift_port_set_param_string(p,n,s,a) \
|
344
|
+
swift_port_set_param(p,n,swift_val_string((const char *)(s)),a)
|
345
|
+
|
346
|
+
/**
|
347
|
+
* Get a pointer to the first (default) voice matching params.
|
348
|
+
*
|
349
|
+
* @param port The port on which to search for voices.
|
350
|
+
* @param search_criteria A semicolon-separated list of attribute=value
|
351
|
+
* pairs required from the voice, or NULL to return
|
352
|
+
* the default voice.
|
353
|
+
* @param order_criteria A semicolon-separated list of attribute=value
|
354
|
+
* pairs used to set a loose sorting order on the
|
355
|
+
* list of those that match match the seach_criteria.
|
356
|
+
* Voices matching the order_criteria are placed at
|
357
|
+
* the top of the list.
|
358
|
+
* @return A descriptor for the voice, or NULL if not found.
|
359
|
+
*
|
360
|
+
* The search_criteria and order_criteria arguments are strings containing
|
361
|
+
* one or more expressions which are to be tested against the voice's
|
362
|
+
* attributes. These expressions are of the form ATTR=VALUE,
|
363
|
+
* ATTR<VALUE, or ATTR>VALUE. For example, to search for female
|
364
|
+
* voices only, you would call swift_port_find_first_voice(port,
|
365
|
+
* "speaker/gender=female", NULL).
|
366
|
+
*
|
367
|
+
* The order_criteria argument controls the ordering of the voices returned.
|
368
|
+
*
|
369
|
+
* Currently available attributes to use for search_criteria and order_criteria
|
370
|
+
* are:
|
371
|
+
* - name
|
372
|
+
* - path
|
373
|
+
* - version
|
374
|
+
* - sample-rate
|
375
|
+
* - license/key
|
376
|
+
* - language/tag
|
377
|
+
* - language/name
|
378
|
+
* - language/version
|
379
|
+
* - lexicon/name
|
380
|
+
* - lexicon/version
|
381
|
+
* - speaker/name
|
382
|
+
* - speaker/gender
|
383
|
+
* - speaker/age
|
384
|
+
*
|
385
|
+
* Negation of an expression is allowed, simply prepend a '!'.
|
386
|
+
* Disjunctions and conjunctions are also allowed, using '|' and '&'
|
387
|
+
* respectively. So to find voices for either US or UK English, you
|
388
|
+
* could call swift_port_find_first_voice(port,
|
389
|
+
* "language/tag=en-US|language/tag=en-UK");
|
390
|
+
**/
|
391
|
+
SWIFT_API
|
392
|
+
swift_voice * SWIFT_CALLCONV
|
393
|
+
swift_port_find_first_voice(swift_port *port, const char *search_criteria,
|
394
|
+
const char *order_criteria);
|
395
|
+
|
396
|
+
/**
|
397
|
+
* Get the next voice in the list of voices matching the attributes
|
398
|
+
* passed to swift_find_first_voice().
|
399
|
+
*
|
400
|
+
* @param port The port on which to find the next voice.
|
401
|
+
* @return The next matching voice, or NULL if the end of the list is
|
402
|
+
* reached.
|
403
|
+
**/
|
404
|
+
SWIFT_API
|
405
|
+
swift_voice * SWIFT_CALLCONV swift_port_find_next_voice(swift_port *port);
|
406
|
+
|
407
|
+
/** Rewind the voice pointer to the first voice returned by
|
408
|
+
* swift_port_find_find_first_voice().
|
409
|
+
*
|
410
|
+
* @param port The port on which to rewind the voice list.
|
411
|
+
* @return The first voice in the list returned by
|
412
|
+
* swift_port_find_first_voice().
|
413
|
+
**/
|
414
|
+
SWIFT_API
|
415
|
+
swift_voice * SWIFT_CALLCONV swift_port_rewind_voices(swift_port *port);
|
416
|
+
|
417
|
+
/**
|
418
|
+
* Load a voice and set it as the port's current voice.
|
419
|
+
*
|
420
|
+
* @param port The port on which to set the voice.
|
421
|
+
* @param voice The voice to load and set as the port's current voice.
|
422
|
+
* @return SWIFT_SUCCESS, or one of several swift_result_t values.
|
423
|
+
**/
|
424
|
+
SWIFT_API
|
425
|
+
swift_result_t SWIFT_CALLCONV swift_port_set_voice(swift_port *port,
|
426
|
+
swift_voice *voice);
|
427
|
+
|
428
|
+
/**
|
429
|
+
* Load the voice referenced by name and set it as the port's current
|
430
|
+
* voice.
|
431
|
+
*
|
432
|
+
* @param port The port on which to set the voice.
|
433
|
+
* @param name The name of the voice to load and set on the port.
|
434
|
+
* @return The voice if it was successfully loaded, else NULL.
|
435
|
+
**/
|
436
|
+
SWIFT_API
|
437
|
+
swift_voice * SWIFT_CALLCONV swift_port_set_voice_by_name(swift_port *port,
|
438
|
+
const char *name);
|
439
|
+
|
440
|
+
/**
|
441
|
+
* Load a voice from a directory and set it as the port's current voice.
|
442
|
+
*
|
443
|
+
* @param port The port on which to set the voice.
|
444
|
+
* @param dir The directory from which to load the voice.
|
445
|
+
* @return The voice if it was successfully loaded, else NULL.
|
446
|
+
**/
|
447
|
+
SWIFT_API
|
448
|
+
swift_voice * SWIFT_CALLCONV swift_port_set_voice_from_dir(swift_port *port,
|
449
|
+
const char *dir);
|
450
|
+
|
451
|
+
/**
|
452
|
+
* Get a pointer to the current voice.
|
453
|
+
*
|
454
|
+
* @param port The port from which to get the current voice.
|
455
|
+
* @return The current voice from the port. This could be NULL
|
456
|
+
* if no voice was ever set for the port.
|
457
|
+
**/
|
458
|
+
SWIFT_API
|
459
|
+
swift_voice * SWIFT_CALLCONV swift_port_get_current_voice(swift_port *port);
|
460
|
+
|
461
|
+
/**
|
462
|
+
* Get an attribute from a voice.
|
463
|
+
*
|
464
|
+
* @param voice The voice from which to get the attribute.
|
465
|
+
* @param attr The name of the attribute to get from the voice.
|
466
|
+
* @return The value of the requested param, or NULL.
|
467
|
+
*
|
468
|
+
* Currently available attributes are:
|
469
|
+
* - id
|
470
|
+
* - name
|
471
|
+
* - path
|
472
|
+
* - version
|
473
|
+
* - buildstamp
|
474
|
+
* - sample-rate
|
475
|
+
* - license/key
|
476
|
+
* - language/tag
|
477
|
+
* - language/name
|
478
|
+
* - language/version
|
479
|
+
* - lexicon/name
|
480
|
+
* - lexicon/version
|
481
|
+
* - speaker/name
|
482
|
+
* - speaker/gender
|
483
|
+
* - speaker/age
|
484
|
+
**/
|
485
|
+
SWIFT_API
|
486
|
+
const char * SWIFT_CALLCONV swift_voice_get_attribute(swift_voice *voice,
|
487
|
+
const char *attr);
|
488
|
+
|
489
|
+
/**
|
490
|
+
* Get all attributes from a voice.
|
491
|
+
* @param voice The voice to get attributes for.
|
492
|
+
* @param out_params Output - A swift_params in which to store the
|
493
|
+
* attributes.
|
494
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if voice
|
495
|
+
* or out_params is NULL
|
496
|
+
*
|
497
|
+
* After getting the attributes, you can use swift_params_dump() to
|
498
|
+
* print them out or swift_params_foreach() to iterate over them.
|
499
|
+
**/
|
500
|
+
SWIFT_API
|
501
|
+
swift_result_t SWIFT_CALLCONV
|
502
|
+
swift_voice_get_attributes(swift_voice *voice, swift_params *out_params);
|
503
|
+
|
504
|
+
/**
|
505
|
+
* Load custom lexicon entries into a voice from a file.
|
506
|
+
*
|
507
|
+
* @param voice The voice for which to load the lexicon.
|
508
|
+
* @param file The file from which to load the lexicon.
|
509
|
+
* @return SWIFT_SUCCESS, or SWIFT_FILE_ERROR if file could not be opened.
|
510
|
+
*
|
511
|
+
* When synthesizing text, the search order for lexicon entries is:
|
512
|
+
* <br>1. Lexicons loaded with this API call, most recent first.
|
513
|
+
* <br>2. A lexicon.txt file in the voice directory
|
514
|
+
* <br>3. The built-in lexicon
|
515
|
+
**/
|
516
|
+
SWIFT_API
|
517
|
+
swift_result_t SWIFT_CALLCONV swift_voice_load_lexicon(swift_voice *voice,
|
518
|
+
const char *file);
|
519
|
+
|
520
|
+
/**
|
521
|
+
* Returns the string encoding of the current active voice on the port.
|
522
|
+
*
|
523
|
+
* @param port The port from which to get the language encoding.
|
524
|
+
* @return The port's active voice's text encoding, or NULL if that
|
525
|
+
* can't be attained.
|
526
|
+
**/
|
527
|
+
SWIFT_API
|
528
|
+
const char * SWIFT_CALLCONV swift_port_language_encoding(swift_port *port);
|
529
|
+
|
530
|
+
/**
|
531
|
+
* Load a special effects output chain into a port from a file.
|
532
|
+
*
|
533
|
+
* @param port The port onto which to load the sfx chain.
|
534
|
+
* @param file The file to from which to load, or NULL to remove the
|
535
|
+
* current sfx chain without loading a new one.
|
536
|
+
* @return SWIFT_SUCCESS, or SWIFT_FILE_ERROR if file could not be opened.
|
537
|
+
*
|
538
|
+
**/
|
539
|
+
SWIFT_API
|
540
|
+
swift_result_t SWIFT_CALLCONV swift_port_load_sfx(swift_port *port,
|
541
|
+
const char *file);
|
542
|
+
|
543
|
+
/**
|
544
|
+
* Query the status of a background job.
|
545
|
+
*
|
546
|
+
* @param port The port to query for background job status.
|
547
|
+
* @param async The background job to look for. Can one of:
|
548
|
+
* - A swift_background_t thread ID
|
549
|
+
* - SWIFT_ASYNC_ANY to get the status of any job
|
550
|
+
* - SWIFT_ASYNC_CURRENT to get the status of the currently running job
|
551
|
+
* @return One of:
|
552
|
+
* - SWIFT_STATUS_UNKNOWN if the job specified doesn't exist
|
553
|
+
* - SWIFT_STATUS_DONE if it has completed
|
554
|
+
* - SWIFT_STATUS_RUNNING if it is currently running
|
555
|
+
* - SWIFT_STATUS_QUEUED if it is scheduled to run in the future.
|
556
|
+
**/
|
557
|
+
SWIFT_API
|
558
|
+
swift_status_t SWIFT_CALLCONV swift_port_status(swift_port *port,
|
559
|
+
swift_background_t async);
|
560
|
+
|
561
|
+
/**
|
562
|
+
* Wait for a background job (and any jobs ahead of it) to complete.
|
563
|
+
*
|
564
|
+
* @param port The port on which to wait for background jobs.
|
565
|
+
* @param async The background job to wait for. Can be one of:
|
566
|
+
* - A swift_background_t thread ID
|
567
|
+
* - SWIFT_ASYNC_ANY to wait for the completion of any job
|
568
|
+
* - SWIFT_ASYNC_CURRENT to wait for the completion of the currently
|
569
|
+
* running job
|
570
|
+
* @return SWIFT_SUCCESS
|
571
|
+
**/
|
572
|
+
SWIFT_API
|
573
|
+
swift_result_t SWIFT_CALLCONV swift_port_wait(swift_port *port,
|
574
|
+
swift_background_t async);
|
575
|
+
|
576
|
+
/**
|
577
|
+
* Stop and cancel a background job, waiting for any jobs ahead of it
|
578
|
+
* on the port to complete, and cancelling any jobs after it.
|
579
|
+
*
|
580
|
+
* @param port The port to on which to stop background jobs.
|
581
|
+
* @param async The background job to stop. Can be one of:
|
582
|
+
* - A swift_background_t thread ID
|
583
|
+
* - SWIFT_ASYNC_ANY to stop any job
|
584
|
+
* - SWIFT_ASYNC_CURRENT to stop the currently running job
|
585
|
+
* @param place The event (e.g. word, sentence, syllable) to wait for
|
586
|
+
* before halting. Use SWIFT_EVENT_NOW for immediate halt.
|
587
|
+
* - NOTE: This parameter is currently ignored. Halting always occurs
|
588
|
+
* immediately.
|
589
|
+
* - NOTE: No swift_events will be sent to your swift_callback_t function
|
590
|
+
* for the given background job after swift_port_stop is called.
|
591
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if port or its
|
592
|
+
* thread handler is NULL.
|
593
|
+
**/
|
594
|
+
SWIFT_API
|
595
|
+
swift_result_t SWIFT_CALLCONV swift_port_stop(swift_port *port,
|
596
|
+
swift_background_t async,
|
597
|
+
swift_event_t place);
|
598
|
+
|
599
|
+
/**
|
600
|
+
* Pause a background job. If the job you want to pause hasn't started yet
|
601
|
+
* and is in the queue, then any jobs ahead of it complete first.
|
602
|
+
*
|
603
|
+
* @param port The port on which to pause a background job.
|
604
|
+
* @param async The background job to pause. Can be one of:
|
605
|
+
* - A swift_background_t thread ID
|
606
|
+
* - SWIFT_ASYNC_ANY for any job
|
607
|
+
* - SWIFT_ASYNC_CURRENT for the currently running job
|
608
|
+
* @param place The event (e.g. word, sentence, syllable) to wait for
|
609
|
+
* before halting. Use SWIFT_EVENT_NOW for immediate pause.
|
610
|
+
* - NOTE: This parameter is currently ignored. Halting always occurs
|
611
|
+
* immediately.
|
612
|
+
* @return SWIFT_SUCCESS, or one of several swift_result_t values.
|
613
|
+
**/
|
614
|
+
SWIFT_API
|
615
|
+
swift_result_t SWIFT_CALLCONV swift_port_pause(swift_port *port,
|
616
|
+
swift_background_t async,
|
617
|
+
swift_event_t place);
|
618
|
+
|
619
|
+
/**
|
620
|
+
* Synthesize text on the given port.
|
621
|
+
*
|
622
|
+
* @param port The port on which to perform synthesis.
|
623
|
+
* @param text Text to synthesize.
|
624
|
+
* @param nbytes Length, in bytes, of text. If 0, this paramter is ignored.
|
625
|
+
* @param encoding Character encoding of the input text. If NULL, the default
|
626
|
+
* encoding is assumed.
|
627
|
+
* @param async Output - Thread ID of the background job on which to run
|
628
|
+
* this synthesis call.<br>If NULL, synthesis occurs
|
629
|
+
* synchronously, thus blocking until complete.
|
630
|
+
* @param params The parameters to be used for this synthesis call. Can
|
631
|
+
* be NULL.
|
632
|
+
* - NOTE: The utterance retains ownership of this object, so you should not call
|
633
|
+
* swift_params_delete() on it.
|
634
|
+
* @return SWIFT_SUCCESS, or one of several swift_result_t values.
|
635
|
+
*
|
636
|
+
* - NOTE: If a voice was not explicitely set on the port via
|
637
|
+
* swift_port_set_voice(), swift_port_set_voice_by_name(), or
|
638
|
+
* swift_port_set_voice_from_dir(), then this call implicitely loads
|
639
|
+
* the default voice and sets it as the port's current voice.
|
640
|
+
*
|
641
|
+
**/
|
642
|
+
SWIFT_API
|
643
|
+
swift_result_t SWIFT_CALLCONV swift_port_speak_text(swift_port *port,
|
644
|
+
const void *text,
|
645
|
+
int nbytes,
|
646
|
+
const char *encoding,
|
647
|
+
swift_background_t *async,
|
648
|
+
swift_params *params);
|
649
|
+
|
650
|
+
/**
|
651
|
+
* Synthesize text from a file on the given port.
|
652
|
+
*
|
653
|
+
* @param port The port on which to perform synthesis.
|
654
|
+
* @param path The path to the file from which to synthesize the text.
|
655
|
+
* @param encoding Character encoding of the input text. If NULL, the default
|
656
|
+
* encoding is assumed.
|
657
|
+
* @param async Output - Thread ID of the background job on which to run
|
658
|
+
* this synthesis call.<br>If NULL, synthesis occurs
|
659
|
+
* synchronously, thus blocking until complete.
|
660
|
+
* @param params The parameters to be used for this synthesis call. Can
|
661
|
+
* be NULL.
|
662
|
+
* - NOTE: The utterance retains ownership of this object, so you should not call
|
663
|
+
* swift_params_delete() on it.
|
664
|
+
* @return SWIFT_SUCCESS, or one of several swift_result_t values.
|
665
|
+
*
|
666
|
+
* - NOTE: If a voice was not explicitely set on the port via
|
667
|
+
* swift_port_set_voice(), swift_port_set_voice_by_name(), or
|
668
|
+
* swift_port_set_voice_from_dir(), then this call implicitely loads
|
669
|
+
* the default voice and sets it as the port's current voice.
|
670
|
+
**/
|
671
|
+
/* FIXME: Windows has wide character filenames */
|
672
|
+
SWIFT_API
|
673
|
+
swift_result_t SWIFT_CALLCONV swift_port_speak_file(swift_port *port,
|
674
|
+
const char *path,
|
675
|
+
const char *encoding,
|
676
|
+
swift_background_t *async,
|
677
|
+
swift_params *params);
|
678
|
+
|
679
|
+
/**
|
680
|
+
* Get Performance Statistics for the most recently completed synthesis call
|
681
|
+
* on the given port.
|
682
|
+
*
|
683
|
+
* This information is written to the swift_port at the end of each synthesis
|
684
|
+
* call. As such, the information is volatile; It only lasts until the next
|
685
|
+
* synthesis call is completed. If you are using this function, make sure that
|
686
|
+
* you call it after a synthesis call has completed, but before the next
|
687
|
+
* synthesis call has completed to ensure you are getting reliable data.
|
688
|
+
*
|
689
|
+
* @param port The port for which to get performance statistics.
|
690
|
+
* @param uttcount Output - Number of utterances synthesized during the
|
691
|
+
* most recently completed synthesis call.
|
692
|
+
* @param avg_startup_time Output - Average time to begin speaking each
|
693
|
+
* utterance during the most recently completed
|
694
|
+
* synthesis call.
|
695
|
+
* @param audiotime Output - Total length in seconds of audio generated
|
696
|
+
* during the most recently completed synthesis call.
|
697
|
+
* @param realtime Output - Total length in seconds required to
|
698
|
+
* complete the most recently completed synthesis call.
|
699
|
+
* @param speed_ratio Output - Ratio of audio time to real time. Shows
|
700
|
+
* how much faster synthesis was completed compared to
|
701
|
+
* the amount of audio generated.
|
702
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if port
|
703
|
+
* is NULL.
|
704
|
+
**/
|
705
|
+
SWIFT_API
|
706
|
+
swift_result_t SWIFT_CALLCONV swift_port_get_perfstats(swift_port *port,
|
707
|
+
int *uttcount,
|
708
|
+
float *avg_startup_time,
|
709
|
+
float *audiotime,
|
710
|
+
float *realtime,
|
711
|
+
float *speed_ratio);
|
712
|
+
|
713
|
+
/**
|
714
|
+
* Synthesize text string or text from a file, and return the corresponding
|
715
|
+
* phonemes and event time information.
|
716
|
+
*
|
717
|
+
* @param port The port on which to perform the synthesis.
|
718
|
+
* @param text The text to synthesize, or the path to the file from which
|
719
|
+
* to synthesize the text.
|
720
|
+
* @param nbytes Length, in bytes, of text. If 0, this paramter is ignored.
|
721
|
+
* @param encoding Character encoding of the input text. If NULL, the default
|
722
|
+
* encoding is assumed.
|
723
|
+
* @param is_file Boolean - Set this to true if text is the path to a file.
|
724
|
+
* @param params The parameters to be used for this synthesis call. Can
|
725
|
+
* be NULL.
|
726
|
+
* - NOTE: The utterance retains ownership of this object, so you should not call
|
727
|
+
* swift_params_delete() on it.
|
728
|
+
* @return A string containing a list of the phonemes and event time
|
729
|
+
* information for the synthesized speech.
|
730
|
+
*
|
731
|
+
* - NOTE: If a voice was not explicitely set on the port via
|
732
|
+
* swift_port_set_voice(), swift_port_set_voice_by_name(), or
|
733
|
+
* swift_port_set_voice_from_dir(), then this call implicitely loads
|
734
|
+
* the default voice and sets it as the port's current voice.
|
735
|
+
*
|
736
|
+
* - NOTE: This function DOES NOT WORK as of Swift v3.1.0.
|
737
|
+
**/
|
738
|
+
SWIFT_API
|
739
|
+
const char * SWIFT_CALLCONV swift_port_get_phones(swift_port *port,
|
740
|
+
const void *text,
|
741
|
+
int nbytes,
|
742
|
+
const char *encoding,
|
743
|
+
int is_file,
|
744
|
+
swift_params *params);
|
745
|
+
|
746
|
+
/**
|
747
|
+
* Synthesize text string or text from file to a swift_waveform.
|
748
|
+
*
|
749
|
+
* @param port The port on which to perform the synthesis.
|
750
|
+
* @param text The text to synthesize, or the path to the file from which
|
751
|
+
* to synthesize the text.
|
752
|
+
* @param nbytes Length, in bytes, of text. If 0, this paramter is ignored.
|
753
|
+
* @param encoding Character encoding of the input text. If NULL, the default
|
754
|
+
* encoding is assumed.
|
755
|
+
* @param is_file Boolean - Set this to true if text is the path to a file.
|
756
|
+
* @param params The parameters to be used for this synthesis call. Can
|
757
|
+
* be NULL.
|
758
|
+
* - NOTE: The utterance retains ownership of this object, so you should not call
|
759
|
+
* swift_params_delete() on it.
|
760
|
+
* @return Pointer to the swift_waveform containing the synthesized
|
761
|
+
* speech. The caller owns the pointer, so must explicitly call
|
762
|
+
* swift_waveform_close() on the wave.
|
763
|
+
*
|
764
|
+
* - NOTE: If a voice was not explicitely set on the port via
|
765
|
+
* swift_port_set_voice(), swift_port_set_voice_by_name(), or
|
766
|
+
* swift_port_set_voice_from_dir(), then this call implicitely loads
|
767
|
+
* the default voice and sets it as the port's current voice.
|
768
|
+
**/
|
769
|
+
SWIFT_API
|
770
|
+
swift_waveform * SWIFT_CALLCONV swift_port_get_wave(swift_port *port,
|
771
|
+
const void *text,
|
772
|
+
int nbytes,
|
773
|
+
const char *encoding,
|
774
|
+
int is_file,
|
775
|
+
swift_params *params);
|
776
|
+
|
777
|
+
/**
|
778
|
+
* Play a swift_waveform through a port.
|
779
|
+
*
|
780
|
+
* @param port The port on which to play the waveform.
|
781
|
+
* @param wav The waveform to play on the port.
|
782
|
+
* @param async Output - Thread ID of the background job on which to run this
|
783
|
+
* synthesis call.<br>If NULL, synthesis occurs synchronously,
|
784
|
+
* thus blocking until complete.
|
785
|
+
* @param params The parameters to be used for this synthesis call. Can
|
786
|
+
* be NULL.
|
787
|
+
* - NOTE: The utterance retains ownership of this object, so you should not call
|
788
|
+
* swift_params_delete() on it.
|
789
|
+
* @return SWIFT_SUCCESS, or one of several swift_result_t values.
|
790
|
+
**/
|
791
|
+
SWIFT_API
|
792
|
+
swift_result_t SWIFT_CALLCONV swift_port_play_wave(swift_port *port,
|
793
|
+
const swift_waveform *wav,
|
794
|
+
swift_background_t *async,
|
795
|
+
swift_params *params);
|
796
|
+
|
797
|
+
/**
|
798
|
+
* Create a new, empty waveform object.
|
799
|
+
*
|
800
|
+
* @return A new, empty waveform object.
|
801
|
+
**/
|
802
|
+
SWIFT_API
|
803
|
+
swift_waveform * SWIFT_CALLCONV swift_waveform_new(void);
|
804
|
+
|
805
|
+
/**
|
806
|
+
* Load a swift_waveform object from an audio file.
|
807
|
+
*
|
808
|
+
* @param filename The path to the audio file to open.
|
809
|
+
* @param format The format of the audio file (see note below).
|
810
|
+
* @param encoding The encoding of the file. One of "pcm16", "pcm8",
|
811
|
+
* "ulaw", "alaw". This is only used if the format is
|
812
|
+
* "raw", "le", or "be", and can be NULL otherwise.
|
813
|
+
* @param sample_rate The sampling rate of the audio data. This is only used
|
814
|
+
* if the format is "raw", "le", or "be", and will be
|
815
|
+
* ignored otherwise.
|
816
|
+
* @param num_channels The number of interleaved channels in the audio data.
|
817
|
+
* This is only used if the formate is "raw", "le", or
|
818
|
+
* "be", and will be ignored otherwise.
|
819
|
+
* @return The swift_wavform object that has been populated with
|
820
|
+
* data from the audio file.
|
821
|
+
*
|
822
|
+
* NOTE: The format argument is one of:
|
823
|
+
* - riff: Microsoft RIFF (WAV) file
|
824
|
+
* - snd: Sun/NeXT .au (SND) format.
|
825
|
+
* - raw: unheadered audio data, native byte order
|
826
|
+
* - le: unheadered audio data, little-endian
|
827
|
+
* - be: unheadered audio data, big-endian
|
828
|
+
* - NULL: the filename's extension will determine the format.
|
829
|
+
**/
|
830
|
+
SWIFT_API
|
831
|
+
swift_waveform * SWIFT_CALLCONV swift_waveform_open(const char *filename,
|
832
|
+
const char *format,
|
833
|
+
const char *encoding,
|
834
|
+
int sample_rate,
|
835
|
+
int num_channels);
|
836
|
+
|
837
|
+
/**
|
838
|
+
* Print detailed information about a swift_waveform.
|
839
|
+
*
|
840
|
+
* @param wave The swift_waveform about which to print detailed information.
|
841
|
+
* @return Void
|
842
|
+
**/
|
843
|
+
SWIFT_API
|
844
|
+
void SWIFT_CALLCONV swift_waveform_print(swift_waveform *wave);
|
845
|
+
|
846
|
+
/**
|
847
|
+
* Close a swift_waveform and deallocate associated memory and resources.
|
848
|
+
*
|
849
|
+
* @param wave The swift_waveform to close.
|
850
|
+
* @return SWIFT_SUCCESS
|
851
|
+
**/
|
852
|
+
SWIFT_API
|
853
|
+
swift_result_t SWIFT_CALLCONV swift_waveform_close(swift_waveform *wave);
|
854
|
+
|
855
|
+
/**
|
856
|
+
* Save a swift_waveform to an audio file.
|
857
|
+
*
|
858
|
+
* @param wave The swift_waveform to save to the file.
|
859
|
+
* @param filename The path to the file in which to save the swift_waveform data.
|
860
|
+
* @param format The format of the swift_waveform (see note below).
|
861
|
+
* @return SWIFT_SUCCESS, or one of several swift_result_t values.
|
862
|
+
*
|
863
|
+
* NOTE: The format argument is one of:
|
864
|
+
* - riff: Microsoft RIFF (WAV) file
|
865
|
+
* - snd: Sun/NeXT .au (SND) format.
|
866
|
+
* - raw: unheadered audio data, native byte order
|
867
|
+
* - le: unheadered audio data, little-endian (LSB first)
|
868
|
+
* - be: unheadered audio data, big-endian (MSB first)
|
869
|
+
* - NOTE: that not all encoding types may be supported by all formats.
|
870
|
+
* For instance, SND doesn't support A-Law.
|
871
|
+
**/
|
872
|
+
SWIFT_API
|
873
|
+
swift_result_t SWIFT_CALLCONV swift_waveform_save(const swift_waveform *wave,
|
874
|
+
const char *filename,
|
875
|
+
const char *format);
|
876
|
+
|
877
|
+
/**
|
878
|
+
* Get the sample rate of a swift_waveform.
|
879
|
+
*
|
880
|
+
* @param wave The swift_waveform from which to get the sample rate.
|
881
|
+
* @return The sample rate of the waveform.
|
882
|
+
**/
|
883
|
+
SWIFT_API
|
884
|
+
int SWIFT_CALLCONV swift_waveform_get_sps(const swift_waveform *wave);
|
885
|
+
|
886
|
+
/**
|
887
|
+
* Get the encoding type for a swift_waveform.
|
888
|
+
*
|
889
|
+
* @param wave The swift_waveform from which to get the encoding type.
|
890
|
+
* @return The encoding type, one of:
|
891
|
+
* - "pcm16" - 16-bit signed linear PCM
|
892
|
+
* - "pcm8" - 8-bit unsigned linear PCM
|
893
|
+
* - "ulaw" - �-Law (8-bit by definition)
|
894
|
+
* - "alaw" - A-Law (8-bit by definition)
|
895
|
+
**/
|
896
|
+
SWIFT_API
|
897
|
+
const char * SWIFT_CALLCONV
|
898
|
+
swift_waveform_get_encoding(const swift_waveform *wave);
|
899
|
+
|
900
|
+
/**
|
901
|
+
* Resample a swift_waveform.
|
902
|
+
*
|
903
|
+
* @param wave The swift_waveform to resample.
|
904
|
+
* @param new_sps The sample rate to apply to the swift_waveform.
|
905
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if wave is
|
906
|
+
* NULL.
|
907
|
+
**/
|
908
|
+
SWIFT_API
|
909
|
+
swift_result_t SWIFT_CALLCONV swift_waveform_resample(swift_waveform *wave,
|
910
|
+
int new_sps);
|
911
|
+
|
912
|
+
/**
|
913
|
+
* Convert a swift_waveform to a different encoding type.
|
914
|
+
*
|
915
|
+
* @param wave The swift_waveform to convert
|
916
|
+
* @param encoding One of:
|
917
|
+
* - "pcm16" - 16-bit signed linear PCM
|
918
|
+
* - "pcm8" - 8-bit unsigned linear PCM
|
919
|
+
* - "ulaw" - �-Law (8-bit by definition)
|
920
|
+
* - "alaw" - A-Law (8-bit by definition)
|
921
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if wave or
|
922
|
+
* encoding is NULL.
|
923
|
+
**/
|
924
|
+
SWIFT_API
|
925
|
+
swift_result_t SWIFT_CALLCONV swift_waveform_convert(swift_waveform *wave,
|
926
|
+
const char *encoding);
|
927
|
+
|
928
|
+
/**
|
929
|
+
* Get the raw sample data and byte-per-sample information about the data
|
930
|
+
* from a swift_waveform.
|
931
|
+
*
|
932
|
+
* @param wave The swift_waveform from which to get the sample
|
933
|
+
* data and byte-per-sample information.
|
934
|
+
* @param samples Output - Buffer to receive the raw sample data.
|
935
|
+
* @param nsamples Output - Number of samples copied into the buffer.
|
936
|
+
* @param bytes_per_sample Output - number of bytes-per-sample.
|
937
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if wave
|
938
|
+
* is NULL.
|
939
|
+
**/
|
940
|
+
SWIFT_API
|
941
|
+
swift_result_t SWIFT_CALLCONV
|
942
|
+
swift_waveform_get_samples(const swift_waveform *wave, const void **samples,
|
943
|
+
int *nsamples, int *bytes_per_sample);
|
944
|
+
|
945
|
+
/**
|
946
|
+
* Create a new swift_waveform and populate it with audio data from a buffer
|
947
|
+
* of raw samples.
|
948
|
+
*
|
949
|
+
* @param samples Buffer holding the raw data - must be pcm16 data.
|
950
|
+
* @param nsamples Number of samples.
|
951
|
+
* @param frequency Frequency (sample rate) of data in the buffer.
|
952
|
+
* @param channels Number of channels.
|
953
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_POINTER if wave is NULL.
|
954
|
+
*
|
955
|
+
* NOTE: If the samples and nsamples parameters are set to NULL and 0
|
956
|
+
* respectively, this will create an empty swift_waveform.
|
957
|
+
**/
|
958
|
+
SWIFT_API
|
959
|
+
swift_waveform * SWIFT_CALLCONV
|
960
|
+
swift_waveform_set_samples(const unsigned short *samples, const int nsamples,
|
961
|
+
const int frequency, const int channels);
|
962
|
+
|
963
|
+
/**
|
964
|
+
* Set the number of channels for the given swift_waveform.
|
965
|
+
*
|
966
|
+
* @param wave The swift_waveform for which to set channels.
|
967
|
+
* @param channels Number of channels. Must be 1 or 2.
|
968
|
+
* @return SWIFT_SUCCESS, or SWIFT_INVALID_PARAM.
|
969
|
+
**/
|
970
|
+
SWIFT_API
|
971
|
+
swift_result_t SWIFT_CALLCONV swift_waveform_set_channels(swift_waveform *wave,
|
972
|
+
int channels);
|
973
|
+
|
974
|
+
|
975
|
+
/**
|
976
|
+
* Append waveSrc swift_waveform to waveDst swift_waveform.
|
977
|
+
*
|
978
|
+
* @param waveDst The swift_waveform onto which to append waveSrc.
|
979
|
+
* @param waveSrc The swift_waveform to append to waveDst.
|
980
|
+
* @return SWIFT_SUCCESS, or SWIFT_UNKNOWN_ERROR.
|
981
|
+
**/
|
982
|
+
SWIFT_API
|
983
|
+
swift_result_t SWIFT_CALLCONV swift_waveform_concat(swift_waveform *waveDst,
|
984
|
+
swift_waveform *waveSrc);
|
985
|
+
|
986
|
+
/**
|
987
|
+
* Return a string description of an error code.
|
988
|
+
*
|
989
|
+
* @param t The error code from which to retreive the string description.
|
990
|
+
* @return The string description of the error code.
|
991
|
+
**/
|
992
|
+
SWIFT_API
|
993
|
+
const char * SWIFT_CALLCONV swift_strerror(swift_result_t t);
|
994
|
+
|
995
|
+
/**
|
996
|
+
* Place a newly-allocated, comma-seperated list of all values for a given
|
997
|
+
* parameter and given XML swift configuration file into the 'values'
|
998
|
+
* output parameter.
|
999
|
+
*
|
1000
|
+
* @param file The path to the config file.
|
1001
|
+
* @param element The name of the parameter for which values should be
|
1002
|
+
* returned.
|
1003
|
+
* @param data Output - The newly-allocated, comma-seperated list of values.
|
1004
|
+
* @return SWIFT_FILE_ERROR or SWIFT_SUCCESS.
|
1005
|
+
**/
|
1006
|
+
SWIFT_API
|
1007
|
+
swift_result_t SWIFT_CALLCONV
|
1008
|
+
swift_conffile_get_element_data(const char *file,
|
1009
|
+
const char *element,
|
1010
|
+
char **data);
|
1011
|
+
|
1012
|
+
/**
|
1013
|
+
* Retrieve the maximum number of concurrent synthesis calls allowed.
|
1014
|
+
*
|
1015
|
+
* @param engine An active swift_engine structure. Pass in the pointer
|
1016
|
+
* to the engine through which your swift_ports are open.
|
1017
|
+
* @param max_tokens Output - the maximum number of concurrent synthesis
|
1018
|
+
* calls that can be made on this system. A value of -1
|
1019
|
+
* indicates that the system is running with an Unlimited
|
1020
|
+
* Concurrency License.
|
1021
|
+
* @param tokens_in_use Output - the number of sysnthesis calls currently in
|
1022
|
+
* operation on this system at the time this call is made.
|
1023
|
+
* If max_tokens is 1 and tokens_in_use is -1, then the
|
1024
|
+
* system is running in Single Token Mode, in which the
|
1025
|
+
* license server is not used.
|
1026
|
+
* @return SWIFT_SUCCESS on success, or SWIFT_NETWORK_ERROR if
|
1027
|
+
* communication to the license server cannot be made. If
|
1028
|
+
* communication fails, max_tokens is set to 1 and
|
1029
|
+
* tokens_in_use is set to -1, meaning "unknown."
|
1030
|
+
**/
|
1031
|
+
SWIFT_API
|
1032
|
+
swift_result_t SWIFT_CALLCONV
|
1033
|
+
swift_license_get_concurrency_info(swift_engine *engine, int *max_tokens,
|
1034
|
+
int *tokens_in_use);
|
1035
|
+
|
1036
|
+
#ifdef __cplusplus
|
1037
|
+
};
|
1038
|
+
#endif /* __cplusplus */
|
1039
|
+
|
1040
|
+
#endif /* _SWIFT_H_ */
|