Simplest possible example of speech recognition in C.
Simplest possible example of speech recognition in C.This file shows how to use PocketSphinx to recognize a single input file. To compile it, assuming you have built the library as in these directions, you can run:
cmake --build build --target simple
Alternately, if PocketSphinx is installed system-wide, you can run:
gcc -o simple simple.c $(pkg-config --libs --cflags pocketsphinx)
#include <stdlib.h>
int
main(int argc, char *argv[])
{
FILE *fh;
short *buf;
size_t len, nsamples;
if (argc < 2)
if ((fh = fopen(argv[1], "rb")) == NULL)
if (fseek(fh, 0, SEEK_END) < 0)
len = ftell(fh);
rewind(fh);
config = ps_config_init(NULL);
ps_default_search_args(config);
if (ps_config_soundfile(config, fh, argv[1]) < 0)
E_FATAL(
"Unsupported input file %s\n", argv[1]);
if ((decoder = ps_init(config)) == NULL)
E_FATAL(
"PocketSphinx decoder init failed\n");
len -= ftell(fh);
if ((buf = malloc(len)) == NULL)
nsamples = fread(buf, sizeof(buf[0]), len / sizeof(buf[0]), fh);
if (nsamples != len / sizeof(buf[0]))
if (ps_start_utt(decoder) < 0)
E_FATAL(
"Failed to start processing\n");
if (ps_process_raw(decoder, buf, nsamples, FALSE, TRUE) < 0)
E_FATAL(
"ps_process_raw() failed\n");
if (ps_end_utt(decoder) < 0)
E_FATAL(
"Failed to end processing\n");
if (ps_get_hyp(decoder, NULL) != NULL)
printf("%s\n", ps_get_hyp(decoder, NULL));
if (fclose(fh) < 0)
free(buf);
ps_free(decoder);
ps_config_free(config);
return 0;
}
#define E_FATAL(...)
Definition err.h:80
#define E_FATAL_SYSTEM(...)
Definition err.h:89
Speech recognizer object.