Subject: Julius bug on forced alignment and patch
From: LEE Akinobu 
To: onsei-mail@etl.go.jp
Cc: ri@is.aist-nara.ac.jp
Date: Thu, 05 Oct 2000 11:39:02 +0900
X-Mailer: Mew version 1.93 on Emacs 20.6 / Mule 4.0 (HANANOEN)

音声メーリングリストの皆様へ

奈良先端大の 李 です.

最新版の Julius には forced alignment を行うオプション -palign,
-walign がありますが,この機能にバグがあることが判明しました.
内容は,アラインメントの結果が1フレームづつずれる,というものです.

修正パッチをこのメールの最後に添付しますので,
アラインメント機能をお使いの方は早急にこのパッチを当てていただけるよう,
お願いいたします.

	% Juliusのアーカイブを展開
	% cd julius-3.1p1
	% patch -p1 < このメールに添付のパッチ
	% コンパイル

では失礼します.

----------------- begin cuthere --------- begin cuthere ---------
diff -crN julius-3.1p1/libsent/src/phmm/vsegment.c julius-3.1p2/libsent/src/phmm/vsegment.c
*** julius-3.1p1/libsent/src/phmm/vsegment.c	Tue Jun 13 06:24:06 2000
--- julius-3.1p2/libsent/src/phmm/vsegment.c	Sun Sep 24 23:53:15 2000
***************
*** 109,115 ****
      }
      /* propagate token, appending new if path was selected between units */
      for (n = 0; n < hmm->len; n++) {
!       if (nodescore[tn][n] <= LOG_ZERO || from_node[n] == -1) {
  	tokenp[tn][n] = tokenp[tl][from_node[n]];
        } else {
  	if (u_end[from_node[n]] != -1 && u_start[n] != -1
--- 109,117 ----
      }
      /* propagate token, appending new if path was selected between units */
      for (n = 0; n < hmm->len; n++) {
!       if (from_node[n] == -1) {
! 	tokenp[tn][n] = NULL;
!       } else if (nodescore[tn][n] <= LOG_ZERO) {
  	tokenp[tn][n] = tokenp[tl][from_node[n]];
        } else {
  	if (u_end[from_node[n]] != -1 && u_start[n] != -1
***************
*** 117,123 ****
  	  newtoken = (SEGTOKEN *)mymalloc(sizeof(SEGTOKEN));
  	  newtoken->last_end_frame = t-1;
  	  newtoken->last_end_score = nodescore[tl][from_node[n]];
! 	  newtoken->next = tokenp[tn][from_node[n]];
  	  tokenp[tn][n] = newtoken;
  	} else {
  	  tokenp[tn][n] = tokenp[tl][from_node[n]];
--- 119,125 ----
  	  newtoken = (SEGTOKEN *)mymalloc(sizeof(SEGTOKEN));
  	  newtoken->last_end_frame = t-1;
  	  newtoken->last_end_score = nodescore[tl][from_node[n]];
! 	  newtoken->next = tokenp[tl][from_node[n]];
  	  tokenp[tn][n] = newtoken;
  	} else {
  	  tokenp[tn][n] = tokenp[tl][from_node[n]];

----------------- end cuthere --------- end cuthere ---------