rhubarb-lip-sync/lib/sphinxbase-5prealpha-2015-0.../test/unit/test_fe/test_pitch.c

56 lines
1.1 KiB
C

#include <stdio.h>
#include "yin.h"
#include "ckd_alloc.h"
#include "test_macros.h"
int
main(int argc, char *argv[])
{
/* This is 11025Hz data (yikes) */
static const int frame_shift = 110, frame_size = 265;
FILE *raw;
yin_t *pe;
int16 *buf;
size_t nsamp, start;
uint16 period, bestdiff;
int nfr;
/* To make life easier, read the whole thing. */
TEST_ASSERT(raw = fopen(TESTDATADIR "/chan3.raw", "rb"));
fseek(raw, 0, SEEK_END);
nsamp = ftell(raw) / 2;
buf = ckd_calloc(nsamp, 2);
fseek(raw, 0, SEEK_SET);
TEST_EQUAL(nsamp, fread(buf, 2, nsamp, raw));
fclose(raw);
TEST_ASSERT(pe = yin_init(frame_size, 0.1, 0.2, 2));
yin_start(pe);
nfr = 0;
for (start = 0; start + frame_size < nsamp; start += frame_shift) {
yin_write(pe, buf + start);
if (yin_read(pe, &period, &bestdiff)) {
if (bestdiff < 0.2 * 32768)
printf("%d ", period ? 11025/period : 0);
else
printf("0 ");
++nfr;
}
}
yin_end(pe);
while (yin_read(pe, &period, &bestdiff)) {
if (bestdiff < 0.2 * 32768)
printf("%d ", period ? 11025/period : 0);
else
printf("0 ");
++nfr;
}
printf("\n");
yin_free(pe);
ckd_free(buf);
return 0;
}