Packages

Bindings to the C++ pHash library (phash.org).

Current section

Files

Jump to
phash c_lib pHash examples test_audiohash.cpp
Raw

c_lib/pHash/examples/test_audiohash.cpp

#include <stdio.h>
#include "audiophash.h"
#include "pHash.h"
int main(int argc, char **argv) {
if (argc < 2) {
printf("not enough input args\n");
return 1;
}
const char *dirname = argv[1];
const float nbsecs = 0.0;
const int sr = 8000;
const int chs = 1;
float *sigbuf = (float *)malloc(1 << 26);
const int N = (1 << 26) / sizeof(float);
int nbfiles;
char **files = ph_readfilenames(dirname, nbfiles);
if (files == NULL) {
printf("unable to read filenames in dir\n");
return 2;
}
printf("nbfiles %d\n", nbfiles);
for (int i = 0; i < nbfiles; i++) {
printf("file[%d]: %s\n", i, files[i]);
int buflen = N;
float *buf = ph_readaudio(files[i], sr, chs, sigbuf, buflen, nbsecs);
if (buf == NULL) {
printf("unable to extract audio\n");
continue;
}
printf("buf = %p, len = %d\n", buf, buflen);
int nbframes;
uint32_t *hash = ph_audiohash(buf, buflen, sr, nbframes);
if (hash == NULL) {
printf("unable to calculate hash\n");
continue;
}
printf("hash frames %d\n", nbframes);
free(hash);
if (buf != sigbuf) free(buf);
}
free(sigbuf);
for (int i = 0; i < nbfiles; i++) {
free(files[i]);
}
free(files);
return 0;
}