Browse Source

Create an espeak-ng version of espeak_Synth.

master
Reece H. Dunn 9 years ago
parent
commit
06cbd9d096

+ 11
- 1
src/include/espeak-ng/espeak_ng.h View File

#ifndef ESPEAK_NG_H #ifndef ESPEAK_NG_H
#define ESPEAK_NG_H #define ESPEAK_NG_H


#include <wchar.h>
#include "speak_lib.h"


#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
ESPEAK_NG_API int ESPEAK_NG_API int
espeak_ng_GetSampleRate(void); espeak_ng_GetSampleRate(void);


ESPEAK_NG_API espeak_ng_STATUS
espeak_ng_Synthesize(const void *text,
size_t size,
unsigned int position,
espeak_POSITION_TYPE position_type,
unsigned int end_position,
unsigned int flags,
unsigned int *unique_identifier,
void *user_data);

ESPEAK_NG_API espeak_ng_STATUS ESPEAK_NG_API espeak_ng_STATUS
espeak_ng_SpeakKeyName(const char *key_name); espeak_ng_SpeakKeyName(const char *key_name);



+ 9
- 0
src/libespeak-ng/espeak_api.c View File

phoneme_callback = PhonemeCallback; phoneme_callback = PhonemeCallback;
} }


ESPEAK_API espeak_ERROR espeak_Synth(const void *text, size_t size,
unsigned int position,
espeak_POSITION_TYPE position_type,
unsigned int end_position, unsigned int flags,
unsigned int *unique_identifier, void *user_data)
{
return status_to_espeak_error(espeak_ng_Synthesize(text, size, position, position_type, end_position, flags, unique_identifier, user_data));
}

ESPEAK_API espeak_ERROR espeak_Key(const char *key_name) ESPEAK_API espeak_ERROR espeak_Key(const char *key_name)
{ {
return status_to_espeak_error(espeak_ng_SpeakKeyName(key_name)); return status_to_espeak_error(espeak_ng_SpeakKeyName(key_name));

+ 3
- 3
src/libespeak-ng/espeak_command.h View File



int delete_espeak_command(t_espeak_command *the_command); int delete_espeak_command(t_espeak_command *the_command);


espeak_ERROR sync_espeak_Synth(unsigned int unique_identifier, const void *text,
unsigned int position, espeak_POSITION_TYPE position_type,
unsigned int end_position, unsigned int flags, void *user_data);
espeak_ng_STATUS sync_espeak_Synth(unsigned int unique_identifier, const void *text,
unsigned int position, espeak_POSITION_TYPE position_type,
unsigned int end_position, unsigned int flags, void *user_data);
espeak_ERROR sync_espeak_Synth_Mark(unsigned int unique_identifier, const void *text, espeak_ERROR sync_espeak_Synth_Mark(unsigned int unique_identifier, const void *text,
const char *index_mark, unsigned int end_position, const char *index_mark, unsigned int end_position,
unsigned int flags, void *user_data); unsigned int flags, void *user_data);

+ 20
- 18
src/libespeak-ng/speech.c View File

ep->id.number = value; ep->id.number = value;
} }


espeak_ERROR sync_espeak_Synth(unsigned int unique_identifier, const void *text,
unsigned int position, espeak_POSITION_TYPE position_type,
unsigned int end_position, unsigned int flags, void *user_data)
espeak_ng_STATUS sync_espeak_Synth(unsigned int unique_identifier, const void *text,
unsigned int position, espeak_POSITION_TYPE position_type,
unsigned int end_position, unsigned int flags, void *user_data)
{ {
InitText(flags); InitText(flags);
my_unique_identifier = unique_identifier; my_unique_identifier = unique_identifier;


end_character_position = end_position; end_character_position = end_position;


espeak_ERROR aStatus = status_to_espeak_error(Synthesize(unique_identifier, text, flags));
espeak_ng_STATUS aStatus = Synthesize(unique_identifier, text, flags);
#ifdef USE_ASYNC #ifdef USE_ASYNC
wave_flush(my_audio); wave_flush(my_audio);
#endif #endif


#pragma GCC visibility push(default) #pragma GCC visibility push(default)


ESPEAK_API espeak_ERROR espeak_Synth(const void *text, size_t size,
unsigned int position,
espeak_POSITION_TYPE position_type,
unsigned int end_position, unsigned int flags,
unsigned int *unique_identifier, void *user_data)
ESPEAK_NG_API espeak_ng_STATUS
espeak_ng_Synthesize(const void *text, size_t size,
unsigned int position,
espeak_POSITION_TYPE position_type,
unsigned int end_position, unsigned int flags,
unsigned int *unique_identifier, void *user_data)
{ {
(void)size; // unused
(void)size; // unused in non-async modes


espeak_ERROR a_error = EE_INTERNAL_ERROR;
static unsigned int temp_identifier; static unsigned int temp_identifier;


if (unique_identifier == NULL) if (unique_identifier == NULL)


// Try to add these 2 commands (single transaction) // Try to add these 2 commands (single transaction)
if (c1 && c2) { if (c1 && c2) {
a_error = status_to_espeak_error(fifo_add_commands(c1, c2));
if (a_error != EE_OK) {
espeak_ng_STATUS status = fifo_add_commands(c1, c2);
if (status != ENS_OK) {
delete_espeak_command(c1); delete_espeak_command(c1);
delete_espeak_command(c2); delete_espeak_command(c2);
c1 = c2 = NULL;
} }
} else {
delete_espeak_command(c1);
delete_espeak_command(c2);
return status;
} }

delete_espeak_command(c1);
delete_espeak_command(c2);
return ENOMEM;
#else
return sync_espeak_Synth(0, text, position, position_type, end_position, flags, user_data);
#endif #endif
return a_error;
} }


ESPEAK_API espeak_ERROR espeak_Synth_Mark(const void *text, size_t size, ESPEAK_API espeak_ERROR espeak_Synth_Mark(const void *text, size_t size,

Loading…
Cancel
Save