static int32 senone_mgau_map_read(senone_t * s, char const *file_name) { FILE *fp; int32 byteswap, chksum_present, n_gauden_present; uint32 chksum; int32 i; char eofchk; char **argname, **argval; void *ptr; float32 v; E_INFO("Reading senone gauden-codebook map file: %s\n", file_name); if ((fp = fopen(file_name, "rb")) == NULL) E_FATAL_SYSTEM("Failed to open map file '%s' for reading", file_name); /* Read header, including argument-value info and 32-bit byteorder magic */ if (bio_readhdr(fp, &argname, &argval, &byteswap) < 0) E_FATAL("Failed to read header from file '%s'\n", file_name); /* Parse argument-value list */ chksum_present = 0; n_gauden_present = 0; for (i = 0; argname[i]; i++) { if (strcmp(argname[i], "version") == 0) { if (strcmp(argval[i], SPDEF_PARAM_VERSION) != 0) { E_WARN("Version mismatch(%s): %s, expecting %s\n", file_name, argval[i], SPDEF_PARAM_VERSION); } /* HACK!! Convert version# to float32 and take appropriate action */ if (sscanf(argval[i], "%f", &v) != 1) E_FATAL("%s: Bad version no. string: %s\n", file_name, argval[i]); n_gauden_present = (v > 1.1) ? 1 : 0; } else if (strcmp(argname[i], "chksum0") == 0) { chksum_present = 1; /* Ignore the associated value */ } } bio_hdrarg_free(argname, argval); argname = argval = NULL; chksum = 0; /* Read #gauden (if version matches) */ if (n_gauden_present) { E_INFO("Reading number of codebooks from %s\n", file_name); if (bio_fread (&(s->n_gauden), sizeof(int32), 1, fp, byteswap, &chksum) != 1) E_FATAL("fread(%s) (#gauden) failed\n", file_name); } /* Read 1d array data */ if (bio_fread_1d(&ptr, sizeof(uint32), &(s->n_sen), fp, byteswap, &chksum) < 0) { E_FATAL("bio_fread_1d(%s) failed\n", file_name); } s->mgau = ptr; E_INFO("Mapping %d senones to %d codebooks\n", s->n_sen, s->n_gauden); /* Infer n_gauden if not present in this version */ if (!n_gauden_present) { s->n_gauden = 1; for (i = 0; i < s->n_sen; i++) if (s->mgau[i] >= s->n_gauden) s->n_gauden = s->mgau[i] + 1; } if (chksum_present) bio_verify_chksum(fp, byteswap, chksum); if (fread(&eofchk, 1, 1, fp) == 1) E_FATAL("More data than expected in %s: %d\n", file_name, eofchk); fclose(fp); E_INFO("Read %d->%d senone-codebook mappings\n", s->n_sen, s->n_gauden); return 1; }
int s3gau_read_maybe_full(const char *fn, vector_t *****out, uint32 *out_n_mgau, uint32 *out_n_feat, uint32 *out_n_density, uint32 **out_veclen, uint32 need_full) { FILE *fp; const char *do_chk; const char *ver; uint32 n_mgau, n_feat, n_density; uint32 *veclen, maxveclen; uint32 blk, i, j, k, l, r, n; uint32 chksum = 0; uint32 sv_chksum, ignore = 0; float32 *raw; vector_t ****o; uint32 swap; fp = s3open(fn, "rb", &swap); if (fp == NULL) return S3_ERROR; /* check version id */ ver = s3get_gvn_fattr("version"); if (ver) { if (strcmp(ver, GAU_FILE_VERSION) != 0) { E_FATAL("Version mismatch for %s, file ver: %s != reader ver: %s\n", fn, ver, GAU_FILE_VERSION); } } else { E_FATAL("No version attribute for %s\n", fn); } /* if do_chk is non-NULL, there is a checksum after the data in the file */ do_chk = s3get_gvn_fattr("chksum0"); if (do_chk && !strcmp(do_chk, "no")) { do_chk = NULL; } if (bio_fread(&n_mgau, sizeof(uint32), 1, fp, swap, &chksum) != 1) { goto error; } if (bio_fread(&n_feat, sizeof(uint32), 1, fp, swap, &chksum) != 1) { goto error; } if (bio_fread(&n_density, sizeof(uint32), 1, fp, swap, &chksum) != 1) { goto error; } veclen = ckd_calloc(n_feat, sizeof(uint32)); if (bio_fread(veclen, sizeof(uint32), n_feat, fp, swap, &chksum) != n_feat) { goto error; } if (bio_fread_1d((void **)&raw, sizeof(float32), &n, fp, swap, &chksum) < 0) { ckd_free(veclen); goto error; } for (i = 0, blk = 0, maxveclen = 0; i < n_feat; i++) { blk += veclen[i] * veclen[i]; if (veclen[i] > maxveclen) maxveclen = veclen[i]; } if (n != n_mgau * n_density * blk) { if (need_full) E_ERROR("Failed to read full covariance file %s (expected %d values, got %d)\n", fn, n_mgau * n_density * blk, n); goto error; } o = (vector_t ****)ckd_calloc_4d(n_mgau, n_feat, n_density, maxveclen, sizeof(vector_t)); for (i = 0, r = 0; i < n_mgau; i++) { for (j = 0; j < n_feat; j++) { for (k = 0; k < n_density; k++) { for (l = 0; l < veclen[j]; l++) { o[i][j][k][l] = &raw[r]; r += veclen[j]; } } } } if (do_chk) { /* See if the checksum in the file matches that which was computed from the read data */ if (bio_fread(&sv_chksum, sizeof(uint32), 1, fp, swap, &ignore) != 1) { goto error; } if (sv_chksum != chksum) { E_FATAL("Checksum error; read corrupt data.\n"); } } *out = o; *out_n_mgau = n_mgau; *out_n_feat = n_feat; *out_n_density = n_density; *out_veclen = veclen; s3close(fp); E_INFO("Read %s [%ux%ux%u array of full matrices]\n", fn, n_mgau, n_feat, n_density); return S3_SUCCESS; error: if (fp) s3close(fp); return S3_ERROR; }
int s3gaucnt_read_full(const char *fn, vector_t ****out_wt_mean, vector_t *****out_wt_var, int32 *out_pass2var, float32 ****out_dnom, uint32 *out_n_cb, uint32 *out_n_feat, uint32 *out_n_density, uint32 **out_veclen) { uint32 rd_chksum = 0; uint32 sv_chksum; uint32 ignore; char *ver; char *do_chk; FILE *fp; uint32 swap; uint32 has_means; uint32 has_vars; uint32 pass2var; uint32 n_cb; uint32 n_feat; uint32 n_density; uint32 *veclen; float32 *buf; float32 ***dnom; uint32 n, i, b_i, j, k, l, d1, d2, d3; vector_t ***wt_mean = NULL; vector_t ****wt_var = NULL; fp = s3open(fn, "rb", &swap); if (fp == NULL) return S3_ERROR; /* check version id */ ver = s3get_gvn_fattr("version"); if (ver) { if (strcmp(ver, GAUCNT_FILE_VERSION) != 0) { E_FATAL("Version mismatch for %s, file ver: %s != reader ver: %s\n", fn, ver, GAUCNT_FILE_VERSION); } } else { E_FATAL("No version attribute for %s\n", fn); } /* if do_chk is non-NULL, there is a checksum after the data in the file */ do_chk = s3get_gvn_fattr("chksum0"); if (bio_fread((void *)&has_means, sizeof(uint32), 1, fp, swap, &rd_chksum) != 1) { return S3_ERROR; } if (bio_fread((void *)&has_vars, sizeof(uint32), 1, fp, swap, &rd_chksum) != 1) { return S3_ERROR; } if (bio_fread((void *)&pass2var, sizeof(uint32), 1, fp, swap, &rd_chksum) != 1) { return S3_ERROR; } if (bio_fread((void *)&n_cb, sizeof(uint32), 1, fp, swap, &rd_chksum) != 1) { return S3_ERROR; } if (bio_fread((void *)&n_density, sizeof(uint32), 1, fp, swap, &rd_chksum) != 1) { return S3_ERROR; } if (bio_fread_1d((void **)&veclen, sizeof(uint32), &n_feat, fp, swap, &rd_chksum) < 0) { return S3_ERROR; } if (has_means) { if (bio_fread_1d((void *)&buf, sizeof(float32), &n, fp, swap, &rd_chksum) < 0) { return S3_ERROR; } wt_mean = (vector_t ***)ckd_calloc_3d(n_cb, n_feat, n_density, sizeof(vector_t)); for (i = 0, b_i = 0; i < n_cb; i++) { for (j = 0; j < n_feat; j++) { for (k = 0; k < n_density; k++) { wt_mean[i][j][k] = &buf[b_i]; b_i += veclen[j]; } } } } if (has_vars) { uint32 blk, maxveclen; for (i = 0, blk = 0, maxveclen = 0; i < n_feat; i++) { blk += veclen[i]; if (veclen[i] > maxveclen) maxveclen = veclen[i]; } if (bio_fread_1d((void *)&buf, sizeof(float32), &n, fp, swap, &rd_chksum) < 0) { return S3_ERROR; } assert(n == n_cb * n_density * blk * blk); wt_var = (vector_t ****)ckd_calloc_4d(n_cb, n_feat, n_density, maxveclen, sizeof(vector_t)); for (i = 0, b_i = 0; i < n_cb; i++) { for (j = 0; j < n_feat; j++) { for (k = 0; k < n_density; k++) { for (l = 0; l < veclen[j]; l++) { wt_var[i][j][k][l] = &buf[b_i]; b_i += veclen[j]; } } } } } if (bio_fread_3d((void ****)&dnom, sizeof(float32), &d1, &d2, &d3, fp, swap, &rd_chksum) < 0) { return S3_ERROR; } assert(d1 == n_cb); assert(d2 == n_feat); assert(d3 == n_density); if (do_chk) { /* See if the checksum in the file matches that which was computed from the read data */ if (bio_fread(&sv_chksum, sizeof(uint32), 1, fp, swap, &ignore) != 1) { s3close(fp); return S3_ERROR; } if (sv_chksum != rd_chksum) { E_FATAL("Checksum error; read corrupt data.\n"); } } s3close(fp); *out_wt_mean = wt_mean; *out_wt_var = wt_var; *out_pass2var = pass2var; *out_dnom = dnom; *out_n_cb = n_cb; *out_n_feat = n_feat; *out_n_density = n_density; *out_veclen = veclen; E_INFO("Read %s%s%s%s [%ux%ux%u vector arrays]\n", fn, (has_means ? " with means" : ""), (has_vars ? " with vars" : ""), (has_vars && pass2var ? " (2pass)" : ""), n_cb, n_feat, n_density); return S3_SUCCESS; }
int s3map_read(const char *fn, void **out_map, uint32 *out_n_dom, uint32 *out_n_rng, size_t map_elem_size) { uint32 rd_chksum = 0; uint32 sv_chksum; uint32 ignore; char *ver; char *do_chk; FILE *fp; uint32 swap; fp = s3open(fn, "rb", &swap); if (fp == NULL) { return S3_ERROR; } /* check version id */ ver = s3get_gvn_fattr("version"); if (ver) { if (strcmp(ver, MAP_FILE_VERSION) != 0) { E_FATAL("Version mismatch for %s, file ver: %s != reader ver: %s\n", fn, ver, MAP_FILE_VERSION); } } else { E_FATAL("No version attribute for %s\n", fn); } do_chk = s3get_gvn_fattr("chksum0"); if (bio_fread(out_n_rng, sizeof(uint32), 1, fp, swap, &rd_chksum) != 1) { s3close(fp); return S3_ERROR; } if (bio_fread_1d(out_map, map_elem_size, out_n_dom, fp, swap, &rd_chksum) < 0) { s3close(fp); return S3_ERROR; } if (do_chk) { if (bio_fread(&sv_chksum, sizeof(uint32), 1, fp, swap, &ignore) != 1) { s3close(fp); return S3_ERROR; } if (sv_chksum != rd_chksum) { E_FATAL("Checksum error; read corrupted data.\n"); } } E_INFO("Read %s [%u mappings to %u]\n", fn, *out_n_dom, *out_n_rng); return S3_SUCCESS; }
/** Reading a regression map */ static int s3map_read(const char *fn, /**< The file name */ void **out_map, int32 * out_n_dom, int32 * out_n_rng, size_t map_elem_size) { uint32 rd_chksum = 0; uint32 sv_chksum; uint32 ignore; char *ver; char *do_chk; FILE *fp; int32 swap; char **argname, **argval; int i; if ((fp = fopen(fn, "rb")) == NULL) E_FATAL_SYSTEM("fopen(%s,rb) failed\n", fn); /* Read header, including argument-value info and 32-bit byteorder magic */ if (bio_readhdr(fp, &argname, &argval, &swap) < 0) E_FATAL("bio_readhdr(%s) failed\n", fn); /* Parse argument-value list */ ver = do_chk = NULL; for (i = 0; argname[i]; i++) { if (strcmp(argname[i], "version") == 0) { if (strcmp(argval[i], MAP_FILE_VERSION) != 0) { E_FATAL("Version mismatch(%s): %s, expecting %s\n", fn, argval[i], MAP_FILE_VERSION); } ver = argval[i]; } else if (strcmp(argname[i], "chksum0") == 0) { do_chk = argval[i]; } } if (ver == NULL) E_FATAL("No version attribute for %s\n", fn); bio_hdrarg_free(argname, argval); argname = argval = NULL; if (bio_fread(out_n_rng, sizeof(uint32), 1, fp, swap, &rd_chksum) != 1) { fclose(fp); return S3_ERROR; } if (bio_fread_1d(out_map, map_elem_size, out_n_dom, fp, swap, &rd_chksum) < 0) { fclose(fp); return S3_ERROR; } if (do_chk) { if (bio_fread(&sv_chksum, sizeof(uint32), 1, fp, swap, &ignore) != 1) { fclose(fp); return S3_ERROR; } if (sv_chksum != rd_chksum) { E_FATAL("Checksum error; read corrupted data.\n"); } } E_INFO("Read %s [%u mappings to %u]\n", fn, *out_n_dom, *out_n_rng); return S3_SUCCESS; }
static int32 senone_mgau_map_read (senone_t *s, const char *file_name) { FILE *fp; int32 byteswap, chksum_present, n_mgau_present; uint32 chksum; int32 i; char eofchk; char **argname, **argval; float32 v; E_INFO("Reading senone-codebook map file: %s\n", file_name); if ((fp = fopen(file_name, "rb")) == NULL) E_FATAL_SYSTEM("fopen(%s,rb) failed\n", file_name); /* Read header, including argument-value info and 32-bit byteorder magic */ if (bio_readhdr (fp, &argname, &argval, &byteswap) < 0) E_FATAL("bio_readhdr(%s) failed\n", file_name); /* Parse argument-value list */ chksum_present = 0; n_mgau_present = 0; for (i = 0; argname[i]; i++) { if (strcmp (argname[i], "version") == 0) { if (strcmp(argval[i], SPDEF_PARAM_VERSION) != 0) { E_WARN("Version mismatch(%s): %s, expecting %s\n", file_name, argval[i], SPDEF_PARAM_VERSION); } /* HACK!! Convert version# to float32 and take appropriate action */ if (sscanf (argval[i], "%f", &v) != 1) E_FATAL("%s: Bad version no. string: %s\n", file_name, argval[i]); n_mgau_present = (v > 1.1) ? 1 : 0; } else if (strcmp (argname[i], "chksum0") == 0) { chksum_present = 1; /* Ignore the associated value */ } } bio_hdrarg_free (argname, argval); argname = argval = NULL; chksum = 0; /* Read #gauden (if version matches) */ if (n_mgau_present) { if (bio_fread (&(s->n_mgau), sizeof(int32), 1, fp, byteswap, &chksum) != 1) E_FATAL("fread(%s) (#gauden) failed\n", file_name); } /* Read 1d array data; s->sen2mgau allocated by called function */ if (bio_fread_1d ((void **)(&s->sen2mgau), sizeof(int32), &(s->n_sen), fp, byteswap, &chksum) < 0) { E_FATAL("bio_fread_1d(%s) failed\n", file_name); } /* Infer n_mgau if not present in this version */ if (! n_mgau_present) { s->n_mgau = 1; for (i = 0; i < s->n_sen; i++) { if (s->sen2mgau[i] >= s->n_mgau) s->n_mgau = s->sen2mgau[i]+1; } } if (s->n_sen >= MAX_SENID) E_FATAL("%s: #senones (%d) exceeds limit (%d)\n", file_name, s->n_sen, MAX_SENID); if (s->n_mgau >= MAX_MGAUID) E_FATAL("%s: #gauden (%d) exceeds limit (%d)\n", file_name, s->n_mgau, MAX_MGAUID); /* Check for validity of mappings */ for (i = 0; i < s->n_sen; i++) { if ((s->sen2mgau[i] >= s->n_mgau) || NOT_MGAUID(s->sen2mgau[i])) E_FATAL("Bad sen2mgau[%d]= %d, out of range [0, %d)\n", i, s->sen2mgau[i], s->n_mgau); } if (chksum_present) bio_verify_chksum (fp, byteswap, chksum); if (fread (&eofchk, 1, 1, fp) == 1) E_FATAL("More data than expected in %s\n", file_name); fclose(fp); E_INFO("Read %d->%d senone-codebook mappings\n", s->n_sen, s->n_mgau); return 0; }