summaryrefslogblamecommitdiff
path: root/htk_io/tools/tnet_to_nerv.c
blob: 5774819dc35edd2cf7b4bc53feaed10647d93298 (plain) (tree)










































                                                                                   
                                              












                                                      
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char token[1024];
double mat[4096][4096];
int main() {
    FILE *fout = fopen("converted.nerv", "w");
    int cnt = 0;
    while (scanf("%s", token) != EOF)
    {
        int nrow, ncol;
        int i, j;
        if (strcmp(token, "<biasedlinearity>") == 0)
        {
            scanf("%d %d", &ncol, &nrow);
            scanf("%s %d %d", token, &ncol, &nrow);
            printf("%d %d\n", nrow, ncol);
            for (j = 0; j < ncol; j++)
                for (i = 0; i < nrow; i++)
                    scanf("%lf", mat[i] + j);
            off_t base = ftello(fout);
            fprintf(fout, "%16d", 0);
            fprintf(fout, "{type=\"nerv.LinearTransParam\",id=\"affine%d_ltp\"}\n",
                            cnt);
            fprintf(fout, "%d %d\n", nrow, ncol);
            for (i = 0; i < nrow; i++)
            {
                for (j = 0; j < ncol; j++)
                    fprintf(fout, "%.8f ", mat[i][j]);
                fprintf(fout, "\n");
            }
            size_t length = ftello(fout) - base;
            fseeko(fout, base, SEEK_SET);
            fprintf(fout, "[%13lu]\n", length);
            fseeko(fout, 0, SEEK_END);
            if (scanf("%s %d", token, &ncol) == 2 && *token == 'v')
            {
                base = ftello(fout);
                for (j = 0; j < ncol; j++)
                    scanf("%lf", mat[0] + j);
                fprintf(fout, "%16d", 0);
                fprintf(fout, "{type=\"nerv.BiasParam\",id=\"affine%d_bp\"}\n",
                        cnt);
                fprintf(fout, "1 %d\n", ncol);
                for (j = 0; j < ncol; j++)
                    fprintf(fout, "%.8f ", mat[0][j]);
                fprintf(fout, "\n");
                length = ftello(fout) - base;
                fseeko(fout, base, SEEK_SET);
                fprintf(fout, "[%13lu]\n", length);
                cnt++;
                fseeko(fout, 0, SEEK_END);
            }
        }
    }
    return 0;
}