質問編集履歴
21
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
データ生成に使ったのは、[なんかいろいろしてみます](http://akihiro0105.web.fc2.com/Downloads/Downloads-SHABERU.html)で配布されているものを、[まほろば 音響モデルを自作する5(音素ラベリング)](http://mahoro-ba.net/e1890.html)で修正したsegment_atr503_windows-v1.0で、
|
2
2
|
|
3
3
|
hirosibaフォルダにa01から503個のwavデータを置いて実行しましたが、a01からa09とかb01からb09などがスキップされて413個しかそれぞれデータが生成されません。どうすれば、全てのデータが得られますでしょうか?
|
4
4
|
|
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
[今すぐ試すPadreのデバッグ支援機能](http://nekozitacafe.cocolog-nifty.com/blog/2011/03/padre-9bea.html)
|
12
12
|
|
13
|
-
を参考に試しています。
|
13
|
+
を参考にステップ実行及び変数のチェックを試しています。
|
14
14
|
|
15
15
|
|
16
16
|
|
20
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
Pealtidyを入れ整形しました。
|
17
|
+
Pealtidyを入れ整形しました。[perltidyを使ってみました](http://d.hatena.ne.jp/nitsuji/20060507/1146991795)や[perltidy - Perlソースコード整形ツール](https://qiita.com/kayama0fa/items/e65323feda9f8fb4234e)を参考にしました。
|
18
18
|
|
19
19
|
```Peal
|
20
20
|
|
19
Pealtidy導入
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,433 +1,393 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
e
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
e
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
r
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
m
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
1
|
+
元データ生成に使ったのは、[なんかいろいろしてみます](http://akihiro0105.web.fc2.com/Downloads/Downloads-SHABERU.html)で配布されているものを、[まほろば 音響モデルを自作する5(音素ラベリング)](http://mahoro-ba.net/e1890.html)で修正したsegment_atr503_windows-v1.0で、
|
2
|
+
|
3
|
+
hirosibaフォルダにa01から503個のwavデータを置いて実行しましたが、a01からa09とかb01からb09などがスキップされて413個しかそれぞれデータが生成されません。どうすれば、全てのデータが得られますでしょうか?
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
アドバイスで、
|
8
|
+
|
9
|
+
[Padre](http://padre.perlide.org/)を入れました。
|
10
|
+
|
11
|
+
[今すぐ試すPadreのデバッグ支援機能](http://nekozitacafe.cocolog-nifty.com/blog/2011/03/padre-9bea.html)
|
12
|
+
|
13
|
+
を参考に試しています。
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
Pealtidyを入れ整形しました。
|
18
|
+
|
19
|
+
```Peal
|
20
|
+
|
21
|
+
#!/usr/bin/perl
|
22
|
+
|
23
|
+
#atr503 labels wav
|
24
|
+
|
25
|
+
#名前はa01からj53までとする。
|
26
|
+
|
27
|
+
$speaker = "hiroshiba";
|
28
|
+
|
29
|
+
$label = "labels";
|
30
|
+
|
31
|
+
@abc = ( a, b, c, d, e, f, g, h, i, j );
|
32
|
+
|
33
|
+
## julius4 executable
|
34
|
+
|
35
|
+
$julius4bin = "julius";
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
## acoustic model
|
40
|
+
|
41
|
+
$hmmdefs = "./models/hmmdefs_monof_mix16_gid.binhmm"; # monophone model
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
## working directory
|
46
|
+
|
47
|
+
$TMPDIR = ".";
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
mkdir $speaker . "/mono";
|
52
|
+
|
53
|
+
mkdir $speaker . "/full";
|
54
|
+
|
55
|
+
mkdir $speaker . "/raw";
|
56
|
+
|
57
|
+
@filenum = ( 0, 0 );
|
58
|
+
|
59
|
+
$abcnum = 0;
|
60
|
+
|
61
|
+
while ()
|
62
|
+
|
63
|
+
#### initialize
|
64
|
+
|
65
|
+
{
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
if ( $filenum[0] == 5 && $filenum[1] == 3 ) {
|
70
|
+
|
71
|
+
$filenum[0] = 0;
|
72
|
+
|
73
|
+
$filenum[1] = 0;
|
74
|
+
|
75
|
+
$abcnum += 1;
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
if ( $abcnum == 10 ) {
|
80
|
+
|
81
|
+
print "Error: cannot open wav file ¥n";
|
82
|
+
|
83
|
+
print "push key¥n";
|
84
|
+
|
85
|
+
<STDIN>;
|
86
|
+
|
87
|
+
die;
|
88
|
+
|
89
|
+
}
|
90
|
+
|
91
|
+
if ( $filenum[1] == 9 ) {
|
92
|
+
|
93
|
+
$filenum[0] += 1;
|
94
|
+
|
95
|
+
$filenum[1] = 0;
|
96
|
+
|
97
|
+
}
|
98
|
+
|
99
|
+
else {
|
100
|
+
|
101
|
+
$filenum[1] += 1;
|
102
|
+
|
103
|
+
}
|
104
|
+
|
105
|
+
$filename = $abc[$abcnum] . $filenum[0] . $filenum[1];
|
106
|
+
|
107
|
+
$monofile = $label . "/mono/${filename}.lab";
|
108
|
+
|
109
|
+
$fullfile = $label . "/full/${filename}.lab";
|
110
|
+
|
111
|
+
$speechfile = $speaker . "/${filename}.wav";
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
print "Start segmentation $filename ¥n";
|
116
|
+
|
117
|
+
if ( -r $speechfile ) {
|
118
|
+
|
119
|
+
#### generate speech grammar 'tmp.dfa' and 'tmp.dict' from transcription
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
# clean temporary file
|
124
|
+
|
125
|
+
unlink("$TMPDIR/tmp.dfa") if ( -r "$TMPDIR/tmp.dfa" );
|
126
|
+
|
127
|
+
unlink("$TMPDIR/tmp.dict") if ( -r "$TMPDIR/tmp.dict" );
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
## read transcription
|
132
|
+
|
133
|
+
@words = ();
|
134
|
+
|
135
|
+
$line = 0;
|
136
|
+
|
137
|
+
open( TRANS_MONO, "$monofile" );
|
138
|
+
|
139
|
+
while (<TRANS_MONO>) {
|
140
|
+
|
141
|
+
chomp;
|
142
|
+
|
143
|
+
next if /^[ ¥t¥n]*$/;
|
144
|
+
|
145
|
+
if ( $line == 1 ) {
|
146
|
+
|
147
|
+
s/pau/sp/;
|
148
|
+
|
149
|
+
s/A/a/;
|
150
|
+
|
151
|
+
s/I/i/;
|
152
|
+
|
153
|
+
s/U/u/;
|
154
|
+
|
155
|
+
s/E/e/;
|
156
|
+
|
157
|
+
s/O/o/;
|
158
|
+
|
159
|
+
s/cl/q/;
|
160
|
+
|
161
|
+
s/sil$/silE/;
|
162
|
+
|
163
|
+
s/[0-9]+//g;
|
164
|
+
|
165
|
+
s/ //g;
|
166
|
+
|
167
|
+
}
|
168
|
+
|
169
|
+
if ( $line == 0 ) {
|
170
|
+
|
171
|
+
s/sil$/silB/;
|
172
|
+
|
173
|
+
s/[0-9]+//g;
|
174
|
+
|
175
|
+
s/ //g;
|
176
|
+
|
177
|
+
$line = 1;
|
178
|
+
|
179
|
+
}
|
180
|
+
|
181
|
+
push( @words, $_ );
|
182
|
+
|
183
|
+
}
|
184
|
+
|
185
|
+
close(TRANS_MONO);
|
186
|
+
|
187
|
+
$num = $#words;
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
# write dfa
|
192
|
+
|
193
|
+
open( DFA, ">$TMPDIR/tmp.dfa" );
|
194
|
+
|
195
|
+
for ( $i = 0; $i <= $num; $i++ ) {
|
196
|
+
|
197
|
+
$str = sprintf( "%d %d %d 0", $i, $num - $i, $i + 1 );
|
198
|
+
|
199
|
+
if ( $i == 0 ) {
|
200
|
+
|
201
|
+
$str .= " 1¥n";
|
202
|
+
|
203
|
+
}
|
204
|
+
|
205
|
+
else {
|
206
|
+
|
207
|
+
$str .= " 0¥n";
|
208
|
+
|
209
|
+
}
|
210
|
+
|
211
|
+
print DFA "$str";
|
212
|
+
|
213
|
+
}
|
214
|
+
|
215
|
+
$str = sprintf( "%d -1 -1 1 0¥n", $num + 1 );
|
216
|
+
|
217
|
+
print DFA "$str";
|
218
|
+
|
219
|
+
close(DFA);
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
# write dict
|
224
|
+
|
225
|
+
open( DICT, ">$TMPDIR/tmp.dict" );
|
226
|
+
|
227
|
+
for ( $i = 0; $i <= $num; $i++ ) {
|
228
|
+
|
229
|
+
$w = shift(@words);
|
230
|
+
|
231
|
+
$str = "$i [w_$i] $w¥n";
|
232
|
+
|
233
|
+
$WLIST{"w_$i"} = "$w";
|
234
|
+
|
235
|
+
print DICT "$str";
|
236
|
+
|
237
|
+
}
|
238
|
+
|
239
|
+
close(DICT);
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
# check generated files
|
244
|
+
|
245
|
+
if ( ( !-r "$TMPDIR/tmp.dfa" ) || ( !-f "$TMPDIR/tmp.dfa" ) ) {
|
246
|
+
|
247
|
+
die "Error: failed to make ¥"$TMPDIR/tmp.dfa¥"¥n";
|
248
|
+
|
249
|
+
}
|
250
|
+
|
251
|
+
if ( ( !-r "$TMPDIR/tmp.dict" ) || ( !-f "$TMPDIR/tmp.dict" ) ) {
|
252
|
+
|
253
|
+
die "Error: failed to make ¥"$TMPDIR/tmp.dict¥"¥n";
|
254
|
+
|
255
|
+
}
|
256
|
+
|
257
|
+
|
258
|
+
|
259
|
+
#### execute Julius4 and store the output to log
|
260
|
+
|
261
|
+
$command
|
262
|
+
|
263
|
+
= "echo $speechfile | $julius4bin -h $hmmdefs -dfa $TMPDIR/tmp.dfa -v $TMPDIR/tmp.dict -input file -spmodel null -48 -palign";
|
264
|
+
|
265
|
+
system("$command > ${monofile}.log");
|
266
|
+
|
267
|
+
|
268
|
+
|
269
|
+
#### remove temporary file
|
270
|
+
|
271
|
+
unlink("$TMPDIR/tmp.dfa");
|
272
|
+
|
273
|
+
unlink("$TMPDIR/tmp.dict");
|
274
|
+
|
275
|
+
|
276
|
+
|
277
|
+
#### open result file for writing
|
278
|
+
|
279
|
+
$logfile_mono = "${speaker}/mono/${filename}.lab";
|
280
|
+
|
281
|
+
$logfile_mono =‾ s/wav//;
|
282
|
+
|
283
|
+
$logfile_full = "${speaker}/full/${filename}.lab";
|
284
|
+
|
285
|
+
$logfile_full =‾ s/wav//;
|
286
|
+
|
287
|
+
open( RESULT_MONO, ">$logfile_mono" );
|
288
|
+
|
289
|
+
open( RESULT_FULL, ">$logfile_full" );
|
290
|
+
|
291
|
+
|
292
|
+
|
293
|
+
#### parse log and append result to speechfile.align
|
294
|
+
|
295
|
+
open( LOG, "${monofile}.log" );
|
296
|
+
|
297
|
+
open( TRANS_MONO, "$monofile" );
|
298
|
+
|
299
|
+
open( TRANS_FULL, "$fullfile" );
|
300
|
+
|
301
|
+
$sw = 0;
|
302
|
+
|
303
|
+
while (<LOG>) {
|
304
|
+
|
305
|
+
chomp;
|
306
|
+
|
307
|
+
if (/re-computed AM score:/) {
|
308
|
+
|
309
|
+
$sw = 0;
|
310
|
+
|
311
|
+
}
|
312
|
+
|
313
|
+
if ( $sw == 2 ) {
|
314
|
+
|
315
|
+
$data_mono = <TRANS_MONO>;
|
316
|
+
|
317
|
+
$data_mono =‾ s/¥n//;
|
318
|
+
|
319
|
+
$data_mono =‾ s/^[0-9]+ [0-9]+//g;
|
320
|
+
|
321
|
+
$data_full = <TRANS_FULL>;
|
322
|
+
|
323
|
+
$data_full =‾ s/¥n//;
|
324
|
+
|
325
|
+
$data_full =‾ s/^[0-9]+ [0-9]+//g;
|
326
|
+
|
327
|
+
s/-[0-9]+.[0-9]+//;
|
328
|
+
|
329
|
+
s/[[]//;
|
330
|
+
|
331
|
+
s/[]]//;
|
332
|
+
|
333
|
+
s/[a-zA-Z]+//g;
|
334
|
+
|
335
|
+
s/ +//;
|
336
|
+
|
337
|
+
s/ +/ /g;
|
338
|
+
|
339
|
+
@num = split( /¥s/, $_ );
|
340
|
+
|
341
|
+
$num[0] = $num[0] * 100000;
|
342
|
+
|
343
|
+
$num[1] = ( $num[1] + 1 ) * 100000;
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
if ( $num[1] != 0 ) {
|
348
|
+
|
349
|
+
print RESULT_MONO "@num" . "$data_mono¥n";
|
350
|
+
|
351
|
+
print RESULT_FULL "@num" . "$data_full¥n";
|
352
|
+
|
353
|
+
}
|
354
|
+
|
355
|
+
}
|
356
|
+
|
357
|
+
if ( $sw == 1 ) {
|
358
|
+
|
359
|
+
$sw = 2;
|
360
|
+
|
361
|
+
}
|
362
|
+
|
363
|
+
if (/ id: from to n_score unit/) {
|
364
|
+
|
365
|
+
$sw = 1;
|
366
|
+
|
367
|
+
}
|
368
|
+
|
369
|
+
}
|
370
|
+
|
371
|
+
close(LOG);
|
372
|
+
|
373
|
+
close(RESULT_MONO);
|
374
|
+
|
375
|
+
close(RESULT_FULL);
|
376
|
+
|
377
|
+
close(TRANS_MONO);
|
378
|
+
|
379
|
+
close(TRANS_FULL);
|
380
|
+
|
381
|
+
unlink "${monofile}.log";
|
382
|
+
|
383
|
+
system(
|
384
|
+
|
385
|
+
"echo $speechfile | sox -t wav $speechfile -t raw -L -2 -s $speaker/raw/${filename}.raw"
|
386
|
+
|
387
|
+
);
|
388
|
+
|
389
|
+
}
|
390
|
+
|
391
|
+
}
|
48
392
|
|
49
393
|
```
|
50
|
-
|
51
|
-
[まほろばの投稿 音響モデルを自作する7(パラメータ調整)](http://mahoro-ba.net/e1894.html)を参考に[HTSメーリングリスト](http://hts.sp.nitech.ac.jp/hts-users/)をたどったところ、
|
52
|
-
|
53
|
-
同じエラーで質問している人が2・3いましたが、有用な答えは得られていないようです。
|
54
|
-
|
55
|
-
例えば、以下のツリーです。
|
56
|
-
|
57
|
-
[[hts-users:01149] Generating a fullcntext model list occurred in the training data](http://hts.sp.nitech.ac.jp/hts-users/spool/2008/msg00066.html)
|
58
|
-
|
59
|
-
何が原因と考えられるでしょうか?tmpフォルダがないのでしょうか?それともlistsフォルダの生成に失敗しているのでしょうかそれともfull.listがないのでしょうか?よろしくご教示ください。
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
メーリングリストの答えに合った通り、自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまうようです。元dataのa1からa9などが欠けているから、full.listの生成に失敗してと考えられます。元データ生成に使ったのは、[なんかいろいろしてみます](http://akihiro0105.web.fc2.com/Downloads/Downloads-SHABERU.html)で配布されているものを、[まほろば 音響モデルを自作する5(音素ラベリング)](http://mahoro-ba.net/e1890.html)で修正したsegment_atr503_windows-v1.0で、
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
```Perl
|
68
|
-
|
69
|
-
#!/usr/bin/perl
|
70
|
-
|
71
|
-
#atr503 labels wav
|
72
|
-
|
73
|
-
#名前はa01からj53までとする。
|
74
|
-
|
75
|
-
$speaker = "hiroshiba";
|
76
|
-
|
77
|
-
$label = "labels";
|
78
|
-
|
79
|
-
@abc = (a,b,c,d,e,f,g,h,i,j);
|
80
|
-
|
81
|
-
## julius4 executable
|
82
|
-
|
83
|
-
$julius4bin="julius";
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
## acoustic model
|
88
|
-
|
89
|
-
$hmmdefs="./models/hmmdefs_monof_mix16_gid.binhmm"; # monophone model
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
## working directory
|
94
|
-
|
95
|
-
$TMPDIR=".";
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
mkdir $speaker."/mono";
|
100
|
-
|
101
|
-
mkdir $speaker."/full";
|
102
|
-
|
103
|
-
mkdir $speaker."/raw";
|
104
|
-
|
105
|
-
@filenum = (0,0);
|
106
|
-
|
107
|
-
$abcnum = 0;
|
108
|
-
|
109
|
-
while(){
|
110
|
-
|
111
|
-
#### initialize
|
112
|
-
|
113
|
-
if($filenum[0]==5 && $filenum[1]==3){
|
114
|
-
|
115
|
-
$filenum[0] =0;
|
116
|
-
|
117
|
-
$filenum[1] =0;
|
118
|
-
|
119
|
-
$abcnum += 1;
|
120
|
-
|
121
|
-
}
|
122
|
-
|
123
|
-
if($abcnum==10){
|
124
|
-
|
125
|
-
print "Error: cannot open wav file ¥n";
|
126
|
-
|
127
|
-
print "push key¥n";
|
128
|
-
|
129
|
-
<STDIN>;
|
130
|
-
|
131
|
-
die;
|
132
|
-
|
133
|
-
}
|
134
|
-
|
135
|
-
if($filenum[1]==9){
|
136
|
-
|
137
|
-
$filenum[0] +=1;
|
138
|
-
|
139
|
-
$filenum[1] =0;
|
140
|
-
|
141
|
-
}else{
|
142
|
-
|
143
|
-
$filenum[1] += 1;
|
144
|
-
|
145
|
-
}
|
146
|
-
|
147
|
-
$filename = $abc[$abcnum].$filenum[0].$filenum[1];
|
148
|
-
|
149
|
-
$monofile = $label."/mono/${filename}.lab";
|
150
|
-
|
151
|
-
$fullfile = $label."/full/${filename}.lab";
|
152
|
-
|
153
|
-
$speechfile = $speaker."/${filename}.wav";
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
print "Start segmentation $filename ¥n";
|
158
|
-
|
159
|
-
if (-r $speechfile) {
|
160
|
-
|
161
|
-
#### generate speech grammar 'tmp.dfa' and 'tmp.dict' from transcription
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
# clean temporary file
|
166
|
-
|
167
|
-
unlink("$TMPDIR/tmp.dfa") if (-r "$TMPDIR/tmp.dfa");
|
168
|
-
|
169
|
-
unlink("$TMPDIR/tmp.dict") if (-r "$TMPDIR/tmp.dict");
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
## read transcription
|
174
|
-
|
175
|
-
@words=();
|
176
|
-
|
177
|
-
$line = 0;
|
178
|
-
|
179
|
-
open(TRANS_MONO, "$monofile");
|
180
|
-
|
181
|
-
while(<TRANS_MONO>) {
|
182
|
-
|
183
|
-
chomp;
|
184
|
-
|
185
|
-
next if /^[ ¥t¥n]*$/;
|
186
|
-
|
187
|
-
if($line == 1){
|
188
|
-
|
189
|
-
s/pau/sp/;
|
190
|
-
|
191
|
-
s/A/a/;
|
192
|
-
|
193
|
-
s/I/i/;
|
194
|
-
|
195
|
-
s/U/u/;
|
196
|
-
|
197
|
-
s/E/e/;
|
198
|
-
|
199
|
-
s/O/o/;
|
200
|
-
|
201
|
-
s/cl/q/;
|
202
|
-
|
203
|
-
s/sil$/silE/;
|
204
|
-
|
205
|
-
s/[0-9]+//g;
|
206
|
-
|
207
|
-
s/ //g;
|
208
|
-
|
209
|
-
}
|
210
|
-
|
211
|
-
if($line == 0){
|
212
|
-
|
213
|
-
s/sil$/silB/;
|
214
|
-
|
215
|
-
s/[0-9]+//g;
|
216
|
-
|
217
|
-
s/ //g;
|
218
|
-
|
219
|
-
$line = 1;
|
220
|
-
|
221
|
-
}
|
222
|
-
|
223
|
-
push(@words, $_);
|
224
|
-
|
225
|
-
}
|
226
|
-
|
227
|
-
close(TRANS_MONO);
|
228
|
-
|
229
|
-
$num = $#words;
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
# write dfa
|
234
|
-
|
235
|
-
open(DFA, ">$TMPDIR/tmp.dfa");
|
236
|
-
|
237
|
-
for ($i = 0; $i <= $num; $i++) {
|
238
|
-
|
239
|
-
$str = sprintf("%d %d %d 0", $i, $num - $i, $i + 1);
|
240
|
-
|
241
|
-
if ($i == 0) {
|
242
|
-
|
243
|
-
$str .= " 1¥n";
|
244
|
-
|
245
|
-
} else {
|
246
|
-
|
247
|
-
$str .= " 0¥n";
|
248
|
-
|
249
|
-
}
|
250
|
-
|
251
|
-
print DFA "$str";
|
252
|
-
|
253
|
-
}
|
254
|
-
|
255
|
-
$str = sprintf("%d -1 -1 1 0¥n", $num + 1);
|
256
|
-
|
257
|
-
print DFA "$str";
|
258
|
-
|
259
|
-
close(DFA);
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
# write dict
|
264
|
-
|
265
|
-
open(DICT, ">$TMPDIR/tmp.dict");
|
266
|
-
|
267
|
-
for ($i = 0; $i <= $num; $i++) {
|
268
|
-
|
269
|
-
$w = shift(@words);
|
270
|
-
|
271
|
-
$str = "$i [w_$i] $w¥n";
|
272
|
-
|
273
|
-
$WLIST{"w_$i"} = "$w";
|
274
|
-
|
275
|
-
print DICT "$str";
|
276
|
-
|
277
|
-
}
|
278
|
-
|
279
|
-
close(DICT);
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
# check generated files
|
284
|
-
|
285
|
-
if ((! -r "$TMPDIR/tmp.dfa") || (! -f "$TMPDIR/tmp.dfa")) {
|
286
|
-
|
287
|
-
die "Error: failed to make ¥"$TMPDIR/tmp.dfa¥"¥n";
|
288
|
-
|
289
|
-
}
|
290
|
-
|
291
|
-
if ((! -r "$TMPDIR/tmp.dict") || (! -f "$TMPDIR/tmp.dict")) {
|
292
|
-
|
293
|
-
die "Error: failed to make ¥"$TMPDIR/tmp.dict¥"¥n";
|
294
|
-
|
295
|
-
}
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
#### execute Julius4 and store the output to log
|
300
|
-
|
301
|
-
$command = "echo $speechfile | $julius4bin -h $hmmdefs -dfa $TMPDIR/tmp.dfa -v $TMPDIR/tmp.dict -input file -spmodel null -48 -palign";
|
302
|
-
|
303
|
-
system("$command > ${monofile}.log");
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
#### remove temporary file
|
308
|
-
|
309
|
-
unlink("$TMPDIR/tmp.dfa");
|
310
|
-
|
311
|
-
unlink("$TMPDIR/tmp.dict");
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
#### open result file for writing
|
316
|
-
|
317
|
-
$logfile_mono = "${speaker}/mono/${filename}.lab";
|
318
|
-
|
319
|
-
$logfile_mono =‾ s/wav//;
|
320
|
-
|
321
|
-
$logfile_full = "${speaker}/full/${filename}.lab";
|
322
|
-
|
323
|
-
$logfile_full =‾ s/wav//;
|
324
|
-
|
325
|
-
open(RESULT_MONO, ">$logfile_mono");
|
326
|
-
|
327
|
-
open(RESULT_FULL, ">$logfile_full");
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
#### parse log and append result to speechfile.align
|
332
|
-
|
333
|
-
open(LOG, "${monofile}.log");
|
334
|
-
|
335
|
-
open(TRANS_MONO, "$monofile");
|
336
|
-
|
337
|
-
open(TRANS_FULL, "$fullfile");
|
338
|
-
|
339
|
-
$sw = 0;
|
340
|
-
|
341
|
-
while(<LOG>) {
|
342
|
-
|
343
|
-
chomp;
|
344
|
-
|
345
|
-
if (/re-computed AM score:/) {
|
346
|
-
|
347
|
-
$sw = 0;
|
348
|
-
|
349
|
-
}
|
350
|
-
|
351
|
-
if($sw == 2){
|
352
|
-
|
353
|
-
$data_mono = <TRANS_MONO>;
|
354
|
-
|
355
|
-
$data_mono =‾ s/¥n//;
|
356
|
-
|
357
|
-
$data_mono =‾ s/^[0-9]+ [0-9]+//g;
|
358
|
-
|
359
|
-
$data_full = <TRANS_FULL>;
|
360
|
-
|
361
|
-
$data_full =‾ s/¥n//;
|
362
|
-
|
363
|
-
$data_full =‾ s/^[0-9]+ [0-9]+//g;
|
364
|
-
|
365
|
-
s/-[0-9]+.[0-9]+//;
|
366
|
-
|
367
|
-
s/[[]//;
|
368
|
-
|
369
|
-
s/[]]//;
|
370
|
-
|
371
|
-
s/[a-zA-Z]+//g;
|
372
|
-
|
373
|
-
s/ +//;
|
374
|
-
|
375
|
-
s/ +/ /g;
|
376
|
-
|
377
|
-
@num = split(/¥s/, $_);
|
378
|
-
|
379
|
-
$num[0] = $num[0] * 100000;
|
380
|
-
|
381
|
-
$num[1] = ($num[1]+1) * 100000;
|
382
|
-
|
383
|
-
if($num[1]!=0){
|
384
|
-
|
385
|
-
print RESULT_MONO "@num"."$data_mono¥n";
|
386
|
-
|
387
|
-
print RESULT_FULL "@num"."$data_full¥n";
|
388
|
-
|
389
|
-
}
|
390
|
-
|
391
|
-
}
|
392
|
-
|
393
|
-
if($sw == 1){
|
394
|
-
|
395
|
-
$sw = 2;
|
396
|
-
|
397
|
-
}
|
398
|
-
|
399
|
-
if (/ id: from to n_score unit/) {
|
400
|
-
|
401
|
-
$sw = 1;
|
402
|
-
|
403
|
-
}
|
404
|
-
|
405
|
-
}
|
406
|
-
|
407
|
-
close(LOG);
|
408
|
-
|
409
|
-
close(RESULT_MONO);
|
410
|
-
|
411
|
-
close(RESULT_FULL);
|
412
|
-
|
413
|
-
close(TRANS_MONO);
|
414
|
-
|
415
|
-
close(TRANS_FULL);
|
416
|
-
|
417
|
-
unlink "${monofile}.log";
|
418
|
-
|
419
|
-
system("echo $speechfile | sox -t wav $speechfile -t raw -L -2 -s $speaker/raw/${filename}.raw");
|
420
|
-
|
421
|
-
}
|
422
|
-
|
423
|
-
}
|
424
|
-
|
425
|
-
```
|
426
|
-
|
427
|
-
で、hirosibaフォルダにa01から503個のwavデータを置いて実行しましたが、a01からa09とかb01からb09などがスキップされて413個しかそれぞれデータが生成されません。どうすれば、全てのデータが得られますでしょうか?
|
428
|
-
|
429
|
-
[Padre](http://padre.perlide.org/)を入れました。
|
430
|
-
|
431
|
-
[今すぐ試すPadreのデバッグ支援機能](http://nekozitacafe.cocolog-nifty.com/blog/2011/03/padre-9bea.html)
|
432
|
-
|
433
|
-
を参考に試しています。
|
18
Perlデバッガ導入
test
CHANGED
File without changes
|
test
CHANGED
@@ -425,3 +425,9 @@
|
|
425
425
|
```
|
426
426
|
|
427
427
|
で、hirosibaフォルダにa01から503個のwavデータを置いて実行しましたが、a01からa09とかb01からb09などがスキップされて413個しかそれぞれデータが生成されません。どうすれば、全てのデータが得られますでしょうか?
|
428
|
+
|
429
|
+
[Padre](http://padre.perlide.org/)を入れました。
|
430
|
+
|
431
|
+
[今すぐ試すPadreのデバッグ支援機能](http://nekozitacafe.cocolog-nifty.com/blog/2011/03/padre-9bea.html)
|
432
|
+
|
433
|
+
を参考に試しています。
|
17
初心者マーク付加
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
16
初心者マーク取る
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
15
誤字の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -424,4 +424,4 @@
|
|
424
424
|
|
425
425
|
```
|
426
426
|
|
427
|
-
で、hirosibaフォルダにa01から503個のwavデータを置いて実行しましたが、a01からa09とかb01からb09
|
427
|
+
で、hirosibaフォルダにa01から503個のwavデータを置いて実行しましたが、a01からa09とかb01からb09などがスキップされて413個しかそれぞれデータが生成されません。どうすれば、全てのデータが得られますでしょうか?
|
14
タイトル編集
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Perlで、
|
1
|
+
Perlで、503個のデータを処理したいのですが、413個しか生成されず困っています。
|
test
CHANGED
File without changes
|
13
タイトル追記
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Perlで、入力データは、a1からJ1まで、503個のデータを処理したいのですが、結果のデータが、a1からa9までなどが欠けてしまってa10からなどになってしまって困っています。
|
1
|
+
Perlで、入力データは、a1からJ1まで、503個のデータを処理したいのですが、結果のデータが、a1からa9までなどが欠けてしまってa10からなどになってしまって413個しか生成されず困っています。
|
test
CHANGED
File without changes
|
12
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -424,4 +424,4 @@
|
|
424
424
|
|
425
425
|
```
|
426
426
|
|
427
|
-
で、hirosibaフォルダにa01から503個のwavデータを置いて実行しましたが、a01からa09とかb01からb09とかがスキップされてしま
|
427
|
+
で、hirosibaフォルダにa01から503個のwavデータを置いて実行しましたが、a01からa09とかb01からb09とかがスキップされて413個しかそれぞれデータが生成されません。どうすれば、全てのデータが得られますでしょうか?
|
11
追記
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Perlで、a1からJ1まで、503個のデータを処理したいのですが、a1からa9までなどが欠けてしまってa10からになってしまって困っています。
|
1
|
+
Perlで、入力データは、a1からJ1まで、503個のデータを処理したいのですが、結果のデータが、a1からa9までなどが欠けてしまってa10からなどになってしまって困っています。
|
test
CHANGED
File without changes
|
10
追記
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Perl
|
1
|
+
Perlで、a1からJ1まで、503個のデータを処理したいのですが、a1からa9までなどが欠けてしまってa10からになってしまって困っています。
|
test
CHANGED
File without changes
|
9
誤字の修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Perlによるデータ生成プログラムで、a1からJ1まで、503個のデータを処理したいの
|
1
|
+
Perlによるデータ生成プログラムで、a1からJ1まで、503個のデータを処理したいのですが、a1からa9までなどが欠けてしまって困っています。
|
test
CHANGED
File without changes
|
8
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -60,7 +60,7 @@
|
|
60
60
|
|
61
61
|
|
62
62
|
|
63
|
-
メーリングリストの答えに合った通り、自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまう
|
63
|
+
メーリングリストの答えに合った通り、自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまうようです。元dataのa1からa9などが欠けているから、full.listの生成に失敗してと考えられます。元データ生成に使ったのは、[なんかいろいろしてみます](http://akihiro0105.web.fc2.com/Downloads/Downloads-SHABERU.html)で配布されているものを、[まほろば 音響モデルを自作する5(音素ラベリング)](http://mahoro-ba.net/e1890.html)で修正したsegment_atr503_windows-v1.0で、
|
64
64
|
|
65
65
|
|
66
66
|
|
7
タイトル変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Perlによるデータ生成プログラムで、a1からJ1まで、503個のデータを処理したいのだが、a1からa9までなどが欠けてしまって困っています。
|
test
CHANGED
File without changes
|
6
リンク追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
まほろばの一連の投稿を参考にしました。[まほろば 音響モデルを自作する1(概要)](http://mahoro-ba.net/e1876.html)など。
|
4
4
|
|
5
|
-
サンプルスクリプトはうまく動いたのですが、自分のデータで動かしたところ以下のエラーで止まってしまいます。
|
5
|
+
[音響モデルを自作する2(Linux環境)](http://mahoro-ba.net/e1887.html),[音響モデルを自作する3(音響モデル学習)](http://mahoro-ba.net/e1888.html)、[音響モデルを自作する4(サンプルデータ)](http://mahoro-ba.net/e1889.html)までで、サンプルスクリプトはうまく動いたのですが、[音響モデルを自作する5(音素ラベリング)](http://mahoro-ba.net/e1890.html)で生成した自分のデータで[音響モデルを自作する6(独自音声)](http://mahoro-ba.net/e1891.html)を動かしたところ以下のエラーで止まってしまいます。
|
6
6
|
|
7
7
|
```Ubuntu
|
8
8
|
|
@@ -52,13 +52,15 @@
|
|
52
52
|
|
53
53
|
同じエラーで質問している人が2・3いましたが、有用な答えは得られていないようです。
|
54
54
|
|
55
|
+
例えば、以下のツリーです。
|
56
|
+
|
55
57
|
[[hts-users:01149] Generating a fullcntext model list occurred in the training data](http://hts.sp.nitech.ac.jp/hts-users/spool/2008/msg00066.html)
|
56
58
|
|
57
59
|
何が原因と考えられるでしょうか?tmpフォルダがないのでしょうか?それともlistsフォルダの生成に失敗しているのでしょうかそれともfull.listがないのでしょうか?よろしくご教示ください。
|
58
60
|
|
59
61
|
|
60
62
|
|
61
|
-
メーリングリストの答えに合った通り、自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまうのでしょうか?dataの1から9が欠けているから、生成に失敗しているのでしょうか。元データ生成に使ったのは、[なんかいろいろしてみます](http://akihiro0105.web.fc2.com/Downloads/Downloads-SHABERU.html)で配布されているものを、[まほろば](http://mahoro-ba.net/e1890.html)で修正したsegment_atr503_windows-v1.0で、
|
63
|
+
メーリングリストの答えに合った通り、自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまうのでしょうか?dataの1から9が欠けているから、生成に失敗しているのでしょうか。元データ生成に使ったのは、[なんかいろいろしてみます](http://akihiro0105.web.fc2.com/Downloads/Downloads-SHABERU.html)で配布されているものを、[まほろば 音響モデルを自作する5(音素ラベリング)](http://mahoro-ba.net/e1890.html)で修正したsegment_atr503_windows-v1.0で、
|
62
64
|
|
63
65
|
|
64
66
|
|
5
タイトル追加
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
HTS2.3を使ってOpenJTalk用の音響モデルの学習をさせていますが、
|
1
|
+
HTS2.3を使ってOpenJTalk用の音響モデルの学習をさせていますが、データ不足でエラーを吐いて止まってしまいます。データを欠けなく生成するにはどうしたらよいでしょうか?
|
test
CHANGED
File without changes
|
4
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Ubuntu14.4を使ってHTS2.3を使って、OpenJTalk用の音響モデルの学習をさせています。
|
2
2
|
|
3
|
-
まほろばの一連の投稿を参考にしました。[まほろば](http://mahoro-ba.net/e1876.html)
|
3
|
+
まほろばの一連の投稿を参考にしました。[まほろば 音響モデルを自作する1(概要)](http://mahoro-ba.net/e1876.html)など。
|
4
4
|
|
5
5
|
サンプルスクリプトはうまく動いたのですが、自分のデータで動かしたところ以下のエラーで止まってしまいます。
|
6
6
|
|
@@ -48,9 +48,9 @@
|
|
48
48
|
|
49
49
|
```
|
50
50
|
|
51
|
-
[まほろばの投稿](http://mahoro-ba.net/e1894.html)を参考にHTSメーリングリストをたどったところ、
|
51
|
+
[まほろばの投稿 音響モデルを自作する7(パラメータ調整)](http://mahoro-ba.net/e1894.html)を参考に[HTSメーリングリスト](http://hts.sp.nitech.ac.jp/hts-users/)をたどったところ、
|
52
|
-
|
52
|
+
|
53
|
-
同じエラーで質問している人がいましたが、有用な答えは得られていないようです。
|
53
|
+
同じエラーで質問している人が2・3いましたが、有用な答えは得られていないようです。
|
54
54
|
|
55
55
|
[[hts-users:01149] Generating a fullcntext model list occurred in the training data](http://hts.sp.nitech.ac.jp/hts-users/spool/2008/msg00066.html)
|
56
56
|
|
@@ -58,7 +58,7 @@
|
|
58
58
|
|
59
59
|
|
60
60
|
|
61
|
-
自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまうのでしょうか?dataの1から9が欠けているから、生成に失敗しているのでしょうか。元データ生成に使ったのは、[なんかいろいろしてみます](http://akihiro0105.web.fc2.com/Downloads/Downloads-SHABERU.html)で配布されているものを、[まほろば](http://mahoro-ba.net/e1890.html)で修正したsegment_atr503_windows-v1.0で、
|
61
|
+
メーリングリストの答えに合った通り、自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまうのでしょうか?dataの1から9が欠けているから、生成に失敗しているのでしょうか。元データ生成に使ったのは、[なんかいろいろしてみます](http://akihiro0105.web.fc2.com/Downloads/Downloads-SHABERU.html)で配布されているものを、[まほろば](http://mahoro-ba.net/e1890.html)で修正したsegment_atr503_windows-v1.0で、
|
62
62
|
|
63
63
|
|
64
64
|
|
3
スペース挿入
test
CHANGED
File without changes
|
test
CHANGED
@@ -56,8 +56,12 @@
|
|
56
56
|
|
57
57
|
何が原因と考えられるでしょうか?tmpフォルダがないのでしょうか?それともlistsフォルダの生成に失敗しているのでしょうかそれともfull.listがないのでしょうか?よろしくご教示ください。
|
58
58
|
|
59
|
+
|
60
|
+
|
59
61
|
自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまうのでしょうか?dataの1から9が欠けているから、生成に失敗しているのでしょうか。元データ生成に使ったのは、[なんかいろいろしてみます](http://akihiro0105.web.fc2.com/Downloads/Downloads-SHABERU.html)で配布されているものを、[まほろば](http://mahoro-ba.net/e1890.html)で修正したsegment_atr503_windows-v1.0で、
|
60
62
|
|
63
|
+
|
64
|
+
|
61
65
|
```Perl
|
62
66
|
|
63
67
|
#!/usr/bin/perl
|
2
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -56,4 +56,366 @@
|
|
56
56
|
|
57
57
|
何が原因と考えられるでしょうか?tmpフォルダがないのでしょうか?それともlistsフォルダの生成に失敗しているのでしょうかそれともfull.listがないのでしょうか?よろしくご教示ください。
|
58
58
|
|
59
|
-
自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまうのでしょうか?
|
59
|
+
自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまうのでしょうか?dataの1から9が欠けているから、生成に失敗しているのでしょうか。元データ生成に使ったのは、[なんかいろいろしてみます](http://akihiro0105.web.fc2.com/Downloads/Downloads-SHABERU.html)で配布されているものを、[まほろば](http://mahoro-ba.net/e1890.html)で修正したsegment_atr503_windows-v1.0で、
|
60
|
+
|
61
|
+
```Perl
|
62
|
+
|
63
|
+
#!/usr/bin/perl
|
64
|
+
|
65
|
+
#atr503 labels wav
|
66
|
+
|
67
|
+
#名前はa01からj53までとする。
|
68
|
+
|
69
|
+
$speaker = "hiroshiba";
|
70
|
+
|
71
|
+
$label = "labels";
|
72
|
+
|
73
|
+
@abc = (a,b,c,d,e,f,g,h,i,j);
|
74
|
+
|
75
|
+
## julius4 executable
|
76
|
+
|
77
|
+
$julius4bin="julius";
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
## acoustic model
|
82
|
+
|
83
|
+
$hmmdefs="./models/hmmdefs_monof_mix16_gid.binhmm"; # monophone model
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
## working directory
|
88
|
+
|
89
|
+
$TMPDIR=".";
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
mkdir $speaker."/mono";
|
94
|
+
|
95
|
+
mkdir $speaker."/full";
|
96
|
+
|
97
|
+
mkdir $speaker."/raw";
|
98
|
+
|
99
|
+
@filenum = (0,0);
|
100
|
+
|
101
|
+
$abcnum = 0;
|
102
|
+
|
103
|
+
while(){
|
104
|
+
|
105
|
+
#### initialize
|
106
|
+
|
107
|
+
if($filenum[0]==5 && $filenum[1]==3){
|
108
|
+
|
109
|
+
$filenum[0] =0;
|
110
|
+
|
111
|
+
$filenum[1] =0;
|
112
|
+
|
113
|
+
$abcnum += 1;
|
114
|
+
|
115
|
+
}
|
116
|
+
|
117
|
+
if($abcnum==10){
|
118
|
+
|
119
|
+
print "Error: cannot open wav file ¥n";
|
120
|
+
|
121
|
+
print "push key¥n";
|
122
|
+
|
123
|
+
<STDIN>;
|
124
|
+
|
125
|
+
die;
|
126
|
+
|
127
|
+
}
|
128
|
+
|
129
|
+
if($filenum[1]==9){
|
130
|
+
|
131
|
+
$filenum[0] +=1;
|
132
|
+
|
133
|
+
$filenum[1] =0;
|
134
|
+
|
135
|
+
}else{
|
136
|
+
|
137
|
+
$filenum[1] += 1;
|
138
|
+
|
139
|
+
}
|
140
|
+
|
141
|
+
$filename = $abc[$abcnum].$filenum[0].$filenum[1];
|
142
|
+
|
143
|
+
$monofile = $label."/mono/${filename}.lab";
|
144
|
+
|
145
|
+
$fullfile = $label."/full/${filename}.lab";
|
146
|
+
|
147
|
+
$speechfile = $speaker."/${filename}.wav";
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
print "Start segmentation $filename ¥n";
|
152
|
+
|
153
|
+
if (-r $speechfile) {
|
154
|
+
|
155
|
+
#### generate speech grammar 'tmp.dfa' and 'tmp.dict' from transcription
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
# clean temporary file
|
160
|
+
|
161
|
+
unlink("$TMPDIR/tmp.dfa") if (-r "$TMPDIR/tmp.dfa");
|
162
|
+
|
163
|
+
unlink("$TMPDIR/tmp.dict") if (-r "$TMPDIR/tmp.dict");
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
## read transcription
|
168
|
+
|
169
|
+
@words=();
|
170
|
+
|
171
|
+
$line = 0;
|
172
|
+
|
173
|
+
open(TRANS_MONO, "$monofile");
|
174
|
+
|
175
|
+
while(<TRANS_MONO>) {
|
176
|
+
|
177
|
+
chomp;
|
178
|
+
|
179
|
+
next if /^[ ¥t¥n]*$/;
|
180
|
+
|
181
|
+
if($line == 1){
|
182
|
+
|
183
|
+
s/pau/sp/;
|
184
|
+
|
185
|
+
s/A/a/;
|
186
|
+
|
187
|
+
s/I/i/;
|
188
|
+
|
189
|
+
s/U/u/;
|
190
|
+
|
191
|
+
s/E/e/;
|
192
|
+
|
193
|
+
s/O/o/;
|
194
|
+
|
195
|
+
s/cl/q/;
|
196
|
+
|
197
|
+
s/sil$/silE/;
|
198
|
+
|
199
|
+
s/[0-9]+//g;
|
200
|
+
|
201
|
+
s/ //g;
|
202
|
+
|
203
|
+
}
|
204
|
+
|
205
|
+
if($line == 0){
|
206
|
+
|
207
|
+
s/sil$/silB/;
|
208
|
+
|
209
|
+
s/[0-9]+//g;
|
210
|
+
|
211
|
+
s/ //g;
|
212
|
+
|
213
|
+
$line = 1;
|
214
|
+
|
215
|
+
}
|
216
|
+
|
217
|
+
push(@words, $_);
|
218
|
+
|
219
|
+
}
|
220
|
+
|
221
|
+
close(TRANS_MONO);
|
222
|
+
|
223
|
+
$num = $#words;
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
# write dfa
|
228
|
+
|
229
|
+
open(DFA, ">$TMPDIR/tmp.dfa");
|
230
|
+
|
231
|
+
for ($i = 0; $i <= $num; $i++) {
|
232
|
+
|
233
|
+
$str = sprintf("%d %d %d 0", $i, $num - $i, $i + 1);
|
234
|
+
|
235
|
+
if ($i == 0) {
|
236
|
+
|
237
|
+
$str .= " 1¥n";
|
238
|
+
|
239
|
+
} else {
|
240
|
+
|
241
|
+
$str .= " 0¥n";
|
242
|
+
|
243
|
+
}
|
244
|
+
|
245
|
+
print DFA "$str";
|
246
|
+
|
247
|
+
}
|
248
|
+
|
249
|
+
$str = sprintf("%d -1 -1 1 0¥n", $num + 1);
|
250
|
+
|
251
|
+
print DFA "$str";
|
252
|
+
|
253
|
+
close(DFA);
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
# write dict
|
258
|
+
|
259
|
+
open(DICT, ">$TMPDIR/tmp.dict");
|
260
|
+
|
261
|
+
for ($i = 0; $i <= $num; $i++) {
|
262
|
+
|
263
|
+
$w = shift(@words);
|
264
|
+
|
265
|
+
$str = "$i [w_$i] $w¥n";
|
266
|
+
|
267
|
+
$WLIST{"w_$i"} = "$w";
|
268
|
+
|
269
|
+
print DICT "$str";
|
270
|
+
|
271
|
+
}
|
272
|
+
|
273
|
+
close(DICT);
|
274
|
+
|
275
|
+
|
276
|
+
|
277
|
+
# check generated files
|
278
|
+
|
279
|
+
if ((! -r "$TMPDIR/tmp.dfa") || (! -f "$TMPDIR/tmp.dfa")) {
|
280
|
+
|
281
|
+
die "Error: failed to make ¥"$TMPDIR/tmp.dfa¥"¥n";
|
282
|
+
|
283
|
+
}
|
284
|
+
|
285
|
+
if ((! -r "$TMPDIR/tmp.dict") || (! -f "$TMPDIR/tmp.dict")) {
|
286
|
+
|
287
|
+
die "Error: failed to make ¥"$TMPDIR/tmp.dict¥"¥n";
|
288
|
+
|
289
|
+
}
|
290
|
+
|
291
|
+
|
292
|
+
|
293
|
+
#### execute Julius4 and store the output to log
|
294
|
+
|
295
|
+
$command = "echo $speechfile | $julius4bin -h $hmmdefs -dfa $TMPDIR/tmp.dfa -v $TMPDIR/tmp.dict -input file -spmodel null -48 -palign";
|
296
|
+
|
297
|
+
system("$command > ${monofile}.log");
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
#### remove temporary file
|
302
|
+
|
303
|
+
unlink("$TMPDIR/tmp.dfa");
|
304
|
+
|
305
|
+
unlink("$TMPDIR/tmp.dict");
|
306
|
+
|
307
|
+
|
308
|
+
|
309
|
+
#### open result file for writing
|
310
|
+
|
311
|
+
$logfile_mono = "${speaker}/mono/${filename}.lab";
|
312
|
+
|
313
|
+
$logfile_mono =‾ s/wav//;
|
314
|
+
|
315
|
+
$logfile_full = "${speaker}/full/${filename}.lab";
|
316
|
+
|
317
|
+
$logfile_full =‾ s/wav//;
|
318
|
+
|
319
|
+
open(RESULT_MONO, ">$logfile_mono");
|
320
|
+
|
321
|
+
open(RESULT_FULL, ">$logfile_full");
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
#### parse log and append result to speechfile.align
|
326
|
+
|
327
|
+
open(LOG, "${monofile}.log");
|
328
|
+
|
329
|
+
open(TRANS_MONO, "$monofile");
|
330
|
+
|
331
|
+
open(TRANS_FULL, "$fullfile");
|
332
|
+
|
333
|
+
$sw = 0;
|
334
|
+
|
335
|
+
while(<LOG>) {
|
336
|
+
|
337
|
+
chomp;
|
338
|
+
|
339
|
+
if (/re-computed AM score:/) {
|
340
|
+
|
341
|
+
$sw = 0;
|
342
|
+
|
343
|
+
}
|
344
|
+
|
345
|
+
if($sw == 2){
|
346
|
+
|
347
|
+
$data_mono = <TRANS_MONO>;
|
348
|
+
|
349
|
+
$data_mono =‾ s/¥n//;
|
350
|
+
|
351
|
+
$data_mono =‾ s/^[0-9]+ [0-9]+//g;
|
352
|
+
|
353
|
+
$data_full = <TRANS_FULL>;
|
354
|
+
|
355
|
+
$data_full =‾ s/¥n//;
|
356
|
+
|
357
|
+
$data_full =‾ s/^[0-9]+ [0-9]+//g;
|
358
|
+
|
359
|
+
s/-[0-9]+.[0-9]+//;
|
360
|
+
|
361
|
+
s/[[]//;
|
362
|
+
|
363
|
+
s/[]]//;
|
364
|
+
|
365
|
+
s/[a-zA-Z]+//g;
|
366
|
+
|
367
|
+
s/ +//;
|
368
|
+
|
369
|
+
s/ +/ /g;
|
370
|
+
|
371
|
+
@num = split(/¥s/, $_);
|
372
|
+
|
373
|
+
$num[0] = $num[0] * 100000;
|
374
|
+
|
375
|
+
$num[1] = ($num[1]+1) * 100000;
|
376
|
+
|
377
|
+
if($num[1]!=0){
|
378
|
+
|
379
|
+
print RESULT_MONO "@num"."$data_mono¥n";
|
380
|
+
|
381
|
+
print RESULT_FULL "@num"."$data_full¥n";
|
382
|
+
|
383
|
+
}
|
384
|
+
|
385
|
+
}
|
386
|
+
|
387
|
+
if($sw == 1){
|
388
|
+
|
389
|
+
$sw = 2;
|
390
|
+
|
391
|
+
}
|
392
|
+
|
393
|
+
if (/ id: from to n_score unit/) {
|
394
|
+
|
395
|
+
$sw = 1;
|
396
|
+
|
397
|
+
}
|
398
|
+
|
399
|
+
}
|
400
|
+
|
401
|
+
close(LOG);
|
402
|
+
|
403
|
+
close(RESULT_MONO);
|
404
|
+
|
405
|
+
close(RESULT_FULL);
|
406
|
+
|
407
|
+
close(TRANS_MONO);
|
408
|
+
|
409
|
+
close(TRANS_FULL);
|
410
|
+
|
411
|
+
unlink "${monofile}.log";
|
412
|
+
|
413
|
+
system("echo $speechfile | sox -t wav $speechfile -t raw -L -2 -s $speaker/raw/${filename}.raw");
|
414
|
+
|
415
|
+
}
|
416
|
+
|
417
|
+
}
|
418
|
+
|
419
|
+
```
|
420
|
+
|
421
|
+
で、hirosibaフォルダにa01から503個のwavデータを置いて実行しましたが、a01からa09とかb01からb09とかがスキップされてしまいます。どうすれば、全てのデータが得られますでしょうか?
|
1
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -55,3 +55,5 @@
|
|
55
55
|
[[hts-users:01149] Generating a fullcntext model list occurred in the training data](http://hts.sp.nitech.ac.jp/hts-users/spool/2008/msg00066.html)
|
56
56
|
|
57
57
|
何が原因と考えられるでしょうか?tmpフォルダがないのでしょうか?それともlistsフォルダの生成に失敗しているのでしょうかそれともfull.listがないのでしょうか?よろしくご教示ください。
|
58
|
+
|
59
|
+
自分で調べました。/home/buri/HTS/HTS-demo_base/data/lists/full.listが生成されているものの0バイトのようです。それでtmpでsort行おうとしてもエラーが出てしまうのでしょうか?
|