voicecountsyllables.c 3.21 KB
/*---------------------------------------------------------------------
 	Copyright (C) 1998 Nintendo.
 	
 	File		voicecheckword.c
 	Coded    by	Koji Mitsunari.	May 26, 1998.
 	Modified by
 	Comments	Voice Recognition System
   
 	$Id: voicecountsyllables.c,v 1.1.1.1 2002/05/02 03:28:44 blythe Exp $
   ---------------------------------------------------------------------*/
/**************************************************************************
 *
 *  $Revision: 1.1.1.1 $
 *  $Date: 2002/05/02 03:28:44 $
 *  $Source: 
 *
 **************************************************************************/
#include <ultra64.h>

void
osVoiceCountSyllables(u8 *data, u32 *syllable) {				/*-- 入力:文字配列 --*/
  s32	k;								/*-- 出力:入力された文字配列の内部音節数 * 2 --*/
  u16	sjis, old = 0;

  *syllable = 1;							/*-- 一単語当り加算音節数 --*/

  for ( k = 0 ; data[k] ; k += 2) {

    sjis = (data[k]<<8)+data[k+1];

    if(sjis == 0x82a0 || sjis == 0x82a2 || sjis == 0x82a4 ||		/*-- 母音のみ --*/
       sjis == 0x82a6 || sjis == 0x82a8 ||
       sjis == 0x8341 || sjis == 0x8343 || sjis == 0x8345 ||
       sjis == 0x8347 || sjis == 0x8349){
	 
      if(k == 0){							/*   語頭   */
	*syllable += 2;
      }
      else{								/*   語頭以外   */
	*syllable += 1;
      }

    }else if(sjis == 0x82a9 || sjis == 0x82ab || sjis == 0x82ad ||	/*-- 子音+母音(ローマ字表記の先頭が「k,t,c,p」) --*/ 
	     sjis == 0x82af || sjis == 0x82b1 ||
	     sjis == 0x82bd || sjis == 0x82bf || sjis == 0x82c2 ||
	     sjis == 0x82c4 || sjis == 0x82c6 ||
	     sjis == 0x82cf || sjis == 0x82d2 || sjis == 0x82d5 ||
	     sjis == 0x82d8 || sjis == 0x82db ||
	     sjis == 0x834a || sjis == 0x834c || sjis == 0x834e ||
	     sjis == 0x8350 || sjis == 0x8352 ||
	     sjis == 0x835e || sjis == 0x8360 || sjis == 0x8363 ||
	     sjis == 0x8365 || sjis == 0x8367 ||
	     sjis == 0x8370 || sjis == 0x8373 || sjis == 0x8376 ||
	     sjis == 0x8379 || sjis == 0x837c){
	       
      if(k == 0){							/*   語頭   */
	*syllable += 2;
      }
      else{								/*   語頭以外   */

	if(old == 0x82c1 || old == 0x8362){				/*   直前の文字が「っ」   */
	  *syllable += 2;
	}
	else{								/*   直前の文字が「っ」以外   */
	  *syllable += 3;
	}
	
      }
      
    }else if(sjis == 0x829f || sjis == 0x82a1 || sjis == 0x82a3 ||	/*-- 子音+よう音 --*/
	     sjis == 0x82a5 || sjis == 0x82a7 ||
	     sjis == 0x82e1 || sjis == 0x82e3 || sjis == 0x82e5 || sjis == 0x82ec ||
	     sjis == 0x8340 || sjis == 0x8342 || sjis == 0x8344 ||
	     sjis == 0x8346 || sjis == 0x8348 ||
	     sjis == 0x8383 || sjis == 0x8385 || sjis == 0x8387 || sjis == 0x838e ||
	     sjis == 0x8395 || sjis == 0x8396){

      if(old == 0x82a0 || old == 0x82a2 || old == 0x82a4 ||		/*   直前の文字のローマ字表記の先頭が「k,t,c,p」   */
	 old == 0x82a6 || old == 0x82a8 ||
	 old == 0x8341 || old == 0x8343 || old == 0x8345 ||
	 old == 0x8347 || old == 0x8349){

	*syllable += 1;
      }									/*   直前の文字のローマ字表記の先頭が「k,t,c,p」(何もしない)   */

    }else if(sjis == 0x82f1 || sjis == 0x815b || sjis == 0x82c1 ||	/*-- 「ん」「ー」「っ」 --*/
	     sjis == 0x8393 || sjis == 0x8362){
      
      *syllable += 1;

    }else{								/*-- その他の音節の時 --*/
      
      *syllable += 2;

    }

    old = sjis;

  }

}