| | #include <stdio.h> |
| | #include <errno.h> |
| |
|
| | #include "fe/fe.h" |
| | #include "feat/feat.h" |
| | #include "util/cmd_ln.h" |
| | #include "util/ckd_alloc.h" |
| |
|
| | #include "test_macros.h" |
| |
|
| | int |
| | main(int argc, char *argv[]) |
| | { |
| | static const ps_arg_t fe_args[] = { |
| | waveform_to_cepstral_command_line_macro(), |
| | { NULL, 0, NULL, NULL } |
| | }; |
| | FILE *raw; |
| | cmd_ln_t *config; |
| | fe_t *fe; |
| | feat_t *fcb; |
| | int16 buf[2048]; |
| | mfcc_t **cepbuf, **cptr; |
| | mfcc_t ***featbuf1, ***featbuf2, ***fptr; |
| | size_t nsamp; |
| | int32 total_frames, ncep, nfr, i; |
| |
|
| | if ((raw = fopen(TESTDATADIR "/chan3.raw", "rb")) == NULL) { |
| | perror(TESTDATADIR "/chan3.raw"); |
| | return 1; |
| | } |
| |
|
| | config = cmd_ln_parse_r(NULL, fe_args, argc, argv, FALSE); |
| | fe = fe_init_auto_r(config); |
| | fcb = feat_init("1s_c_d_dd", CMN_NONE, FALSE, AGC_NONE, |
| | TRUE, fe_get_output_size(fe)); |
| |
|
| | |
| | fseek(raw, 0, SEEK_END); |
| | nsamp = ftell(raw) / sizeof(int16); |
| | fe_process_frames(fe, NULL, &nsamp, NULL, &total_frames); |
| | printf("%ld samples, %d + 1 frames\n", nsamp, total_frames); |
| | total_frames++; |
| | cepbuf = ckd_calloc_2d(total_frames + 1, fe_get_output_size(fe), sizeof(**cepbuf)); |
| | fseek(raw, 0, SEEK_SET); |
| |
|
| | |
| | fe_start_utt(fe); |
| | cptr = cepbuf; |
| | nfr = total_frames; |
| | while ((nsamp = fread(buf, sizeof(int16), 2048, raw)) > 0) { |
| | int16 const *bptr = buf; |
| | while (nsamp) { |
| | int32 ncep = nfr; |
| | fe_process_frames(fe, &bptr, &nsamp, cptr, &ncep); |
| | cptr += ncep; |
| | nfr -= ncep; |
| | } |
| | } |
| | fe_end_utt(fe, *cptr, &nfr); |
| |
|
| | |
| | featbuf1 = feat_array_alloc(fcb, total_frames); |
| | featbuf2 = feat_array_alloc(fcb, total_frames); |
| |
|
| | |
| | ncep = total_frames; |
| | TEST_EQUAL(total_frames, |
| | feat_s2mfc2feat_live(fcb, cepbuf, |
| | &ncep, TRUE, TRUE, |
| | featbuf1)); |
| | TEST_EQUAL(ncep, total_frames); |
| |
|
| | |
| | cptr = cepbuf; |
| | fptr = featbuf2; |
| | ncep = 1; |
| | nfr = feat_s2mfc2feat_live(fcb, cptr, &ncep, TRUE, FALSE, fptr); |
| | TEST_EQUAL(nfr, 0); |
| | TEST_EQUAL(ncep, 1); |
| | cptr += ncep; |
| | for (i = 1; i < total_frames - 1; ++i) { |
| | ncep = 1; |
| | nfr = feat_s2mfc2feat_live(fcb, cptr, &ncep, FALSE, FALSE, fptr); |
| | cptr += ncep; |
| | fptr += nfr; |
| | } |
| | nfr = feat_s2mfc2feat_live(fcb, cptr, &ncep, FALSE, TRUE, fptr); |
| | TEST_EQUAL(nfr, 4); |
| | TEST_EQUAL(ncep, 1); |
| | cptr += ncep; |
| | fptr += nfr; |
| | |
| | TEST_EQUAL(cptr - cepbuf, total_frames); |
| | TEST_EQUAL(fptr - featbuf2, total_frames); |
| |
|
| | |
| | for (i = 0; i < total_frames; ++i) { |
| | int32 j; |
| | printf("%-4d ", i); |
| | for (j = 0; (uint32)j < feat_dimension(fcb); ++j) { |
| | TEST_EQUAL_MFCC(featbuf1[i][0][j], featbuf2[i][0][j]); |
| | } |
| | if (i % 10 == 9) |
| | printf("\n"); |
| | } |
| | printf("\n"); |
| |
|
| | |
| | |
| | cptr = cepbuf; |
| | fptr = featbuf2; |
| | ncep = total_frames; |
| | nfr = feat_s2mfc2feat_live(fcb, cptr, &ncep, TRUE, FALSE, fptr); |
| | TEST_ASSERT(ncep != nfr); |
| | cptr += ncep; |
| | fptr += nfr; |
| | ncep = total_frames - ncep; |
| | while (ncep) { |
| | int32 tmp_ncep; |
| | tmp_ncep = ncep; |
| | nfr = feat_s2mfc2feat_live(fcb, cptr, &tmp_ncep, FALSE, FALSE, fptr); |
| | cptr += tmp_ncep; |
| | fptr += nfr; |
| | ncep -= tmp_ncep; |
| | } |
| | nfr = feat_s2mfc2feat_live(fcb, cptr, &ncep, FALSE, TRUE, fptr); |
| | cptr += ncep; |
| | fptr += nfr; |
| | TEST_EQUAL(cptr - cepbuf, total_frames); |
| | TEST_EQUAL(fptr - featbuf2, total_frames); |
| |
|
| | |
| | for (i = 0; i < total_frames; ++i) { |
| | int32 j; |
| | printf("%-4d ", i); |
| | for (j = 0; (uint32)j < feat_dimension(fcb); ++j) |
| | TEST_EQUAL_MFCC(featbuf1[i][0][j], featbuf2[i][0][j]); |
| | if (i % 10 == 9) |
| | printf("\n"); |
| | } |
| | printf("\n"); |
| |
|
| | fclose(raw); |
| | fe_free(fe); |
| | feat_array_free(featbuf1); |
| | feat_array_free(featbuf2); |
| | feat_free(fcb); |
| | ckd_free_2d(cepbuf); |
| | ps_config_free(config); |
| |
|
| | return 0; |
| | } |
| |
|