# Using eSpeak NG as a library

- Simple steps
- Error solutions
- Additional info

## Simple steps

1. Ensure you have satisfied building dependencies

2. To use eSpeak NG as a C library, create file `test-espeak.c` with following content:

        #include <espeak-ng/speak_lib.h>

        espeak_AUDIO_OUTPUT output = AUDIO_OUTPUT_SYNCH_PLAYBACK;
        char *path = NULL;
        void* user_data;
        unsigned int *identifier;

        int main(int argc, char* argv[]) {
          char voicename[] = {"English"}; // Set voice by its name
          char text[] = {"Hello world!"};
          int buflength = 500, options = 0;
          unsigned int position = 0, position_type = 0, end_position = 0, flags = espeakCHARS_AUTO;
          espeak_Initialize(output, buflength, path, options);
          espeak_SetVoiceByName(voicename);
          printf("Saying  '%s'...\n", text);
          espeak_Synth(text, buflength, position, position_type, end_position, flags, identifier, user_data);
          printf("Done\n");
          return 0;
        }

3. Compile created file with command:

        gcc test-espeak.c -lespeak-ng -o test-espeak

4. Run created binary with the command:

        ./test-espeak

## Error solutions

If, during compilation, you get error like `espeak-ng/speak_lib.h: No such file or directory`, you may try to replace line:

    #include <espeak-ng/speak_lib.h>

with

    #include "/your/path/to/speak_lib.h"

where `/your/path/to/` is actual path, where header file is located.

## Additional info

Code above set library using just voice name with related language to it. Code below shows, how to set more detailed properties of the voice (e.g. language, variant and gender):

    #include <string.h>
    #include <malloc.h>
    #include <espeak-ng/speak_lib.h>

    espeak_AUDIO_OUTPUT output = AUDIO_OUTPUT_SYNCH_PLAYBACK;
    char *path = NULL;
    void* user_data;
    unsigned int *identifier;

    int main(int argc, char* argv[] ) {
      char text[] = {"Hello world!"};
      int buflength = 500, options = 0;
      unsigned int position = 0, position_type = 0, end_position = 0, flags = espeakCHARS_AUTO;
      espeak_Initialize(output, buflength, path, options );
      espeak_VOICE voice;
      memset(&voice, 0, sizeof(espeak_VOICE)); // Zero out the voice first
      const char *langNativeString = "en"; // Set voice by properties
      voice.languages = langNativeString;
      voice.name = "US";
      voice.variant = 2;
      voice.gender = 2;
      espeak_SetVoiceByProperties(&voice);
      printf("Saying  '%s'...\n", text);
      espeak_Synth(text, buflength, position, position_type, end_position, flags, identifier, user_data);
      printf("Done\n");
      return 0;
    }

Look for details at espeak_ng.h and speak_lib.h files.