From e56c91ff6eecdb1663bb1722a4081ef2f190e9c0 Mon Sep 17 00:00:00 2001 From: uphantom Date: Fri, 28 Aug 2015 18:37:12 +0800 Subject: suport multi-thread reader --- htk_io/tools/tnet_to_nerv.cpp | 78 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 8 deletions(-) (limited to 'htk_io/tools') diff --git a/htk_io/tools/tnet_to_nerv.cpp b/htk_io/tools/tnet_to_nerv.cpp index a779a25..f96781a 100644 --- a/htk_io/tools/tnet_to_nerv.cpp +++ b/htk_io/tools/tnet_to_nerv.cpp @@ -2,14 +2,22 @@ #include #include #include -#include +#include char token[1024]; char output[1024]; double **mat; int main(int argc, char **argv) { + + if (argc != 3) + { + printf("%s tnet.model.in nerv.model.out\n", argv[0]); + } + std::ofstream fout; - fout.open(argv[1]); - int cnt = 0; + freopen(argv[1], "r", stdin); + fout.open(argv[2]); + int cnt = 0, bias = 1, win = 1; + long length = 0, base = 0; while (scanf("%s", token) != EOF) { int nrow, ncol; @@ -19,13 +27,13 @@ int main(int argc, char **argv) { scanf("%d %d", &ncol, &nrow); scanf("%s %d %d", token, &ncol, &nrow); printf("%d %d\n", nrow, ncol); - mat = (double **)malloc(nrow * sizeof(double *)); + mat = (double **)malloc(nrow * sizeof(double *)); for (i = 0; i < nrow; i++) mat[i] = (double *)malloc(ncol * sizeof(double)); for (j = 0; j < ncol; j++) for (i = 0; i < nrow; i++) scanf("%lf", mat[i] + j); - long base = fout.tellp(); + base = fout.tellp(); sprintf(output, "%16d", 0); fout << output; sprintf(output, "{type=\"nerv.LinearTransParam\",id=\"affine%d_ltp\"}\n", @@ -38,10 +46,8 @@ int main(int argc, char **argv) { for (j = 0; j < ncol; j++) fout << mat[i][j] << " "; fout << std::endl; - free(mat[i]); } - free(mat); - long length = fout.tellp() - base; + length = fout.tellp() - base; fout.seekp(base); sprintf(output, "[%13lu]\n", length); fout << output; @@ -69,6 +75,62 @@ int main(int argc, char **argv) { cnt++; } } + else if (strcmp(token, "") == 0) + { + scanf("%d %d", &ncol, &nrow); + scanf("%s %d", token, &ncol); + base = fout.tellp(); + nrow = 1; + mat = (double **)malloc(nrow * sizeof(double *)); + for (i = 0; i < nrow; i++) + mat[i] = (double *)malloc(ncol * sizeof(double)); + for (j = 0; j < ncol; j++) + for (i = 0; i < nrow; i++) + scanf("%lf", mat[i] + j); + sprintf(output, "%16d", 0); + fout << output; + sprintf(output, "{type=\"nerv.MatrixParam\",id=\"bias%d\"}\n",bias); + fout << output; + sprintf(output, "1 %d\n", ncol); + fout << output; + for (j = 0; j < ncol; j++) + fout << mat[0][j] << " "; + fout << std::endl; + length = fout.tellp() - base; + fout.seekp(base); + sprintf(output, "[%13lu]\n", length); + fout << output; + fout.seekp(0, std::ios_base::end); + bias++; + } + else if (strcmp(token, "") == 0) + { + scanf("%d %d", &ncol, &nrow); + scanf("%s %d", token, &ncol); + base = fout.tellp(); + nrow = 1; + mat = (double **)malloc(nrow * sizeof(double *)); + for (i = 0; i < nrow; i++) + mat[i] = (double *)malloc(ncol * sizeof(double)); + for (j = 0; j < ncol; j++) + for (i = 0; i < nrow; i++) + scanf("%lf", mat[i] + j); + sprintf(output, "%16d", 0); + fout << output; + sprintf(output, "{type=\"nerv.MatrixParam\",id=\"window%d\"}\n",win); + fout << output; + sprintf(output, "1 %d\n", ncol); + fout << output; + for (j = 0; j < ncol; j++) + fout << mat[0][j] << " "; + fout << std::endl; + length = fout.tellp() - base; + fout.seekp(base); + sprintf(output, "[%13lu]\n", length); + fout << output; + fout.seekp(0, std::ios_base::end); + win++; + } } return 0; } -- cgit v1.2.3-70-g09d2