Download test/unit/test_endpointer.c from camenduru/pocketsphinx: direct link, hf CLI and curl.
- Browser
- Download file 4.23 kB
-
https://huggingface.co/camenduru/pocketsphinx/resolve/main/test/unit/test_endpointer.c
- Command line
-
hf download hf://camenduru/pocketsphinx/test/unit/test_endpointer.c
-
curl -L -o test_endpointer.c https://huggingface.co/camenduru/pocketsphinx/resolve/main/test/unit/test_endpointer.c
4.23 kB
| /* Test endpointing. | |
| * | |
| * MIT license (c) 2022, see LICENSE for more information. | |
| * | |
| * Author: David Huggins-Daines <dhdaines@gmail.com> | |
| */ | |
| static int sample_rates[] = { | |
| 8000, | |
| 16000, | |
| 32000, | |
| 48000, | |
| 11025, | |
| 22050, | |
| //44100 | |
| }; | |
| static const int n_sample_rates = sizeof(sample_rates)/sizeof(sample_rates[0]); | |
| static float labels[] = { | |
| 0.24, | |
| 1.80, | |
| 2.88, | |
| 12.12, | |
| 12.51, | |
| 15.75, | |
| 16.44, | |
| 20.87 | |
| }; | |
| static const int n_labels = sizeof(labels)/sizeof(labels[0]); | |
| static FILE * | |
| open_data(int sample_rate) | |
| { | |
| char *soxcmd; | |
| int len; | |
| FILE *sox; | |
| len = snprintf(NULL, 0, SOXCMD, sample_rate); | |
| if ((soxcmd = malloc(len + 1)) == NULL) | |
| E_FATAL_SYSTEM("Failed to allocate string"); | |
| if (snprintf(soxcmd, len + 1, SOXCMD, sample_rate) != len) | |
| E_FATAL_SYSTEM("snprintf() failed"); | |
| if ((sox = popen(soxcmd, "r")) == NULL) | |
| E_FATAL_SYSTEM("Failed to popen(%s)", soxcmd); | |
| free(soxcmd); | |
| return sox; | |
| } | |
| static int | |
| test_sample_rate(int sample_rate) | |
| { | |
| ps_endpointer_t *ep; | |
| size_t frame_size, nsamp, end_nsamp; | |
| const short *speech; | |
| short *frame; | |
| FILE *fh; | |
| int i; | |
| E_INFO("Sample rate %d\n", sample_rate); | |
| ep = ps_endpointer_init(0, 0, 0, sample_rate, 0); | |
| frame_size = ps_endpointer_frame_size(ep); | |
| frame = ckd_calloc(sizeof(*frame), frame_size); | |
| fh = open_data(sample_rate); | |
| TEST_ASSERT(fh); | |
| i = 0; | |
| while ((nsamp = fread(frame, sizeof(*frame), frame_size, fh)) == frame_size) { | |
| int prev_in_speech = ps_endpointer_in_speech(ep); | |
| TEST_ASSERT(i < n_labels); | |
| speech = ps_endpointer_process(ep, frame); | |
| if (speech != NULL) { | |
| if (!prev_in_speech) { | |
| E_INFO("Speech start at %.2f (label %.2f)\n", | |
| ps_endpointer_speech_start(ep), labels[i]); | |
| TEST_ASSERT(fabs(ps_endpointer_speech_start(ep) | |
| - labels[i++]) < 0.3); | |
| } | |
| if (!ps_endpointer_in_speech(ep)) { | |
| E_INFO("Speech end at %.2f (label %.2f)\n", | |
| ps_endpointer_speech_end(ep), labels[i]); | |
| TEST_ASSERT(fabs(ps_endpointer_speech_end(ep) | |
| /* FIXME: This difference should be smaller */ | |
| - labels[i++]) < 0.8); | |
| } | |
| } | |
| } | |
| speech = ps_endpointer_end_stream(ep, frame, nsamp, &end_nsamp); | |
| if (speech != NULL) { | |
| TEST_ASSERT(i < n_labels); | |
| E_INFO("Speech end at %.2f (label %.2f)\n", | |
| ps_endpointer_speech_end(ep), labels[i]); | |
| TEST_ASSERT(fabs(ps_endpointer_speech_end(ep) | |
| - labels[i]) < 0.3); | |
| } | |
| pclose(fh); | |
| ckd_free(frame); | |
| ps_endpointer_free(ep); | |
| return 0; | |
| } | |
| int | |
| main(int argc, char *argv[]) | |
| { | |
| ps_endpointer_t *ep; | |
| int i; | |
| (void)argc; (void)argv; | |
| err_set_loglevel(ERR_INFO); | |
| /* Test initialization with default parameters. */ | |
| ep = ps_endpointer_init(0, 0, 0, 0, 0); | |
| TEST_ASSERT(ep); | |
| /* Retain and release, should still be there. */ | |
| TEST_ASSERT((ep = ps_endpointer_retain(ep))); | |
| TEST_ASSERT(ps_endpointer_free(ep)); | |
| /* Test default parameters. */ | |
| TEST_EQUAL(ps_endpointer_sample_rate(ep), | |
| PS_VAD_DEFAULT_SAMPLE_RATE); | |
| TEST_EQUAL(ps_endpointer_frame_size(ep), | |
| (int)(PS_VAD_DEFAULT_SAMPLE_RATE * PS_VAD_DEFAULT_FRAME_LENGTH)); | |
| ps_endpointer_free(ep); | |
| /* Test rejection of unreasonable sample rates. */ | |
| ep = ps_endpointer_init(0, 0, 0, 42, 0); | |
| TEST_ASSERT(ep == NULL); | |
| ep = ps_endpointer_init(0, 0, 0, 96000, 0); | |
| TEST_ASSERT(ep == NULL); | |
| /* Test rejection of unreasonable windows and ratios. */ | |
| ep = ps_endpointer_init(0.3, 0.99, 0, 0, 0); | |
| TEST_ASSERT(ep == NULL); | |
| ep = ps_endpointer_init(0.03, 0.1, 0, 0, 0); | |
| TEST_ASSERT(ep == NULL); | |
| /* Test a variety of sample rates. */ | |
| for (i = 0; i < n_sample_rates; ++i) | |
| test_sample_rate(sample_rates[i]); | |
| return 0; | |
| } | |