voicecountsyllables.c
3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*---------------------------------------------------------------------
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;
}
}