int bin_mdef_write_text(bin_mdef_t * m, const char *filename) { FILE *fh; int p, i, n_total_state; if (strcmp(filename, "-") == 0) fh = stdout; else { if ((fh = fopen(filename, "w")) == NULL) return -1; } fprintf(fh, "0.3\n"); fprintf(fh, "%d n_base\n", m->n_ciphone); fprintf(fh, "%d n_tri\n", m->n_phone - m->n_ciphone); if (m->n_emit_state) n_total_state = m->n_phone * (m->n_emit_state + 1); else { n_total_state = 0; for (i = 0; i < m->n_phone; ++i) n_total_state += m->sseq_len[m->phone[i].ssid] + 1; } fprintf(fh, "%d n_state_map\n", n_total_state); fprintf(fh, "%d n_tied_state\n", m->n_sen); fprintf(fh, "%d n_tied_ci_state\n", m->n_ci_sen); fprintf(fh, "%d n_tied_tmat\n", m->n_tmat); fprintf(fh, "#\n# Columns definitions\n"); fprintf(fh, "#%4s %3s %3s %1s %6s %4s %s\n", "base", "lft", "rt", "p", "attrib", "tmat", " ... state id's ..."); for (p = 0; p < m->n_ciphone; p++) { int n_state; fprintf(fh, "%5s %3s %3s %1s", m->ciname[p], "-", "-", "-"); if (bin_mdef_is_fillerphone(m, p)) fprintf(fh, " %6s", "filler"); else fprintf(fh, " %6s", "n/a"); fprintf(fh, " %4d", m->phone[p].tmat); if (m->n_emit_state) n_state = m->n_emit_state; else n_state = m->sseq_len[m->phone[p].ssid]; for (i = 0; i < n_state; i++) { fprintf(fh, " %6u", m->sseq[m->phone[p].ssid][i]); } fprintf(fh, " N\n"); } for (; p < m->n_phone; p++) { int n_state; fprintf(fh, "%5s %3s %3s %c", m->ciname[m->phone[p].info.cd.ctx[0]], m->ciname[m->phone[p].info.cd.ctx[1]], m->ciname[m->phone[p].info.cd.ctx[2]], (WPOS_NAME)[m->phone[p].info.cd.wpos]); if (bin_mdef_is_fillerphone(m, p)) fprintf(fh, " %6s", "filler"); else fprintf(fh, " %6s", "n/a"); fprintf(fh, " %4d", m->phone[p].tmat); if (m->n_emit_state) n_state = m->n_emit_state; else n_state = m->sseq_len[m->phone[p].ssid]; for (i = 0; i < n_state; i++) { fprintf(fh, " %6u", m->sseq[m->phone[p].ssid][i]); } fprintf(fh, " N\n"); } if (strcmp(filename, "-") != 0) fclose(fh); return 0; }
int bin_mdef_write_text(bin_mdef_t * m, const char *filename) { FILE *fh; int p, i, n_total_state; #ifndef POCKETSPHINX_NET if (strcmp(filename, "-") == 0) { fh = stdout; } else #endif { if ((fh = fopen(filename, "w")) == 0) return -1; } #ifndef POCKETSPHINX_NET fprintf(fh, "0.3\n"); fprintf(fh, "%d n_base\n", m->n_ciphone); fprintf(fh, "%d n_tri\n", m->n_phone - m->n_ciphone); if (m->n_emit_state) n_total_state = m->n_phone * (m->n_emit_state + 1); else { n_total_state = 0; for (i = 0; i < m->n_phone; ++i) n_total_state += m->sseq_len[m->phone[i].ssid] + 1; } fprintf(fh, "%d n_state_map\n", n_total_state); fprintf(fh, "%d n_tied_state\n", m->n_sen); fprintf(fh, "%d n_tied_ci_state\n", m->n_ci_sen); fprintf(fh, "%d n_tied_tmat\n", m->n_tmat); fprintf(fh, "#\n# Columns definitions\n"); fprintf(fh, "#%4s %3s %3s %1s %6s %4s %s\n", "base", "lft", "rt", "p", "attrib", "tmat", " ... state id's ..."); for (p = 0; p < m->n_ciphone; p++) { int n_state; fprintf(fh, "%5s %3s %3s %1s", m->ciname[p], "-", "-", "-"); if (bin_mdef_is_fillerphone(m, p)) fprintf(fh, " %6s", "filler"); else fprintf(fh, " %6s", "n/a"); fprintf(fh, " %4d", m->phone[p].tmat); if (m->n_emit_state) n_state = m->n_emit_state; else n_state = m->sseq_len[m->phone[p].ssid]; for (i = 0; i < n_state; i++) { fprintf(fh, " %6u", m->sseq[m->phone[p].ssid][i]); } fprintf(fh, " N\n"); } for (; p < m->n_phone; p++) { int n_state; fprintf(fh, "%5s %3s %3s %c", m->ciname[m->phone[p].info.cd.ctx[0]], m->ciname[m->phone[p].info.cd.ctx[1]], m->ciname[m->phone[p].info.cd.ctx[2]], (WPOS_NAME)[m->phone[p].info.cd.wpos]); if (bin_mdef_is_fillerphone(m, p)) fprintf(fh, " %6s", "filler"); else fprintf(fh, " %6s", "n/a"); fprintf(fh, " %4d", m->phone[p].tmat); if (m->n_emit_state) n_state = m->n_emit_state; else n_state = m->sseq_len[m->phone[p].ssid]; for (i = 0; i < n_state; i++) { fprintf(fh, " %6u", m->sseq[m->phone[p].ssid][i]); } fprintf(fh, " N\n"); } #else net_fprintf(fh, "0.3\n"); net_fprintf(fh, "{0} n_base\n", m->n_ciphone); net_fprintf(fh, "{0} n_tri\n", m->n_phone - m->n_ciphone); if (m->n_emit_state) n_total_state = m->n_phone * (m->n_emit_state + 1); else { n_total_state = 0; for (i = 0; i < m->n_phone; ++i) n_total_state += m->sseq_len[m->phone[i].ssid] + 1; } net_fprintf(fh, "{0} n_state_map\n", n_total_state); net_fprintf(fh, "{0} n_tied_state\n", m->n_sen); net_fprintf(fh, "{0} n_tied_ci_state\n", m->n_ci_sen); net_fprintf(fh, "{0} n_tied_tmat\n", m->n_tmat); net_fprintf(fh, "#\n# Columns definitions\n"); net_fprintf(fh, "#{0:4} {1:3} {2:3} {3:1} {4:6} {5:4} {6}\n", "base", "lft", "rt", "p", "attrib", "tmat", " ... state id's ..."); for (p = 0; p < m->n_ciphone; p++) { int n_state; net_fprintf(fh, "{0:5} {1:3} {2:3} {3:1}", gcnew String(m->ciname[p]), gcnew String("-"),gcnew String( "-"), gcnew String("-")); if (bin_mdef_is_fillerphone(m, p)) net_fprintf(fh, " {0:6}", "filler"); else net_fprintf(fh, " {0:6}", "n/a"); net_fprintf(fh, " {0:4}", m->phone[p].tmat); if (m->n_emit_state) n_state = m->n_emit_state; else n_state = m->sseq_len[m->phone[p].ssid]; for (i = 0; i < n_state; i++) { net_fprintf(fh, " {0:6}", m->sseq[m->phone[p].ssid][i]); } net_fprintf(fh, " N\n"); } for (; p < m->n_phone; p++) { int n_state; net_fprintf(fh, "{0:5} {1:3} {2:3} {3}", gcnew String(m->ciname[m->phone[p].info.cd.ctx[0]]), gcnew String(m->ciname[m->phone[p].info.cd.ctx[1]]), gcnew String(m->ciname[m->phone[p].info.cd.ctx[2]]), (WPOS_NAME)[m->phone[p].info.cd.wpos]); if (bin_mdef_is_fillerphone(m, p)) net_fprintf(fh, " {0:6}", "filler"); else net_fprintf(fh, " {0:6}", "n/a"); net_fprintf(fh, " {0:4}", m->phone[p].tmat); if (m->n_emit_state) n_state = m->n_emit_state; else n_state = m->sseq_len[m->phone[p].ssid]; for (i = 0; i < n_state; i++) { net_fprintf(fh, " {0:6}", m->sseq[m->phone[p].ssid][i]); } net_fprintf(fh, " N\n"); } #endif if (strcmp(filename, "-") != 0) fclose(fh); return 0; }