H-Liu1997 commited on
Commit
2d47d90
1 Parent(s): b7631ae

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .ipynb_checkpoints/README-checkpoint.md +13 -0
  2. .ipynb_checkpoints/app-checkpoint.py +664 -0
  3. .ipynb_checkpoints/packages-checkpoint.txt +4 -0
  4. .ipynb_checkpoints/requirements-checkpoint.txt +39 -0
  5. .ipynb_checkpoints/test_demo-checkpoint.py +581 -0
  6. EMAGE/emage_audio_175.bin +3 -0
  7. EMAGE/pretrained_vq/.DS_Store +0 -0
  8. EMAGE/pretrained_vq/hands_vertex_1layer_710.bin +3 -0
  9. EMAGE/pretrained_vq/last_1700_foot.bin +3 -0
  10. EMAGE/pretrained_vq/last_790_face_v2.bin +3 -0
  11. EMAGE/pretrained_vq/lower_foot_600.bin +3 -0
  12. EMAGE/pretrained_vq/upper_vertex_1layer_710.bin +3 -0
  13. EMAGE/smplx_models/.DS_Store +0 -0
  14. EMAGE/smplx_models/smplx/SMPLX_NEUTRAL_2020.npz +3 -0
  15. EMAGE/test_sequences/smplxflame_30/2_scott_0_1_1.npz +3 -0
  16. EMAGE/test_sequences/smplxflame_30/2_scott_0_2_2.npz +3 -0
  17. EMAGE/test_sequences/smplxflame_30/2_scott_0_3_3.npz +3 -0
  18. EMAGE/test_sequences/smplxflame_30/2_scott_0_4_4.npz +3 -0
  19. EMAGE/test_sequences/test.csv +5 -0
  20. EMAGE/test_sequences/textgrid/2_scott_0_1_1.TextGrid +3636 -0
  21. EMAGE/test_sequences/textgrid/2_scott_0_2_2.TextGrid +3716 -0
  22. EMAGE/test_sequences/textgrid/2_scott_0_3_3.TextGrid +3676 -0
  23. EMAGE/test_sequences/textgrid/2_scott_0_4_4.TextGrid +3844 -0
  24. EMAGE/test_sequences/wave16k/2_scott_0_1_1.wav +0 -0
  25. EMAGE/test_sequences/wave16k/2_scott_0_2_2.wav +0 -0
  26. EMAGE/test_sequences/wave16k/2_scott_0_3_3.wav +0 -0
  27. EMAGE/test_sequences/wave16k/2_scott_0_4_4.wav +0 -0
  28. EMAGE/test_sequences/weights/AESKConv_240_100.bin +3 -0
  29. EMAGE/test_sequences/weights/mean_vel_smplxflame_30.npy +3 -0
  30. EMAGE/test_sequences/weights/vocab.pkl +3 -0
  31. README.md +3 -2
  32. ae_trainer.py +375 -0
  33. aeface_trainer.py +388 -0
  34. aelower_trainer.py +494 -0
  35. aelowerfoot_trainer.py +491 -0
  36. app.py +664 -0
  37. camn_trainer.py +361 -0
  38. configs/.ipynb_checkpoints/emage_test_hf-checkpoint.yaml +101 -0
  39. configs/camn.yaml +101 -0
  40. configs/cnn_vqvae_face_30.yaml +82 -0
  41. configs/cnn_vqvae_hands_30.yaml +81 -0
  42. configs/cnn_vqvae_lower_30.yaml +81 -0
  43. configs/cnn_vqvae_lower_foot_30.yaml +81 -0
  44. configs/cnn_vqvae_upper_30.yaml +82 -0
  45. configs/emage.yaml +101 -0
  46. configs/emage_test.yaml +101 -0
  47. configs/emage_test_colab.yaml +101 -0
  48. configs/emage_test_hf.yaml +101 -0
  49. configs/skcnn_ae.yaml +80 -0
  50. dataloaders/.ipynb_checkpoints/beat_testonly_hf-checkpoint.py +740 -0
.ipynb_checkpoints/README-checkpoint.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: EMAGE
3
+ emoji: ⚡
4
+ colorFrom: yellow
5
+ colorTo: green
6
+ sdk: gradio
7
+ sdk_version: 4.24.0
8
+ app_file: app.py
9
+ pinned: false
10
+ license: apache-2.0
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
.ipynb_checkpoints/app-checkpoint.py ADDED
@@ -0,0 +1,664 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import spaces
2
+ import os
3
+ # os.system("Xvfb :99 -ac &")
4
+ # os.environ["DISPLAY"] = ":99"
5
+ import OpenGL.GL as gl
6
+ os.environ["PYOPENGL_PLATFORM"] = "egl"
7
+ os.environ["MESA_GL_VERSION_OVERRIDE"] = "4.1"
8
+ import signal
9
+ import time
10
+ import csv
11
+ import sys
12
+ import warnings
13
+ import random
14
+ import gradio as gr
15
+ import torch
16
+ import torch.nn as nn
17
+ import torch.nn.functional as F
18
+ import torch.distributed as dist
19
+ from torch.nn.parallel import DistributedDataParallel as DDP
20
+ import torch.multiprocessing as mp
21
+ import numpy as np
22
+ import time
23
+ import pprint
24
+ from loguru import logger
25
+ import smplx
26
+ from torch.utils.tensorboard import SummaryWriter
27
+ import wandb
28
+ import matplotlib.pyplot as plt
29
+ from utils import config, logger_tools, other_tools_hf, metric, data_transfer
30
+ from dataloaders import data_tools
31
+ from dataloaders.build_vocab import Vocab
32
+ from optimizers.optim_factory import create_optimizer
33
+ from optimizers.scheduler_factory import create_scheduler
34
+ from optimizers.loss_factory import get_loss_func
35
+ from dataloaders.data_tools import joints_list
36
+ from utils import rotation_conversions as rc
37
+ import soundfile as sf
38
+ import librosa
39
+
40
+ def inverse_selection_tensor(filtered_t, selection_array, n):
41
+ selection_array = torch.from_numpy(selection_array).cuda()
42
+ original_shape_t = torch.zeros((n, 165)).cuda()
43
+ selected_indices = torch.where(selection_array == 1)[0]
44
+ for i in range(n):
45
+ original_shape_t[i, selected_indices] = filtered_t[i]
46
+ return original_shape_t
47
+
48
+ @spaces.GPU(duration=120)
49
+ def test_demo_gpu(
50
+ model, vq_model_face, vq_model_upper, vq_model_hands, vq_model_lower, global_motion, smplx_model,
51
+ dict_data,
52
+ args,
53
+ joints, joint_mask_upper, joint_mask_lower, joint_mask_hands,
54
+ log_softmax,
55
+ ):
56
+ rank = 0
57
+ other_tools_hf.load_checkpoints(vq_model_face, args.data_path_1 + "pretrained_vq/last_790_face_v2.bin", args.e_name)
58
+ other_tools_hf.load_checkpoints(vq_model_upper, args.data_path_1 + "pretrained_vq/upper_vertex_1layer_710.bin", args.e_name)
59
+ other_tools_hf.load_checkpoints(vq_model_hands, args.data_path_1 + "pretrained_vq/hands_vertex_1layer_710.bin", args.e_name)
60
+ other_tools_hf.load_checkpoints(vq_model_lower, args.data_path_1 + "pretrained_vq/lower_foot_600.bin", args.e_name)
61
+ other_tools_hf.load_checkpoints(global_motion, args.data_path_1 + "pretrained_vq/last_1700_foot.bin", args.e_name)
62
+ other_tools_hf.load_checkpoints(model, args.test_ckpt, args.g_name)
63
+ model.to(rank).eval()
64
+ smplx_model.to(rank).eval()
65
+ vq_model_face.to(rank).eval()
66
+ vq_model_upper.to(rank).eval()
67
+ vq_model_hands.to(rank).eval()
68
+ vq_model_lower.to(rank).eval()
69
+ global_motion.to(rank).eval()
70
+
71
+ with torch.no_grad():
72
+ tar_pose_raw = dict_data["pose"]
73
+ tar_pose = tar_pose_raw[:, :, :165].to(rank)
74
+ tar_contact = tar_pose_raw[:, :, 165:169].to(rank)
75
+ tar_trans = dict_data["trans"].to(rank)
76
+ tar_exps = dict_data["facial"].to(rank)
77
+ in_audio = dict_data["audio"].to(rank)
78
+ in_word = None# dict_data["word"].to(rank)
79
+ tar_beta = dict_data["beta"].to(rank)
80
+ tar_id = dict_data["id"].to(rank).long()
81
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], joints
82
+
83
+ tar_pose_jaw = tar_pose[:, :, 66:69]
84
+ tar_pose_jaw = rc.axis_angle_to_matrix(tar_pose_jaw.reshape(bs, n, 1, 3))
85
+ tar_pose_jaw = rc.matrix_to_rotation_6d(tar_pose_jaw).reshape(bs, n, 1*6)
86
+ tar_pose_face = torch.cat([tar_pose_jaw, tar_exps], dim=2)
87
+
88
+ tar_pose_hands = tar_pose[:, :, 25*3:55*3]
89
+ tar_pose_hands = rc.axis_angle_to_matrix(tar_pose_hands.reshape(bs, n, 30, 3))
90
+ tar_pose_hands = rc.matrix_to_rotation_6d(tar_pose_hands).reshape(bs, n, 30*6)
91
+
92
+ tar_pose_upper = tar_pose[:, :, joint_mask_upper.astype(bool)]
93
+ tar_pose_upper = rc.axis_angle_to_matrix(tar_pose_upper.reshape(bs, n, 13, 3))
94
+ tar_pose_upper = rc.matrix_to_rotation_6d(tar_pose_upper).reshape(bs, n, 13*6)
95
+
96
+ tar_pose_leg = tar_pose[:, :, joint_mask_lower.astype(bool)]
97
+ tar_pose_leg = rc.axis_angle_to_matrix(tar_pose_leg.reshape(bs, n, 9, 3))
98
+ tar_pose_leg = rc.matrix_to_rotation_6d(tar_pose_leg).reshape(bs, n, 9*6)
99
+ tar_pose_lower = torch.cat([tar_pose_leg, tar_trans, tar_contact], dim=2)
100
+
101
+ # tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
102
+ # tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
103
+ tar4dis = torch.cat([tar_pose_jaw, tar_pose_upper, tar_pose_hands, tar_pose_leg], dim=2)
104
+
105
+ tar_index_value_face_top = vq_model_face.map2index(tar_pose_face) # bs*n/4
106
+ tar_index_value_upper_top = vq_model_upper.map2index(tar_pose_upper) # bs*n/4
107
+ tar_index_value_hands_top = vq_model_hands.map2index(tar_pose_hands) # bs*n/4
108
+ tar_index_value_lower_top = vq_model_lower.map2index(tar_pose_lower) # bs*n/4
109
+
110
+ latent_face_top = vq_model_face.map2latent(tar_pose_face) # bs*n/4
111
+ latent_upper_top = vq_model_upper.map2latent(tar_pose_upper) # bs*n/4
112
+ latent_hands_top = vq_model_hands.map2latent(tar_pose_hands) # bs*n/4
113
+ latent_lower_top = vq_model_lower.map2latent(tar_pose_lower) # bs*n/4
114
+
115
+ latent_in = torch.cat([latent_upper_top, latent_hands_top, latent_lower_top], dim=2)
116
+
117
+ index_in = torch.stack([tar_index_value_upper_top, tar_index_value_hands_top, tar_index_value_lower_top], dim=-1).long()
118
+
119
+ tar_pose_6d = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, 55, 3))
120
+ tar_pose_6d = rc.matrix_to_rotation_6d(tar_pose_6d).reshape(bs, n, 55*6)
121
+ latent_all = torch.cat([tar_pose_6d, tar_trans, tar_contact], dim=-1)
122
+
123
+ loaded_data = {
124
+ "tar_pose_jaw": tar_pose_jaw,
125
+ "tar_pose_face": tar_pose_face,
126
+ "tar_pose_upper": tar_pose_upper,
127
+ "tar_pose_lower": tar_pose_lower,
128
+ "tar_pose_hands": tar_pose_hands,
129
+ 'tar_pose_leg': tar_pose_leg,
130
+ "in_audio": in_audio,
131
+ "in_word": in_word,
132
+ "tar_trans": tar_trans,
133
+ "tar_exps": tar_exps,
134
+ "tar_beta": tar_beta,
135
+ "tar_pose": tar_pose,
136
+ "tar4dis": tar4dis,
137
+ "tar_index_value_face_top": tar_index_value_face_top,
138
+ "tar_index_value_upper_top": tar_index_value_upper_top,
139
+ "tar_index_value_hands_top": tar_index_value_hands_top,
140
+ "tar_index_value_lower_top": tar_index_value_lower_top,
141
+ "latent_face_top": latent_face_top,
142
+ "latent_upper_top": latent_upper_top,
143
+ "latent_hands_top": latent_hands_top,
144
+ "latent_lower_top": latent_lower_top,
145
+ "latent_in": latent_in,
146
+ "index_in": index_in,
147
+ "tar_id": tar_id,
148
+ "latent_all": latent_all,
149
+ "tar_pose_6d": tar_pose_6d,
150
+ "tar_contact": tar_contact,
151
+ }
152
+
153
+ mode = 'test'
154
+ bs, n, j = loaded_data["tar_pose"].shape[0], loaded_data["tar_pose"].shape[1], joints
155
+ tar_pose = loaded_data["tar_pose"]
156
+ tar_beta = loaded_data["tar_beta"]
157
+ in_word =None# loaded_data["in_word"]
158
+ tar_exps = loaded_data["tar_exps"]
159
+ tar_contact = loaded_data["tar_contact"]
160
+ in_audio = loaded_data["in_audio"]
161
+ tar_trans = loaded_data["tar_trans"]
162
+
163
+ remain = n%8
164
+ if remain != 0:
165
+ tar_pose = tar_pose[:, :-remain, :]
166
+ tar_beta = tar_beta[:, :-remain, :]
167
+ tar_trans = tar_trans[:, :-remain, :]
168
+ # in_word = in_word[:, :-remain]
169
+ tar_exps = tar_exps[:, :-remain, :]
170
+ tar_contact = tar_contact[:, :-remain, :]
171
+ n = n - remain
172
+
173
+ tar_pose_jaw = tar_pose[:, :, 66:69]
174
+ tar_pose_jaw = rc.axis_angle_to_matrix(tar_pose_jaw.reshape(bs, n, 1, 3))
175
+ tar_pose_jaw = rc.matrix_to_rotation_6d(tar_pose_jaw).reshape(bs, n, 1*6)
176
+ tar_pose_face = torch.cat([tar_pose_jaw, tar_exps], dim=2)
177
+
178
+ tar_pose_hands = tar_pose[:, :, 25*3:55*3]
179
+ tar_pose_hands = rc.axis_angle_to_matrix(tar_pose_hands.reshape(bs, n, 30, 3))
180
+ tar_pose_hands = rc.matrix_to_rotation_6d(tar_pose_hands).reshape(bs, n, 30*6)
181
+
182
+ tar_pose_upper = tar_pose[:, :, joint_mask_upper.astype(bool)]
183
+ tar_pose_upper = rc.axis_angle_to_matrix(tar_pose_upper.reshape(bs, n, 13, 3))
184
+ tar_pose_upper = rc.matrix_to_rotation_6d(tar_pose_upper).reshape(bs, n, 13*6)
185
+
186
+ tar_pose_leg = tar_pose[:, :, joint_mask_lower.astype(bool)]
187
+ tar_pose_leg = rc.axis_angle_to_matrix(tar_pose_leg.reshape(bs, n, 9, 3))
188
+ tar_pose_leg = rc.matrix_to_rotation_6d(tar_pose_leg).reshape(bs, n, 9*6)
189
+ tar_pose_lower = torch.cat([tar_pose_leg, tar_trans, tar_contact], dim=2)
190
+
191
+ tar_pose_6d = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, 55, 3))
192
+ tar_pose_6d = rc.matrix_to_rotation_6d(tar_pose_6d).reshape(bs, n, 55*6)
193
+ latent_all = torch.cat([tar_pose_6d, tar_trans, tar_contact], dim=-1)
194
+
195
+ rec_index_all_face = []
196
+ rec_index_all_upper = []
197
+ rec_index_all_lower = []
198
+ rec_index_all_hands = []
199
+
200
+ roundt = (n - args.pre_frames) // (args.pose_length - args.pre_frames)
201
+ remain = (n - args.pre_frames) % (args.pose_length - args.pre_frames)
202
+ round_l = args.pose_length - args.pre_frames
203
+
204
+ for i in range(0, roundt):
205
+ # in_word_tmp = in_word[:, i*(round_l):(i+1)*(round_l)+args.pre_frames]
206
+ # audio fps is 16000 and pose fps is 30
207
+ in_audio_tmp = in_audio[:, i*(16000//30*round_l):(i+1)*(16000//30*round_l)+16000//30*args.pre_frames]
208
+ in_id_tmp = loaded_data['tar_id'][:, i*(round_l):(i+1)*(round_l)+args.pre_frames]
209
+ mask_val = torch.ones(bs, args.pose_length, args.pose_dims+3+4).float().cuda()
210
+ mask_val[:, :args.pre_frames, :] = 0.0
211
+ if i == 0:
212
+ latent_all_tmp = latent_all[:, i*(round_l):(i+1)*(round_l)+args.pre_frames, :]
213
+ else:
214
+ latent_all_tmp = latent_all[:, i*(round_l):(i+1)*(round_l)+args.pre_frames, :]
215
+ # print(latent_all_tmp.shape, latent_last.shape)
216
+ latent_all_tmp[:, :args.pre_frames, :] = latent_last[:, -args.pre_frames:, :]
217
+
218
+ net_out_val = model(
219
+ in_audio = in_audio_tmp,
220
+ in_word=None, #in_word_tmp,
221
+ mask=mask_val,
222
+ in_motion = latent_all_tmp,
223
+ in_id = in_id_tmp,
224
+ use_attentions=True,)
225
+
226
+ if args.cu != 0:
227
+ rec_index_upper = log_softmax(net_out_val["cls_upper"]).reshape(-1, args.vae_codebook_size)
228
+ _, rec_index_upper = torch.max(rec_index_upper.reshape(-1, args.pose_length, args.vae_codebook_size), dim=2)
229
+ #rec_upper = vq_model_upper.decode(rec_index_upper)
230
+ else:
231
+ _, rec_index_upper, _, _ = vq_model_upper.quantizer(net_out_val["rec_upper"])
232
+ #rec_upper = vq_model_upper.decoder(rec_index_upper)
233
+ if args.cl != 0:
234
+ rec_index_lower = log_softmax(net_out_val["cls_lower"]).reshape(-1, args.vae_codebook_size)
235
+ _, rec_index_lower = torch.max(rec_index_lower.reshape(-1, args.pose_length, args.vae_codebook_size), dim=2)
236
+ #rec_lower = vq_model_lower.decode(rec_index_lower)
237
+ else:
238
+ _, rec_index_lower, _, _ = vq_model_lower.quantizer(net_out_val["rec_lower"])
239
+ #rec_lower = vq_model_lower.decoder(rec_index_lower)
240
+ if args.ch != 0:
241
+ rec_index_hands = log_softmax(net_out_val["cls_hands"]).reshape(-1, args.vae_codebook_size)
242
+ _, rec_index_hands = torch.max(rec_index_hands.reshape(-1, args.pose_length, args.vae_codebook_size), dim=2)
243
+ #rec_hands = vq_model_hands.decode(rec_index_hands)
244
+ else:
245
+ _, rec_index_hands, _, _ = vq_model_hands.quantizer(net_out_val["rec_hands"])
246
+ #rec_hands = vq_model_hands.decoder(rec_index_hands)
247
+ if args.cf != 0:
248
+ rec_index_face = log_softmax(net_out_val["cls_face"]).reshape(-1, args.vae_codebook_size)
249
+ _, rec_index_face = torch.max(rec_index_face.reshape(-1, args.pose_length, args.vae_codebook_size), dim=2)
250
+ #rec_face = vq_model_face.decoder(rec_index_face)
251
+ else:
252
+ _, rec_index_face, _, _ = vq_model_face.quantizer(net_out_val["rec_face"])
253
+ #rec_face = vq_model_face.decoder(rec_index_face)
254
+
255
+ if i == 0:
256
+ rec_index_all_face.append(rec_index_face)
257
+ rec_index_all_upper.append(rec_index_upper)
258
+ rec_index_all_lower.append(rec_index_lower)
259
+ rec_index_all_hands.append(rec_index_hands)
260
+ else:
261
+ rec_index_all_face.append(rec_index_face[:, args.pre_frames:])
262
+ rec_index_all_upper.append(rec_index_upper[:, args.pre_frames:])
263
+ rec_index_all_lower.append(rec_index_lower[:, args.pre_frames:])
264
+ rec_index_all_hands.append(rec_index_hands[:, args.pre_frames:])
265
+
266
+ if args.cu != 0:
267
+ rec_upper_last = vq_model_upper.decode(rec_index_upper)
268
+ else:
269
+ rec_upper_last = vq_model_upper.decoder(rec_index_upper)
270
+ if args.cl != 0:
271
+ rec_lower_last = vq_model_lower.decode(rec_index_lower)
272
+ else:
273
+ rec_lower_last = vq_model_lower.decoder(rec_index_lower)
274
+ if args.ch != 0:
275
+ rec_hands_last = vq_model_hands.decode(rec_index_hands)
276
+ else:
277
+ rec_hands_last = vq_model_hands.decoder(rec_index_hands)
278
+ # if args.cf != 0:
279
+ # rec_face_last = vq_model_face.decode(rec_index_face)
280
+ # else:
281
+ # rec_face_last = vq_model_face.decoder(rec_index_face)
282
+
283
+ rec_pose_legs = rec_lower_last[:, :, :54]
284
+ bs, n = rec_pose_legs.shape[0], rec_pose_legs.shape[1]
285
+ rec_pose_upper = rec_upper_last.reshape(bs, n, 13, 6)
286
+ rec_pose_upper = rc.rotation_6d_to_matrix(rec_pose_upper)#
287
+ rec_pose_upper = rc.matrix_to_axis_angle(rec_pose_upper).reshape(bs*n, 13*3)
288
+ rec_pose_upper_recover = inverse_selection_tensor(rec_pose_upper, joint_mask_upper, bs*n)
289
+ rec_pose_lower = rec_pose_legs.reshape(bs, n, 9, 6)
290
+ rec_pose_lower = rc.rotation_6d_to_matrix(rec_pose_lower)
291
+ rec_pose_lower = rc.matrix_to_axis_angle(rec_pose_lower).reshape(bs*n, 9*3)
292
+ rec_pose_lower_recover = inverse_selection_tensor(rec_pose_lower, joint_mask_lower, bs*n)
293
+ rec_pose_hands = rec_hands_last.reshape(bs, n, 30, 6)
294
+ rec_pose_hands = rc.rotation_6d_to_matrix(rec_pose_hands)
295
+ rec_pose_hands = rc.matrix_to_axis_angle(rec_pose_hands).reshape(bs*n, 30*3)
296
+ rec_pose_hands_recover = inverse_selection_tensor(rec_pose_hands, joint_mask_hands, bs*n)
297
+ rec_pose = rec_pose_upper_recover + rec_pose_lower_recover + rec_pose_hands_recover
298
+ rec_pose = rc.axis_angle_to_matrix(rec_pose.reshape(bs, n, j, 3))
299
+ rec_pose = rc.matrix_to_rotation_6d(rec_pose).reshape(bs, n, j*6)
300
+ rec_trans_v_s = rec_lower_last[:, :, 54:57]
301
+ rec_x_trans = other_tools_hf.velocity2position(rec_trans_v_s[:, :, 0:1], 1/args.pose_fps, tar_trans[:, 0, 0:1])
302
+ rec_z_trans = other_tools_hf.velocity2position(rec_trans_v_s[:, :, 2:3], 1/args.pose_fps, tar_trans[:, 0, 2:3])
303
+ rec_y_trans = rec_trans_v_s[:,:,1:2]
304
+ rec_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
305
+ latent_last = torch.cat([rec_pose, rec_trans, rec_lower_last[:, :, 57:61]], dim=-1)
306
+
307
+ rec_index_face = torch.cat(rec_index_all_face, dim=1)
308
+ rec_index_upper = torch.cat(rec_index_all_upper, dim=1)
309
+ rec_index_lower = torch.cat(rec_index_all_lower, dim=1)
310
+ rec_index_hands = torch.cat(rec_index_all_hands, dim=1)
311
+ if args.cu != 0:
312
+ rec_upper = vq_model_upper.decode(rec_index_upper)
313
+ else:
314
+ rec_upper = vq_model_upper.decoder(rec_index_upper)
315
+ if args.cl != 0:
316
+ rec_lower = vq_model_lower.decode(rec_index_lower)
317
+ else:
318
+ rec_lower = vq_model_lower.decoder(rec_index_lower)
319
+ if args.ch != 0:
320
+ rec_hands = vq_model_hands.decode(rec_index_hands)
321
+ else:
322
+ rec_hands = vq_model_hands.decoder(rec_index_hands)
323
+ if args.cf != 0:
324
+ rec_face = vq_model_face.decode(rec_index_face)
325
+ else:
326
+ rec_face = vq_model_face.decoder(rec_index_face)
327
+
328
+ rec_exps = rec_face[:, :, 6:]
329
+ rec_pose_jaw = rec_face[:, :, :6]
330
+ rec_pose_legs = rec_lower[:, :, :54]
331
+ bs, n = rec_pose_jaw.shape[0], rec_pose_jaw.shape[1]
332
+ rec_pose_upper = rec_upper.reshape(bs, n, 13, 6)
333
+ rec_pose_upper = rc.rotation_6d_to_matrix(rec_pose_upper)#
334
+ rec_pose_upper = rc.matrix_to_axis_angle(rec_pose_upper).reshape(bs*n, 13*3)
335
+ rec_pose_upper_recover = inverse_selection_tensor(rec_pose_upper, joint_mask_upper, bs*n)
336
+ rec_pose_lower = rec_pose_legs.reshape(bs, n, 9, 6)
337
+ rec_pose_lower = rc.rotation_6d_to_matrix(rec_pose_lower)
338
+ rec_lower2global = rc.matrix_to_rotation_6d(rec_pose_lower.clone()).reshape(bs, n, 9*6)
339
+ rec_pose_lower = rc.matrix_to_axis_angle(rec_pose_lower).reshape(bs*n, 9*3)
340
+ rec_pose_lower_recover = inverse_selection_tensor(rec_pose_lower, joint_mask_lower, bs*n)
341
+ rec_pose_hands = rec_hands.reshape(bs, n, 30, 6)
342
+ rec_pose_hands = rc.rotation_6d_to_matrix(rec_pose_hands)
343
+ rec_pose_hands = rc.matrix_to_axis_angle(rec_pose_hands).reshape(bs*n, 30*3)
344
+ rec_pose_hands_recover = inverse_selection_tensor(rec_pose_hands, joint_mask_hands, bs*n)
345
+ rec_pose_jaw = rec_pose_jaw.reshape(bs*n, 6)
346
+ rec_pose_jaw = rc.rotation_6d_to_matrix(rec_pose_jaw)
347
+ rec_pose_jaw = rc.matrix_to_axis_angle(rec_pose_jaw).reshape(bs*n, 1*3)
348
+ rec_pose = rec_pose_upper_recover + rec_pose_lower_recover + rec_pose_hands_recover
349
+ rec_pose[:, 66:69] = rec_pose_jaw
350
+
351
+ to_global = rec_lower
352
+ to_global[:, :, 54:57] = 0.0
353
+ to_global[:, :, :54] = rec_lower2global
354
+ rec_global = global_motion(to_global)
355
+
356
+ rec_trans_v_s = rec_global["rec_pose"][:, :, 54:57]
357
+ rec_x_trans = other_tools_hf.velocity2position(rec_trans_v_s[:, :, 0:1], 1/args.pose_fps, tar_trans[:, 0, 0:1])
358
+ rec_z_trans = other_tools_hf.velocity2position(rec_trans_v_s[:, :, 2:3], 1/args.pose_fps, tar_trans[:, 0, 2:3])
359
+ rec_y_trans = rec_trans_v_s[:,:,1:2]
360
+ rec_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
361
+ tar_pose = tar_pose[:, :n, :]
362
+ tar_exps = tar_exps[:, :n, :]
363
+ tar_trans = tar_trans[:, :n, :]
364
+ tar_beta = tar_beta[:, :n, :]
365
+
366
+ rec_pose = rc.axis_angle_to_matrix(rec_pose.reshape(bs*n, j, 3))
367
+ rec_pose = rc.matrix_to_rotation_6d(rec_pose).reshape(bs, n, j*6)
368
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs*n, j, 3))
369
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
370
+
371
+ net_out = {
372
+ 'rec_pose': rec_pose,
373
+ 'rec_trans': rec_trans,
374
+ 'tar_pose': tar_pose,
375
+ 'tar_exps': tar_exps,
376
+ 'tar_beta': tar_beta,
377
+ 'tar_trans': tar_trans,
378
+ 'rec_exps': rec_exps,
379
+ }
380
+
381
+
382
+ tar_pose = net_out['tar_pose']
383
+ rec_pose = net_out['rec_pose']
384
+ tar_exps = net_out['tar_exps']
385
+ tar_beta = net_out['tar_beta']
386
+ rec_trans = net_out['rec_trans']
387
+ tar_trans = net_out['tar_trans']
388
+ rec_exps = net_out['rec_exps']
389
+ # print(rec_pose.shape, tar_pose.shape)
390
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], joints
391
+ # interpolate to 30fps
392
+ if (30/args.pose_fps) != 1:
393
+ assert 30%args.pose_fps == 0
394
+ n *= int(30/args.pose_fps)
395
+ tar_pose = torch.nn.functional.interpolate(tar_pose.permute(0, 2, 1), scale_factor=30/args.pose_fps, mode='linear').permute(0,2,1)
396
+ rec_pose = torch.nn.functional.interpolate(rec_pose.permute(0, 2, 1), scale_factor=30/args.pose_fps, mode='linear').permute(0,2,1)
397
+
398
+ # print(rec_pose.shape, tar_pose.shape)
399
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose.reshape(bs*n, j, 6))
400
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
401
+
402
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs*n, j, 6))
403
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
404
+
405
+ return tar_pose, rec_pose, tar_exps, tar_beta, rec_trans, tar_trans, rec_exps, bs, n, j
406
+
407
+
408
+ class BaseTrainer(object):
409
+ def __init__(self, args, sp, ap, tp):
410
+ hf_dir = "hf"
411
+ if not os.path.exists(args.out_path + "custom/" + hf_dir + "/"):
412
+ os.makedirs(args.out_path + "custom/" + hf_dir + "/")
413
+ sf.write(args.out_path + "custom/" + hf_dir + "/tmp.wav", ap[1][:ap[0]*8], ap[0])
414
+ self.audio_path = args.out_path + "custom/" + hf_dir + "/tmp.wav"
415
+ audio, ssr = librosa.load(self.audio_path)
416
+ ap = (ssr, audio)
417
+ self.args = args
418
+ self.rank = 0 # dist.get_rank()
419
+
420
+ #self.checkpoint_path = args.out_path + "custom/" + args.name + args.notes + "/" #wandb.run.dir #args.cache_path+args.out_path+"/"+args.name
421
+ self.checkpoint_path = args.out_path + "custom/" + hf_dir + "/"
422
+ if self.rank == 0:
423
+ self.test_data = __import__(f"dataloaders.{args.dataset}", fromlist=["something"]).CustomDataset(args, "test", smplx_path=sp, audio_path=ap, text_path=tp)
424
+ self.test_loader = torch.utils.data.DataLoader(
425
+ self.test_data,
426
+ batch_size=1,
427
+ shuffle=False,
428
+ num_workers=args.loader_workers,
429
+ drop_last=False,
430
+ )
431
+ logger.info(f"Init test dataloader success")
432
+ model_module = __import__(f"models.{args.model}", fromlist=["something"])
433
+
434
+ if args.ddp:
435
+ self.model = getattr(model_module, args.g_name)(args).to(self.rank)
436
+ process_group = torch.distributed.new_group()
437
+ self.model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(self.model, process_group)
438
+ self.model = DDP(self.model, device_ids=[self.rank], output_device=self.rank,
439
+ broadcast_buffers=False, find_unused_parameters=False)
440
+ else:
441
+ self.model = torch.nn.DataParallel(getattr(model_module, args.g_name)(args), args.gpus).cpu()
442
+
443
+ if self.rank == 0:
444
+ logger.info(self.model)
445
+ logger.info(f"init {args.g_name} success")
446
+
447
+ self.smplx = smplx.create(
448
+ self.args.data_path_1+"smplx_models/",
449
+ model_type='smplx',
450
+ gender='NEUTRAL_2020',
451
+ use_face_contour=False,
452
+ num_betas=300,
453
+ num_expression_coeffs=100,
454
+ ext='npz',
455
+ use_pca=False,
456
+ )
457
+
458
+ self.args = args
459
+ self.joints = self.test_data.joints
460
+ self.ori_joint_list = joints_list[self.args.ori_joints]
461
+ self.tar_joint_list_face = joints_list["beat_smplx_face"]
462
+ self.tar_joint_list_upper = joints_list["beat_smplx_upper"]
463
+ self.tar_joint_list_hands = joints_list["beat_smplx_hands"]
464
+ self.tar_joint_list_lower = joints_list["beat_smplx_lower"]
465
+
466
+ self.joint_mask_face = np.zeros(len(list(self.ori_joint_list.keys()))*3)
467
+ self.joints = 55
468
+ for joint_name in self.tar_joint_list_face:
469
+ self.joint_mask_face[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
470
+ self.joint_mask_upper = np.zeros(len(list(self.ori_joint_list.keys()))*3)
471
+ for joint_name in self.tar_joint_list_upper:
472
+ self.joint_mask_upper[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
473
+ self.joint_mask_hands = np.zeros(len(list(self.ori_joint_list.keys()))*3)
474
+ for joint_name in self.tar_joint_list_hands:
475
+ self.joint_mask_hands[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
476
+ self.joint_mask_lower = np.zeros(len(list(self.ori_joint_list.keys()))*3)
477
+ for joint_name in self.tar_joint_list_lower:
478
+ self.joint_mask_lower[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
479
+
480
+ self.tracker = other_tools_hf.EpochTracker(["fid", "l1div", "bc", "rec", "trans", "vel", "transv", 'dis', 'gen', 'acc', 'transa', 'exp', 'lvd', 'mse', "cls", "rec_face", "latent", "cls_full", "cls_self", "cls_word", "latent_word","latent_self"], [False,True,True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False,False,False,False])
481
+
482
+ vq_model_module = __import__(f"models.motion_representation", fromlist=["something"])
483
+ self.args.vae_layer = 2
484
+ self.args.vae_length = 256
485
+ self.args.vae_test_dim = 106
486
+ self.vq_model_face = getattr(vq_model_module, "VQVAEConvZero")(self.args).cpu()
487
+ # print(self.vq_model_face)
488
+ # other_tools_hf.load_checkpoints(self.vq_model_face, self.args.data_path_1 + "pretrained_vq/last_790_face_v2.bin", args.e_name)
489
+ self.args.vae_test_dim = 78
490
+ self.vq_model_upper = getattr(vq_model_module, "VQVAEConvZero")(self.args).cpu()
491
+ # other_tools_hf.load_checkpoints(self.vq_model_upper, self.args.data_path_1 + "pretrained_vq/upper_vertex_1layer_710.bin", args.e_name)
492
+ self.args.vae_test_dim = 180
493
+ self.vq_model_hands = getattr(vq_model_module, "VQVAEConvZero")(self.args).cpu()
494
+ # other_tools_hf.load_checkpoints(self.vq_model_hands, self.args.data_path_1 + "pretrained_vq/hands_vertex_1layer_710.bin", args.e_name)
495
+ self.args.vae_test_dim = 61
496
+ self.args.vae_layer = 4
497
+ self.vq_model_lower = getattr(vq_model_module, "VQVAEConvZero")(self.args).cpu()
498
+ # other_tools_hf.load_checkpoints(self.vq_model_lower, self.args.data_path_1 + "pretrained_vq/lower_foot_600.bin", args.e_name)
499
+ self.args.vae_test_dim = 61
500
+ self.args.vae_layer = 4
501
+ self.global_motion = getattr(vq_model_module, "VAEConvZero")(self.args).cpu()
502
+ # other_tools_hf.load_checkpoints(self.global_motion, self.args.data_path_1 + "pretrained_vq/last_1700_foot.bin", args.e_name)
503
+ self.args.vae_test_dim = 330
504
+ self.args.vae_layer = 4
505
+ self.args.vae_length = 240
506
+
507
+ # self.cls_loss = nn.NLLLoss().to(self.rank)
508
+ # self.reclatent_loss = nn.MSELoss().to(self.rank)
509
+ # self.vel_loss = torch.nn.L1Loss(reduction='mean').to(self.rank)
510
+ # self.rec_loss = get_loss_func("GeodesicLoss").to(self.rank)
511
+ self.log_softmax = nn.LogSoftmax(dim=2)
512
+
513
+
514
+ def inverse_selection(self, filtered_t, selection_array, n):
515
+ original_shape_t = np.zeros((n, selection_array.size))
516
+ selected_indices = np.where(selection_array == 1)[0]
517
+ for i in range(n):
518
+ original_shape_t[i, selected_indices] = filtered_t[i]
519
+ return original_shape_t
520
+
521
+ def inverse_selection_tensor(self, filtered_t, selection_array, n):
522
+ selection_array = torch.from_numpy(selection_array).cuda()
523
+ original_shape_t = torch.zeros((n, 165)).cuda()
524
+ selected_indices = torch.where(selection_array == 1)[0]
525
+ for i in range(n):
526
+ original_shape_t[i, selected_indices] = filtered_t[i]
527
+ return original_shape_t
528
+
529
+
530
+ def test_demo(self, epoch):
531
+ '''
532
+ input audio and text, output motion
533
+ do not calculate loss and metric
534
+ save video
535
+ '''
536
+ results_save_path = self.checkpoint_path + f"/{epoch}/"
537
+ if os.path.exists(results_save_path):
538
+ import shutil
539
+ shutil.rmtree(results_save_path)
540
+ os.makedirs(results_save_path)
541
+ start_time = time.time()
542
+ total_length = 0
543
+ test_seq_list = self.test_data.selected_file
544
+ align = 0
545
+ latent_out = []
546
+ latent_ori = []
547
+ l2_all = 0
548
+ lvel = 0
549
+ for its, batch_data in enumerate(self.test_loader):
550
+ tar_pose, rec_pose, tar_exps, tar_beta, rec_trans, tar_trans, rec_exps, bs, n, j = test_demo_gpu(
551
+ self.model, self.vq_model_face, self.vq_model_upper, self.vq_model_hands, self.vq_model_lower, self.global_motion, self.smplx,
552
+ batch_data,
553
+ self.args,
554
+ self.joints, self.joint_mask_upper, self.joint_mask_lower, self.joint_mask_hands,
555
+ self.log_softmax,
556
+ )
557
+
558
+ tar_pose_np = tar_pose.detach().cpu().numpy()
559
+ rec_pose_np = rec_pose.detach().cpu().numpy()
560
+ rec_trans_np = rec_trans.detach().cpu().numpy().reshape(bs*n, 3)
561
+ rec_exp_np = rec_exps.detach().cpu().numpy().reshape(bs*n, 100)
562
+ tar_exp_np = tar_exps.detach().cpu().numpy().reshape(bs*n, 100)
563
+ tar_trans_np = tar_trans.detach().cpu().numpy().reshape(bs*n, 3)
564
+ #'''
565
+ # its = 0
566
+ gt_npz = np.load(self.args.data_path+self.args.pose_rep +"/"+test_seq_list.iloc[its]['id']+".npz", allow_pickle=True)
567
+ np.savez(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
568
+ betas=gt_npz["betas"],
569
+ poses=tar_pose_np,
570
+ expressions=tar_exp_np,
571
+ trans=tar_trans_np,
572
+ model='smplx2020',
573
+ gender='neutral',
574
+ mocap_frame_rate = 30,
575
+ )
576
+ np.savez(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
577
+ betas=gt_npz["betas"],
578
+ poses=rec_pose_np,
579
+ expressions=rec_exp_np,
580
+ trans=rec_trans_np,
581
+ model='smplx2020',
582
+ gender='neutral',
583
+ mocap_frame_rate = 30,
584
+ )
585
+
586
+ total_length += n
587
+ render_vid_path = other_tools_hf.render_one_sequence_no_gt(
588
+ results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
589
+ # results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
590
+ results_save_path,
591
+ self.audio_path,
592
+ self.args.data_path_1+"smplx_models/",
593
+ use_matplotlib = False,
594
+ args = self.args,
595
+ )
596
+ result = gr.Video(value=render_vid_path, visible=True)
597
+ end_time = time.time() - start_time
598
+ logger.info(f"total inference time: {int(end_time)} s for {int(total_length/self.args.pose_fps)} s motion")
599
+ return result
600
+
601
+
602
+ @logger.catch
603
+ def emage(audio_path):
604
+ smplx_path = None
605
+ text_path = None
606
+ rank = 0
607
+ world_size = 1
608
+ args = config.parse_args()
609
+ #os.environ['TRANSFORMERS_CACHE'] = args.data_path_1 + "hub/"
610
+ if not sys.warnoptions:
611
+ warnings.simplefilter("ignore")
612
+ # dist.init_process_group(backend="gloo", rank=rank, world_size=world_size)
613
+
614
+ #logger_tools.set_args_and_logger(args, rank)
615
+ other_tools_hf.set_random_seed(args)
616
+ other_tools_hf.print_exp_info(args)
617
+
618
+ # return one intance of trainer
619
+ trainer = BaseTrainer(args, sp = smplx_path, ap = audio_path, tp = text_path)
620
+ result = trainer.test_demo(999)
621
+ return result
622
+
623
+ examples = [
624
+ ["./EMAGE/test_sequences/wave16k/2_scott_0_1_1.wav"],
625
+ ["./EMAGE/test_sequences/wave16k/2_scott_0_2_2.wav"],
626
+ ["./EMAGE/test_sequences/wave16k/2_scott_0_3_3.wav"],
627
+ ]
628
+
629
+ demo = gr.Interface(
630
+ emage, # function
631
+ inputs=[
632
+ # gr.File(label="Please upload SMPL-X file with npz format here.", file_types=["npz", "NPZ"]),
633
+ gr.Audio(),
634
+ # gr.File(label="Please upload textgrid format file here.", file_types=["TextGrid", "Textgrid", "textgrid"])
635
+ ], # input type
636
+ outputs=gr.Video(format="mp4", visible=True),
637
+ title='\
638
+ <div align="center">\
639
+ EMAGE: Towards Unified Holistic Co-Speech Gesture Generation via Expressive Masked Audio Gesture Modeling <br/>\
640
+ CVPR 2024 <br/>\
641
+ </div>',
642
+ description='\
643
+ <div align="center">\
644
+ Haiyang Liu1*, Zihao Zhu2*, Giorgio Becherini3, Yichen Peng4, Mingyang Su5,<br/>\
645
+ You Zhou, Xuefei Zhe, Naoya Iwamoto, Bo Zheng, Michael J. Black3 <br/>\
646
+ (*Equal Contribution) <br/>\
647
+ 1The University of Tokyo, 2Keio University, 4Japan Advanced Institute of Science and Technology, <br/>\
648
+ 3Max Planck Institute for Intelligent Systems, 5Tsinghua University <br/>\
649
+ </div>\
650
+ ',
651
+ article="\
652
+ Due to the limited resources in this space, we process the first 8s of your uploaded audio. <br/>\
653
+ Try to develop this space locally for longer motion generation, e.g., 60s. <br/>\
654
+ Relevant links: [Project Page (https://pantomatrix.github.io/EMAGE/)\
655
+ ",
656
+ examples=examples,
657
+ )
658
+
659
+
660
+ if __name__ == "__main__":
661
+ os.environ["MASTER_ADDR"]='127.0.0.1'
662
+ os.environ["MASTER_PORT"]='8675'
663
+ #os.environ["TORCH_DISTRIBUTED_DEBUG"] = "DETAIL"
664
+ demo.launch(share=True)
.ipynb_checkpoints/packages-checkpoint.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ libgl1-mesa-dev
2
+ libglu1-mesa-dev
3
+ freeglut3-dev
4
+ mesa-common-dev
.ipynb_checkpoints/requirements-checkpoint.txt ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ffmpeg
2
+ ConfigArgParse==1.7
3
+ fasttext==0.9.2
4
+ h5py==3.10.0
5
+ imageio==2.31.4
6
+ ipython==8.12.3
7
+ joblib==1.3.2
8
+ librosa==0.10.1
9
+ lmdb==1.4.1
10
+ loguru==0.7.2
11
+ matplotlib==3.7.3
12
+ moviepy==1.0.3
13
+ gradio
14
+ fasttext-wheel
15
+ opencv_contrib_python==4.8.1.78
16
+ opencv_python==4.8.1.78
17
+ pandas==1.5.3
18
+ peakutils==1.3.4
19
+ ptflops==0.7.1.2
20
+ python_igraph==0.11.3
21
+ pyvirtualdisplay==3.0
22
+ PyYAML==6.0.1
23
+ replicate==0.15.4
24
+ scikit_learn==1.3.2
25
+ scipy
26
+ soundfile==0.12.1
27
+ termcolor==2.4.0
28
+ textgrid==1.5
29
+ torch==2.1.0
30
+ torchvision
31
+ tqdm==4.66.1
32
+ transformers==4.35.2
33
+ trimesh==3.23.5
34
+ wandb==0.16.0
35
+ pyglet<2
36
+ smplx
37
+ tensorboard
38
+ pyrender
39
+ pyarrow
.ipynb_checkpoints/test_demo-checkpoint.py ADDED
@@ -0,0 +1,581 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import signal
3
+ import time
4
+ import csv
5
+ import sys
6
+ import warnings
7
+ import random
8
+ import torch
9
+ import torch.nn as nn
10
+ import torch.nn.functional as F
11
+ import torch.distributed as dist
12
+ from torch.nn.parallel import DistributedDataParallel as DDP
13
+ import torch.multiprocessing as mp
14
+ import numpy as np
15
+ import time
16
+ import pprint
17
+ from loguru import logger
18
+ import smplx
19
+ from torch.utils.tensorboard import SummaryWriter
20
+ import wandb
21
+ import matplotlib.pyplot as plt
22
+ from utils import config, logger_tools, other_tools, metric, data_transfer
23
+ from dataloaders import data_tools
24
+ from dataloaders.build_vocab import Vocab
25
+ from optimizers.optim_factory import create_optimizer
26
+ from optimizers.scheduler_factory import create_scheduler
27
+ from optimizers.loss_factory import get_loss_func
28
+ from dataloaders.data_tools import joints_list
29
+ from utils import rotation_conversions as rc
30
+
31
+ class BaseTrainer(object):
32
+ def __init__(self, args):
33
+ self.args = args
34
+ self.rank = dist.get_rank()
35
+ self.checkpoint_path = args.out_path + "custom/" + args.name + args.notes + "/" #wandb.run.dir #args.cache_path+args.out_path+"/"+args.name
36
+ if self.rank == 0:
37
+ self.test_data = __import__(f"dataloaders.{args.dataset}", fromlist=["something"]).CustomDataset(args, "test")
38
+ self.test_loader = torch.utils.data.DataLoader(
39
+ self.test_data,
40
+ batch_size=1,
41
+ shuffle=False,
42
+ num_workers=args.loader_workers,
43
+ drop_last=False,
44
+ )
45
+ logger.info(f"Init test dataloader success")
46
+ model_module = __import__(f"models.{args.model}", fromlist=["something"])
47
+
48
+ if args.ddp:
49
+ self.model = getattr(model_module, args.g_name)(args).to(self.rank)
50
+ process_group = torch.distributed.new_group()
51
+ self.model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(self.model, process_group)
52
+ self.model = DDP(self.model, device_ids=[self.rank], output_device=self.rank,
53
+ broadcast_buffers=False, find_unused_parameters=False)
54
+ else:
55
+ self.model = torch.nn.DataParallel(getattr(model_module, args.g_name)(args), args.gpus).cuda()
56
+
57
+ if self.rank == 0:
58
+ logger.info(self.model)
59
+ logger.info(f"init {args.g_name} success")
60
+
61
+ self.smplx = smplx.create(
62
+ self.args.data_path_1+"smplx_models/",
63
+ model_type='smplx',
64
+ gender='NEUTRAL_2020',
65
+ use_face_contour=False,
66
+ num_betas=300,
67
+ num_expression_coeffs=100,
68
+ ext='npz',
69
+ use_pca=False,
70
+ ).to(self.rank).eval()
71
+
72
+ self.args = args
73
+ self.joints = self.test_data.joints
74
+ self.ori_joint_list = joints_list[self.args.ori_joints]
75
+ self.tar_joint_list_face = joints_list["beat_smplx_face"]
76
+ self.tar_joint_list_upper = joints_list["beat_smplx_upper"]
77
+ self.tar_joint_list_hands = joints_list["beat_smplx_hands"]
78
+ self.tar_joint_list_lower = joints_list["beat_smplx_lower"]
79
+
80
+ self.joint_mask_face = np.zeros(len(list(self.ori_joint_list.keys()))*3)
81
+ self.joints = 55
82
+ for joint_name in self.tar_joint_list_face:
83
+ self.joint_mask_face[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
84
+ self.joint_mask_upper = np.zeros(len(list(self.ori_joint_list.keys()))*3)
85
+ for joint_name in self.tar_joint_list_upper:
86
+ self.joint_mask_upper[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
87
+ self.joint_mask_hands = np.zeros(len(list(self.ori_joint_list.keys()))*3)
88
+ for joint_name in self.tar_joint_list_hands:
89
+ self.joint_mask_hands[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
90
+ self.joint_mask_lower = np.zeros(len(list(self.ori_joint_list.keys()))*3)
91
+ for joint_name in self.tar_joint_list_lower:
92
+ self.joint_mask_lower[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
93
+
94
+ self.tracker = other_tools.EpochTracker(["fid", "l1div", "bc", "rec", "trans", "vel", "transv", 'dis', 'gen', 'acc', 'transa', 'exp', 'lvd', 'mse', "cls", "rec_face", "latent", "cls_full", "cls_self", "cls_word", "latent_word","latent_self"], [False,True,True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False,False,False,False])
95
+
96
+ vq_model_module = __import__(f"models.motion_representation", fromlist=["something"])
97
+ self.args.vae_layer = 2
98
+ self.args.vae_length = 256
99
+ self.args.vae_test_dim = 106
100
+ self.vq_model_face = getattr(vq_model_module, "VQVAEConvZero")(self.args).to(self.rank)
101
+ # print(self.vq_model_face)
102
+ other_tools.load_checkpoints(self.vq_model_face, self.args.data_path_1 + "pretrained_vq/last_790_face_v2.bin", args.e_name)
103
+ self.args.vae_test_dim = 78
104
+ self.vq_model_upper = getattr(vq_model_module, "VQVAEConvZero")(self.args).to(self.rank)
105
+ other_tools.load_checkpoints(self.vq_model_upper, self.args.data_path_1 + "pretrained_vq/upper_vertex_1layer_710.bin", args.e_name)
106
+ self.args.vae_test_dim = 180
107
+ self.vq_model_hands = getattr(vq_model_module, "VQVAEConvZero")(self.args).to(self.rank)
108
+ other_tools.load_checkpoints(self.vq_model_hands, self.args.data_path_1 + "pretrained_vq/hands_vertex_1layer_710.bin", args.e_name)
109
+ self.args.vae_test_dim = 61
110
+ self.args.vae_layer = 4
111
+ self.vq_model_lower = getattr(vq_model_module, "VQVAEConvZero")(self.args).to(self.rank)
112
+ other_tools.load_checkpoints(self.vq_model_lower, self.args.data_path_1 + "pretrained_vq/lower_foot_600.bin", args.e_name)
113
+ self.args.vae_test_dim = 61
114
+ self.args.vae_layer = 4
115
+ self.global_motion = getattr(vq_model_module, "VAEConvZero")(self.args).to(self.rank)
116
+ other_tools.load_checkpoints(self.global_motion, self.args.data_path_1 + "pretrained_vq/last_1700_foot.bin", args.e_name)
117
+ self.args.vae_test_dim = 330
118
+ self.args.vae_layer = 4
119
+ self.args.vae_length = 240
120
+
121
+ self.vq_model_face.eval()
122
+ self.vq_model_upper.eval()
123
+ self.vq_model_hands.eval()
124
+ self.vq_model_lower.eval()
125
+ self.global_motion.eval()
126
+
127
+ self.cls_loss = nn.NLLLoss().to(self.rank)
128
+ self.reclatent_loss = nn.MSELoss().to(self.rank)
129
+ self.vel_loss = torch.nn.L1Loss(reduction='mean').to(self.rank)
130
+ self.rec_loss = get_loss_func("GeodesicLoss").to(self.rank)
131
+ self.log_softmax = nn.LogSoftmax(dim=2).to(self.rank)
132
+
133
+
134
+ def inverse_selection(self, filtered_t, selection_array, n):
135
+ original_shape_t = np.zeros((n, selection_array.size))
136
+ selected_indices = np.where(selection_array == 1)[0]
137
+ for i in range(n):
138
+ original_shape_t[i, selected_indices] = filtered_t[i]
139
+ return original_shape_t
140
+
141
+ def inverse_selection_tensor(self, filtered_t, selection_array, n):
142
+ selection_array = torch.from_numpy(selection_array).cuda()
143
+ original_shape_t = torch.zeros((n, 165)).cuda()
144
+ selected_indices = torch.where(selection_array == 1)[0]
145
+ for i in range(n):
146
+ original_shape_t[i, selected_indices] = filtered_t[i]
147
+ return original_shape_t
148
+
149
+ def _load_data(self, dict_data):
150
+ tar_pose_raw = dict_data["pose"]
151
+ tar_pose = tar_pose_raw[:, :, :165].to(self.rank)
152
+ tar_contact = tar_pose_raw[:, :, 165:169].to(self.rank)
153
+ tar_trans = dict_data["trans"].to(self.rank)
154
+ tar_exps = dict_data["facial"].to(self.rank)
155
+ in_audio = dict_data["audio"].to(self.rank)
156
+ in_word = dict_data["word"].to(self.rank)
157
+ tar_beta = dict_data["beta"].to(self.rank)
158
+ tar_id = dict_data["id"].to(self.rank).long()
159
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
160
+
161
+ tar_pose_jaw = tar_pose[:, :, 66:69]
162
+ tar_pose_jaw = rc.axis_angle_to_matrix(tar_pose_jaw.reshape(bs, n, 1, 3))
163
+ tar_pose_jaw = rc.matrix_to_rotation_6d(tar_pose_jaw).reshape(bs, n, 1*6)
164
+ tar_pose_face = torch.cat([tar_pose_jaw, tar_exps], dim=2)
165
+
166
+ tar_pose_hands = tar_pose[:, :, 25*3:55*3]
167
+ tar_pose_hands = rc.axis_angle_to_matrix(tar_pose_hands.reshape(bs, n, 30, 3))
168
+ tar_pose_hands = rc.matrix_to_rotation_6d(tar_pose_hands).reshape(bs, n, 30*6)
169
+
170
+ tar_pose_upper = tar_pose[:, :, self.joint_mask_upper.astype(bool)]
171
+ tar_pose_upper = rc.axis_angle_to_matrix(tar_pose_upper.reshape(bs, n, 13, 3))
172
+ tar_pose_upper = rc.matrix_to_rotation_6d(tar_pose_upper).reshape(bs, n, 13*6)
173
+
174
+ tar_pose_leg = tar_pose[:, :, self.joint_mask_lower.astype(bool)]
175
+ tar_pose_leg = rc.axis_angle_to_matrix(tar_pose_leg.reshape(bs, n, 9, 3))
176
+ tar_pose_leg = rc.matrix_to_rotation_6d(tar_pose_leg).reshape(bs, n, 9*6)
177
+ tar_pose_lower = torch.cat([tar_pose_leg, tar_trans, tar_contact], dim=2)
178
+
179
+ # tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
180
+ # tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
181
+ tar4dis = torch.cat([tar_pose_jaw, tar_pose_upper, tar_pose_hands, tar_pose_leg], dim=2)
182
+
183
+ tar_index_value_face_top = self.vq_model_face.map2index(tar_pose_face) # bs*n/4
184
+ tar_index_value_upper_top = self.vq_model_upper.map2index(tar_pose_upper) # bs*n/4
185
+ tar_index_value_hands_top = self.vq_model_hands.map2index(tar_pose_hands) # bs*n/4
186
+ tar_index_value_lower_top = self.vq_model_lower.map2index(tar_pose_lower) # bs*n/4
187
+
188
+ latent_face_top = self.vq_model_face.map2latent(tar_pose_face) # bs*n/4
189
+ latent_upper_top = self.vq_model_upper.map2latent(tar_pose_upper) # bs*n/4
190
+ latent_hands_top = self.vq_model_hands.map2latent(tar_pose_hands) # bs*n/4
191
+ latent_lower_top = self.vq_model_lower.map2latent(tar_pose_lower) # bs*n/4
192
+
193
+ latent_in = torch.cat([latent_upper_top, latent_hands_top, latent_lower_top], dim=2)
194
+
195
+ index_in = torch.stack([tar_index_value_upper_top, tar_index_value_hands_top, tar_index_value_lower_top], dim=-1).long()
196
+
197
+ tar_pose_6d = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, 55, 3))
198
+ tar_pose_6d = rc.matrix_to_rotation_6d(tar_pose_6d).reshape(bs, n, 55*6)
199
+ latent_all = torch.cat([tar_pose_6d, tar_trans, tar_contact], dim=-1)
200
+ # print(tar_index_value_upper_top.shape, index_in.shape)
201
+ return {
202
+ "tar_pose_jaw": tar_pose_jaw,
203
+ "tar_pose_face": tar_pose_face,
204
+ "tar_pose_upper": tar_pose_upper,
205
+ "tar_pose_lower": tar_pose_lower,
206
+ "tar_pose_hands": tar_pose_hands,
207
+ 'tar_pose_leg': tar_pose_leg,
208
+ "in_audio": in_audio,
209
+ "in_word": in_word,
210
+ "tar_trans": tar_trans,
211
+ "tar_exps": tar_exps,
212
+ "tar_beta": tar_beta,
213
+ "tar_pose": tar_pose,
214
+ "tar4dis": tar4dis,
215
+ "tar_index_value_face_top": tar_index_value_face_top,
216
+ "tar_index_value_upper_top": tar_index_value_upper_top,
217
+ "tar_index_value_hands_top": tar_index_value_hands_top,
218
+ "tar_index_value_lower_top": tar_index_value_lower_top,
219
+ "latent_face_top": latent_face_top,
220
+ "latent_upper_top": latent_upper_top,
221
+ "latent_hands_top": latent_hands_top,
222
+ "latent_lower_top": latent_lower_top,
223
+ "latent_in": latent_in,
224
+ "index_in": index_in,
225
+ "tar_id": tar_id,
226
+ "latent_all": latent_all,
227
+ "tar_pose_6d": tar_pose_6d,
228
+ "tar_contact": tar_contact,
229
+ }
230
+
231
+ def _g_test(self, loaded_data):
232
+ mode = 'test'
233
+ bs, n, j = loaded_data["tar_pose"].shape[0], loaded_data["tar_pose"].shape[1], self.joints
234
+ tar_pose = loaded_data["tar_pose"]
235
+ tar_beta = loaded_data["tar_beta"]
236
+ in_word = loaded_data["in_word"]
237
+ tar_exps = loaded_data["tar_exps"]
238
+ tar_contact = loaded_data["tar_contact"]
239
+ in_audio = loaded_data["in_audio"]
240
+ tar_trans = loaded_data["tar_trans"]
241
+
242
+ remain = n%8
243
+ if remain != 0:
244
+ tar_pose = tar_pose[:, :-remain, :]
245
+ tar_beta = tar_beta[:, :-remain, :]
246
+ tar_trans = tar_trans[:, :-remain, :]
247
+ in_word = in_word[:, :-remain]
248
+ tar_exps = tar_exps[:, :-remain, :]
249
+ tar_contact = tar_contact[:, :-remain, :]
250
+ n = n - remain
251
+
252
+ tar_pose_jaw = tar_pose[:, :, 66:69]
253
+ tar_pose_jaw = rc.axis_angle_to_matrix(tar_pose_jaw.reshape(bs, n, 1, 3))
254
+ tar_pose_jaw = rc.matrix_to_rotation_6d(tar_pose_jaw).reshape(bs, n, 1*6)
255
+ tar_pose_face = torch.cat([tar_pose_jaw, tar_exps], dim=2)
256
+
257
+ tar_pose_hands = tar_pose[:, :, 25*3:55*3]
258
+ tar_pose_hands = rc.axis_angle_to_matrix(tar_pose_hands.reshape(bs, n, 30, 3))
259
+ tar_pose_hands = rc.matrix_to_rotation_6d(tar_pose_hands).reshape(bs, n, 30*6)
260
+
261
+ tar_pose_upper = tar_pose[:, :, self.joint_mask_upper.astype(bool)]
262
+ tar_pose_upper = rc.axis_angle_to_matrix(tar_pose_upper.reshape(bs, n, 13, 3))
263
+ tar_pose_upper = rc.matrix_to_rotation_6d(tar_pose_upper).reshape(bs, n, 13*6)
264
+
265
+ tar_pose_leg = tar_pose[:, :, self.joint_mask_lower.astype(bool)]
266
+ tar_pose_leg = rc.axis_angle_to_matrix(tar_pose_leg.reshape(bs, n, 9, 3))
267
+ tar_pose_leg = rc.matrix_to_rotation_6d(tar_pose_leg).reshape(bs, n, 9*6)
268
+ tar_pose_lower = torch.cat([tar_pose_leg, tar_trans, tar_contact], dim=2)
269
+
270
+ tar_pose_6d = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, 55, 3))
271
+ tar_pose_6d = rc.matrix_to_rotation_6d(tar_pose_6d).reshape(bs, n, 55*6)
272
+ latent_all = torch.cat([tar_pose_6d, tar_trans, tar_contact], dim=-1)
273
+
274
+ rec_index_all_face = []
275
+ rec_index_all_upper = []
276
+ rec_index_all_lower = []
277
+ rec_index_all_hands = []
278
+
279
+ roundt = (n - self.args.pre_frames) // (self.args.pose_length - self.args.pre_frames)
280
+ remain = (n - self.args.pre_frames) % (self.args.pose_length - self.args.pre_frames)
281
+ round_l = self.args.pose_length - self.args.pre_frames
282
+
283
+ for i in range(0, roundt):
284
+ in_word_tmp = in_word[:, i*(round_l):(i+1)*(round_l)+self.args.pre_frames]
285
+ # audio fps is 16000 and pose fps is 30
286
+ in_audio_tmp = in_audio[:, i*(16000//30*round_l):(i+1)*(16000//30*round_l)+16000//30*self.args.pre_frames]
287
+ in_id_tmp = loaded_data['tar_id'][:, i*(round_l):(i+1)*(round_l)+self.args.pre_frames]
288
+ mask_val = torch.ones(bs, self.args.pose_length, self.args.pose_dims+3+4).float().cuda()
289
+ mask_val[:, :self.args.pre_frames, :] = 0.0
290
+ if i == 0:
291
+ latent_all_tmp = latent_all[:, i*(round_l):(i+1)*(round_l)+self.args.pre_frames, :]
292
+ else:
293
+ latent_all_tmp = latent_all[:, i*(round_l):(i+1)*(round_l)+self.args.pre_frames, :]
294
+ # print(latent_all_tmp.shape, latent_last.shape)
295
+ latent_all_tmp[:, :self.args.pre_frames, :] = latent_last[:, -self.args.pre_frames:, :]
296
+
297
+ net_out_val = self.model(
298
+ in_audio = in_audio_tmp,
299
+ in_word=in_word_tmp,
300
+ mask=mask_val,
301
+ in_motion = latent_all_tmp,
302
+ in_id = in_id_tmp,
303
+ use_attentions=True,)
304
+
305
+ if self.args.cu != 0:
306
+ rec_index_upper = self.log_softmax(net_out_val["cls_upper"]).reshape(-1, self.args.vae_codebook_size)
307
+ _, rec_index_upper = torch.max(rec_index_upper.reshape(-1, self.args.pose_length, self.args.vae_codebook_size), dim=2)
308
+ #rec_upper = self.vq_model_upper.decode(rec_index_upper)
309
+ else:
310
+ _, rec_index_upper, _, _ = self.vq_model_upper.quantizer(net_out_val["rec_upper"])
311
+ #rec_upper = self.vq_model_upper.decoder(rec_index_upper)
312
+ if self.args.cl != 0:
313
+ rec_index_lower = self.log_softmax(net_out_val["cls_lower"]).reshape(-1, self.args.vae_codebook_size)
314
+ _, rec_index_lower = torch.max(rec_index_lower.reshape(-1, self.args.pose_length, self.args.vae_codebook_size), dim=2)
315
+ #rec_lower = self.vq_model_lower.decode(rec_index_lower)
316
+ else:
317
+ _, rec_index_lower, _, _ = self.vq_model_lower.quantizer(net_out_val["rec_lower"])
318
+ #rec_lower = self.vq_model_lower.decoder(rec_index_lower)
319
+ if self.args.ch != 0:
320
+ rec_index_hands = self.log_softmax(net_out_val["cls_hands"]).reshape(-1, self.args.vae_codebook_size)
321
+ _, rec_index_hands = torch.max(rec_index_hands.reshape(-1, self.args.pose_length, self.args.vae_codebook_size), dim=2)
322
+ #rec_hands = self.vq_model_hands.decode(rec_index_hands)
323
+ else:
324
+ _, rec_index_hands, _, _ = self.vq_model_hands.quantizer(net_out_val["rec_hands"])
325
+ #rec_hands = self.vq_model_hands.decoder(rec_index_hands)
326
+ if self.args.cf != 0:
327
+ rec_index_face = self.log_softmax(net_out_val["cls_face"]).reshape(-1, self.args.vae_codebook_size)
328
+ _, rec_index_face = torch.max(rec_index_face.reshape(-1, self.args.pose_length, self.args.vae_codebook_size), dim=2)
329
+ #rec_face = self.vq_model_face.decoder(rec_index_face)
330
+ else:
331
+ _, rec_index_face, _, _ = self.vq_model_face.quantizer(net_out_val["rec_face"])
332
+ #rec_face = self.vq_model_face.decoder(rec_index_face)
333
+
334
+ if i == 0:
335
+ rec_index_all_face.append(rec_index_face)
336
+ rec_index_all_upper.append(rec_index_upper)
337
+ rec_index_all_lower.append(rec_index_lower)
338
+ rec_index_all_hands.append(rec_index_hands)
339
+ else:
340
+ rec_index_all_face.append(rec_index_face[:, self.args.pre_frames:])
341
+ rec_index_all_upper.append(rec_index_upper[:, self.args.pre_frames:])
342
+ rec_index_all_lower.append(rec_index_lower[:, self.args.pre_frames:])
343
+ rec_index_all_hands.append(rec_index_hands[:, self.args.pre_frames:])
344
+
345
+ if self.args.cu != 0:
346
+ rec_upper_last = self.vq_model_upper.decode(rec_index_upper)
347
+ else:
348
+ rec_upper_last = self.vq_model_upper.decoder(rec_index_upper)
349
+ if self.args.cl != 0:
350
+ rec_lower_last = self.vq_model_lower.decode(rec_index_lower)
351
+ else:
352
+ rec_lower_last = self.vq_model_lower.decoder(rec_index_lower)
353
+ if self.args.ch != 0:
354
+ rec_hands_last = self.vq_model_hands.decode(rec_index_hands)
355
+ else:
356
+ rec_hands_last = self.vq_model_hands.decoder(rec_index_hands)
357
+ # if self.args.cf != 0:
358
+ # rec_face_last = self.vq_model_face.decode(rec_index_face)
359
+ # else:
360
+ # rec_face_last = self.vq_model_face.decoder(rec_index_face)
361
+
362
+ rec_pose_legs = rec_lower_last[:, :, :54]
363
+ bs, n = rec_pose_legs.shape[0], rec_pose_legs.shape[1]
364
+ rec_pose_upper = rec_upper_last.reshape(bs, n, 13, 6)
365
+ rec_pose_upper = rc.rotation_6d_to_matrix(rec_pose_upper)#
366
+ rec_pose_upper = rc.matrix_to_axis_angle(rec_pose_upper).reshape(bs*n, 13*3)
367
+ rec_pose_upper_recover = self.inverse_selection_tensor(rec_pose_upper, self.joint_mask_upper, bs*n)
368
+ rec_pose_lower = rec_pose_legs.reshape(bs, n, 9, 6)
369
+ rec_pose_lower = rc.rotation_6d_to_matrix(rec_pose_lower)
370
+ rec_pose_lower = rc.matrix_to_axis_angle(rec_pose_lower).reshape(bs*n, 9*3)
371
+ rec_pose_lower_recover = self.inverse_selection_tensor(rec_pose_lower, self.joint_mask_lower, bs*n)
372
+ rec_pose_hands = rec_hands_last.reshape(bs, n, 30, 6)
373
+ rec_pose_hands = rc.rotation_6d_to_matrix(rec_pose_hands)
374
+ rec_pose_hands = rc.matrix_to_axis_angle(rec_pose_hands).reshape(bs*n, 30*3)
375
+ rec_pose_hands_recover = self.inverse_selection_tensor(rec_pose_hands, self.joint_mask_hands, bs*n)
376
+ rec_pose = rec_pose_upper_recover + rec_pose_lower_recover + rec_pose_hands_recover
377
+ rec_pose = rc.axis_angle_to_matrix(rec_pose.reshape(bs, n, j, 3))
378
+ rec_pose = rc.matrix_to_rotation_6d(rec_pose).reshape(bs, n, j*6)
379
+ rec_trans_v_s = rec_lower_last[:, :, 54:57]
380
+ rec_x_trans = other_tools.velocity2position(rec_trans_v_s[:, :, 0:1], 1/self.args.pose_fps, tar_trans[:, 0, 0:1])
381
+ rec_z_trans = other_tools.velocity2position(rec_trans_v_s[:, :, 2:3], 1/self.args.pose_fps, tar_trans[:, 0, 2:3])
382
+ rec_y_trans = rec_trans_v_s[:,:,1:2]
383
+ rec_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
384
+ latent_last = torch.cat([rec_pose, rec_trans, rec_lower_last[:, :, 57:61]], dim=-1)
385
+
386
+ rec_index_face = torch.cat(rec_index_all_face, dim=1)
387
+ rec_index_upper = torch.cat(rec_index_all_upper, dim=1)
388
+ rec_index_lower = torch.cat(rec_index_all_lower, dim=1)
389
+ rec_index_hands = torch.cat(rec_index_all_hands, dim=1)
390
+ if self.args.cu != 0:
391
+ rec_upper = self.vq_model_upper.decode(rec_index_upper)
392
+ else:
393
+ rec_upper = self.vq_model_upper.decoder(rec_index_upper)
394
+ if self.args.cl != 0:
395
+ rec_lower = self.vq_model_lower.decode(rec_index_lower)
396
+ else:
397
+ rec_lower = self.vq_model_lower.decoder(rec_index_lower)
398
+ if self.args.ch != 0:
399
+ rec_hands = self.vq_model_hands.decode(rec_index_hands)
400
+ else:
401
+ rec_hands = self.vq_model_hands.decoder(rec_index_hands)
402
+ if self.args.cf != 0:
403
+ rec_face = self.vq_model_face.decode(rec_index_face)
404
+ else:
405
+ rec_face = self.vq_model_face.decoder(rec_index_face)
406
+
407
+ rec_exps = rec_face[:, :, 6:]
408
+ rec_pose_jaw = rec_face[:, :, :6]
409
+ rec_pose_legs = rec_lower[:, :, :54]
410
+ bs, n = rec_pose_jaw.shape[0], rec_pose_jaw.shape[1]
411
+ rec_pose_upper = rec_upper.reshape(bs, n, 13, 6)
412
+ rec_pose_upper = rc.rotation_6d_to_matrix(rec_pose_upper)#
413
+ rec_pose_upper = rc.matrix_to_axis_angle(rec_pose_upper).reshape(bs*n, 13*3)
414
+ rec_pose_upper_recover = self.inverse_selection_tensor(rec_pose_upper, self.joint_mask_upper, bs*n)
415
+ rec_pose_lower = rec_pose_legs.reshape(bs, n, 9, 6)
416
+ rec_pose_lower = rc.rotation_6d_to_matrix(rec_pose_lower)
417
+ rec_lower2global = rc.matrix_to_rotation_6d(rec_pose_lower.clone()).reshape(bs, n, 9*6)
418
+ rec_pose_lower = rc.matrix_to_axis_angle(rec_pose_lower).reshape(bs*n, 9*3)
419
+ rec_pose_lower_recover = self.inverse_selection_tensor(rec_pose_lower, self.joint_mask_lower, bs*n)
420
+ rec_pose_hands = rec_hands.reshape(bs, n, 30, 6)
421
+ rec_pose_hands = rc.rotation_6d_to_matrix(rec_pose_hands)
422
+ rec_pose_hands = rc.matrix_to_axis_angle(rec_pose_hands).reshape(bs*n, 30*3)
423
+ rec_pose_hands_recover = self.inverse_selection_tensor(rec_pose_hands, self.joint_mask_hands, bs*n)
424
+ rec_pose_jaw = rec_pose_jaw.reshape(bs*n, 6)
425
+ rec_pose_jaw = rc.rotation_6d_to_matrix(rec_pose_jaw)
426
+ rec_pose_jaw = rc.matrix_to_axis_angle(rec_pose_jaw).reshape(bs*n, 1*3)
427
+ rec_pose = rec_pose_upper_recover + rec_pose_lower_recover + rec_pose_hands_recover
428
+ rec_pose[:, 66:69] = rec_pose_jaw
429
+
430
+ to_global = rec_lower
431
+ to_global[:, :, 54:57] = 0.0
432
+ to_global[:, :, :54] = rec_lower2global
433
+ rec_global = self.global_motion(to_global)
434
+
435
+ rec_trans_v_s = rec_global["rec_pose"][:, :, 54:57]
436
+ rec_x_trans = other_tools.velocity2position(rec_trans_v_s[:, :, 0:1], 1/self.args.pose_fps, tar_trans[:, 0, 0:1])
437
+ rec_z_trans = other_tools.velocity2position(rec_trans_v_s[:, :, 2:3], 1/self.args.pose_fps, tar_trans[:, 0, 2:3])
438
+ rec_y_trans = rec_trans_v_s[:,:,1:2]
439
+ rec_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
440
+ tar_pose = tar_pose[:, :n, :]
441
+ tar_exps = tar_exps[:, :n, :]
442
+ tar_trans = tar_trans[:, :n, :]
443
+ tar_beta = tar_beta[:, :n, :]
444
+
445
+ rec_pose = rc.axis_angle_to_matrix(rec_pose.reshape(bs*n, j, 3))
446
+ rec_pose = rc.matrix_to_rotation_6d(rec_pose).reshape(bs, n, j*6)
447
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs*n, j, 3))
448
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
449
+
450
+ return {
451
+ 'rec_pose': rec_pose,
452
+ 'rec_trans': rec_trans,
453
+ 'tar_pose': tar_pose,
454
+ 'tar_exps': tar_exps,
455
+ 'tar_beta': tar_beta,
456
+ 'tar_trans': tar_trans,
457
+ 'rec_exps': rec_exps,
458
+ }
459
+
460
+
461
+ def test_demo(self, epoch):
462
+ '''
463
+ input audio and text, output motion
464
+ do not calculate loss and metric
465
+ save video
466
+ '''
467
+ results_save_path = self.checkpoint_path + f"/{epoch}/"
468
+ if os.path.exists(results_save_path):
469
+ return 0
470
+ os.makedirs(results_save_path)
471
+ start_time = time.time()
472
+ total_length = 0
473
+ test_seq_list = self.test_data.selected_file
474
+ align = 0
475
+ latent_out = []
476
+ latent_ori = []
477
+ l2_all = 0
478
+ lvel = 0
479
+ self.model.eval()
480
+ self.smplx.eval()
481
+ # self.eval_copy.eval()
482
+ with torch.no_grad():
483
+ for its, batch_data in enumerate(self.test_loader):
484
+ loaded_data = self._load_data(batch_data)
485
+ net_out = self._g_test(loaded_data)
486
+ tar_pose = net_out['tar_pose']
487
+ rec_pose = net_out['rec_pose']
488
+ tar_exps = net_out['tar_exps']
489
+ tar_beta = net_out['tar_beta']
490
+ rec_trans = net_out['rec_trans']
491
+ tar_trans = net_out['tar_trans']
492
+ rec_exps = net_out['rec_exps']
493
+ # print(rec_pose.shape, tar_pose.shape)
494
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
495
+
496
+ # interpolate to 30fps
497
+ if (30/self.args.pose_fps) != 1:
498
+ assert 30%self.args.pose_fps == 0
499
+ n *= int(30/self.args.pose_fps)
500
+ tar_pose = torch.nn.functional.interpolate(tar_pose.permute(0, 2, 1), scale_factor=30/self.args.pose_fps, mode='linear').permute(0,2,1)
501
+ rec_pose = torch.nn.functional.interpolate(rec_pose.permute(0, 2, 1), scale_factor=30/self.args.pose_fps, mode='linear').permute(0,2,1)
502
+
503
+ # print(rec_pose.shape, tar_pose.shape)
504
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose.reshape(bs*n, j, 6))
505
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
506
+
507
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs*n, j, 6))
508
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
509
+
510
+ tar_pose_np = tar_pose.detach().cpu().numpy()
511
+ rec_pose_np = rec_pose.detach().cpu().numpy()
512
+ rec_trans_np = rec_trans.detach().cpu().numpy().reshape(bs*n, 3)
513
+ rec_exp_np = rec_exps.detach().cpu().numpy().reshape(bs*n, 100)
514
+ tar_exp_np = tar_exps.detach().cpu().numpy().reshape(bs*n, 100)
515
+ tar_trans_np = tar_trans.detach().cpu().numpy().reshape(bs*n, 3)
516
+
517
+ gt_npz = np.load(self.args.data_path+self.args.pose_rep +"/"+test_seq_list.iloc[its]['id']+".npz", allow_pickle=True)
518
+ np.savez(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
519
+ betas=gt_npz["betas"],
520
+ poses=tar_pose_np,
521
+ expressions=tar_exp_np,
522
+ trans=tar_trans_np,
523
+ model='smplx2020',
524
+ gender='neutral',
525
+ mocap_frame_rate = 30 ,
526
+ )
527
+ np.savez(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
528
+ betas=gt_npz["betas"],
529
+ poses=rec_pose_np,
530
+ expressions=rec_exp_np,
531
+ trans=rec_trans_np,
532
+ model='smplx2020',
533
+ gender='neutral',
534
+ mocap_frame_rate = 30,
535
+ )
536
+ total_length += n
537
+ # other_tools.render_one_sequence(
538
+ # results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
539
+ # results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
540
+ # results_save_path,
541
+ # self.args.data_path+"wave16k/"+test_seq_list.iloc[its]['id']+".wav",
542
+ # self.args.data_path_1+"smplx_models/",
543
+ # use_matplotlib = False,
544
+ # args = self.args,
545
+ # )
546
+ end_time = time.time() - start_time
547
+ logger.info(f"total inference time: {int(end_time)} s for {int(total_length/self.args.pose_fps)} s motion")
548
+
549
+ @logger.catch
550
+ def main_worker(rank, world_size, args):
551
+ #os.environ['TRANSFORMERS_CACHE'] = args.data_path_1 + "hub/"
552
+ if not sys.warnoptions:
553
+ warnings.simplefilter("ignore")
554
+ dist.init_process_group(backend="nccl", rank=rank, world_size=world_size)
555
+
556
+ logger_tools.set_args_and_logger(args, rank)
557
+ other_tools.set_random_seed(args)
558
+ other_tools.print_exp_info(args)
559
+
560
+ # return one intance of trainer
561
+ other_tools.write_wav_names_to_csv(args.data_path, args.data_path+"test.csv")
562
+ trainer = BaseTrainer(args)
563
+ other_tools.load_checkpoints(trainer.model, args.test_ckpt, args.g_name)
564
+ trainer.test_demo(999)
565
+
566
+
567
+
568
+ if __name__ == "__main__":
569
+ os.environ["MASTER_ADDR"]='127.0.0.1'
570
+ os.environ["MASTER_PORT"]='8675'
571
+ #os.environ["TORCH_DISTRIBUTED_DEBUG"] = "DETAIL"
572
+ args = config.parse_args()
573
+ if args.ddp:
574
+ mp.set_start_method("spawn", force=True)
575
+ mp.spawn(
576
+ main_worker,
577
+ args=(len(args.gpus), args,),
578
+ nprocs=len(args.gpus),
579
+ )
580
+ else:
581
+ main_worker(0, 1, args)
EMAGE/emage_audio_175.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b19f845300e7f52c77eddfb6307f48c8fd2766edada3efa8ad1973a87990c1ea
3
+ size 556333206
EMAGE/pretrained_vq/.DS_Store ADDED
Binary file (6.15 kB). View file
 
EMAGE/pretrained_vq/hands_vertex_1layer_710.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1595a13fbdf38b95da2baf6a4ba9f0c62cd6af8b8f537da12c1c90321affa3b3
3
+ size 9644516
EMAGE/pretrained_vq/last_1700_foot.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f293265b828c6b45e12068c9b7956283c92b40cfdc9dd56ae960bbeb7bba1ad6
3
+ size 14611444
EMAGE/pretrained_vq/last_790_face_v2.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:13ff79afef2c3209804c0cae2b9a7c467c1a39268efa87a637e860b8e6b1b4c0
3
+ size 8935204
EMAGE/pretrained_vq/lower_foot_600.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0e323ed5f7014957433b59249497188656811b76952d666eae5f4affdc341786
3
+ size 14873924
EMAGE/pretrained_vq/upper_vertex_1layer_710.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:58ffcb34ff18f3aeaf53898980ef623ea9ce36f0302a005b5f95ceef1a206a8f
3
+ size 8701092
EMAGE/smplx_models/.DS_Store ADDED
Binary file (6.15 kB). View file
 
EMAGE/smplx_models/smplx/SMPLX_NEUTRAL_2020.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bdf06146e27d92022fe5dadad3b9203373f6879eca8e4d8235359ee3ec6a5a74
3
+ size 167264530
EMAGE/test_sequences/smplxflame_30/2_scott_0_1_1.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:37b112fd59fcabb09270d6ca3c74e7459cc5b9729564bcacf1f75609f3999592
3
+ size 2831524
EMAGE/test_sequences/smplxflame_30/2_scott_0_2_2.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5875f768aa4600af7d767625e0d87941b1cca9555855d8c6b509004116790f7d
3
+ size 2754356
EMAGE/test_sequences/smplxflame_30/2_scott_0_3_3.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:23ace88c7ff0288af83cc30d2428e0cb70c3d92bce981a67a5811cd53ab96db4
3
+ size 3021476
EMAGE/test_sequences/smplxflame_30/2_scott_0_4_4.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ede3993db9565b7b3a945532def69d617d6b2338f488a746a7be998f3b0685d8
3
+ size 2976956
EMAGE/test_sequences/test.csv ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ id,type
2
+ 2_scott_0_3_3,test
3
+ 2_scott_0_2_2,test
4
+ 2_scott_0_1_1,test
5
+ 2_scott_0_4_4,test
EMAGE/test_sequences/textgrid/2_scott_0_1_1.TextGrid ADDED
@@ -0,0 +1,3636 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ File type = "ooTextFile"
2
+ Object class = "TextGrid"
3
+
4
+ xmin = 0
5
+ xmax = 64.097375
6
+ tiers? <exists>
7
+ size = 2
8
+ item []:
9
+ item [1]:
10
+ class = "IntervalTier"
11
+ name = "words"
12
+ xmin = 0
13
+ xmax = 64.097375
14
+ intervals: size = 220
15
+ intervals [1]:
16
+ xmin = 0
17
+ xmax = 1.42
18
+ text = ""
19
+ intervals [2]:
20
+ xmin = 1.42
21
+ xmax = 1.52
22
+ text = "the"
23
+ intervals [3]:
24
+ xmin = 1.52
25
+ xmax = 1.78
26
+ text = "first"
27
+ intervals [4]:
28
+ xmin = 1.78
29
+ xmax = 1.97
30
+ text = "thing"
31
+ intervals [5]:
32
+ xmin = 1.97
33
+ xmax = 2.04
34
+ text = "i"
35
+ intervals [6]:
36
+ xmin = 2.04
37
+ xmax = 2.21
38
+ text = "like"
39
+ intervals [7]:
40
+ xmin = 2.21
41
+ xmax = 2.28
42
+ text = "to"
43
+ intervals [8]:
44
+ xmin = 2.28
45
+ xmax = 2.47
46
+ text = "do"
47
+ intervals [9]:
48
+ xmin = 2.47
49
+ xmax = 2.63
50
+ text = "on"
51
+ intervals [10]:
52
+ xmin = 2.63
53
+ xmax = 3.32
54
+ text = "weekends"
55
+ intervals [11]:
56
+ xmin = 3.32
57
+ xmax = 3.58
58
+ text = "is"
59
+ intervals [12]:
60
+ xmin = 3.58
61
+ xmax = 4.41
62
+ text = "relaxing"
63
+ intervals [13]:
64
+ xmin = 4.41
65
+ xmax = 4.52
66
+ text = ""
67
+ intervals [14]:
68
+ xmin = 4.52
69
+ xmax = 5.05
70
+ text = "and"
71
+ intervals [15]:
72
+ xmin = 5.05
73
+ xmax = 5.14
74
+ text = "i"
75
+ intervals [16]:
76
+ xmin = 5.14
77
+ xmax = 5.33
78
+ text = "think"
79
+ intervals [17]:
80
+ xmin = 5.33
81
+ xmax = 5.41
82
+ text = "i'll"
83
+ intervals [18]:
84
+ xmin = 5.41
85
+ xmax = 5.5
86
+ text = "go"
87
+ intervals [19]:
88
+ xmin = 5.5
89
+ xmax = 6
90
+ text = "shopping"
91
+ intervals [20]:
92
+ xmin = 6
93
+ xmax = 6.11
94
+ text = "if"
95
+ intervals [21]:
96
+ xmin = 6.11
97
+ xmax = 6.29
98
+ text = "i'm"
99
+ intervals [22]:
100
+ xmin = 6.29
101
+ xmax = 6.54
102
+ text = "not"
103
+ intervals [23]:
104
+ xmin = 6.54
105
+ xmax = 6.7
106
+ text = "that"
107
+ intervals [24]:
108
+ xmin = 6.7
109
+ xmax = 7.19
110
+ text = "tired"
111
+ intervals [25]:
112
+ xmin = 7.19
113
+ xmax = 7.45
114
+ text = ""
115
+ intervals [26]:
116
+ xmin = 7.45
117
+ xmax = 7.62
118
+ text = "so"
119
+ intervals [27]:
120
+ xmin = 7.62
121
+ xmax = 7.74
122
+ text = "that"
123
+ intervals [28]:
124
+ xmin = 7.74
125
+ xmax = 7.85
126
+ text = "you"
127
+ intervals [29]:
128
+ xmin = 7.85
129
+ xmax = 8.14
130
+ text = "started"
131
+ intervals [30]:
132
+ xmin = 8.14
133
+ xmax = 8.24
134
+ text = "by"
135
+ intervals [31]:
136
+ xmin = 8.24
137
+ xmax = 8.52
138
+ text = "job"
139
+ intervals [32]:
140
+ xmin = 8.52
141
+ xmax = 8.59
142
+ text = "i"
143
+ intervals [33]:
144
+ xmin = 8.59
145
+ xmax = 8.75
146
+ text = "think"
147
+ intervals [34]:
148
+ xmin = 8.75
149
+ xmax = 8.88
150
+ text = "it's"
151
+ intervals [35]:
152
+ xmin = 8.88
153
+ xmax = 9.35
154
+ text = "very"
155
+ intervals [36]:
156
+ xmin = 9.35
157
+ xmax = 9.8
158
+ text = "important"
159
+ intervals [37]:
160
+ xmin = 9.8
161
+ xmax = 9.87
162
+ text = "to"
163
+ intervals [38]:
164
+ xmin = 9.87
165
+ xmax = 9.99
166
+ text = "get"
167
+ intervals [39]:
168
+ xmin = 9.99
169
+ xmax = 10.03
170
+ text = "a"
171
+ intervals [40]:
172
+ xmin = 10.03
173
+ xmax = 10.17
174
+ text = "good"
175
+ intervals [41]:
176
+ xmin = 10.17
177
+ xmax = 10.56
178
+ text = "sleep"
179
+ intervals [42]:
180
+ xmin = 10.56
181
+ xmax = 11.14
182
+ text = "during"
183
+ intervals [43]:
184
+ xmin = 11.14
185
+ xmax = 11.32
186
+ text = "your"
187
+ intervals [44]:
188
+ xmin = 11.32
189
+ xmax = 11.77
190
+ text = "weekend"
191
+ intervals [45]:
192
+ xmin = 11.77
193
+ xmax = 12.4
194
+ text = "because"
195
+ intervals [46]:
196
+ xmin = 12.4
197
+ xmax = 12.95
198
+ text = "when"
199
+ intervals [47]:
200
+ xmin = 12.95
201
+ xmax = 13.04
202
+ text = "you"
203
+ intervals [48]:
204
+ xmin = 13.04
205
+ xmax = 13.19
206
+ text = "have"
207
+ intervals [49]:
208
+ xmin = 13.19
209
+ xmax = 13.27
210
+ text = "to"
211
+ intervals [50]:
212
+ xmin = 13.27
213
+ xmax = 13.44
214
+ text = "work"
215
+ intervals [51]:
216
+ xmin = 13.44
217
+ xmax = 13.58
218
+ text = "on"
219
+ intervals [52]:
220
+ xmin = 13.58
221
+ xmax = 13.96
222
+ text = "monday"
223
+ intervals [53]:
224
+ xmin = 13.96
225
+ xmax = 14.1
226
+ text = "through"
227
+ intervals [54]:
228
+ xmin = 14.1
229
+ xmax = 14.75
230
+ text = "friday"
231
+ intervals [55]:
232
+ xmin = 14.75
233
+ xmax = 15.41
234
+ text = ""
235
+ intervals [56]:
236
+ xmin = 15.41
237
+ xmax = 15.53
238
+ text = "the"
239
+ intervals [57]:
240
+ xmin = 15.53
241
+ xmax = 15.75
242
+ text = "whole"
243
+ intervals [58]:
244
+ xmin = 15.75
245
+ xmax = 16.09
246
+ text = "week"
247
+ intervals [59]:
248
+ xmin = 16.09
249
+ xmax = 16.28
250
+ text = ""
251
+ intervals [60]:
252
+ xmin = 16.28
253
+ xmax = 16.42
254
+ text = "you"
255
+ intervals [61]:
256
+ xmin = 16.42
257
+ xmax = 16.49
258
+ text = "are"
259
+ intervals [62]:
260
+ xmin = 16.49
261
+ xmax = 16.73
262
+ text = "very"
263
+ intervals [63]:
264
+ xmin = 16.73
265
+ xmax = 17.59
266
+ text = "tired"
267
+ intervals [64]:
268
+ xmin = 17.59
269
+ xmax = 17.83
270
+ text = ""
271
+ intervals [65]:
272
+ xmin = 17.83
273
+ xmax = 18.29
274
+ text = "so"
275
+ intervals [66]:
276
+ xmin = 18.29
277
+ xmax = 18.55
278
+ text = "getting"
279
+ intervals [67]:
280
+ xmin = 18.55
281
+ xmax = 18.61
282
+ text = "a"
283
+ intervals [68]:
284
+ xmin = 18.61
285
+ xmax = 18.78
286
+ text = "good"
287
+ intervals [69]:
288
+ xmin = 18.78
289
+ xmax = 19.08
290
+ text = "rest"
291
+ intervals [70]:
292
+ xmin = 19.08
293
+ xmax = 19.21
294
+ text = "is"
295
+ intervals [71]:
296
+ xmin = 19.21
297
+ xmax = 19.3
298
+ text = "as"
299
+ intervals [72]:
300
+ xmin = 19.3
301
+ xmax = 19.77
302
+ text = "important"
303
+ intervals [73]:
304
+ xmin = 19.77
305
+ xmax = 20.16
306
+ text = "as"
307
+ intervals [74]:
308
+ xmin = 20.16
309
+ xmax = 20.3
310
+ text = ""
311
+ intervals [75]:
312
+ xmin = 20.3
313
+ xmax = 20.66
314
+ text = "complain"
315
+ intervals [76]:
316
+ xmin = 20.66
317
+ xmax = 20.75
318
+ text = "to"
319
+ intervals [77]:
320
+ xmin = 20.75
321
+ xmax = 21.09
322
+ text = "jaw"
323
+ intervals [78]:
324
+ xmin = 21.09
325
+ xmax = 21.3
326
+ text = "or"
327
+ intervals [79]:
328
+ xmin = 21.3
329
+ xmax = 21.79
330
+ text = "completing"
331
+ intervals [80]:
332
+ xmin = 21.79
333
+ xmax = 21.9
334
+ text = "an"
335
+ intervals [81]:
336
+ xmin = 21.9
337
+ xmax = 22.23
338
+ text = "excellent"
339
+ intervals [82]:
340
+ xmin = 22.23
341
+ xmax = 22.64
342
+ text = "job"
343
+ intervals [83]:
344
+ xmin = 22.64
345
+ xmax = 23.04
346
+ text = ""
347
+ intervals [84]:
348
+ xmin = 23.04
349
+ xmax = 23.17
350
+ text = "in"
351
+ intervals [85]:
352
+ xmin = 23.17
353
+ xmax = 23.29
354
+ text = "my"
355
+ intervals [86]:
356
+ xmin = 23.29
357
+ xmax = 23.56
358
+ text = "spare"
359
+ intervals [87]:
360
+ xmin = 23.56
361
+ xmax = 23.8
362
+ text = "time"
363
+ intervals [88]:
364
+ xmin = 23.8
365
+ xmax = 23.88
366
+ text = "if"
367
+ intervals [89]:
368
+ xmin = 23.88
369
+ xmax = 23.98
370
+ text = "i"
371
+ intervals [90]:
372
+ xmin = 23.98
373
+ xmax = 24.18
374
+ text = "feel"
375
+ intervals [91]:
376
+ xmin = 24.18
377
+ xmax = 24.84
378
+ text = "okay"
379
+ intervals [92]:
380
+ xmin = 24.84
381
+ xmax = 25.07
382
+ text = "i"
383
+ intervals [93]:
384
+ xmin = 25.07
385
+ xmax = 25.1
386
+ text = ""
387
+ intervals [94]:
388
+ xmin = 25.1
389
+ xmax = 25.38
390
+ text = "like"
391
+ intervals [95]:
392
+ xmin = 25.38
393
+ xmax = 25.44
394
+ text = "to"
395
+ intervals [96]:
396
+ xmin = 25.44
397
+ xmax = 25.55
398
+ text = "go"
399
+ intervals [97]:
400
+ xmin = 25.55
401
+ xmax = 25.79
402
+ text = "for"
403
+ intervals [98]:
404
+ xmin = 25.79
405
+ xmax = 25.83
406
+ text = "a"
407
+ intervals [99]:
408
+ xmin = 25.83
409
+ xmax = 26.12
410
+ text = "hike"
411
+ intervals [100]:
412
+ xmin = 26.12
413
+ xmax = 26.21
414
+ text = "in"
415
+ intervals [101]:
416
+ xmin = 26.21
417
+ xmax = 26.81
418
+ text = "nature"
419
+ intervals [102]:
420
+ xmin = 26.81
421
+ xmax = 27.11
422
+ text = ""
423
+ intervals [103]:
424
+ xmin = 27.11
425
+ xmax = 27.45
426
+ text = "sometimes"
427
+ intervals [104]:
428
+ xmin = 27.45
429
+ xmax = 27.51
430
+ text = "i"
431
+ intervals [105]:
432
+ xmin = 27.51
433
+ xmax = 27.74
434
+ text = "try"
435
+ intervals [106]:
436
+ xmin = 27.74
437
+ xmax = 27.88
438
+ text = "to"
439
+ intervals [107]:
440
+ xmin = 27.88
441
+ xmax = 28.37
442
+ text = "organize"
443
+ intervals [108]:
444
+ xmin = 28.37
445
+ xmax = 28.94
446
+ text = "something"
447
+ intervals [109]:
448
+ xmin = 28.94
449
+ xmax = 28.98
450
+ text = ""
451
+ intervals [110]:
452
+ xmin = 28.98
453
+ xmax = 29.19
454
+ text = "for"
455
+ intervals [111]:
456
+ xmin = 29.19
457
+ xmax = 29.32
458
+ text = "my"
459
+ intervals [112]:
460
+ xmin = 29.32
461
+ xmax = 29.89
462
+ text = "friends"
463
+ intervals [113]:
464
+ xmin = 29.89
465
+ xmax = 29.92
466
+ text = ""
467
+ intervals [114]:
468
+ xmin = 29.92
469
+ xmax = 29.95
470
+ text = "i"
471
+ intervals [115]:
472
+ xmin = 29.95
473
+ xmax = 30.2
474
+ text = ""
475
+ intervals [116]:
476
+ xmin = 30.2
477
+ xmax = 30.73
478
+ text = "volunteer"
479
+ intervals [117]:
480
+ xmin = 30.73
481
+ xmax = 30.86
482
+ text = "at"
483
+ intervals [118]:
484
+ xmin = 30.86
485
+ xmax = 30.97
486
+ text = "the"
487
+ intervals [119]:
488
+ xmin = 30.97
489
+ xmax = 31.38
490
+ text = "buddhist"
491
+ intervals [120]:
492
+ xmin = 31.38
493
+ xmax = 31.83
494
+ text = "temple"
495
+ intervals [121]:
496
+ xmin = 31.83
497
+ xmax = 31.94
498
+ text = "on"
499
+ intervals [122]:
500
+ xmin = 31.94
501
+ xmax = 32.01
502
+ text = "the"
503
+ intervals [123]:
504
+ xmin = 32.01
505
+ xmax = 32.6
506
+ text = "weekend"
507
+ intervals [124]:
508
+ xmin = 32.6
509
+ xmax = 33.01
510
+ text = "or"
511
+ intervals [125]:
512
+ xmin = 33.01
513
+ xmax = 33.24
514
+ text = "i"
515
+ intervals [126]:
516
+ xmin = 33.24
517
+ xmax = 33.62
518
+ text = "can"
519
+ intervals [127]:
520
+ xmin = 33.62
521
+ xmax = 33.91
522
+ text = "just"
523
+ intervals [128]:
524
+ xmin = 33.91
525
+ xmax = 34.3
526
+ text = "walk"
527
+ intervals [129]:
528
+ xmin = 34.3
529
+ xmax = 34.69
530
+ text = "around"
531
+ intervals [130]:
532
+ xmin = 34.69
533
+ xmax = 35.08
534
+ text = "enjoying"
535
+ intervals [131]:
536
+ xmin = 35.08
537
+ xmax = 35.17
538
+ text = "the"
539
+ intervals [132]:
540
+ xmin = 35.17
541
+ xmax = 35.87
542
+ text = "sunshine"
543
+ intervals [133]:
544
+ xmin = 35.87
545
+ xmax = 36.15
546
+ text = ""
547
+ intervals [134]:
548
+ xmin = 36.15
549
+ xmax = 36.34
550
+ text = "i'd"
551
+ intervals [135]:
552
+ xmin = 36.34
553
+ xmax = 36.52
554
+ text = "like"
555
+ intervals [136]:
556
+ xmin = 36.52
557
+ xmax = 36.59
558
+ text = "to"
559
+ intervals [137]:
560
+ xmin = 36.59
561
+ xmax = 36.74
562
+ text = "have"
563
+ intervals [138]:
564
+ xmin = 36.74
565
+ xmax = 36.79
566
+ text = "a"
567
+ intervals [139]:
568
+ xmin = 36.79
569
+ xmax = 37.06
570
+ text = "healthy"
571
+ intervals [140]:
572
+ xmin = 37.06
573
+ xmax = 37.66
574
+ text = "lifestyle"
575
+ intervals [141]:
576
+ xmin = 37.66
577
+ xmax = 38.06
578
+ text = "considering"
579
+ intervals [142]:
580
+ xmin = 38.06
581
+ xmax = 38.17
582
+ text = "how"
583
+ intervals [143]:
584
+ xmin = 38.17
585
+ xmax = 38.38
586
+ text = "much"
587
+ intervals [144]:
588
+ xmin = 38.38
589
+ xmax = 38.74
590
+ text = "time"
591
+ intervals [145]:
592
+ xmin = 38.74
593
+ xmax = 38.81
594
+ text = "i"
595
+ intervals [146]:
596
+ xmin = 38.81
597
+ xmax = 39.18
598
+ text = "spend"
599
+ intervals [147]:
600
+ xmin = 39.18
601
+ xmax = 39.29
602
+ text = "at"
603
+ intervals [148]:
604
+ xmin = 39.29
605
+ xmax = 39.84
606
+ text = "work"
607
+ intervals [149]:
608
+ xmin = 39.84
609
+ xmax = 40.29
610
+ text = ""
611
+ intervals [150]:
612
+ xmin = 40.29
613
+ xmax = 40.52
614
+ text = "i"
615
+ intervals [151]:
616
+ xmin = 40.52
617
+ xmax = 40.79
618
+ text = "always"
619
+ intervals [152]:
620
+ xmin = 40.79
621
+ xmax = 41.28
622
+ text = "try"
623
+ intervals [153]:
624
+ xmin = 41.28
625
+ xmax = 41.47
626
+ text = "to"
627
+ intervals [154]:
628
+ xmin = 41.47
629
+ xmax = 41.85
630
+ text = "move"
631
+ intervals [155]:
632
+ xmin = 41.85
633
+ xmax = 42
634
+ text = "as"
635
+ intervals [156]:
636
+ xmin = 42
637
+ xmax = 42.22
638
+ text = "much"
639
+ intervals [157]:
640
+ xmin = 42.22
641
+ xmax = 42.31
642
+ text = "as"
643
+ intervals [158]:
644
+ xmin = 42.31
645
+ xmax = 42.4
646
+ text = "i"
647
+ intervals [159]:
648
+ xmin = 42.4
649
+ xmax = 42.76
650
+ text = "can"
651
+ intervals [160]:
652
+ xmin = 42.76
653
+ xmax = 42.89
654
+ text = "when"
655
+ intervals [161]:
656
+ xmin = 42.89
657
+ xmax = 42.98
658
+ text = "i'm"
659
+ intervals [162]:
660
+ xmin = 42.98
661
+ xmax = 43.18
662
+ text = "not"
663
+ intervals [163]:
664
+ xmin = 43.18
665
+ xmax = 43.76
666
+ text = "working"
667
+ intervals [164]:
668
+ xmin = 43.76
669
+ xmax = 44.5
670
+ text = ""
671
+ intervals [165]:
672
+ xmin = 44.5
673
+ xmax = 45.19
674
+ text = "and"
675
+ intervals [166]:
676
+ xmin = 45.19
677
+ xmax = 45.32
678
+ text = "on"
679
+ intervals [167]:
680
+ xmin = 45.32
681
+ xmax = 45.49
682
+ text = "other"
683
+ intervals [168]:
684
+ xmin = 45.49
685
+ xmax = 45.82
686
+ text = "days"
687
+ intervals [169]:
688
+ xmin = 45.82
689
+ xmax = 45.96
690
+ text = "when"
691
+ intervals [170]:
692
+ xmin = 45.96
693
+ xmax = 46.16
694
+ text = "i'm"
695
+ intervals [171]:
696
+ xmin = 46.16
697
+ xmax = 46.65
698
+ text = "free"
699
+ intervals [172]:
700
+ xmin = 46.65
701
+ xmax = 46.86
702
+ text = "i"
703
+ intervals [173]:
704
+ xmin = 46.86
705
+ xmax = 47.16
706
+ text = "like"
707
+ intervals [174]:
708
+ xmin = 47.16
709
+ xmax = 47.39
710
+ text = "to"
711
+ intervals [175]:
712
+ xmin = 47.39
713
+ xmax = 47.86
714
+ text = "listen"
715
+ intervals [176]:
716
+ xmin = 47.86
717
+ xmax = 48.03
718
+ text = "to"
719
+ intervals [177]:
720
+ xmin = 48.03
721
+ xmax = 48.41
722
+ text = "music"
723
+ intervals [178]:
724
+ xmin = 48.41
725
+ xmax = 48.73
726
+ text = "and"
727
+ intervals [179]:
728
+ xmin = 48.73
729
+ xmax = 48.76
730
+ text = ""
731
+ intervals [180]:
732
+ xmin = 48.76
733
+ xmax = 49.01
734
+ text = "we're"
735
+ intervals [181]:
736
+ xmin = 49.01
737
+ xmax = 49.3
738
+ text = "watch"
739
+ intervals [182]:
740
+ xmin = 49.3
741
+ xmax = 49.38
742
+ text = "a"
743
+ intervals [183]:
744
+ xmin = 49.38
745
+ xmax = 50.05
746
+ text = "documentary"
747
+ intervals [184]:
748
+ xmin = 50.05
749
+ xmax = 50.51
750
+ text = "movies"
751
+ intervals [185]:
752
+ xmin = 50.51
753
+ xmax = 50.82
754
+ text = "on"
755
+ intervals [186]:
756
+ xmin = 50.82
757
+ xmax = 51.11
758
+ text = "my"
759
+ intervals [187]:
760
+ xmin = 51.11
761
+ xmax = 51.81
762
+ text = "laptop"
763
+ intervals [188]:
764
+ xmin = 51.81
765
+ xmax = 52.14
766
+ text = ""
767
+ intervals [189]:
768
+ xmin = 52.14
769
+ xmax = 52.44
770
+ text = "but"
771
+ intervals [190]:
772
+ xmin = 52.44
773
+ xmax = 52.86
774
+ text = "sometimes"
775
+ intervals [191]:
776
+ xmin = 52.86
777
+ xmax = 52.93
778
+ text = "it"
779
+ intervals [192]:
780
+ xmin = 52.93
781
+ xmax = 53.13
782
+ text = "just"
783
+ intervals [193]:
784
+ xmin = 53.13
785
+ xmax = 53.61
786
+ text = "sleep"
787
+ intervals [194]:
788
+ xmin = 53.61
789
+ xmax = 53.65
790
+ text = ""
791
+ intervals [195]:
792
+ xmin = 53.65
793
+ xmax = 53.83
794
+ text = "i"
795
+ intervals [196]:
796
+ xmin = 53.83
797
+ xmax = 54.27
798
+ text = "especially"
799
+ intervals [197]:
800
+ xmin = 54.27
801
+ xmax = 54.61
802
+ text = "liked"
803
+ intervals [198]:
804
+ xmin = 54.61
805
+ xmax = 55.01
806
+ text = "watching"
807
+ intervals [199]:
808
+ xmin = 55.01
809
+ xmax = 55.62
810
+ text = "japanese"
811
+ intervals [200]:
812
+ xmin = 55.62
813
+ xmax = 55.91
814
+ text = "anime"
815
+ intervals [201]:
816
+ xmin = 55.91
817
+ xmax = 56.33
818
+ text = "i"
819
+ intervals [202]:
820
+ xmin = 56.33
821
+ xmax = 56.85
822
+ text = ""
823
+ intervals [203]:
824
+ xmin = 56.85
825
+ xmax = 57.12
826
+ text = "think"
827
+ intervals [204]:
828
+ xmin = 57.12
829
+ xmax = 57.43
830
+ text = "watching"
831
+ intervals [205]:
832
+ xmin = 57.43
833
+ xmax = 57.62
834
+ text = "a"
835
+ intervals [206]:
836
+ xmin = 57.62
837
+ xmax = 57.79
838
+ text = "me"
839
+ intervals [207]:
840
+ xmin = 57.79
841
+ xmax = 58.09
842
+ text = "is"
843
+ intervals [208]:
844
+ xmin = 58.09
845
+ xmax = 58.39
846
+ text = "anime"
847
+ intervals [209]:
848
+ xmin = 58.39
849
+ xmax = 59.06
850
+ text = "is"
851
+ intervals [210]:
852
+ xmin = 59.06
853
+ xmax = 59.31
854
+ text = "very"
855
+ intervals [211]:
856
+ xmin = 59.31
857
+ xmax = 59.67
858
+ text = "helpful"
859
+ intervals [212]:
860
+ xmin = 59.67
861
+ xmax = 59.81
862
+ text = "for"
863
+ intervals [213]:
864
+ xmin = 59.81
865
+ xmax = 59.98
866
+ text = "me"
867
+ intervals [214]:
868
+ xmin = 59.98
869
+ xmax = 60.28
870
+ text = "to"
871
+ intervals [215]:
872
+ xmin = 60.28
873
+ xmax = 60.69
874
+ text = "learn"
875
+ intervals [216]:
876
+ xmin = 60.69
877
+ xmax = 60.78
878
+ text = "and"
879
+ intervals [217]:
880
+ xmin = 60.78
881
+ xmax = 61.21
882
+ text = "express"
883
+ intervals [218]:
884
+ xmin = 61.21
885
+ xmax = 61.89
886
+ text = "japanese"
887
+ intervals [219]:
888
+ xmin = 61.89
889
+ xmax = 62.42
890
+ text = "better"
891
+ intervals [220]:
892
+ xmin = 62.42
893
+ xmax = 64.097375
894
+ text = ""
895
+ item [2]:
896
+ class = "IntervalTier"
897
+ name = "phones"
898
+ xmin = 0
899
+ xmax = 64.097375
900
+ intervals: size = 684
901
+ intervals [1]:
902
+ xmin = 0
903
+ xmax = 1.42
904
+ text = ""
905
+ intervals [2]:
906
+ xmin = 1.42
907
+ xmax = 1.48
908
+ text = "DH"
909
+ intervals [3]:
910
+ xmin = 1.48
911
+ xmax = 1.52
912
+ text = "AH0"
913
+ intervals [4]:
914
+ xmin = 1.52
915
+ xmax = 1.62
916
+ text = "F"
917
+ intervals [5]:
918
+ xmin = 1.62
919
+ xmax = 1.72
920
+ text = "ER1"
921
+ intervals [6]:
922
+ xmin = 1.72
923
+ xmax = 1.75
924
+ text = "S"
925
+ intervals [7]:
926
+ xmin = 1.75
927
+ xmax = 1.78
928
+ text = "T"
929
+ intervals [8]:
930
+ xmin = 1.78
931
+ xmax = 1.81
932
+ text = "TH"
933
+ intervals [9]:
934
+ xmin = 1.81
935
+ xmax = 1.88
936
+ text = "IH1"
937
+ intervals [10]:
938
+ xmin = 1.88
939
+ xmax = 1.97
940
+ text = "NG"
941
+ intervals [11]:
942
+ xmin = 1.97
943
+ xmax = 2.04
944
+ text = "AY1"
945
+ intervals [12]:
946
+ xmin = 2.04
947
+ xmax = 2.08
948
+ text = "L"
949
+ intervals [13]:
950
+ xmin = 2.08
951
+ xmax = 2.17
952
+ text = "AY1"
953
+ intervals [14]:
954
+ xmin = 2.17
955
+ xmax = 2.21
956
+ text = "K"
957
+ intervals [15]:
958
+ xmin = 2.21
959
+ xmax = 2.24
960
+ text = "T"
961
+ intervals [16]:
962
+ xmin = 2.24
963
+ xmax = 2.28
964
+ text = "IH0"
965
+ intervals [17]:
966
+ xmin = 2.28
967
+ xmax = 2.34
968
+ text = "D"
969
+ intervals [18]:
970
+ xmin = 2.34
971
+ xmax = 2.47
972
+ text = "UW1"
973
+ intervals [19]:
974
+ xmin = 2.47
975
+ xmax = 2.58
976
+ text = "AA1"
977
+ intervals [20]:
978
+ xmin = 2.58
979
+ xmax = 2.63
980
+ text = "N"
981
+ intervals [21]:
982
+ xmin = 2.63
983
+ xmax = 2.68
984
+ text = "W"
985
+ intervals [22]:
986
+ xmin = 2.68
987
+ xmax = 2.78
988
+ text = "IY1"
989
+ intervals [23]:
990
+ xmin = 2.78
991
+ xmax = 2.88
992
+ text = "K"
993
+ intervals [24]:
994
+ xmin = 2.88
995
+ xmax = 3.01
996
+ text = "EH2"
997
+ intervals [25]:
998
+ xmin = 3.01
999
+ xmax = 3.14
1000
+ text = "N"
1001
+ intervals [26]:
1002
+ xmin = 3.14
1003
+ xmax = 3.2
1004
+ text = "D"
1005
+ intervals [27]:
1006
+ xmin = 3.2
1007
+ xmax = 3.32
1008
+ text = "Z"
1009
+ intervals [28]:
1010
+ xmin = 3.32
1011
+ xmax = 3.47
1012
+ text = "IH1"
1013
+ intervals [29]:
1014
+ xmin = 3.47
1015
+ xmax = 3.58
1016
+ text = "Z"
1017
+ intervals [30]:
1018
+ xmin = 3.58
1019
+ xmax = 3.64
1020
+ text = "R"
1021
+ intervals [31]:
1022
+ xmin = 3.64
1023
+ xmax = 3.7
1024
+ text = "IY0"
1025
+ intervals [32]:
1026
+ xmin = 3.7
1027
+ xmax = 3.8
1028
+ text = "L"
1029
+ intervals [33]:
1030
+ xmin = 3.8
1031
+ xmax = 3.96
1032
+ text = "AE1"
1033
+ intervals [34]:
1034
+ xmin = 3.96
1035
+ xmax = 4.02
1036
+ text = "K"
1037
+ intervals [35]:
1038
+ xmin = 4.02
1039
+ xmax = 4.11
1040
+ text = "S"
1041
+ intervals [36]:
1042
+ xmin = 4.11
1043
+ xmax = 4.2
1044
+ text = "IH0"
1045
+ intervals [37]:
1046
+ xmin = 4.2
1047
+ xmax = 4.41
1048
+ text = "NG"
1049
+ intervals [38]:
1050
+ xmin = 4.41
1051
+ xmax = 4.52
1052
+ text = ""
1053
+ intervals [39]:
1054
+ xmin = 4.52
1055
+ xmax = 4.97
1056
+ text = "AH0"
1057
+ intervals [40]:
1058
+ xmin = 4.97
1059
+ xmax = 5.01
1060
+ text = "N"
1061
+ intervals [41]:
1062
+ xmin = 5.01
1063
+ xmax = 5.05
1064
+ text = "D"
1065
+ intervals [42]:
1066
+ xmin = 5.05
1067
+ xmax = 5.14
1068
+ text = "AY1"
1069
+ intervals [43]:
1070
+ xmin = 5.14
1071
+ xmax = 5.19
1072
+ text = "TH"
1073
+ intervals [44]:
1074
+ xmin = 5.19
1075
+ xmax = 5.25
1076
+ text = "IH1"
1077
+ intervals [45]:
1078
+ xmin = 5.25
1079
+ xmax = 5.29
1080
+ text = "NG"
1081
+ intervals [46]:
1082
+ xmin = 5.29
1083
+ xmax = 5.33
1084
+ text = "K"
1085
+ intervals [47]:
1086
+ xmin = 5.33
1087
+ xmax = 5.36
1088
+ text = "AY1"
1089
+ intervals [48]:
1090
+ xmin = 5.36
1091
+ xmax = 5.41
1092
+ text = "L"
1093
+ intervals [49]:
1094
+ xmin = 5.41
1095
+ xmax = 5.44
1096
+ text = "G"
1097
+ intervals [50]:
1098
+ xmin = 5.44
1099
+ xmax = 5.5
1100
+ text = "OW1"
1101
+ intervals [51]:
1102
+ xmin = 5.5
1103
+ xmax = 5.68
1104
+ text = "SH"
1105
+ intervals [52]:
1106
+ xmin = 5.68
1107
+ xmax = 5.87
1108
+ text = "AA1"
1109
+ intervals [53]:
1110
+ xmin = 5.87
1111
+ xmax = 5.92
1112
+ text = "P"
1113
+ intervals [54]:
1114
+ xmin = 5.92
1115
+ xmax = 5.96
1116
+ text = "IH0"
1117
+ intervals [55]:
1118
+ xmin = 5.96
1119
+ xmax = 6
1120
+ text = "NG"
1121
+ intervals [56]:
1122
+ xmin = 6
1123
+ xmax = 6.06
1124
+ text = "IH0"
1125
+ intervals [57]:
1126
+ xmin = 6.06
1127
+ xmax = 6.11
1128
+ text = "F"
1129
+ intervals [58]:
1130
+ xmin = 6.11
1131
+ xmax = 6.16
1132
+ text = "AY1"
1133
+ intervals [59]:
1134
+ xmin = 6.16
1135
+ xmax = 6.29
1136
+ text = "M"
1137
+ intervals [60]:
1138
+ xmin = 6.29
1139
+ xmax = 6.35
1140
+ text = "N"
1141
+ intervals [61]:
1142
+ xmin = 6.35
1143
+ xmax = 6.48
1144
+ text = "AA1"
1145
+ intervals [62]:
1146
+ xmin = 6.48
1147
+ xmax = 6.54
1148
+ text = "T"
1149
+ intervals [63]:
1150
+ xmin = 6.54
1151
+ xmax = 6.58
1152
+ text = "DH"
1153
+ intervals [64]:
1154
+ xmin = 6.58
1155
+ xmax = 6.64
1156
+ text = "AE1"
1157
+ intervals [65]:
1158
+ xmin = 6.64
1159
+ xmax = 6.7
1160
+ text = "T"
1161
+ intervals [66]:
1162
+ xmin = 6.7
1163
+ xmax = 6.78
1164
+ text = "T"
1165
+ intervals [67]:
1166
+ xmin = 6.78
1167
+ xmax = 6.93
1168
+ text = "AY1"
1169
+ intervals [68]:
1170
+ xmin = 6.93
1171
+ xmax = 7.08
1172
+ text = "ER0"
1173
+ intervals [69]:
1174
+ xmin = 7.08
1175
+ xmax = 7.19
1176
+ text = "D"
1177
+ intervals [70]:
1178
+ xmin = 7.19
1179
+ xmax = 7.45
1180
+ text = ""
1181
+ intervals [71]:
1182
+ xmin = 7.45
1183
+ xmax = 7.59
1184
+ text = "S"
1185
+ intervals [72]:
1186
+ xmin = 7.59
1187
+ xmax = 7.62
1188
+ text = "OW1"
1189
+ intervals [73]:
1190
+ xmin = 7.62
1191
+ xmax = 7.66
1192
+ text = "DH"
1193
+ intervals [74]:
1194
+ xmin = 7.66
1195
+ xmax = 7.71
1196
+ text = "AE1"
1197
+ intervals [75]:
1198
+ xmin = 7.71
1199
+ xmax = 7.74
1200
+ text = "T"
1201
+ intervals [76]:
1202
+ xmin = 7.74
1203
+ xmax = 7.77
1204
+ text = "Y"
1205
+ intervals [77]:
1206
+ xmin = 7.77
1207
+ xmax = 7.85
1208
+ text = "UW1"
1209
+ intervals [78]:
1210
+ xmin = 7.85
1211
+ xmax = 7.92
1212
+ text = "S"
1213
+ intervals [79]:
1214
+ xmin = 7.92
1215
+ xmax = 7.97
1216
+ text = "T"
1217
+ intervals [80]:
1218
+ xmin = 7.97
1219
+ xmax = 8.02
1220
+ text = "AA1"
1221
+ intervals [81]:
1222
+ xmin = 8.02
1223
+ xmax = 8.05
1224
+ text = "R"
1225
+ intervals [82]:
1226
+ xmin = 8.05
1227
+ xmax = 8.08
1228
+ text = "T"
1229
+ intervals [83]:
1230
+ xmin = 8.08
1231
+ xmax = 8.11
1232
+ text = "AH0"
1233
+ intervals [84]:
1234
+ xmin = 8.11
1235
+ xmax = 8.14
1236
+ text = "D"
1237
+ intervals [85]:
1238
+ xmin = 8.14
1239
+ xmax = 8.17
1240
+ text = "B"
1241
+ intervals [86]:
1242
+ xmin = 8.17
1243
+ xmax = 8.24
1244
+ text = "AY1"
1245
+ intervals [87]:
1246
+ xmin = 8.24
1247
+ xmax = 8.35
1248
+ text = "JH"
1249
+ intervals [88]:
1250
+ xmin = 8.35
1251
+ xmax = 8.48
1252
+ text = "AA1"
1253
+ intervals [89]:
1254
+ xmin = 8.48
1255
+ xmax = 8.52
1256
+ text = "B"
1257
+ intervals [90]:
1258
+ xmin = 8.52
1259
+ xmax = 8.59
1260
+ text = "AY1"
1261
+ intervals [91]:
1262
+ xmin = 8.59
1263
+ xmax = 8.64
1264
+ text = "TH"
1265
+ intervals [92]:
1266
+ xmin = 8.64
1267
+ xmax = 8.69
1268
+ text = "IH1"
1269
+ intervals [93]:
1270
+ xmin = 8.69
1271
+ xmax = 8.72
1272
+ text = "NG"
1273
+ intervals [94]:
1274
+ xmin = 8.72
1275
+ xmax = 8.75
1276
+ text = "K"
1277
+ intervals [95]:
1278
+ xmin = 8.75
1279
+ xmax = 8.79
1280
+ text = "IH1"
1281
+ intervals [96]:
1282
+ xmin = 8.79
1283
+ xmax = 8.84
1284
+ text = "T"
1285
+ intervals [97]:
1286
+ xmin = 8.84
1287
+ xmax = 8.88
1288
+ text = "S"
1289
+ intervals [98]:
1290
+ xmin = 8.88
1291
+ xmax = 9.08
1292
+ text = "V"
1293
+ intervals [99]:
1294
+ xmin = 9.08
1295
+ xmax = 9.2
1296
+ text = "EH1"
1297
+ intervals [100]:
1298
+ xmin = 9.2
1299
+ xmax = 9.28
1300
+ text = "R"
1301
+ intervals [101]:
1302
+ xmin = 9.28
1303
+ xmax = 9.35
1304
+ text = "IY0"
1305
+ intervals [102]:
1306
+ xmin = 9.35
1307
+ xmax = 9.4
1308
+ text = "IH0"
1309
+ intervals [103]:
1310
+ xmin = 9.4
1311
+ xmax = 9.46
1312
+ text = "M"
1313
+ intervals [104]:
1314
+ xmin = 9.46
1315
+ xmax = 9.55
1316
+ text = "P"
1317
+ intervals [105]:
1318
+ xmin = 9.55
1319
+ xmax = 9.63
1320
+ text = "AO1"
1321
+ intervals [106]:
1322
+ xmin = 9.63
1323
+ xmax = 9.68
1324
+ text = "R"
1325
+ intervals [107]:
1326
+ xmin = 9.68
1327
+ xmax = 9.71
1328
+ text = "T"
1329
+ intervals [108]:
1330
+ xmin = 9.71
1331
+ xmax = 9.74
1332
+ text = "AH0"
1333
+ intervals [109]:
1334
+ xmin = 9.74
1335
+ xmax = 9.77
1336
+ text = "N"
1337
+ intervals [110]:
1338
+ xmin = 9.77
1339
+ xmax = 9.8
1340
+ text = "T"
1341
+ intervals [111]:
1342
+ xmin = 9.8
1343
+ xmax = 9.83
1344
+ text = "T"
1345
+ intervals [112]:
1346
+ xmin = 9.83
1347
+ xmax = 9.87
1348
+ text = "IH0"
1349
+ intervals [113]:
1350
+ xmin = 9.87
1351
+ xmax = 9.93
1352
+ text = "G"
1353
+ intervals [114]:
1354
+ xmin = 9.93
1355
+ xmax = 9.96
1356
+ text = "EH1"
1357
+ intervals [115]:
1358
+ xmin = 9.96
1359
+ xmax = 9.99
1360
+ text = "T"
1361
+ intervals [116]:
1362
+ xmin = 9.99
1363
+ xmax = 10.03
1364
+ text = "AH0"
1365
+ intervals [117]:
1366
+ xmin = 10.03
1367
+ xmax = 10.07
1368
+ text = "G"
1369
+ intervals [118]:
1370
+ xmin = 10.07
1371
+ xmax = 10.1
1372
+ text = "IH0"
1373
+ intervals [119]:
1374
+ xmin = 10.1
1375
+ xmax = 10.17
1376
+ text = "D"
1377
+ intervals [120]:
1378
+ xmin = 10.17
1379
+ xmax = 10.35
1380
+ text = "S"
1381
+ intervals [121]:
1382
+ xmin = 10.35
1383
+ xmax = 10.43
1384
+ text = "L"
1385
+ intervals [122]:
1386
+ xmin = 10.43
1387
+ xmax = 10.53
1388
+ text = "IY1"
1389
+ intervals [123]:
1390
+ xmin = 10.53
1391
+ xmax = 10.56
1392
+ text = "P"
1393
+ intervals [124]:
1394
+ xmin = 10.56
1395
+ xmax = 10.8
1396
+ text = "D"
1397
+ intervals [125]:
1398
+ xmin = 10.8
1399
+ xmax = 10.92
1400
+ text = "ER1"
1401
+ intervals [126]:
1402
+ xmin = 10.92
1403
+ xmax = 10.99
1404
+ text = "IH0"
1405
+ intervals [127]:
1406
+ xmin = 10.99
1407
+ xmax = 11.14
1408
+ text = "NG"
1409
+ intervals [128]:
1410
+ xmin = 11.14
1411
+ xmax = 11.2
1412
+ text = "Y"
1413
+ intervals [129]:
1414
+ xmin = 11.2
1415
+ xmax = 11.23
1416
+ text = "UH1"
1417
+ intervals [130]:
1418
+ xmin = 11.23
1419
+ xmax = 11.32
1420
+ text = "R"
1421
+ intervals [131]:
1422
+ xmin = 11.32
1423
+ xmax = 11.4
1424
+ text = "W"
1425
+ intervals [132]:
1426
+ xmin = 11.4
1427
+ xmax = 11.51
1428
+ text = "IY1"
1429
+ intervals [133]:
1430
+ xmin = 11.51
1431
+ xmax = 11.6
1432
+ text = "K"
1433
+ intervals [134]:
1434
+ xmin = 11.6
1435
+ xmax = 11.68
1436
+ text = "EH2"
1437
+ intervals [135]:
1438
+ xmin = 11.68
1439
+ xmax = 11.74
1440
+ text = "N"
1441
+ intervals [136]:
1442
+ xmin = 11.74
1443
+ xmax = 11.77
1444
+ text = "D"
1445
+ intervals [137]:
1446
+ xmin = 11.77
1447
+ xmax = 11.8
1448
+ text = "B"
1449
+ intervals [138]:
1450
+ xmin = 11.8
1451
+ xmax = 11.88
1452
+ text = "IH0"
1453
+ intervals [139]:
1454
+ xmin = 11.88
1455
+ xmax = 12
1456
+ text = "K"
1457
+ intervals [140]:
1458
+ xmin = 12
1459
+ xmax = 12.26
1460
+ text = "AH1"
1461
+ intervals [141]:
1462
+ xmin = 12.26
1463
+ xmax = 12.4
1464
+ text = "Z"
1465
+ intervals [142]:
1466
+ xmin = 12.4
1467
+ xmax = 12.6
1468
+ text = "W"
1469
+ intervals [143]:
1470
+ xmin = 12.6
1471
+ xmax = 12.88
1472
+ text = "EH1"
1473
+ intervals [144]:
1474
+ xmin = 12.88
1475
+ xmax = 12.95
1476
+ text = "N"
1477
+ intervals [145]:
1478
+ xmin = 12.95
1479
+ xmax = 12.99
1480
+ text = "Y"
1481
+ intervals [146]:
1482
+ xmin = 12.99
1483
+ xmax = 13.04
1484
+ text = "UW1"
1485
+ intervals [147]:
1486
+ xmin = 13.04
1487
+ xmax = 13.07
1488
+ text = "HH"
1489
+ intervals [148]:
1490
+ xmin = 13.07
1491
+ xmax = 13.16
1492
+ text = "AE1"
1493
+ intervals [149]:
1494
+ xmin = 13.16
1495
+ xmax = 13.19
1496
+ text = "V"
1497
+ intervals [150]:
1498
+ xmin = 13.19
1499
+ xmax = 13.22
1500
+ text = "T"
1501
+ intervals [151]:
1502
+ xmin = 13.22
1503
+ xmax = 13.27
1504
+ text = "UW1"
1505
+ intervals [152]:
1506
+ xmin = 13.27
1507
+ xmax = 13.32
1508
+ text = "W"
1509
+ intervals [153]:
1510
+ xmin = 13.32
1511
+ xmax = 13.4
1512
+ text = "ER1"
1513
+ intervals [154]:
1514
+ xmin = 13.4
1515
+ xmax = 13.44
1516
+ text = "K"
1517
+ intervals [155]:
1518
+ xmin = 13.44
1519
+ xmax = 13.51
1520
+ text = "AA1"
1521
+ intervals [156]:
1522
+ xmin = 13.51
1523
+ xmax = 13.58
1524
+ text = "N"
1525
+ intervals [157]:
1526
+ xmin = 13.58
1527
+ xmax = 13.66
1528
+ text = "M"
1529
+ intervals [158]:
1530
+ xmin = 13.66
1531
+ xmax = 13.76
1532
+ text = "AH1"
1533
+ intervals [159]:
1534
+ xmin = 13.76
1535
+ xmax = 13.81
1536
+ text = "N"
1537
+ intervals [160]:
1538
+ xmin = 13.81
1539
+ xmax = 13.85
1540
+ text = "D"
1541
+ intervals [161]:
1542
+ xmin = 13.85
1543
+ xmax = 13.96
1544
+ text = "EY2"
1545
+ intervals [162]:
1546
+ xmin = 13.96
1547
+ xmax = 14.01
1548
+ text = "TH"
1549
+ intervals [163]:
1550
+ xmin = 14.01
1551
+ xmax = 14.04
1552
+ text = "R"
1553
+ intervals [164]:
1554
+ xmin = 14.04
1555
+ xmax = 14.1
1556
+ text = "UW1"
1557
+ intervals [165]:
1558
+ xmin = 14.1
1559
+ xmax = 14.17
1560
+ text = "F"
1561
+ intervals [166]:
1562
+ xmin = 14.17
1563
+ xmax = 14.26
1564
+ text = "R"
1565
+ intervals [167]:
1566
+ xmin = 14.26
1567
+ xmax = 14.4
1568
+ text = "AY1"
1569
+ intervals [168]:
1570
+ xmin = 14.4
1571
+ xmax = 14.45
1572
+ text = "D"
1573
+ intervals [169]:
1574
+ xmin = 14.45
1575
+ xmax = 14.75
1576
+ text = "EY2"
1577
+ intervals [170]:
1578
+ xmin = 14.75
1579
+ xmax = 15.41
1580
+ text = ""
1581
+ intervals [171]:
1582
+ xmin = 15.41
1583
+ xmax = 15.49
1584
+ text = "DH"
1585
+ intervals [172]:
1586
+ xmin = 15.49
1587
+ xmax = 15.53
1588
+ text = "AH1"
1589
+ intervals [173]:
1590
+ xmin = 15.53
1591
+ xmax = 15.62
1592
+ text = "HH"
1593
+ intervals [174]:
1594
+ xmin = 15.62
1595
+ xmax = 15.67
1596
+ text = "OW1"
1597
+ intervals [175]:
1598
+ xmin = 15.67
1599
+ xmax = 15.75
1600
+ text = "L"
1601
+ intervals [176]:
1602
+ xmin = 15.75
1603
+ xmax = 15.8
1604
+ text = "W"
1605
+ intervals [177]:
1606
+ xmin = 15.8
1607
+ xmax = 15.94
1608
+ text = "IY1"
1609
+ intervals [178]:
1610
+ xmin = 15.94
1611
+ xmax = 16.09
1612
+ text = "K"
1613
+ intervals [179]:
1614
+ xmin = 16.09
1615
+ xmax = 16.28
1616
+ text = ""
1617
+ intervals [180]:
1618
+ xmin = 16.28
1619
+ xmax = 16.38
1620
+ text = "Y"
1621
+ intervals [181]:
1622
+ xmin = 16.38
1623
+ xmax = 16.42
1624
+ text = "UW1"
1625
+ intervals [182]:
1626
+ xmin = 16.42
1627
+ xmax = 16.49
1628
+ text = "ER0"
1629
+ intervals [183]:
1630
+ xmin = 16.49
1631
+ xmax = 16.55
1632
+ text = "V"
1633
+ intervals [184]:
1634
+ xmin = 16.55
1635
+ xmax = 16.58
1636
+ text = "EH1"
1637
+ intervals [185]:
1638
+ xmin = 16.58
1639
+ xmax = 16.65
1640
+ text = "R"
1641
+ intervals [186]:
1642
+ xmin = 16.65
1643
+ xmax = 16.73
1644
+ text = "IY0"
1645
+ intervals [187]:
1646
+ xmin = 16.73
1647
+ xmax = 16.92
1648
+ text = "T"
1649
+ intervals [188]:
1650
+ xmin = 16.92
1651
+ xmax = 17.08
1652
+ text = "AY1"
1653
+ intervals [189]:
1654
+ xmin = 17.08
1655
+ xmax = 17.22
1656
+ text = "ER0"
1657
+ intervals [190]:
1658
+ xmin = 17.22
1659
+ xmax = 17.59
1660
+ text = "D"
1661
+ intervals [191]:
1662
+ xmin = 17.59
1663
+ xmax = 17.83
1664
+ text = ""
1665
+ intervals [192]:
1666
+ xmin = 17.83
1667
+ xmax = 18.02
1668
+ text = "S"
1669
+ intervals [193]:
1670
+ xmin = 18.02
1671
+ xmax = 18.29
1672
+ text = "OW1"
1673
+ intervals [194]:
1674
+ xmin = 18.29
1675
+ xmax = 18.37
1676
+ text = "G"
1677
+ intervals [195]:
1678
+ xmin = 18.37
1679
+ xmax = 18.42
1680
+ text = "IH1"
1681
+ intervals [196]:
1682
+ xmin = 18.42
1683
+ xmax = 18.46
1684
+ text = "T"
1685
+ intervals [197]:
1686
+ xmin = 18.46
1687
+ xmax = 18.5
1688
+ text = "IH0"
1689
+ intervals [198]:
1690
+ xmin = 18.5
1691
+ xmax = 18.55
1692
+ text = "NG"
1693
+ intervals [199]:
1694
+ xmin = 18.55
1695
+ xmax = 18.61
1696
+ text = "EY1"
1697
+ intervals [200]:
1698
+ xmin = 18.61
1699
+ xmax = 18.67
1700
+ text = "G"
1701
+ intervals [201]:
1702
+ xmin = 18.67
1703
+ xmax = 18.73
1704
+ text = "UH1"
1705
+ intervals [202]:
1706
+ xmin = 18.73
1707
+ xmax = 18.78
1708
+ text = "D"
1709
+ intervals [203]:
1710
+ xmin = 18.78
1711
+ xmax = 18.86
1712
+ text = "R"
1713
+ intervals [204]:
1714
+ xmin = 18.86
1715
+ xmax = 18.97
1716
+ text = "EH1"
1717
+ intervals [205]:
1718
+ xmin = 18.97
1719
+ xmax = 19.05
1720
+ text = "S"
1721
+ intervals [206]:
1722
+ xmin = 19.05
1723
+ xmax = 19.08
1724
+ text = "T"
1725
+ intervals [207]:
1726
+ xmin = 19.08
1727
+ xmax = 19.13
1728
+ text = "IH0"
1729
+ intervals [208]:
1730
+ xmin = 19.13
1731
+ xmax = 19.21
1732
+ text = "Z"
1733
+ intervals [209]:
1734
+ xmin = 19.21
1735
+ xmax = 19.24
1736
+ text = "EH1"
1737
+ intervals [210]:
1738
+ xmin = 19.24
1739
+ xmax = 19.3
1740
+ text = "Z"
1741
+ intervals [211]:
1742
+ xmin = 19.3
1743
+ xmax = 19.34
1744
+ text = "IH0"
1745
+ intervals [212]:
1746
+ xmin = 19.34
1747
+ xmax = 19.38
1748
+ text = "M"
1749
+ intervals [213]:
1750
+ xmin = 19.38
1751
+ xmax = 19.48
1752
+ text = "P"
1753
+ intervals [214]:
1754
+ xmin = 19.48
1755
+ xmax = 19.55
1756
+ text = "AO1"
1757
+ intervals [215]:
1758
+ xmin = 19.55
1759
+ xmax = 19.59
1760
+ text = "R"
1761
+ intervals [216]:
1762
+ xmin = 19.59
1763
+ xmax = 19.62
1764
+ text = "T"
1765
+ intervals [217]:
1766
+ xmin = 19.62
1767
+ xmax = 19.65
1768
+ text = "AH0"
1769
+ intervals [218]:
1770
+ xmin = 19.65
1771
+ xmax = 19.68
1772
+ text = "N"
1773
+ intervals [219]:
1774
+ xmin = 19.68
1775
+ xmax = 19.77
1776
+ text = "T"
1777
+ intervals [220]:
1778
+ xmin = 19.77
1779
+ xmax = 19.94
1780
+ text = "AE1"
1781
+ intervals [221]:
1782
+ xmin = 19.94
1783
+ xmax = 20.16
1784
+ text = "Z"
1785
+ intervals [222]:
1786
+ xmin = 20.16
1787
+ xmax = 20.3
1788
+ text = ""
1789
+ intervals [223]:
1790
+ xmin = 20.3
1791
+ xmax = 20.39
1792
+ text = "K"
1793
+ intervals [224]:
1794
+ xmin = 20.39
1795
+ xmax = 20.43
1796
+ text = "AH0"
1797
+ intervals [225]:
1798
+ xmin = 20.43
1799
+ xmax = 20.46
1800
+ text = "M"
1801
+ intervals [226]:
1802
+ xmin = 20.46
1803
+ xmax = 20.53
1804
+ text = "P"
1805
+ intervals [227]:
1806
+ xmin = 20.53
1807
+ xmax = 20.59
1808
+ text = "L"
1809
+ intervals [228]:
1810
+ xmin = 20.59
1811
+ xmax = 20.63
1812
+ text = "EY1"
1813
+ intervals [229]:
1814
+ xmin = 20.63
1815
+ xmax = 20.66
1816
+ text = "N"
1817
+ intervals [230]:
1818
+ xmin = 20.66
1819
+ xmax = 20.69
1820
+ text = "T"
1821
+ intervals [231]:
1822
+ xmin = 20.69
1823
+ xmax = 20.75
1824
+ text = "AH0"
1825
+ intervals [232]:
1826
+ xmin = 20.75
1827
+ xmax = 20.87
1828
+ text = "JH"
1829
+ intervals [233]:
1830
+ xmin = 20.87
1831
+ xmax = 21.09
1832
+ text = "AO1"
1833
+ intervals [234]:
1834
+ xmin = 21.09
1835
+ xmax = 21.3
1836
+ text = "ER0"
1837
+ intervals [235]:
1838
+ xmin = 21.3
1839
+ xmax = 21.44
1840
+ text = "K"
1841
+ intervals [236]:
1842
+ xmin = 21.44
1843
+ xmax = 21.47
1844
+ text = "AH0"
1845
+ intervals [237]:
1846
+ xmin = 21.47
1847
+ xmax = 21.5
1848
+ text = "M"
1849
+ intervals [238]:
1850
+ xmin = 21.5
1851
+ xmax = 21.53
1852
+ text = "P"
1853
+ intervals [239]:
1854
+ xmin = 21.53
1855
+ xmax = 21.6
1856
+ text = "L"
1857
+ intervals [240]:
1858
+ xmin = 21.6
1859
+ xmax = 21.63
1860
+ text = "IY1"
1861
+ intervals [241]:
1862
+ xmin = 21.63
1863
+ xmax = 21.66
1864
+ text = "T"
1865
+ intervals [242]:
1866
+ xmin = 21.66
1867
+ xmax = 21.72
1868
+ text = "IH0"
1869
+ intervals [243]:
1870
+ xmin = 21.72
1871
+ xmax = 21.79
1872
+ text = "NG"
1873
+ intervals [244]:
1874
+ xmin = 21.79
1875
+ xmax = 21.83
1876
+ text = "AH0"
1877
+ intervals [245]:
1878
+ xmin = 21.83
1879
+ xmax = 21.9
1880
+ text = "N"
1881
+ intervals [246]:
1882
+ xmin = 21.9
1883
+ xmax = 21.98
1884
+ text = "EH1"
1885
+ intervals [247]:
1886
+ xmin = 21.98
1887
+ xmax = 22.03
1888
+ text = "K"
1889
+ intervals [248]:
1890
+ xmin = 22.03
1891
+ xmax = 22.07
1892
+ text = "S"
1893
+ intervals [249]:
1894
+ xmin = 22.07
1895
+ xmax = 22.11
1896
+ text = "AH0"
1897
+ intervals [250]:
1898
+ xmin = 22.11
1899
+ xmax = 22.14
1900
+ text = "L"
1901
+ intervals [251]:
1902
+ xmin = 22.14
1903
+ xmax = 22.17
1904
+ text = "AH0"
1905
+ intervals [252]:
1906
+ xmin = 22.17
1907
+ xmax = 22.2
1908
+ text = "N"
1909
+ intervals [253]:
1910
+ xmin = 22.2
1911
+ xmax = 22.23
1912
+ text = "T"
1913
+ intervals [254]:
1914
+ xmin = 22.23
1915
+ xmax = 22.34
1916
+ text = "JH"
1917
+ intervals [255]:
1918
+ xmin = 22.34
1919
+ xmax = 22.5
1920
+ text = "AA1"
1921
+ intervals [256]:
1922
+ xmin = 22.5
1923
+ xmax = 22.64
1924
+ text = "B"
1925
+ intervals [257]:
1926
+ xmin = 22.64
1927
+ xmax = 23.04
1928
+ text = ""
1929
+ intervals [258]:
1930
+ xmin = 23.04
1931
+ xmax = 23.14
1932
+ text = "IH0"
1933
+ intervals [259]:
1934
+ xmin = 23.14
1935
+ xmax = 23.17
1936
+ text = "N"
1937
+ intervals [260]:
1938
+ xmin = 23.17
1939
+ xmax = 23.2
1940
+ text = "M"
1941
+ intervals [261]:
1942
+ xmin = 23.2
1943
+ xmax = 23.29
1944
+ text = "AY1"
1945
+ intervals [262]:
1946
+ xmin = 23.29
1947
+ xmax = 23.36
1948
+ text = "S"
1949
+ intervals [263]:
1950
+ xmin = 23.36
1951
+ xmax = 23.41
1952
+ text = "P"
1953
+ intervals [264]:
1954
+ xmin = 23.41
1955
+ xmax = 23.52
1956
+ text = "EH1"
1957
+ intervals [265]:
1958
+ xmin = 23.52
1959
+ xmax = 23.56
1960
+ text = "R"
1961
+ intervals [266]:
1962
+ xmin = 23.56
1963
+ xmax = 23.65
1964
+ text = "T"
1965
+ intervals [267]:
1966
+ xmin = 23.65
1967
+ xmax = 23.76
1968
+ text = "AY1"
1969
+ intervals [268]:
1970
+ xmin = 23.76
1971
+ xmax = 23.8
1972
+ text = "M"
1973
+ intervals [269]:
1974
+ xmin = 23.8
1975
+ xmax = 23.85
1976
+ text = "IH0"
1977
+ intervals [270]:
1978
+ xmin = 23.85
1979
+ xmax = 23.88
1980
+ text = "F"
1981
+ intervals [271]:
1982
+ xmin = 23.88
1983
+ xmax = 23.98
1984
+ text = "AY1"
1985
+ intervals [272]:
1986
+ xmin = 23.98
1987
+ xmax = 24.04
1988
+ text = "F"
1989
+ intervals [273]:
1990
+ xmin = 24.04
1991
+ xmax = 24.13
1992
+ text = "IY1"
1993
+ intervals [274]:
1994
+ xmin = 24.13
1995
+ xmax = 24.18
1996
+ text = "L"
1997
+ intervals [275]:
1998
+ xmin = 24.18
1999
+ xmax = 24.26
2000
+ text = "OW2"
2001
+ intervals [276]:
2002
+ xmin = 24.26
2003
+ xmax = 24.39
2004
+ text = "K"
2005
+ intervals [277]:
2006
+ xmin = 24.39
2007
+ xmax = 24.84
2008
+ text = "EY1"
2009
+ intervals [278]:
2010
+ xmin = 24.84
2011
+ xmax = 25.07
2012
+ text = "AY1"
2013
+ intervals [279]:
2014
+ xmin = 25.07
2015
+ xmax = 25.1
2016
+ text = ""
2017
+ intervals [280]:
2018
+ xmin = 25.1
2019
+ xmax = 25.29
2020
+ text = "L"
2021
+ intervals [281]:
2022
+ xmin = 25.29
2023
+ xmax = 25.35
2024
+ text = "AY1"
2025
+ intervals [282]:
2026
+ xmin = 25.35
2027
+ xmax = 25.38
2028
+ text = "K"
2029
+ intervals [283]:
2030
+ xmin = 25.38
2031
+ xmax = 25.41
2032
+ text = "T"
2033
+ intervals [284]:
2034
+ xmin = 25.41
2035
+ xmax = 25.44
2036
+ text = "IH0"
2037
+ intervals [285]:
2038
+ xmin = 25.44
2039
+ xmax = 25.5
2040
+ text = "G"
2041
+ intervals [286]:
2042
+ xmin = 25.5
2043
+ xmax = 25.55
2044
+ text = "OW1"
2045
+ intervals [287]:
2046
+ xmin = 25.55
2047
+ xmax = 25.59
2048
+ text = "F"
2049
+ intervals [288]:
2050
+ xmin = 25.59
2051
+ xmax = 25.79
2052
+ text = "ER0"
2053
+ intervals [289]:
2054
+ xmin = 25.79
2055
+ xmax = 25.83
2056
+ text = "AH0"
2057
+ intervals [290]:
2058
+ xmin = 25.83
2059
+ xmax = 25.94
2060
+ text = "HH"
2061
+ intervals [291]:
2062
+ xmin = 25.94
2063
+ xmax = 26.06
2064
+ text = "AY1"
2065
+ intervals [292]:
2066
+ xmin = 26.06
2067
+ xmax = 26.12
2068
+ text = "K"
2069
+ intervals [293]:
2070
+ xmin = 26.12
2071
+ xmax = 26.17
2072
+ text = "IH1"
2073
+ intervals [294]:
2074
+ xmin = 26.17
2075
+ xmax = 26.21
2076
+ text = "N"
2077
+ intervals [295]:
2078
+ xmin = 26.21
2079
+ xmax = 26.27
2080
+ text = "N"
2081
+ intervals [296]:
2082
+ xmin = 26.27
2083
+ xmax = 26.4
2084
+ text = "EY1"
2085
+ intervals [297]:
2086
+ xmin = 26.4
2087
+ xmax = 26.53
2088
+ text = "CH"
2089
+ intervals [298]:
2090
+ xmin = 26.53
2091
+ xmax = 26.81
2092
+ text = "ER0"
2093
+ intervals [299]:
2094
+ xmin = 26.81
2095
+ xmax = 27.11
2096
+ text = ""
2097
+ intervals [300]:
2098
+ xmin = 27.11
2099
+ xmax = 27.21
2100
+ text = "S"
2101
+ intervals [301]:
2102
+ xmin = 27.21
2103
+ xmax = 27.25
2104
+ text = "AH1"
2105
+ intervals [302]:
2106
+ xmin = 27.25
2107
+ xmax = 27.28
2108
+ text = "M"
2109
+ intervals [303]:
2110
+ xmin = 27.28
2111
+ xmax = 27.31
2112
+ text = "T"
2113
+ intervals [304]:
2114
+ xmin = 27.31
2115
+ xmax = 27.38
2116
+ text = "AY2"
2117
+ intervals [305]:
2118
+ xmin = 27.38
2119
+ xmax = 27.41
2120
+ text = "M"
2121
+ intervals [306]:
2122
+ xmin = 27.41
2123
+ xmax = 27.45
2124
+ text = "Z"
2125
+ intervals [307]:
2126
+ xmin = 27.45
2127
+ xmax = 27.51
2128
+ text = "AY1"
2129
+ intervals [308]:
2130
+ xmin = 27.51
2131
+ xmax = 27.6
2132
+ text = "T"
2133
+ intervals [309]:
2134
+ xmin = 27.6
2135
+ xmax = 27.67
2136
+ text = "R"
2137
+ intervals [310]:
2138
+ xmin = 27.67
2139
+ xmax = 27.74
2140
+ text = "AY1"
2141
+ intervals [311]:
2142
+ xmin = 27.74
2143
+ xmax = 27.77
2144
+ text = "T"
2145
+ intervals [312]:
2146
+ xmin = 27.77
2147
+ xmax = 27.88
2148
+ text = "AH0"
2149
+ intervals [313]:
2150
+ xmin = 27.88
2151
+ xmax = 28.02
2152
+ text = "AO1"
2153
+ intervals [314]:
2154
+ xmin = 28.02
2155
+ xmax = 28.07
2156
+ text = "R"
2157
+ intervals [315]:
2158
+ xmin = 28.07
2159
+ xmax = 28.12
2160
+ text = "G"
2161
+ intervals [316]:
2162
+ xmin = 28.12
2163
+ xmax = 28.15
2164
+ text = "AH0"
2165
+ intervals [317]:
2166
+ xmin = 28.15
2167
+ xmax = 28.18
2168
+ text = "N"
2169
+ intervals [318]:
2170
+ xmin = 28.18
2171
+ xmax = 28.3
2172
+ text = "AY2"
2173
+ intervals [319]:
2174
+ xmin = 28.3
2175
+ xmax = 28.37
2176
+ text = "Z"
2177
+ intervals [320]:
2178
+ xmin = 28.37
2179
+ xmax = 28.42
2180
+ text = "S"
2181
+ intervals [321]:
2182
+ xmin = 28.42
2183
+ xmax = 28.47
2184
+ text = "AH1"
2185
+ intervals [322]:
2186
+ xmin = 28.47
2187
+ xmax = 28.5
2188
+ text = "M"
2189
+ intervals [323]:
2190
+ xmin = 28.5
2191
+ xmax = 28.53
2192
+ text = "TH"
2193
+ intervals [324]:
2194
+ xmin = 28.53
2195
+ xmax = 28.61
2196
+ text = "IH0"
2197
+ intervals [325]:
2198
+ xmin = 28.61
2199
+ xmax = 28.94
2200
+ text = "NG"
2201
+ intervals [326]:
2202
+ xmin = 28.94
2203
+ xmax = 28.98
2204
+ text = ""
2205
+ intervals [327]:
2206
+ xmin = 28.98
2207
+ xmax = 29.08
2208
+ text = "F"
2209
+ intervals [328]:
2210
+ xmin = 29.08
2211
+ xmax = 29.13
2212
+ text = "AO1"
2213
+ intervals [329]:
2214
+ xmin = 29.13
2215
+ xmax = 29.19
2216
+ text = "R"
2217
+ intervals [330]:
2218
+ xmin = 29.19
2219
+ xmax = 29.23
2220
+ text = "M"
2221
+ intervals [331]:
2222
+ xmin = 29.23
2223
+ xmax = 29.32
2224
+ text = "AY1"
2225
+ intervals [332]:
2226
+ xmin = 29.32
2227
+ xmax = 29.41
2228
+ text = "F"
2229
+ intervals [333]:
2230
+ xmin = 29.41
2231
+ xmax = 29.49
2232
+ text = "R"
2233
+ intervals [334]:
2234
+ xmin = 29.49
2235
+ xmax = 29.6
2236
+ text = "EH1"
2237
+ intervals [335]:
2238
+ xmin = 29.6
2239
+ xmax = 29.65
2240
+ text = "N"
2241
+ intervals [336]:
2242
+ xmin = 29.65
2243
+ xmax = 29.7
2244
+ text = "D"
2245
+ intervals [337]:
2246
+ xmin = 29.7
2247
+ xmax = 29.89
2248
+ text = "Z"
2249
+ intervals [338]:
2250
+ xmin = 29.89
2251
+ xmax = 29.92
2252
+ text = ""
2253
+ intervals [339]:
2254
+ xmin = 29.92
2255
+ xmax = 29.95
2256
+ text = "AY1"
2257
+ intervals [340]:
2258
+ xmin = 29.95
2259
+ xmax = 30.2
2260
+ text = ""
2261
+ intervals [341]:
2262
+ xmin = 30.2
2263
+ xmax = 30.26
2264
+ text = "V"
2265
+ intervals [342]:
2266
+ xmin = 30.26
2267
+ xmax = 30.39
2268
+ text = "AA2"
2269
+ intervals [343]:
2270
+ xmin = 30.39
2271
+ xmax = 30.45
2272
+ text = "L"
2273
+ intervals [344]:
2274
+ xmin = 30.45
2275
+ xmax = 30.48
2276
+ text = "AH0"
2277
+ intervals [345]:
2278
+ xmin = 30.48
2279
+ xmax = 30.51
2280
+ text = "N"
2281
+ intervals [346]:
2282
+ xmin = 30.51
2283
+ xmax = 30.6
2284
+ text = "T"
2285
+ intervals [347]:
2286
+ xmin = 30.6
2287
+ xmax = 30.67
2288
+ text = "IH1"
2289
+ intervals [348]:
2290
+ xmin = 30.67
2291
+ xmax = 30.73
2292
+ text = "R"
2293
+ intervals [349]:
2294
+ xmin = 30.73
2295
+ xmax = 30.77
2296
+ text = "AE1"
2297
+ intervals [350]:
2298
+ xmin = 30.77
2299
+ xmax = 30.86
2300
+ text = "T"
2301
+ intervals [351]:
2302
+ xmin = 30.86
2303
+ xmax = 30.91
2304
+ text = "DH"
2305
+ intervals [352]:
2306
+ xmin = 30.91
2307
+ xmax = 30.97
2308
+ text = "AH1"
2309
+ intervals [353]:
2310
+ xmin = 30.97
2311
+ xmax = 31.13
2312
+ text = "B"
2313
+ intervals [354]:
2314
+ xmin = 31.13
2315
+ xmax = 31.19
2316
+ text = "UW1"
2317
+ intervals [355]:
2318
+ xmin = 31.19
2319
+ xmax = 31.24
2320
+ text = "D"
2321
+ intervals [356]:
2322
+ xmin = 31.24
2323
+ xmax = 31.3
2324
+ text = "AH0"
2325
+ intervals [357]:
2326
+ xmin = 31.3
2327
+ xmax = 31.35
2328
+ text = "S"
2329
+ intervals [358]:
2330
+ xmin = 31.35
2331
+ xmax = 31.38
2332
+ text = "T"
2333
+ intervals [359]:
2334
+ xmin = 31.38
2335
+ xmax = 31.41
2336
+ text = "T"
2337
+ intervals [360]:
2338
+ xmin = 31.41
2339
+ xmax = 31.47
2340
+ text = "EH1"
2341
+ intervals [361]:
2342
+ xmin = 31.47
2343
+ xmax = 31.52
2344
+ text = "M"
2345
+ intervals [362]:
2346
+ xmin = 31.52
2347
+ xmax = 31.56
2348
+ text = "P"
2349
+ intervals [363]:
2350
+ xmin = 31.56
2351
+ xmax = 31.61
2352
+ text = "AH0"
2353
+ intervals [364]:
2354
+ xmin = 31.61
2355
+ xmax = 31.83
2356
+ text = "L"
2357
+ intervals [365]:
2358
+ xmin = 31.83
2359
+ xmax = 31.9
2360
+ text = "AO1"
2361
+ intervals [366]:
2362
+ xmin = 31.9
2363
+ xmax = 31.94
2364
+ text = "N"
2365
+ intervals [367]:
2366
+ xmin = 31.94
2367
+ xmax = 31.97
2368
+ text = "DH"
2369
+ intervals [368]:
2370
+ xmin = 31.97
2371
+ xmax = 32.01
2372
+ text = "AH1"
2373
+ intervals [369]:
2374
+ xmin = 32.01
2375
+ xmax = 32.08
2376
+ text = "W"
2377
+ intervals [370]:
2378
+ xmin = 32.08
2379
+ xmax = 32.17
2380
+ text = "IY1"
2381
+ intervals [371]:
2382
+ xmin = 32.17
2383
+ xmax = 32.26
2384
+ text = "K"
2385
+ intervals [372]:
2386
+ xmin = 32.26
2387
+ xmax = 32.45
2388
+ text = "EH2"
2389
+ intervals [373]:
2390
+ xmin = 32.45
2391
+ xmax = 32.51
2392
+ text = "N"
2393
+ intervals [374]:
2394
+ xmin = 32.51
2395
+ xmax = 32.6
2396
+ text = "D"
2397
+ intervals [375]:
2398
+ xmin = 32.6
2399
+ xmax = 32.88
2400
+ text = "AO1"
2401
+ intervals [376]:
2402
+ xmin = 32.88
2403
+ xmax = 33.01
2404
+ text = "R"
2405
+ intervals [377]:
2406
+ xmin = 33.01
2407
+ xmax = 33.24
2408
+ text = "AY1"
2409
+ intervals [378]:
2410
+ xmin = 33.24
2411
+ xmax = 33.36
2412
+ text = "K"
2413
+ intervals [379]:
2414
+ xmin = 33.36
2415
+ xmax = 33.51
2416
+ text = "AE1"
2417
+ intervals [380]:
2418
+ xmin = 33.51
2419
+ xmax = 33.62
2420
+ text = "N"
2421
+ intervals [381]:
2422
+ xmin = 33.62
2423
+ xmax = 33.7
2424
+ text = "JH"
2425
+ intervals [382]:
2426
+ xmin = 33.7
2427
+ xmax = 33.77
2428
+ text = "IH0"
2429
+ intervals [383]:
2430
+ xmin = 33.77
2431
+ xmax = 33.8
2432
+ text = "S"
2433
+ intervals [384]:
2434
+ xmin = 33.8
2435
+ xmax = 33.91
2436
+ text = "T"
2437
+ intervals [385]:
2438
+ xmin = 33.91
2439
+ xmax = 33.96
2440
+ text = "W"
2441
+ intervals [386]:
2442
+ xmin = 33.96
2443
+ xmax = 34.2
2444
+ text = "AO1"
2445
+ intervals [387]:
2446
+ xmin = 34.2
2447
+ xmax = 34.3
2448
+ text = "K"
2449
+ intervals [388]:
2450
+ xmin = 34.3
2451
+ xmax = 34.42
2452
+ text = "ER0"
2453
+ intervals [389]:
2454
+ xmin = 34.42
2455
+ xmax = 34.63
2456
+ text = "AW1"
2457
+ intervals [390]:
2458
+ xmin = 34.63
2459
+ xmax = 34.69
2460
+ text = "N"
2461
+ intervals [391]:
2462
+ xmin = 34.69
2463
+ xmax = 34.76
2464
+ text = "IH0"
2465
+ intervals [392]:
2466
+ xmin = 34.76
2467
+ xmax = 34.8
2468
+ text = "N"
2469
+ intervals [393]:
2470
+ xmin = 34.8
2471
+ xmax = 34.9
2472
+ text = "JH"
2473
+ intervals [394]:
2474
+ xmin = 34.9
2475
+ xmax = 34.99
2476
+ text = "OY1"
2477
+ intervals [395]:
2478
+ xmin = 34.99
2479
+ xmax = 35.03
2480
+ text = "IH0"
2481
+ intervals [396]:
2482
+ xmin = 35.03
2483
+ xmax = 35.08
2484
+ text = "NG"
2485
+ intervals [397]:
2486
+ xmin = 35.08
2487
+ xmax = 35.12
2488
+ text = "DH"
2489
+ intervals [398]:
2490
+ xmin = 35.12
2491
+ xmax = 35.17
2492
+ text = "AH0"
2493
+ intervals [399]:
2494
+ xmin = 35.17
2495
+ xmax = 35.26
2496
+ text = "S"
2497
+ intervals [400]:
2498
+ xmin = 35.26
2499
+ xmax = 35.33
2500
+ text = "AH1"
2501
+ intervals [401]:
2502
+ xmin = 35.33
2503
+ xmax = 35.4
2504
+ text = "N"
2505
+ intervals [402]:
2506
+ xmin = 35.4
2507
+ xmax = 35.53
2508
+ text = "SH"
2509
+ intervals [403]:
2510
+ xmin = 35.53
2511
+ xmax = 35.69
2512
+ text = "AY2"
2513
+ intervals [404]:
2514
+ xmin = 35.69
2515
+ xmax = 35.87
2516
+ text = "N"
2517
+ intervals [405]:
2518
+ xmin = 35.87
2519
+ xmax = 36.15
2520
+ text = ""
2521
+ intervals [406]:
2522
+ xmin = 36.15
2523
+ xmax = 36.3
2524
+ text = "AY1"
2525
+ intervals [407]:
2526
+ xmin = 36.3
2527
+ xmax = 36.34
2528
+ text = "D"
2529
+ intervals [408]:
2530
+ xmin = 36.34
2531
+ xmax = 36.38
2532
+ text = "L"
2533
+ intervals [409]:
2534
+ xmin = 36.38
2535
+ xmax = 36.49
2536
+ text = "AY1"
2537
+ intervals [410]:
2538
+ xmin = 36.49
2539
+ xmax = 36.52
2540
+ text = "K"
2541
+ intervals [411]:
2542
+ xmin = 36.52
2543
+ xmax = 36.56
2544
+ text = "T"
2545
+ intervals [412]:
2546
+ xmin = 36.56
2547
+ xmax = 36.59
2548
+ text = "AH0"
2549
+ intervals [413]:
2550
+ xmin = 36.59
2551
+ xmax = 36.62
2552
+ text = "HH"
2553
+ intervals [414]:
2554
+ xmin = 36.62
2555
+ xmax = 36.7
2556
+ text = "AE1"
2557
+ intervals [415]:
2558
+ xmin = 36.7
2559
+ xmax = 36.74
2560
+ text = "V"
2561
+ intervals [416]:
2562
+ xmin = 36.74
2563
+ xmax = 36.79
2564
+ text = "AH0"
2565
+ intervals [417]:
2566
+ xmin = 36.79
2567
+ xmax = 36.83
2568
+ text = "HH"
2569
+ intervals [418]:
2570
+ xmin = 36.83
2571
+ xmax = 36.88
2572
+ text = "EH1"
2573
+ intervals [419]:
2574
+ xmin = 36.88
2575
+ xmax = 36.93
2576
+ text = "L"
2577
+ intervals [420]:
2578
+ xmin = 36.93
2579
+ xmax = 37.01
2580
+ text = "TH"
2581
+ intervals [421]:
2582
+ xmin = 37.01
2583
+ xmax = 37.06
2584
+ text = "IY0"
2585
+ intervals [422]:
2586
+ xmin = 37.06
2587
+ xmax = 37.12
2588
+ text = "L"
2589
+ intervals [423]:
2590
+ xmin = 37.12
2591
+ xmax = 37.23
2592
+ text = "AY1"
2593
+ intervals [424]:
2594
+ xmin = 37.23
2595
+ xmax = 37.27
2596
+ text = "F"
2597
+ intervals [425]:
2598
+ xmin = 37.27
2599
+ xmax = 37.34
2600
+ text = "S"
2601
+ intervals [426]:
2602
+ xmin = 37.34
2603
+ xmax = 37.39
2604
+ text = "T"
2605
+ intervals [427]:
2606
+ xmin = 37.39
2607
+ xmax = 37.56
2608
+ text = "AY2"
2609
+ intervals [428]:
2610
+ xmin = 37.56
2611
+ xmax = 37.66
2612
+ text = "L"
2613
+ intervals [429]:
2614
+ xmin = 37.66
2615
+ xmax = 37.73
2616
+ text = "K"
2617
+ intervals [430]:
2618
+ xmin = 37.73
2619
+ xmax = 37.77
2620
+ text = "AH0"
2621
+ intervals [431]:
2622
+ xmin = 37.77
2623
+ xmax = 37.82
2624
+ text = "N"
2625
+ intervals [432]:
2626
+ xmin = 37.82
2627
+ xmax = 37.87
2628
+ text = "S"
2629
+ intervals [433]:
2630
+ xmin = 37.87
2631
+ xmax = 37.91
2632
+ text = "IH1"
2633
+ intervals [434]:
2634
+ xmin = 37.91
2635
+ xmax = 37.94
2636
+ text = "D"
2637
+ intervals [435]:
2638
+ xmin = 37.94
2639
+ xmax = 37.98
2640
+ text = "ER0"
2641
+ intervals [436]:
2642
+ xmin = 37.98
2643
+ xmax = 38.02
2644
+ text = "IH0"
2645
+ intervals [437]:
2646
+ xmin = 38.02
2647
+ xmax = 38.06
2648
+ text = "NG"
2649
+ intervals [438]:
2650
+ xmin = 38.06
2651
+ xmax = 38.13
2652
+ text = "HH"
2653
+ intervals [439]:
2654
+ xmin = 38.13
2655
+ xmax = 38.17
2656
+ text = "AW1"
2657
+ intervals [440]:
2658
+ xmin = 38.17
2659
+ xmax = 38.23
2660
+ text = "M"
2661
+ intervals [441]:
2662
+ xmin = 38.23
2663
+ xmax = 38.27
2664
+ text = "AH1"
2665
+ intervals [442]:
2666
+ xmin = 38.27
2667
+ xmax = 38.38
2668
+ text = "CH"
2669
+ intervals [443]:
2670
+ xmin = 38.38
2671
+ xmax = 38.5
2672
+ text = "T"
2673
+ intervals [444]:
2674
+ xmin = 38.5
2675
+ xmax = 38.67
2676
+ text = "AY1"
2677
+ intervals [445]:
2678
+ xmin = 38.67
2679
+ xmax = 38.74
2680
+ text = "M"
2681
+ intervals [446]:
2682
+ xmin = 38.74
2683
+ xmax = 38.81
2684
+ text = "AY1"
2685
+ intervals [447]:
2686
+ xmin = 38.81
2687
+ xmax = 38.95
2688
+ text = "S"
2689
+ intervals [448]:
2690
+ xmin = 38.95
2691
+ xmax = 39.02
2692
+ text = "P"
2693
+ intervals [449]:
2694
+ xmin = 39.02
2695
+ xmax = 39.09
2696
+ text = "EH1"
2697
+ intervals [450]:
2698
+ xmin = 39.09
2699
+ xmax = 39.12
2700
+ text = "N"
2701
+ intervals [451]:
2702
+ xmin = 39.12
2703
+ xmax = 39.18
2704
+ text = "D"
2705
+ intervals [452]:
2706
+ xmin = 39.18
2707
+ xmax = 39.21
2708
+ text = "AE1"
2709
+ intervals [453]:
2710
+ xmin = 39.21
2711
+ xmax = 39.29
2712
+ text = "T"
2713
+ intervals [454]:
2714
+ xmin = 39.29
2715
+ xmax = 39.47
2716
+ text = "W"
2717
+ intervals [455]:
2718
+ xmin = 39.47
2719
+ xmax = 39.69
2720
+ text = "ER1"
2721
+ intervals [456]:
2722
+ xmin = 39.69
2723
+ xmax = 39.84
2724
+ text = "K"
2725
+ intervals [457]:
2726
+ xmin = 39.84
2727
+ xmax = 40.29
2728
+ text = ""
2729
+ intervals [458]:
2730
+ xmin = 40.29
2731
+ xmax = 40.52
2732
+ text = "AY1"
2733
+ intervals [459]:
2734
+ xmin = 40.52
2735
+ xmax = 40.56
2736
+ text = "AO1"
2737
+ intervals [460]:
2738
+ xmin = 40.56
2739
+ xmax = 40.59
2740
+ text = "L"
2741
+ intervals [461]:
2742
+ xmin = 40.59
2743
+ xmax = 40.66
2744
+ text = "W"
2745
+ intervals [462]:
2746
+ xmin = 40.66
2747
+ xmax = 40.7
2748
+ text = "IY0"
2749
+ intervals [463]:
2750
+ xmin = 40.7
2751
+ xmax = 40.79
2752
+ text = "Z"
2753
+ intervals [464]:
2754
+ xmin = 40.79
2755
+ xmax = 40.94
2756
+ text = "T"
2757
+ intervals [465]:
2758
+ xmin = 40.94
2759
+ xmax = 41.05
2760
+ text = "R"
2761
+ intervals [466]:
2762
+ xmin = 41.05
2763
+ xmax = 41.28
2764
+ text = "AY1"
2765
+ intervals [467]:
2766
+ xmin = 41.28
2767
+ xmax = 41.38
2768
+ text = "T"
2769
+ intervals [468]:
2770
+ xmin = 41.38
2771
+ xmax = 41.47
2772
+ text = "IH0"
2773
+ intervals [469]:
2774
+ xmin = 41.47
2775
+ xmax = 41.7
2776
+ text = "M"
2777
+ intervals [470]:
2778
+ xmin = 41.7
2779
+ xmax = 41.77
2780
+ text = "UW1"
2781
+ intervals [471]:
2782
+ xmin = 41.77
2783
+ xmax = 41.85
2784
+ text = "V"
2785
+ intervals [472]:
2786
+ xmin = 41.85
2787
+ xmax = 41.9
2788
+ text = "EH1"
2789
+ intervals [473]:
2790
+ xmin = 41.9
2791
+ xmax = 42
2792
+ text = "Z"
2793
+ intervals [474]:
2794
+ xmin = 42
2795
+ xmax = 42.08
2796
+ text = "M"
2797
+ intervals [475]:
2798
+ xmin = 42.08
2799
+ xmax = 42.13
2800
+ text = "AH1"
2801
+ intervals [476]:
2802
+ xmin = 42.13
2803
+ xmax = 42.22
2804
+ text = "CH"
2805
+ intervals [477]:
2806
+ xmin = 42.22
2807
+ xmax = 42.26
2808
+ text = "EH1"
2809
+ intervals [478]:
2810
+ xmin = 42.26
2811
+ xmax = 42.31
2812
+ text = "Z"
2813
+ intervals [479]:
2814
+ xmin = 42.31
2815
+ xmax = 42.4
2816
+ text = "AY1"
2817
+ intervals [480]:
2818
+ xmin = 42.4
2819
+ xmax = 42.51
2820
+ text = "K"
2821
+ intervals [481]:
2822
+ xmin = 42.51
2823
+ xmax = 42.64
2824
+ text = "AE1"
2825
+ intervals [482]:
2826
+ xmin = 42.64
2827
+ xmax = 42.76
2828
+ text = "N"
2829
+ intervals [483]:
2830
+ xmin = 42.76
2831
+ xmax = 42.81
2832
+ text = "W"
2833
+ intervals [484]:
2834
+ xmin = 42.81
2835
+ xmax = 42.84
2836
+ text = "EH1"
2837
+ intervals [485]:
2838
+ xmin = 42.84
2839
+ xmax = 42.89
2840
+ text = "N"
2841
+ intervals [486]:
2842
+ xmin = 42.89
2843
+ xmax = 42.95
2844
+ text = "AH0"
2845
+ intervals [487]:
2846
+ xmin = 42.95
2847
+ xmax = 42.98
2848
+ text = "M"
2849
+ intervals [488]:
2850
+ xmin = 42.98
2851
+ xmax = 43.03
2852
+ text = "N"
2853
+ intervals [489]:
2854
+ xmin = 43.03
2855
+ xmax = 43.12
2856
+ text = "AA1"
2857
+ intervals [490]:
2858
+ xmin = 43.12
2859
+ xmax = 43.18
2860
+ text = "T"
2861
+ intervals [491]:
2862
+ xmin = 43.18
2863
+ xmax = 43.28
2864
+ text = "W"
2865
+ intervals [492]:
2866
+ xmin = 43.28
2867
+ xmax = 43.42
2868
+ text = "ER1"
2869
+ intervals [493]:
2870
+ xmin = 43.42
2871
+ xmax = 43.49
2872
+ text = "K"
2873
+ intervals [494]:
2874
+ xmin = 43.49
2875
+ xmax = 43.53
2876
+ text = "IH0"
2877
+ intervals [495]:
2878
+ xmin = 43.53
2879
+ xmax = 43.76
2880
+ text = "NG"
2881
+ intervals [496]:
2882
+ xmin = 43.76
2883
+ xmax = 44.5
2884
+ text = ""
2885
+ intervals [497]:
2886
+ xmin = 44.5
2887
+ xmax = 44.86
2888
+ text = "AH0"
2889
+ intervals [498]:
2890
+ xmin = 44.86
2891
+ xmax = 45.15
2892
+ text = "N"
2893
+ intervals [499]:
2894
+ xmin = 45.15
2895
+ xmax = 45.19
2896
+ text = "D"
2897
+ intervals [500]:
2898
+ xmin = 45.19
2899
+ xmax = 45.27
2900
+ text = "AA1"
2901
+ intervals [501]:
2902
+ xmin = 45.27
2903
+ xmax = 45.32
2904
+ text = "N"
2905
+ intervals [502]:
2906
+ xmin = 45.32
2907
+ xmax = 45.4
2908
+ text = "AH1"
2909
+ intervals [503]:
2910
+ xmin = 45.4
2911
+ xmax = 45.46
2912
+ text = "DH"
2913
+ intervals [504]:
2914
+ xmin = 45.46
2915
+ xmax = 45.49
2916
+ text = "ER0"
2917
+ intervals [505]:
2918
+ xmin = 45.49
2919
+ xmax = 45.55
2920
+ text = "D"
2921
+ intervals [506]:
2922
+ xmin = 45.55
2923
+ xmax = 45.74
2924
+ text = "EY1"
2925
+ intervals [507]:
2926
+ xmin = 45.74
2927
+ xmax = 45.82
2928
+ text = "Z"
2929
+ intervals [508]:
2930
+ xmin = 45.82
2931
+ xmax = 45.89
2932
+ text = "W"
2933
+ intervals [509]:
2934
+ xmin = 45.89
2935
+ xmax = 45.92
2936
+ text = "EH1"
2937
+ intervals [510]:
2938
+ xmin = 45.92
2939
+ xmax = 45.96
2940
+ text = "N"
2941
+ intervals [511]:
2942
+ xmin = 45.96
2943
+ xmax = 46.09
2944
+ text = "AY1"
2945
+ intervals [512]:
2946
+ xmin = 46.09
2947
+ xmax = 46.16
2948
+ text = "M"
2949
+ intervals [513]:
2950
+ xmin = 46.16
2951
+ xmax = 46.29
2952
+ text = "F"
2953
+ intervals [514]:
2954
+ xmin = 46.29
2955
+ xmax = 46.39
2956
+ text = "R"
2957
+ intervals [515]:
2958
+ xmin = 46.39
2959
+ xmax = 46.65
2960
+ text = "IY1"
2961
+ intervals [516]:
2962
+ xmin = 46.65
2963
+ xmax = 46.86
2964
+ text = "AY1"
2965
+ intervals [517]:
2966
+ xmin = 46.86
2967
+ xmax = 46.94
2968
+ text = "L"
2969
+ intervals [518]:
2970
+ xmin = 46.94
2971
+ xmax = 47.08
2972
+ text = "AY1"
2973
+ intervals [519]:
2974
+ xmin = 47.08
2975
+ xmax = 47.16
2976
+ text = "K"
2977
+ intervals [520]:
2978
+ xmin = 47.16
2979
+ xmax = 47.25
2980
+ text = "T"
2981
+ intervals [521]:
2982
+ xmin = 47.25
2983
+ xmax = 47.39
2984
+ text = "UW1"
2985
+ intervals [522]:
2986
+ xmin = 47.39
2987
+ xmax = 47.48
2988
+ text = "L"
2989
+ intervals [523]:
2990
+ xmin = 47.48
2991
+ xmax = 47.53
2992
+ text = "IH1"
2993
+ intervals [524]:
2994
+ xmin = 47.53
2995
+ xmax = 47.6
2996
+ text = "S"
2997
+ intervals [525]:
2998
+ xmin = 47.6
2999
+ xmax = 47.64
3000
+ text = "AH0"
3001
+ intervals [526]:
3002
+ xmin = 47.64
3003
+ xmax = 47.86
3004
+ text = "N"
3005
+ intervals [527]:
3006
+ xmin = 47.86
3007
+ xmax = 47.93
3008
+ text = "T"
3009
+ intervals [528]:
3010
+ xmin = 47.93
3011
+ xmax = 48.03
3012
+ text = "IH0"
3013
+ intervals [529]:
3014
+ xmin = 48.03
3015
+ xmax = 48.07
3016
+ text = "M"
3017
+ intervals [530]:
3018
+ xmin = 48.07
3019
+ xmax = 48.15
3020
+ text = "Y"
3021
+ intervals [531]:
3022
+ xmin = 48.15
3023
+ xmax = 48.2
3024
+ text = "UW1"
3025
+ intervals [532]:
3026
+ xmin = 48.2
3027
+ xmax = 48.27
3028
+ text = "Z"
3029
+ intervals [533]:
3030
+ xmin = 48.27
3031
+ xmax = 48.35
3032
+ text = "IH0"
3033
+ intervals [534]:
3034
+ xmin = 48.35
3035
+ xmax = 48.41
3036
+ text = "K"
3037
+ intervals [535]:
3038
+ xmin = 48.41
3039
+ xmax = 48.48
3040
+ text = "AH0"
3041
+ intervals [536]:
3042
+ xmin = 48.48
3043
+ xmax = 48.56
3044
+ text = "N"
3045
+ intervals [537]:
3046
+ xmin = 48.56
3047
+ xmax = 48.73
3048
+ text = "D"
3049
+ intervals [538]:
3050
+ xmin = 48.73
3051
+ xmax = 48.76
3052
+ text = ""
3053
+ intervals [539]:
3054
+ xmin = 48.76
3055
+ xmax = 48.91
3056
+ text = "W"
3057
+ intervals [540]:
3058
+ xmin = 48.91
3059
+ xmax = 49.01
3060
+ text = "ER1"
3061
+ intervals [541]:
3062
+ xmin = 49.01
3063
+ xmax = 49.13
3064
+ text = "W"
3065
+ intervals [542]:
3066
+ xmin = 49.13
3067
+ xmax = 49.23
3068
+ text = "AA1"
3069
+ intervals [543]:
3070
+ xmin = 49.23
3071
+ xmax = 49.3
3072
+ text = "CH"
3073
+ intervals [544]:
3074
+ xmin = 49.3
3075
+ xmax = 49.38
3076
+ text = "AH0"
3077
+ intervals [545]:
3078
+ xmin = 49.38
3079
+ xmax = 49.46
3080
+ text = "D"
3081
+ intervals [546]:
3082
+ xmin = 49.46
3083
+ xmax = 49.56
3084
+ text = "AA2"
3085
+ intervals [547]:
3086
+ xmin = 49.56
3087
+ xmax = 49.62
3088
+ text = "K"
3089
+ intervals [548]:
3090
+ xmin = 49.62
3091
+ xmax = 49.66
3092
+ text = "Y"
3093
+ intervals [549]:
3094
+ xmin = 49.66
3095
+ xmax = 49.7
3096
+ text = "AH0"
3097
+ intervals [550]:
3098
+ xmin = 49.7
3099
+ xmax = 49.76
3100
+ text = "M"
3101
+ intervals [551]:
3102
+ xmin = 49.76
3103
+ xmax = 49.81
3104
+ text = "EH1"
3105
+ intervals [552]:
3106
+ xmin = 49.81
3107
+ xmax = 49.85
3108
+ text = "N"
3109
+ intervals [553]:
3110
+ xmin = 49.85
3111
+ xmax = 49.98
3112
+ text = "ER0"
3113
+ intervals [554]:
3114
+ xmin = 49.98
3115
+ xmax = 50.05
3116
+ text = "IY0"
3117
+ intervals [555]:
3118
+ xmin = 50.05
3119
+ xmax = 50.17
3120
+ text = "M"
3121
+ intervals [556]:
3122
+ xmin = 50.17
3123
+ xmax = 50.2
3124
+ text = "UW1"
3125
+ intervals [557]:
3126
+ xmin = 50.2
3127
+ xmax = 50.28
3128
+ text = "V"
3129
+ intervals [558]:
3130
+ xmin = 50.28
3131
+ xmax = 50.38
3132
+ text = "IY0"
3133
+ intervals [559]:
3134
+ xmin = 50.38
3135
+ xmax = 50.51
3136
+ text = "Z"
3137
+ intervals [560]:
3138
+ xmin = 50.51
3139
+ xmax = 50.75
3140
+ text = "AA1"
3141
+ intervals [561]:
3142
+ xmin = 50.75
3143
+ xmax = 50.82
3144
+ text = "N"
3145
+ intervals [562]:
3146
+ xmin = 50.82
3147
+ xmax = 50.9
3148
+ text = "M"
3149
+ intervals [563]:
3150
+ xmin = 50.9
3151
+ xmax = 51.11
3152
+ text = "AY1"
3153
+ intervals [564]:
3154
+ xmin = 51.11
3155
+ xmax = 51.22
3156
+ text = "L"
3157
+ intervals [565]:
3158
+ xmin = 51.22
3159
+ xmax = 51.39
3160
+ text = "AE1"
3161
+ intervals [566]:
3162
+ xmin = 51.39
3163
+ xmax = 51.44
3164
+ text = "P"
3165
+ intervals [567]:
3166
+ xmin = 51.44
3167
+ xmax = 51.49
3168
+ text = "T"
3169
+ intervals [568]:
3170
+ xmin = 51.49
3171
+ xmax = 51.66
3172
+ text = "AA2"
3173
+ intervals [569]:
3174
+ xmin = 51.66
3175
+ xmax = 51.81
3176
+ text = "P"
3177
+ intervals [570]:
3178
+ xmin = 51.81
3179
+ xmax = 52.14
3180
+ text = ""
3181
+ intervals [571]:
3182
+ xmin = 52.14
3183
+ xmax = 52.2
3184
+ text = "B"
3185
+ intervals [572]:
3186
+ xmin = 52.2
3187
+ xmax = 52.33
3188
+ text = "AH1"
3189
+ intervals [573]:
3190
+ xmin = 52.33
3191
+ xmax = 52.44
3192
+ text = "T"
3193
+ intervals [574]:
3194
+ xmin = 52.44
3195
+ xmax = 52.51
3196
+ text = "S"
3197
+ intervals [575]:
3198
+ xmin = 52.51
3199
+ xmax = 52.59
3200
+ text = "AH1"
3201
+ intervals [576]:
3202
+ xmin = 52.59
3203
+ xmax = 52.64
3204
+ text = "M"
3205
+ intervals [577]:
3206
+ xmin = 52.64
3207
+ xmax = 52.67
3208
+ text = "T"
3209
+ intervals [578]:
3210
+ xmin = 52.67
3211
+ xmax = 52.77
3212
+ text = "AY2"
3213
+ intervals [579]:
3214
+ xmin = 52.77
3215
+ xmax = 52.82
3216
+ text = "M"
3217
+ intervals [580]:
3218
+ xmin = 52.82
3219
+ xmax = 52.86
3220
+ text = "Z"
3221
+ intervals [581]:
3222
+ xmin = 52.86
3223
+ xmax = 52.9
3224
+ text = "IH1"
3225
+ intervals [582]:
3226
+ xmin = 52.9
3227
+ xmax = 52.93
3228
+ text = "T"
3229
+ intervals [583]:
3230
+ xmin = 52.93
3231
+ xmax = 52.98
3232
+ text = "JH"
3233
+ intervals [584]:
3234
+ xmin = 52.98
3235
+ xmax = 53.07
3236
+ text = "IH0"
3237
+ intervals [585]:
3238
+ xmin = 53.07
3239
+ xmax = 53.1
3240
+ text = "S"
3241
+ intervals [586]:
3242
+ xmin = 53.1
3243
+ xmax = 53.13
3244
+ text = "T"
3245
+ intervals [587]:
3246
+ xmin = 53.13
3247
+ xmax = 53.18
3248
+ text = "S"
3249
+ intervals [588]:
3250
+ xmin = 53.18
3251
+ xmax = 53.26
3252
+ text = "L"
3253
+ intervals [589]:
3254
+ xmin = 53.26
3255
+ xmax = 53.35
3256
+ text = "IY1"
3257
+ intervals [590]:
3258
+ xmin = 53.35
3259
+ xmax = 53.61
3260
+ text = "P"
3261
+ intervals [591]:
3262
+ xmin = 53.61
3263
+ xmax = 53.65
3264
+ text = ""
3265
+ intervals [592]:
3266
+ xmin = 53.65
3267
+ xmax = 53.83
3268
+ text = "AY1"
3269
+ intervals [593]:
3270
+ xmin = 53.83
3271
+ xmax = 53.88
3272
+ text = "AH0"
3273
+ intervals [594]:
3274
+ xmin = 53.88
3275
+ xmax = 53.95
3276
+ text = "S"
3277
+ intervals [595]:
3278
+ xmin = 53.95
3279
+ xmax = 54
3280
+ text = "P"
3281
+ intervals [596]:
3282
+ xmin = 54
3283
+ xmax = 54.09
3284
+ text = "EH1"
3285
+ intervals [597]:
3286
+ xmin = 54.09
3287
+ xmax = 54.19
3288
+ text = "SH"
3289
+ intervals [598]:
3290
+ xmin = 54.19
3291
+ xmax = 54.22
3292
+ text = "L"
3293
+ intervals [599]:
3294
+ xmin = 54.22
3295
+ xmax = 54.27
3296
+ text = "IY0"
3297
+ intervals [600]:
3298
+ xmin = 54.27
3299
+ xmax = 54.33
3300
+ text = "L"
3301
+ intervals [601]:
3302
+ xmin = 54.33
3303
+ xmax = 54.43
3304
+ text = "AY1"
3305
+ intervals [602]:
3306
+ xmin = 54.43
3307
+ xmax = 54.57
3308
+ text = "K"
3309
+ intervals [603]:
3310
+ xmin = 54.57
3311
+ xmax = 54.61
3312
+ text = "T"
3313
+ intervals [604]:
3314
+ xmin = 54.61
3315
+ xmax = 54.69
3316
+ text = "W"
3317
+ intervals [605]:
3318
+ xmin = 54.69
3319
+ xmax = 54.79
3320
+ text = "AA1"
3321
+ intervals [606]:
3322
+ xmin = 54.79
3323
+ xmax = 54.85
3324
+ text = "CH"
3325
+ intervals [607]:
3326
+ xmin = 54.85
3327
+ xmax = 54.89
3328
+ text = "IH0"
3329
+ intervals [608]:
3330
+ xmin = 54.89
3331
+ xmax = 55.01
3332
+ text = "NG"
3333
+ intervals [609]:
3334
+ xmin = 55.01
3335
+ xmax = 55.12
3336
+ text = "JH"
3337
+ intervals [610]:
3338
+ xmin = 55.12
3339
+ xmax = 55.25
3340
+ text = "AE2"
3341
+ intervals [611]:
3342
+ xmin = 55.25
3343
+ xmax = 55.3
3344
+ text = "P"
3345
+ intervals [612]:
3346
+ xmin = 55.3
3347
+ xmax = 55.35
3348
+ text = "AH0"
3349
+ intervals [613]:
3350
+ xmin = 55.35
3351
+ xmax = 55.4
3352
+ text = "N"
3353
+ intervals [614]:
3354
+ xmin = 55.4
3355
+ xmax = 55.59
3356
+ text = "IY1"
3357
+ intervals [615]:
3358
+ xmin = 55.59
3359
+ xmax = 55.62
3360
+ text = "Z"
3361
+ intervals [616]:
3362
+ xmin = 55.62
3363
+ xmax = 55.77
3364
+ text = "AE1"
3365
+ intervals [617]:
3366
+ xmin = 55.77
3367
+ xmax = 55.83
3368
+ text = "N"
3369
+ intervals [618]:
3370
+ xmin = 55.83
3371
+ xmax = 55.87
3372
+ text = "AH0"
3373
+ intervals [619]:
3374
+ xmin = 55.87
3375
+ xmax = 55.91
3376
+ text = "M"
3377
+ intervals [620]:
3378
+ xmin = 55.91
3379
+ xmax = 56.33
3380
+ text = "AY1"
3381
+ intervals [621]:
3382
+ xmin = 56.33
3383
+ xmax = 56.85
3384
+ text = ""
3385
+ intervals [622]:
3386
+ xmin = 56.85
3387
+ xmax = 56.99
3388
+ text = "TH"
3389
+ intervals [623]:
3390
+ xmin = 56.99
3391
+ xmax = 57.05
3392
+ text = "IH1"
3393
+ intervals [624]:
3394
+ xmin = 57.05
3395
+ xmax = 57.09
3396
+ text = "NG"
3397
+ intervals [625]:
3398
+ xmin = 57.09
3399
+ xmax = 57.12
3400
+ text = "K"
3401
+ intervals [626]:
3402
+ xmin = 57.12
3403
+ xmax = 57.2
3404
+ text = "W"
3405
+ intervals [627]:
3406
+ xmin = 57.2
3407
+ xmax = 57.27
3408
+ text = "AA1"
3409
+ intervals [628]:
3410
+ xmin = 57.27
3411
+ xmax = 57.35
3412
+ text = "CH"
3413
+ intervals [629]:
3414
+ xmin = 57.35
3415
+ xmax = 57.4
3416
+ text = "IH0"
3417
+ intervals [630]:
3418
+ xmin = 57.4
3419
+ xmax = 57.43
3420
+ text = "NG"
3421
+ intervals [631]:
3422
+ xmin = 57.43
3423
+ xmax = 57.62
3424
+ text = "EY1"
3425
+ intervals [632]:
3426
+ xmin = 57.62
3427
+ xmax = 57.69
3428
+ text = "M"
3429
+ intervals [633]:
3430
+ xmin = 57.69
3431
+ xmax = 57.79
3432
+ text = "IY1"
3433
+ intervals [634]:
3434
+ xmin = 57.79
3435
+ xmax = 57.92
3436
+ text = "IH0"
3437
+ intervals [635]:
3438
+ xmin = 57.92
3439
+ xmax = 58.09
3440
+ text = "Z"
3441
+ intervals [636]:
3442
+ xmin = 58.09
3443
+ xmax = 58.12
3444
+ text = "AE1"
3445
+ intervals [637]:
3446
+ xmin = 58.12
3447
+ xmax = 58.19
3448
+ text = "N"
3449
+ intervals [638]:
3450
+ xmin = 58.19
3451
+ xmax = 58.23
3452
+ text = "AH0"
3453
+ intervals [639]:
3454
+ xmin = 58.23
3455
+ xmax = 58.39
3456
+ text = "M"
3457
+ intervals [640]:
3458
+ xmin = 58.39
3459
+ xmax = 58.97
3460
+ text = "IH1"
3461
+ intervals [641]:
3462
+ xmin = 58.97
3463
+ xmax = 59.06
3464
+ text = "Z"
3465
+ intervals [642]:
3466
+ xmin = 59.06
3467
+ xmax = 59.11
3468
+ text = "V"
3469
+ intervals [643]:
3470
+ xmin = 59.11
3471
+ xmax = 59.15
3472
+ text = "EH1"
3473
+ intervals [644]:
3474
+ xmin = 59.15
3475
+ xmax = 59.24
3476
+ text = "R"
3477
+ intervals [645]:
3478
+ xmin = 59.24
3479
+ xmax = 59.31
3480
+ text = "IY0"
3481
+ intervals [646]:
3482
+ xmin = 59.31
3483
+ xmax = 59.38
3484
+ text = "HH"
3485
+ intervals [647]:
3486
+ xmin = 59.38
3487
+ xmax = 59.43
3488
+ text = "EH1"
3489
+ intervals [648]:
3490
+ xmin = 59.43
3491
+ xmax = 59.52
3492
+ text = "L"
3493
+ intervals [649]:
3494
+ xmin = 59.52
3495
+ xmax = 59.55
3496
+ text = "P"
3497
+ intervals [650]:
3498
+ xmin = 59.55
3499
+ xmax = 59.58
3500
+ text = "F"
3501
+ intervals [651]:
3502
+ xmin = 59.58
3503
+ xmax = 59.61
3504
+ text = "AH0"
3505
+ intervals [652]:
3506
+ xmin = 59.61
3507
+ xmax = 59.67
3508
+ text = "L"
3509
+ intervals [653]:
3510
+ xmin = 59.67
3511
+ xmax = 59.72
3512
+ text = "F"
3513
+ intervals [654]:
3514
+ xmin = 59.72
3515
+ xmax = 59.75
3516
+ text = "R"
3517
+ intervals [655]:
3518
+ xmin = 59.75
3519
+ xmax = 59.81
3520
+ text = "ER0"
3521
+ intervals [656]:
3522
+ xmin = 59.81
3523
+ xmax = 59.88
3524
+ text = "M"
3525
+ intervals [657]:
3526
+ xmin = 59.88
3527
+ xmax = 59.98
3528
+ text = "IY1"
3529
+ intervals [658]:
3530
+ xmin = 59.98
3531
+ xmax = 60.08
3532
+ text = "T"
3533
+ intervals [659]:
3534
+ xmin = 60.08
3535
+ xmax = 60.28
3536
+ text = "UW1"
3537
+ intervals [660]:
3538
+ xmin = 60.28
3539
+ xmax = 60.42
3540
+ text = "L"
3541
+ intervals [661]:
3542
+ xmin = 60.42
3543
+ xmax = 60.63
3544
+ text = "ER1"
3545
+ intervals [662]:
3546
+ xmin = 60.63
3547
+ xmax = 60.69
3548
+ text = "N"
3549
+ intervals [663]:
3550
+ xmin = 60.69
3551
+ xmax = 60.72
3552
+ text = "AE1"
3553
+ intervals [664]:
3554
+ xmin = 60.72
3555
+ xmax = 60.75
3556
+ text = "N"
3557
+ intervals [665]:
3558
+ xmin = 60.75
3559
+ xmax = 60.78
3560
+ text = "D"
3561
+ intervals [666]:
3562
+ xmin = 60.78
3563
+ xmax = 60.84
3564
+ text = "IH0"
3565
+ intervals [667]:
3566
+ xmin = 60.84
3567
+ xmax = 60.88
3568
+ text = "K"
3569
+ intervals [668]:
3570
+ xmin = 60.88
3571
+ xmax = 60.95
3572
+ text = "S"
3573
+ intervals [669]:
3574
+ xmin = 60.95
3575
+ xmax = 61.01
3576
+ text = "P"
3577
+ intervals [670]:
3578
+ xmin = 61.01
3579
+ xmax = 61.09
3580
+ text = "R"
3581
+ intervals [671]:
3582
+ xmin = 61.09
3583
+ xmax = 61.14
3584
+ text = "EH1"
3585
+ intervals [672]:
3586
+ xmin = 61.14
3587
+ xmax = 61.21
3588
+ text = "S"
3589
+ intervals [673]:
3590
+ xmin = 61.21
3591
+ xmax = 61.33
3592
+ text = "JH"
3593
+ intervals [674]:
3594
+ xmin = 61.33
3595
+ xmax = 61.45
3596
+ text = "AE2"
3597
+ intervals [675]:
3598
+ xmin = 61.45
3599
+ xmax = 61.51
3600
+ text = "P"
3601
+ intervals [676]:
3602
+ xmin = 61.51
3603
+ xmax = 61.55
3604
+ text = "AH0"
3605
+ intervals [677]:
3606
+ xmin = 61.55
3607
+ xmax = 61.59
3608
+ text = "N"
3609
+ intervals [678]:
3610
+ xmin = 61.59
3611
+ xmax = 61.75
3612
+ text = "IY1"
3613
+ intervals [679]:
3614
+ xmin = 61.75
3615
+ xmax = 61.89
3616
+ text = "Z"
3617
+ intervals [680]:
3618
+ xmin = 61.89
3619
+ xmax = 62.02
3620
+ text = "B"
3621
+ intervals [681]:
3622
+ xmin = 62.02
3623
+ xmax = 62.11
3624
+ text = "EH1"
3625
+ intervals [682]:
3626
+ xmin = 62.11
3627
+ xmax = 62.19
3628
+ text = "T"
3629
+ intervals [683]:
3630
+ xmin = 62.19
3631
+ xmax = 62.42
3632
+ text = "ER0"
3633
+ intervals [684]:
3634
+ xmin = 62.42
3635
+ xmax = 64.097375
3636
+ text = ""
EMAGE/test_sequences/textgrid/2_scott_0_2_2.TextGrid ADDED
@@ -0,0 +1,3716 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ File type = "ooTextFile"
2
+ Object class = "TextGrid"
3
+
4
+ xmin = 0.0
5
+ xmax = 62
6
+ tiers? <exists>
7
+ size = 2
8
+ item []:
9
+ item [1]:
10
+ class = "IntervalTier"
11
+ name = "words"
12
+ xmin = 0.0
13
+ xmax = 62
14
+ intervals: size = 223
15
+ intervals [1]:
16
+ xmin = 0.0
17
+ xmax = 1.45
18
+ text = ""
19
+ intervals [2]:
20
+ xmin = 1.45
21
+ xmax = 1.87
22
+ text = "so"
23
+ intervals [3]:
24
+ xmin = 1.87
25
+ xmax = 2.02
26
+ text = "when"
27
+ intervals [4]:
28
+ xmin = 2.02
29
+ xmax = 2.13
30
+ text = "i"
31
+ intervals [5]:
32
+ xmin = 2.13
33
+ xmax = 2.35
34
+ text = "have"
35
+ intervals [6]:
36
+ xmin = 2.35
37
+ xmax = 2.57
38
+ text = "time"
39
+ intervals [7]:
40
+ xmin = 2.57
41
+ xmax = 2.65
42
+ text = "to"
43
+ intervals [8]:
44
+ xmin = 2.65
45
+ xmax = 3.18
46
+ text = "kill"
47
+ intervals [9]:
48
+ xmin = 3.18
49
+ xmax = 3.22
50
+ text = ""
51
+ intervals [10]:
52
+ xmin = 3.22
53
+ xmax = 3.41
54
+ text = "i"
55
+ intervals [11]:
56
+ xmin = 3.41
57
+ xmax = 3.6
58
+ text = "like"
59
+ intervals [12]:
60
+ xmin = 3.6
61
+ xmax = 3.68
62
+ text = "to"
63
+ intervals [13]:
64
+ xmin = 3.68
65
+ xmax = 3.88
66
+ text = "play"
67
+ intervals [14]:
68
+ xmin = 3.88
69
+ xmax = 3.96
70
+ text = "on"
71
+ intervals [15]:
72
+ xmin = 3.96
73
+ xmax = 4.08
74
+ text = "the"
75
+ intervals [16]:
76
+ xmin = 4.08
77
+ xmax = 4.5
78
+ text = "internet"
79
+ intervals [17]:
80
+ xmin = 4.5
81
+ xmax = 4.66
82
+ text = "and"
83
+ intervals [18]:
84
+ xmin = 4.66
85
+ xmax = 4.87
86
+ text = "play"
87
+ intervals [19]:
88
+ xmin = 4.87
89
+ xmax = 5.19
90
+ text = "close"
91
+ intervals [20]:
92
+ xmin = 5.19
93
+ xmax = 5.67
94
+ text = "attention"
95
+ intervals [21]:
96
+ xmin = 5.67
97
+ xmax = 6.0
98
+ text = "to"
99
+ intervals [22]:
100
+ xmin = 6.0
101
+ xmax = 6.26
102
+ text = "new"
103
+ intervals [23]:
104
+ xmin = 6.26
105
+ xmax = 6.71
106
+ text = "fashion"
107
+ intervals [24]:
108
+ xmin = 6.71
109
+ xmax = 7.17
110
+ text = "events"
111
+ intervals [25]:
112
+ xmin = 7.17
113
+ xmax = 7.43
114
+ text = ""
115
+ intervals [26]:
116
+ xmin = 7.43
117
+ xmax = 7.76
118
+ text = "such"
119
+ intervals [27]:
120
+ xmin = 7.76
121
+ xmax = 8.14
122
+ text = "as"
123
+ intervals [28]:
124
+ xmin = 8.14
125
+ xmax = 8.19
126
+ text = ""
127
+ intervals [29]:
128
+ xmin = 8.19
129
+ xmax = 8.34
130
+ text = "the"
131
+ intervals [30]:
132
+ xmin = 8.34
133
+ xmax = 8.47
134
+ text = "new"
135
+ intervals [31]:
136
+ xmin = 8.47
137
+ xmax = 8.68
138
+ text = "york"
139
+ intervals [32]:
140
+ xmin = 8.68
141
+ xmax = 9.12
142
+ text = "fashion"
143
+ intervals [33]:
144
+ xmin = 9.12
145
+ xmax = 9.42
146
+ text = "week"
147
+ intervals [34]:
148
+ xmin = 9.42
149
+ xmax = 9.49
150
+ text = "the"
151
+ intervals [35]:
152
+ xmin = 9.49
153
+ xmax = 9.87
154
+ text = "paris"
155
+ intervals [36]:
156
+ xmin = 9.87
157
+ xmax = 10.25
158
+ text = "fashion"
159
+ intervals [37]:
160
+ xmin = 10.25
161
+ xmax = 10.56
162
+ text = "week"
163
+ intervals [38]:
164
+ xmin = 10.56
165
+ xmax = 10.66
166
+ text = "the"
167
+ intervals [39]:
168
+ xmin = 10.66
169
+ xmax = 11.07
170
+ text = "london"
171
+ intervals [40]:
172
+ xmin = 11.07
173
+ xmax = 11.51
174
+ text = "fashion"
175
+ intervals [41]:
176
+ xmin = 11.51
177
+ xmax = 11.78
178
+ text = "week"
179
+ intervals [42]:
180
+ xmin = 11.78
181
+ xmax = 12.17
182
+ text = "and"
183
+ intervals [43]:
184
+ xmin = 12.17
185
+ xmax = 12.21
186
+ text = ""
187
+ intervals [44]:
188
+ xmin = 12.21
189
+ xmax = 12.83
190
+ text = "milan"
191
+ intervals [45]:
192
+ xmin = 12.83
193
+ xmax = 13.24
194
+ text = "fashion"
195
+ intervals [46]:
196
+ xmin = 13.24
197
+ xmax = 13.62
198
+ text = "week"
199
+ intervals [47]:
200
+ xmin = 13.62
201
+ xmax = 14.03
202
+ text = ""
203
+ intervals [48]:
204
+ xmin = 14.03
205
+ xmax = 14.15
206
+ text = "the"
207
+ intervals [49]:
208
+ xmin = 14.15
209
+ xmax = 14.35
210
+ text = "rest"
211
+ intervals [50]:
212
+ xmin = 14.35
213
+ xmax = 14.43
214
+ text = "of"
215
+ intervals [51]:
216
+ xmin = 14.43
217
+ xmax = 14.49
218
+ text = "the"
219
+ intervals [52]:
220
+ xmin = 14.49
221
+ xmax = 14.8
222
+ text = "time"
223
+ intervals [53]:
224
+ xmin = 14.8
225
+ xmax = 14.87
226
+ text = "i"
227
+ intervals [54]:
228
+ xmin = 14.87
229
+ xmax = 15.2
230
+ text = "usually"
231
+ intervals [55]:
232
+ xmin = 15.2
233
+ xmax = 15.3
234
+ text = "go"
235
+ intervals [56]:
236
+ xmin = 15.3
237
+ xmax = 15.36
238
+ text = "to"
239
+ intervals [57]:
240
+ xmin = 15.36
241
+ xmax = 15.44
242
+ text = "the"
243
+ intervals [58]:
244
+ xmin = 15.44
245
+ xmax = 15.93
246
+ text = "library"
247
+ intervals [59]:
248
+ xmin = 15.93
249
+ xmax = 16.04
250
+ text = "and"
251
+ intervals [60]:
252
+ xmin = 16.04
253
+ xmax = 16.25
254
+ text = "find"
255
+ intervals [61]:
256
+ xmin = 16.25
257
+ xmax = 16.35
258
+ text = "some"
259
+ intervals [62]:
260
+ xmin = 16.35
261
+ xmax = 16.71
262
+ text = "interesting"
263
+ intervals [63]:
264
+ xmin = 16.71
265
+ xmax = 17.19
266
+ text = "books"
267
+ intervals [64]:
268
+ xmin = 17.19
269
+ xmax = 17.31
270
+ text = "and"
271
+ intervals [65]:
272
+ xmin = 17.31
273
+ xmax = 17.51
274
+ text = "then"
275
+ intervals [66]:
276
+ xmin = 17.51
277
+ xmax = 17.63
278
+ text = "go"
279
+ intervals [67]:
280
+ xmin = 17.63
281
+ xmax = 17.7
282
+ text = "to"
283
+ intervals [68]:
284
+ xmin = 17.7
285
+ xmax = 17.78
286
+ text = "a"
287
+ intervals [69]:
288
+ xmin = 17.78
289
+ xmax = 18.08
290
+ text = "park"
291
+ intervals [70]:
292
+ xmin = 18.08
293
+ xmax = 18.17
294
+ text = "and"
295
+ intervals [71]:
296
+ xmin = 18.17
297
+ xmax = 18.75
298
+ text = "relax"
299
+ intervals [72]:
300
+ xmin = 18.75
301
+ xmax = 19.04
302
+ text = ""
303
+ intervals [73]:
304
+ xmin = 19.04
305
+ xmax = 19.22
306
+ text = "there"
307
+ intervals [74]:
308
+ xmin = 19.22
309
+ xmax = 19.27
310
+ text = "are"
311
+ intervals [75]:
312
+ xmin = 19.27
313
+ xmax = 19.5
314
+ text = "many"
315
+ intervals [76]:
316
+ xmin = 19.5
317
+ xmax = 19.78
318
+ text = "books"
319
+ intervals [77]:
320
+ xmin = 19.78
321
+ xmax = 19.93
322
+ text = "that"
323
+ intervals [78]:
324
+ xmin = 19.93
325
+ xmax = 20.11
326
+ text = "i"
327
+ intervals [79]:
328
+ xmin = 20.11
329
+ xmax = 20.4
330
+ text = "find"
331
+ intervals [80]:
332
+ xmin = 20.4
333
+ xmax = 20.92
334
+ text = "interesting"
335
+ intervals [81]:
336
+ xmin = 20.92
337
+ xmax = 21.15
338
+ text = "such"
339
+ intervals [82]:
340
+ xmin = 21.15
341
+ xmax = 21.3
342
+ text = "as"
343
+ intervals [83]:
344
+ xmin = 21.3
345
+ xmax = 21.62
346
+ text = "fashion"
347
+ intervals [84]:
348
+ xmin = 21.62
349
+ xmax = 22.19
350
+ text = "magazines"
351
+ intervals [85]:
352
+ xmin = 22.19
353
+ xmax = 22.8
354
+ text = "inspirational"
355
+ intervals [86]:
356
+ xmin = 22.8
357
+ xmax = 23.15
358
+ text = "books"
359
+ intervals [87]:
360
+ xmin = 23.15
361
+ xmax = 23.44
362
+ text = "and"
363
+ intervals [88]:
364
+ xmin = 23.44
365
+ xmax = 24.04
366
+ text = "professional"
367
+ intervals [89]:
368
+ xmin = 24.04
369
+ xmax = 24.46
370
+ text = "books"
371
+ intervals [90]:
372
+ xmin = 24.46
373
+ xmax = 24.83
374
+ text = ""
375
+ intervals [91]:
376
+ xmin = 24.83
377
+ xmax = 25.06
378
+ text = "these"
379
+ intervals [92]:
380
+ xmin = 25.06
381
+ xmax = 25.37
382
+ text = "books"
383
+ intervals [93]:
384
+ xmin = 25.37
385
+ xmax = 25.54
386
+ text = "can"
387
+ intervals [94]:
388
+ xmin = 25.54
389
+ xmax = 25.66
390
+ text = "give"
391
+ intervals [95]:
392
+ xmin = 25.66
393
+ xmax = 25.76
394
+ text = "me"
395
+ intervals [96]:
396
+ xmin = 25.76
397
+ xmax = 25.86
398
+ text = "the"
399
+ intervals [97]:
400
+ xmin = 25.86
401
+ xmax = 26.85
402
+ text = "motivation"
403
+ intervals [98]:
404
+ xmin = 26.85
405
+ xmax = 26.88
406
+ text = ""
407
+ intervals [99]:
408
+ xmin = 26.88
409
+ xmax = 27.07
410
+ text = "to"
411
+ intervals [100]:
412
+ xmin = 27.07
413
+ xmax = 27.37
414
+ text = "be"
415
+ intervals [101]:
416
+ xmin = 27.37
417
+ xmax = 28.01
418
+ text = "healthier"
419
+ intervals [102]:
420
+ xmin = 28.01
421
+ xmax = 28.18
422
+ text = "and"
423
+ intervals [103]:
424
+ xmin = 28.18
425
+ xmax = 28.9
426
+ text = "energetic"
427
+ intervals [104]:
428
+ xmin = 28.9
429
+ xmax = 29.1
430
+ text = ""
431
+ intervals [105]:
432
+ xmin = 29.1
433
+ xmax = 29.3
434
+ text = "and"
435
+ intervals [106]:
436
+ xmin = 29.3
437
+ xmax = 29.37
438
+ text = "the"
439
+ intervals [107]:
440
+ xmin = 29.37
441
+ xmax = 29.74
442
+ text = "last"
443
+ intervals [108]:
444
+ xmin = 29.74
445
+ xmax = 29.94
446
+ text = "thing"
447
+ intervals [109]:
448
+ xmin = 29.94
449
+ xmax = 30.14
450
+ text = "i"
451
+ intervals [110]:
452
+ xmin = 30.14
453
+ xmax = 30.42
454
+ text = "like"
455
+ intervals [111]:
456
+ xmin = 30.42
457
+ xmax = 30.53
458
+ text = "to"
459
+ intervals [112]:
460
+ xmin = 30.53
461
+ xmax = 30.84
462
+ text = "do"
463
+ intervals [113]:
464
+ xmin = 30.84
465
+ xmax = 31.22
466
+ text = "when"
467
+ intervals [114]:
468
+ xmin = 31.22
469
+ xmax = 31.43
470
+ text = "i'm"
471
+ intervals [115]:
472
+ xmin = 31.43
473
+ xmax = 31.87
474
+ text = "free"
475
+ intervals [116]:
476
+ xmin = 31.87
477
+ xmax = 31.99
478
+ text = "is"
479
+ intervals [117]:
480
+ xmin = 31.99
481
+ xmax = 32.11
482
+ text = "it"
483
+ intervals [118]:
484
+ xmin = 32.11
485
+ xmax = 32.23
486
+ text = "out"
487
+ intervals [119]:
488
+ xmin = 32.23
489
+ xmax = 32.35
490
+ text = "with"
491
+ intervals [120]:
492
+ xmin = 32.35
493
+ xmax = 32.48
494
+ text = "my"
495
+ intervals [121]:
496
+ xmin = 32.48
497
+ xmax = 32.86
498
+ text = "family"
499
+ intervals [122]:
500
+ xmin = 32.86
501
+ xmax = 33.33
502
+ text = "members"
503
+ intervals [123]:
504
+ xmin = 33.33
505
+ xmax = 33.51
506
+ text = ""
507
+ intervals [124]:
508
+ xmin = 33.51
509
+ xmax = 33.89
510
+ text = "you"
511
+ intervals [125]:
512
+ xmin = 33.89
513
+ xmax = 34.11
514
+ text = "would"
515
+ intervals [126]:
516
+ xmin = 34.11
517
+ xmax = 34.29
518
+ text = "be"
519
+ intervals [127]:
520
+ xmin = 34.29
521
+ xmax = 35.07
522
+ text = "surprised"
523
+ intervals [128]:
524
+ xmin = 35.07
525
+ xmax = 35.16
526
+ text = "to"
527
+ intervals [129]:
528
+ xmin = 35.16
529
+ xmax = 35.36
530
+ text = "know"
531
+ intervals [130]:
532
+ xmin = 35.36
533
+ xmax = 35.5
534
+ text = "that"
535
+ intervals [131]:
536
+ xmin = 35.5
537
+ xmax = 35.64
538
+ text = "i"
539
+ intervals [132]:
540
+ xmin = 35.64
541
+ xmax = 35.84
542
+ text = "have"
543
+ intervals [133]:
544
+ xmin = 35.84
545
+ xmax = 36.3
546
+ text = "tried"
547
+ intervals [134]:
548
+ xmin = 36.3
549
+ xmax = 36.57
550
+ text = ""
551
+ intervals [135]:
552
+ xmin = 36.57
553
+ xmax = 36.99
554
+ text = "all"
555
+ intervals [136]:
556
+ xmin = 36.99
557
+ xmax = 37.08
558
+ text = "the"
559
+ intervals [137]:
560
+ xmin = 37.08
561
+ xmax = 37.68
562
+ text = "restaurants"
563
+ intervals [138]:
564
+ xmin = 37.68
565
+ xmax = 37.71
566
+ text = ""
567
+ intervals [139]:
568
+ xmin = 37.71
569
+ xmax = 37.83
570
+ text = "in"
571
+ intervals [140]:
572
+ xmin = 37.83
573
+ xmax = 37.95
574
+ text = "our"
575
+ intervals [141]:
576
+ xmin = 37.95
577
+ xmax = 38.5
578
+ text = "huge"
579
+ intervals [142]:
580
+ xmin = 38.5
581
+ xmax = 39.07
582
+ text = "community"
583
+ intervals [143]:
584
+ xmin = 39.07
585
+ xmax = 39.23
586
+ text = ""
587
+ intervals [144]:
588
+ xmin = 39.23
589
+ xmax = 39.6
590
+ text = "i"
591
+ intervals [145]:
592
+ xmin = 39.6
593
+ xmax = 40.09
594
+ text = "actually"
595
+ intervals [146]:
596
+ xmin = 40.09
597
+ xmax = 40.32
598
+ text = "give"
599
+ intervals [147]:
600
+ xmin = 40.32
601
+ xmax = 40.61
602
+ text = "each"
603
+ intervals [148]:
604
+ xmin = 40.61
605
+ xmax = 41.08
606
+ text = "restaurant"
607
+ intervals [149]:
608
+ xmin = 41.08
609
+ xmax = 41.15
610
+ text = "a"
611
+ intervals [150]:
612
+ xmin = 41.15
613
+ xmax = 41.55
614
+ text = "score"
615
+ intervals [151]:
616
+ xmin = 41.55
617
+ xmax = 41.82
618
+ text = "based"
619
+ intervals [152]:
620
+ xmin = 41.82
621
+ xmax = 41.89
622
+ text = "on"
623
+ intervals [153]:
624
+ xmin = 41.89
625
+ xmax = 42.05
626
+ text = "how"
627
+ intervals [154]:
628
+ xmin = 42.05
629
+ xmax = 42.17
630
+ text = "good"
631
+ intervals [155]:
632
+ xmin = 42.17
633
+ xmax = 42.23
634
+ text = "the"
635
+ intervals [156]:
636
+ xmin = 42.23
637
+ xmax = 42.51
638
+ text = "food"
639
+ intervals [157]:
640
+ xmin = 42.51
641
+ xmax = 42.85
642
+ text = "is"
643
+ intervals [158]:
644
+ xmin = 42.85
645
+ xmax = 43.13
646
+ text = ""
647
+ intervals [159]:
648
+ xmin = 43.13
649
+ xmax = 43.36
650
+ text = "how"
651
+ intervals [160]:
652
+ xmin = 43.36
653
+ xmax = 43.51
654
+ text = "good"
655
+ intervals [161]:
656
+ xmin = 43.51
657
+ xmax = 43.62
658
+ text = "the"
659
+ intervals [162]:
660
+ xmin = 43.62
661
+ xmax = 44.1
662
+ text = "environment"
663
+ intervals [163]:
664
+ xmin = 44.1
665
+ xmax = 44.4
666
+ text = "is"
667
+ intervals [164]:
668
+ xmin = 44.4
669
+ xmax = 44.49
670
+ text = ""
671
+ intervals [165]:
672
+ xmin = 44.49
673
+ xmax = 44.98
674
+ text = "and"
675
+ intervals [166]:
676
+ xmin = 44.98
677
+ xmax = 45.34
678
+ text = "at"
679
+ intervals [167]:
680
+ xmin = 45.34
681
+ xmax = 45.62
682
+ text = "the"
683
+ intervals [168]:
684
+ xmin = 45.62
685
+ xmax = 45.91
686
+ text = "same"
687
+ intervals [169]:
688
+ xmin = 45.91
689
+ xmax = 46.29
690
+ text = "time"
691
+ intervals [170]:
692
+ xmin = 46.29
693
+ xmax = 46.42
694
+ text = "i"
695
+ intervals [171]:
696
+ xmin = 46.42
697
+ xmax = 46.54
698
+ text = "will"
699
+ intervals [172]:
700
+ xmin = 46.54
701
+ xmax = 46.74
702
+ text = "write"
703
+ intervals [173]:
704
+ xmin = 46.74
705
+ xmax = 46.94
706
+ text = "down"
707
+ intervals [174]:
708
+ xmin = 46.94
709
+ xmax = 47.02
710
+ text = "the"
711
+ intervals [175]:
712
+ xmin = 47.02
713
+ xmax = 47.24
714
+ text = "type"
715
+ intervals [176]:
716
+ xmin = 47.24
717
+ xmax = 47.39
718
+ text = "of"
719
+ intervals [177]:
720
+ xmin = 47.39
721
+ xmax = 47.8
722
+ text = "food"
723
+ intervals [178]:
724
+ xmin = 47.8
725
+ xmax = 48.03
726
+ text = ""
727
+ intervals [179]:
728
+ xmin = 48.03
729
+ xmax = 48.24
730
+ text = "they"
731
+ intervals [180]:
732
+ xmin = 48.24
733
+ xmax = 48.76
734
+ text = "serve"
735
+ intervals [181]:
736
+ xmin = 48.76
737
+ xmax = 49.42
738
+ text = ""
739
+ intervals [182]:
740
+ xmin = 49.42
741
+ xmax = 49.9
742
+ text = "so"
743
+ intervals [183]:
744
+ xmin = 49.9
745
+ xmax = 50.46
746
+ text = "when"
747
+ intervals [184]:
748
+ xmin = 50.46
749
+ xmax = 50.49
750
+ text = ""
751
+ intervals [185]:
752
+ xmin = 50.49
753
+ xmax = 50.85
754
+ text = "you're"
755
+ intervals [186]:
756
+ xmin = 50.85
757
+ xmax = 50.98
758
+ text = "so"
759
+ intervals [187]:
760
+ xmin = 50.98
761
+ xmax = 51.13
762
+ text = "when"
763
+ intervals [188]:
764
+ xmin = 51.13
765
+ xmax = 51.35
766
+ text = "each"
767
+ intervals [189]:
768
+ xmin = 51.35
769
+ xmax = 51.55
770
+ text = "time"
771
+ intervals [190]:
772
+ xmin = 51.55
773
+ xmax = 51.62
774
+ text = "a"
775
+ intervals [191]:
776
+ xmin = 51.62
777
+ xmax = 51.91
778
+ text = "friend"
779
+ intervals [192]:
780
+ xmin = 51.91
781
+ xmax = 52.32
782
+ text = "comes"
783
+ intervals [193]:
784
+ xmin = 52.32
785
+ xmax = 52.46
786
+ text = "to"
787
+ intervals [194]:
788
+ xmin = 52.46
789
+ xmax = 52.59
790
+ text = "the"
791
+ intervals [195]:
792
+ xmin = 52.59
793
+ xmax = 52.9
794
+ text = "city"
795
+ intervals [196]:
796
+ xmin = 52.9
797
+ xmax = 53.07
798
+ text = "to"
799
+ intervals [197]:
800
+ xmin = 53.07
801
+ xmax = 53.35
802
+ text = "enjoy"
803
+ intervals [198]:
804
+ xmin = 53.35
805
+ xmax = 53.62
806
+ text = "time"
807
+ intervals [199]:
808
+ xmin = 53.62
809
+ xmax = 53.74
810
+ text = "with"
811
+ intervals [200]:
812
+ xmin = 53.74
813
+ xmax = 54.02
814
+ text = "me"
815
+ intervals [201]:
816
+ xmin = 54.02
817
+ xmax = 54.31
818
+ text = ""
819
+ intervals [202]:
820
+ xmin = 54.31
821
+ xmax = 54.54
822
+ text = "i"
823
+ intervals [203]:
824
+ xmin = 54.54
825
+ xmax = 54.69
826
+ text = "will"
827
+ intervals [204]:
828
+ xmin = 54.69
829
+ xmax = 54.84
830
+ text = "give"
831
+ intervals [205]:
832
+ xmin = 54.84
833
+ xmax = 54.97
834
+ text = "them"
835
+ intervals [206]:
836
+ xmin = 54.97
837
+ xmax = 55.07
838
+ text = "the"
839
+ intervals [207]:
840
+ xmin = 55.07
841
+ xmax = 55.38
842
+ text = "top"
843
+ intervals [208]:
844
+ xmin = 55.38
845
+ xmax = 55.53
846
+ text = "5"
847
+ intervals [209]:
848
+ xmin = 55.53
849
+ xmax = 56.1
850
+ text = "restaurants"
851
+ intervals [210]:
852
+ xmin = 56.1
853
+ xmax = 56.44
854
+ text = "based"
855
+ intervals [211]:
856
+ xmin = 56.44
857
+ xmax = 56.68
858
+ text = "on"
859
+ intervals [212]:
860
+ xmin = 56.68
861
+ xmax = 56.99
862
+ text = "this"
863
+ intervals [213]:
864
+ xmin = 56.99
865
+ xmax = 57.35
866
+ text = "ranking"
867
+ intervals [214]:
868
+ xmin = 57.35
869
+ xmax = 57.53
870
+ text = "and"
871
+ intervals [215]:
872
+ xmin = 57.53
873
+ xmax = 57.86
874
+ text = "every"
875
+ intervals [216]:
876
+ xmin = 57.86
877
+ xmax = 58.44
878
+ text = "time"
879
+ intervals [217]:
880
+ xmin = 58.44
881
+ xmax = 59.02
882
+ text = ""
883
+ intervals [218]:
884
+ xmin = 59.02
885
+ xmax = 59.2
886
+ text = "you're"
887
+ intervals [219]:
888
+ xmin = 59.2
889
+ xmax = 59.72
890
+ text = "satisfied"
891
+ intervals [220]:
892
+ xmin = 59.72
893
+ xmax = 59.85
894
+ text = "with"
895
+ intervals [221]:
896
+ xmin = 59.85
897
+ xmax = 60.1
898
+ text = "these"
899
+ intervals [222]:
900
+ xmin = 60.1
901
+ xmax = 60.81
902
+ text = "restaurants"
903
+ intervals [223]:
904
+ xmin = 60.81
905
+ xmax = 62
906
+ text = ""
907
+ item [2]:
908
+ class = "IntervalTier"
909
+ name = "phones"
910
+ xmin = 0.0
911
+ xmax = 62
912
+ intervals: size = 701
913
+ intervals [1]:
914
+ xmin = 0.0
915
+ xmax = 1.45
916
+ text = ""
917
+ intervals [2]:
918
+ xmin = 1.45
919
+ xmax = 1.64
920
+ text = "S"
921
+ intervals [3]:
922
+ xmin = 1.64
923
+ xmax = 1.87
924
+ text = "OW1"
925
+ intervals [4]:
926
+ xmin = 1.87
927
+ xmax = 1.94
928
+ text = "W"
929
+ intervals [5]:
930
+ xmin = 1.94
931
+ xmax = 1.97
932
+ text = "EH1"
933
+ intervals [6]:
934
+ xmin = 1.97
935
+ xmax = 2.02
936
+ text = "N"
937
+ intervals [7]:
938
+ xmin = 2.02
939
+ xmax = 2.13
940
+ text = "AY1"
941
+ intervals [8]:
942
+ xmin = 2.13
943
+ xmax = 2.21
944
+ text = "HH"
945
+ intervals [9]:
946
+ xmin = 2.21
947
+ xmax = 2.29
948
+ text = "AE1"
949
+ intervals [10]:
950
+ xmin = 2.29
951
+ xmax = 2.35
952
+ text = "V"
953
+ intervals [11]:
954
+ xmin = 2.35
955
+ xmax = 2.43
956
+ text = "T"
957
+ intervals [12]:
958
+ xmin = 2.43
959
+ xmax = 2.52
960
+ text = "AY1"
961
+ intervals [13]:
962
+ xmin = 2.52
963
+ xmax = 2.57
964
+ text = "M"
965
+ intervals [14]:
966
+ xmin = 2.57
967
+ xmax = 2.6
968
+ text = "T"
969
+ intervals [15]:
970
+ xmin = 2.6
971
+ xmax = 2.65
972
+ text = "AH0"
973
+ intervals [16]:
974
+ xmin = 2.65
975
+ xmax = 2.75
976
+ text = "K"
977
+ intervals [17]:
978
+ xmin = 2.75
979
+ xmax = 2.81
980
+ text = "IH1"
981
+ intervals [18]:
982
+ xmin = 2.81
983
+ xmax = 3.18
984
+ text = "L"
985
+ intervals [19]:
986
+ xmin = 3.18
987
+ xmax = 3.22
988
+ text = ""
989
+ intervals [20]:
990
+ xmin = 3.22
991
+ xmax = 3.41
992
+ text = "AY1"
993
+ intervals [21]:
994
+ xmin = 3.41
995
+ xmax = 3.46
996
+ text = "L"
997
+ intervals [22]:
998
+ xmin = 3.46
999
+ xmax = 3.57
1000
+ text = "AY1"
1001
+ intervals [23]:
1002
+ xmin = 3.57
1003
+ xmax = 3.6
1004
+ text = "K"
1005
+ intervals [24]:
1006
+ xmin = 3.6
1007
+ xmax = 3.63
1008
+ text = "T"
1009
+ intervals [25]:
1010
+ xmin = 3.63
1011
+ xmax = 3.68
1012
+ text = "IH0"
1013
+ intervals [26]:
1014
+ xmin = 3.68
1015
+ xmax = 3.75
1016
+ text = "P"
1017
+ intervals [27]:
1018
+ xmin = 3.75
1019
+ xmax = 3.83
1020
+ text = "L"
1021
+ intervals [28]:
1022
+ xmin = 3.83
1023
+ xmax = 3.88
1024
+ text = "EY1"
1025
+ intervals [29]:
1026
+ xmin = 3.88
1027
+ xmax = 3.93
1028
+ text = "AA1"
1029
+ intervals [30]:
1030
+ xmin = 3.93
1031
+ xmax = 3.96
1032
+ text = "N"
1033
+ intervals [31]:
1034
+ xmin = 3.96
1035
+ xmax = 4.01
1036
+ text = "DH"
1037
+ intervals [32]:
1038
+ xmin = 4.01
1039
+ xmax = 4.08
1040
+ text = "IY0"
1041
+ intervals [33]:
1042
+ xmin = 4.08
1043
+ xmax = 4.13
1044
+ text = "IH1"
1045
+ intervals [34]:
1046
+ xmin = 4.13
1047
+ xmax = 4.16
1048
+ text = "N"
1049
+ intervals [35]:
1050
+ xmin = 4.16
1051
+ xmax = 4.19
1052
+ text = "T"
1053
+ intervals [36]:
1054
+ xmin = 4.19
1055
+ xmax = 4.25
1056
+ text = "ER0"
1057
+ intervals [37]:
1058
+ xmin = 4.25
1059
+ xmax = 4.29
1060
+ text = "N"
1061
+ intervals [38]:
1062
+ xmin = 4.29
1063
+ xmax = 4.42
1064
+ text = "EH2"
1065
+ intervals [39]:
1066
+ xmin = 4.42
1067
+ xmax = 4.5
1068
+ text = "T"
1069
+ intervals [40]:
1070
+ xmin = 4.5
1071
+ xmax = 4.58
1072
+ text = "AE1"
1073
+ intervals [41]:
1074
+ xmin = 4.58
1075
+ xmax = 4.62
1076
+ text = "N"
1077
+ intervals [42]:
1078
+ xmin = 4.62
1079
+ xmax = 4.66
1080
+ text = "D"
1081
+ intervals [43]:
1082
+ xmin = 4.66
1083
+ xmax = 4.71
1084
+ text = "P"
1085
+ intervals [44]:
1086
+ xmin = 4.71
1087
+ xmax = 4.8
1088
+ text = "L"
1089
+ intervals [45]:
1090
+ xmin = 4.8
1091
+ xmax = 4.87
1092
+ text = "EY1"
1093
+ intervals [46]:
1094
+ xmin = 4.87
1095
+ xmax = 4.97
1096
+ text = "K"
1097
+ intervals [47]:
1098
+ xmin = 4.97
1099
+ xmax = 5.02
1100
+ text = "L"
1101
+ intervals [48]:
1102
+ xmin = 5.02
1103
+ xmax = 5.09
1104
+ text = "OW1"
1105
+ intervals [49]:
1106
+ xmin = 5.09
1107
+ xmax = 5.19
1108
+ text = "S"
1109
+ intervals [50]:
1110
+ xmin = 5.19
1111
+ xmax = 5.23
1112
+ text = "AH0"
1113
+ intervals [51]:
1114
+ xmin = 5.23
1115
+ xmax = 5.32
1116
+ text = "T"
1117
+ intervals [52]:
1118
+ xmin = 5.32
1119
+ xmax = 5.36
1120
+ text = "EH1"
1121
+ intervals [53]:
1122
+ xmin = 5.36
1123
+ xmax = 5.42
1124
+ text = "N"
1125
+ intervals [54]:
1126
+ xmin = 5.42
1127
+ xmax = 5.49
1128
+ text = "SH"
1129
+ intervals [55]:
1130
+ xmin = 5.49
1131
+ xmax = 5.55
1132
+ text = "AH0"
1133
+ intervals [56]:
1134
+ xmin = 5.55
1135
+ xmax = 5.67
1136
+ text = "N"
1137
+ intervals [57]:
1138
+ xmin = 5.67
1139
+ xmax = 5.8
1140
+ text = "T"
1141
+ intervals [58]:
1142
+ xmin = 5.8
1143
+ xmax = 6.0
1144
+ text = "UW1"
1145
+ intervals [59]:
1146
+ xmin = 6.0
1147
+ xmax = 6.03
1148
+ text = "N"
1149
+ intervals [60]:
1150
+ xmin = 6.03
1151
+ xmax = 6.15
1152
+ text = "Y"
1153
+ intervals [61]:
1154
+ xmin = 6.15
1155
+ xmax = 6.26
1156
+ text = "UW1"
1157
+ intervals [62]:
1158
+ xmin = 6.26
1159
+ xmax = 6.41
1160
+ text = "F"
1161
+ intervals [63]:
1162
+ xmin = 6.41
1163
+ xmax = 6.54
1164
+ text = "AE1"
1165
+ intervals [64]:
1166
+ xmin = 6.54
1167
+ xmax = 6.63
1168
+ text = "SH"
1169
+ intervals [65]:
1170
+ xmin = 6.63
1171
+ xmax = 6.66
1172
+ text = "AH0"
1173
+ intervals [66]:
1174
+ xmin = 6.66
1175
+ xmax = 6.71
1176
+ text = "N"
1177
+ intervals [67]:
1178
+ xmin = 6.71
1179
+ xmax = 6.75
1180
+ text = "IH0"
1181
+ intervals [68]:
1182
+ xmin = 6.75
1183
+ xmax = 6.81
1184
+ text = "V"
1185
+ intervals [69]:
1186
+ xmin = 6.81
1187
+ xmax = 6.93
1188
+ text = "EH1"
1189
+ intervals [70]:
1190
+ xmin = 6.93
1191
+ xmax = 6.97
1192
+ text = "N"
1193
+ intervals [71]:
1194
+ xmin = 6.97
1195
+ xmax = 7.02
1196
+ text = "T"
1197
+ intervals [72]:
1198
+ xmin = 7.02
1199
+ xmax = 7.17
1200
+ text = "S"
1201
+ intervals [73]:
1202
+ xmin = 7.17
1203
+ xmax = 7.43
1204
+ text = ""
1205
+ intervals [74]:
1206
+ xmin = 7.43
1207
+ xmax = 7.55
1208
+ text = "S"
1209
+ intervals [75]:
1210
+ xmin = 7.55
1211
+ xmax = 7.63
1212
+ text = "AH1"
1213
+ intervals [76]:
1214
+ xmin = 7.63
1215
+ xmax = 7.76
1216
+ text = "CH"
1217
+ intervals [77]:
1218
+ xmin = 7.76
1219
+ xmax = 7.94
1220
+ text = "EH1"
1221
+ intervals [78]:
1222
+ xmin = 7.94
1223
+ xmax = 8.14
1224
+ text = "Z"
1225
+ intervals [79]:
1226
+ xmin = 8.14
1227
+ xmax = 8.19
1228
+ text = ""
1229
+ intervals [80]:
1230
+ xmin = 8.19
1231
+ xmax = 8.28
1232
+ text = "DH"
1233
+ intervals [81]:
1234
+ xmin = 8.28
1235
+ xmax = 8.34
1236
+ text = "AH0"
1237
+ intervals [82]:
1238
+ xmin = 8.34
1239
+ xmax = 8.44
1240
+ text = "N"
1241
+ intervals [83]:
1242
+ xmin = 8.44
1243
+ xmax = 8.47
1244
+ text = "UW1"
1245
+ intervals [84]:
1246
+ xmin = 8.47
1247
+ xmax = 8.52
1248
+ text = "Y"
1249
+ intervals [85]:
1250
+ xmin = 8.52
1251
+ xmax = 8.56
1252
+ text = "AO1"
1253
+ intervals [86]:
1254
+ xmin = 8.56
1255
+ xmax = 8.62
1256
+ text = "R"
1257
+ intervals [87]:
1258
+ xmin = 8.62
1259
+ xmax = 8.68
1260
+ text = "K"
1261
+ intervals [88]:
1262
+ xmin = 8.68
1263
+ xmax = 8.79
1264
+ text = "F"
1265
+ intervals [89]:
1266
+ xmin = 8.79
1267
+ xmax = 8.93
1268
+ text = "AE1"
1269
+ intervals [90]:
1270
+ xmin = 8.93
1271
+ xmax = 9.03
1272
+ text = "SH"
1273
+ intervals [91]:
1274
+ xmin = 9.03
1275
+ xmax = 9.07
1276
+ text = "AH0"
1277
+ intervals [92]:
1278
+ xmin = 9.07
1279
+ xmax = 9.12
1280
+ text = "N"
1281
+ intervals [93]:
1282
+ xmin = 9.12
1283
+ xmax = 9.19
1284
+ text = "W"
1285
+ intervals [94]:
1286
+ xmin = 9.19
1287
+ xmax = 9.33
1288
+ text = "IY1"
1289
+ intervals [95]:
1290
+ xmin = 9.33
1291
+ xmax = 9.42
1292
+ text = "K"
1293
+ intervals [96]:
1294
+ xmin = 9.42
1295
+ xmax = 9.46
1296
+ text = "DH"
1297
+ intervals [97]:
1298
+ xmin = 9.46
1299
+ xmax = 9.49
1300
+ text = "AH0"
1301
+ intervals [98]:
1302
+ xmin = 9.49
1303
+ xmax = 9.57
1304
+ text = "P"
1305
+ intervals [99]:
1306
+ xmin = 9.57
1307
+ xmax = 9.64
1308
+ text = "EH1"
1309
+ intervals [100]:
1310
+ xmin = 9.64
1311
+ xmax = 9.75
1312
+ text = "R"
1313
+ intervals [101]:
1314
+ xmin = 9.75
1315
+ xmax = 9.8
1316
+ text = "IH0"
1317
+ intervals [102]:
1318
+ xmin = 9.8
1319
+ xmax = 9.87
1320
+ text = "S"
1321
+ intervals [103]:
1322
+ xmin = 9.87
1323
+ xmax = 9.93
1324
+ text = "F"
1325
+ intervals [104]:
1326
+ xmin = 9.93
1327
+ xmax = 10.09
1328
+ text = "AE1"
1329
+ intervals [105]:
1330
+ xmin = 10.09
1331
+ xmax = 10.19
1332
+ text = "SH"
1333
+ intervals [106]:
1334
+ xmin = 10.19
1335
+ xmax = 10.22
1336
+ text = "AH0"
1337
+ intervals [107]:
1338
+ xmin = 10.22
1339
+ xmax = 10.25
1340
+ text = "N"
1341
+ intervals [108]:
1342
+ xmin = 10.25
1343
+ xmax = 10.32
1344
+ text = "W"
1345
+ intervals [109]:
1346
+ xmin = 10.32
1347
+ xmax = 10.49
1348
+ text = "IY1"
1349
+ intervals [110]:
1350
+ xmin = 10.49
1351
+ xmax = 10.56
1352
+ text = "K"
1353
+ intervals [111]:
1354
+ xmin = 10.56
1355
+ xmax = 10.6
1356
+ text = "DH"
1357
+ intervals [112]:
1358
+ xmin = 10.6
1359
+ xmax = 10.66
1360
+ text = "AH0"
1361
+ intervals [113]:
1362
+ xmin = 10.66
1363
+ xmax = 10.76
1364
+ text = "L"
1365
+ intervals [114]:
1366
+ xmin = 10.76
1367
+ xmax = 10.81
1368
+ text = "AH1"
1369
+ intervals [115]:
1370
+ xmin = 10.81
1371
+ xmax = 10.87
1372
+ text = "N"
1373
+ intervals [116]:
1374
+ xmin = 10.87
1375
+ xmax = 10.92
1376
+ text = "D"
1377
+ intervals [117]:
1378
+ xmin = 10.92
1379
+ xmax = 10.97
1380
+ text = "AH0"
1381
+ intervals [118]:
1382
+ xmin = 10.97
1383
+ xmax = 11.07
1384
+ text = "N"
1385
+ intervals [119]:
1386
+ xmin = 11.07
1387
+ xmax = 11.18
1388
+ text = "F"
1389
+ intervals [120]:
1390
+ xmin = 11.18
1391
+ xmax = 11.31
1392
+ text = "AE1"
1393
+ intervals [121]:
1394
+ xmin = 11.31
1395
+ xmax = 11.42
1396
+ text = "SH"
1397
+ intervals [122]:
1398
+ xmin = 11.42
1399
+ xmax = 11.46
1400
+ text = "AH0"
1401
+ intervals [123]:
1402
+ xmin = 11.46
1403
+ xmax = 11.51
1404
+ text = "N"
1405
+ intervals [124]:
1406
+ xmin = 11.51
1407
+ xmax = 11.56
1408
+ text = "W"
1409
+ intervals [125]:
1410
+ xmin = 11.56
1411
+ xmax = 11.69
1412
+ text = "IY1"
1413
+ intervals [126]:
1414
+ xmin = 11.69
1415
+ xmax = 11.78
1416
+ text = "K"
1417
+ intervals [127]:
1418
+ xmin = 11.78
1419
+ xmax = 11.84
1420
+ text = "AE1"
1421
+ intervals [128]:
1422
+ xmin = 11.84
1423
+ xmax = 11.99
1424
+ text = "N"
1425
+ intervals [129]:
1426
+ xmin = 11.99
1427
+ xmax = 12.17
1428
+ text = "D"
1429
+ intervals [130]:
1430
+ xmin = 12.17
1431
+ xmax = 12.21
1432
+ text = ""
1433
+ intervals [131]:
1434
+ xmin = 12.21
1435
+ xmax = 12.36
1436
+ text = "M"
1437
+ intervals [132]:
1438
+ xmin = 12.36
1439
+ xmax = 12.48
1440
+ text = "IH0"
1441
+ intervals [133]:
1442
+ xmin = 12.48
1443
+ xmax = 12.55
1444
+ text = "L"
1445
+ intervals [134]:
1446
+ xmin = 12.55
1447
+ xmax = 12.73
1448
+ text = "AA1"
1449
+ intervals [135]:
1450
+ xmin = 12.73
1451
+ xmax = 12.83
1452
+ text = "N"
1453
+ intervals [136]:
1454
+ xmin = 12.83
1455
+ xmax = 12.92
1456
+ text = "F"
1457
+ intervals [137]:
1458
+ xmin = 12.92
1459
+ xmax = 13.06
1460
+ text = "AE1"
1461
+ intervals [138]:
1462
+ xmin = 13.06
1463
+ xmax = 13.16
1464
+ text = "SH"
1465
+ intervals [139]:
1466
+ xmin = 13.16
1467
+ xmax = 13.21
1468
+ text = "AH0"
1469
+ intervals [140]:
1470
+ xmin = 13.21
1471
+ xmax = 13.24
1472
+ text = "N"
1473
+ intervals [141]:
1474
+ xmin = 13.24
1475
+ xmax = 13.29
1476
+ text = "W"
1477
+ intervals [142]:
1478
+ xmin = 13.29
1479
+ xmax = 13.41
1480
+ text = "IY1"
1481
+ intervals [143]:
1482
+ xmin = 13.41
1483
+ xmax = 13.62
1484
+ text = "K"
1485
+ intervals [144]:
1486
+ xmin = 13.62
1487
+ xmax = 14.03
1488
+ text = ""
1489
+ intervals [145]:
1490
+ xmin = 14.03
1491
+ xmax = 14.11
1492
+ text = "DH"
1493
+ intervals [146]:
1494
+ xmin = 14.11
1495
+ xmax = 14.15
1496
+ text = "AH1"
1497
+ intervals [147]:
1498
+ xmin = 14.15
1499
+ xmax = 14.22
1500
+ text = "R"
1501
+ intervals [148]:
1502
+ xmin = 14.22
1503
+ xmax = 14.26
1504
+ text = "EH1"
1505
+ intervals [149]:
1506
+ xmin = 14.26
1507
+ xmax = 14.31
1508
+ text = "S"
1509
+ intervals [150]:
1510
+ xmin = 14.31
1511
+ xmax = 14.35
1512
+ text = "T"
1513
+ intervals [151]:
1514
+ xmin = 14.35
1515
+ xmax = 14.4
1516
+ text = "AH0"
1517
+ intervals [152]:
1518
+ xmin = 14.4
1519
+ xmax = 14.43
1520
+ text = "V"
1521
+ intervals [153]:
1522
+ xmin = 14.43
1523
+ xmax = 14.46
1524
+ text = "DH"
1525
+ intervals [154]:
1526
+ xmin = 14.46
1527
+ xmax = 14.49
1528
+ text = "AH0"
1529
+ intervals [155]:
1530
+ xmin = 14.49
1531
+ xmax = 14.55
1532
+ text = "T"
1533
+ intervals [156]:
1534
+ xmin = 14.55
1535
+ xmax = 14.73
1536
+ text = "AY1"
1537
+ intervals [157]:
1538
+ xmin = 14.73
1539
+ xmax = 14.8
1540
+ text = "M"
1541
+ intervals [158]:
1542
+ xmin = 14.8
1543
+ xmax = 14.87
1544
+ text = "AY1"
1545
+ intervals [159]:
1546
+ xmin = 14.87
1547
+ xmax = 14.96
1548
+ text = "Y"
1549
+ intervals [160]:
1550
+ xmin = 14.96
1551
+ xmax = 14.99
1552
+ text = "UW1"
1553
+ intervals [161]:
1554
+ xmin = 14.99
1555
+ xmax = 15.08
1556
+ text = "ZH"
1557
+ intervals [162]:
1558
+ xmin = 15.08
1559
+ xmax = 15.11
1560
+ text = "AH0"
1561
+ intervals [163]:
1562
+ xmin = 15.11
1563
+ xmax = 15.14
1564
+ text = "L"
1565
+ intervals [164]:
1566
+ xmin = 15.14
1567
+ xmax = 15.2
1568
+ text = "IY0"
1569
+ intervals [165]:
1570
+ xmin = 15.2
1571
+ xmax = 15.23
1572
+ text = "G"
1573
+ intervals [166]:
1574
+ xmin = 15.23
1575
+ xmax = 15.3
1576
+ text = "OW1"
1577
+ intervals [167]:
1578
+ xmin = 15.3
1579
+ xmax = 15.33
1580
+ text = "T"
1581
+ intervals [168]:
1582
+ xmin = 15.33
1583
+ xmax = 15.36
1584
+ text = "AH0"
1585
+ intervals [169]:
1586
+ xmin = 15.36
1587
+ xmax = 15.39
1588
+ text = "DH"
1589
+ intervals [170]:
1590
+ xmin = 15.39
1591
+ xmax = 15.44
1592
+ text = "AH1"
1593
+ intervals [171]:
1594
+ xmin = 15.44
1595
+ xmax = 15.51
1596
+ text = "L"
1597
+ intervals [172]:
1598
+ xmin = 15.51
1599
+ xmax = 15.67
1600
+ text = "AY1"
1601
+ intervals [173]:
1602
+ xmin = 15.67
1603
+ xmax = 15.71
1604
+ text = "B"
1605
+ intervals [174]:
1606
+ xmin = 15.71
1607
+ xmax = 15.74
1608
+ text = "R"
1609
+ intervals [175]:
1610
+ xmin = 15.74
1611
+ xmax = 15.83
1612
+ text = "EH2"
1613
+ intervals [176]:
1614
+ xmin = 15.83
1615
+ xmax = 15.9
1616
+ text = "R"
1617
+ intervals [177]:
1618
+ xmin = 15.9
1619
+ xmax = 15.93
1620
+ text = "IY0"
1621
+ intervals [178]:
1622
+ xmin = 15.93
1623
+ xmax = 15.96
1624
+ text = "AH0"
1625
+ intervals [179]:
1626
+ xmin = 15.96
1627
+ xmax = 15.99
1628
+ text = "N"
1629
+ intervals [180]:
1630
+ xmin = 15.99
1631
+ xmax = 16.04
1632
+ text = "D"
1633
+ intervals [181]:
1634
+ xmin = 16.04
1635
+ xmax = 16.11
1636
+ text = "F"
1637
+ intervals [182]:
1638
+ xmin = 16.11
1639
+ xmax = 16.18
1640
+ text = "AY1"
1641
+ intervals [183]:
1642
+ xmin = 16.18
1643
+ xmax = 16.21
1644
+ text = "N"
1645
+ intervals [184]:
1646
+ xmin = 16.21
1647
+ xmax = 16.25
1648
+ text = "D"
1649
+ intervals [185]:
1650
+ xmin = 16.25
1651
+ xmax = 16.29
1652
+ text = "S"
1653
+ intervals [186]:
1654
+ xmin = 16.29
1655
+ xmax = 16.32
1656
+ text = "AH1"
1657
+ intervals [187]:
1658
+ xmin = 16.32
1659
+ xmax = 16.35
1660
+ text = "M"
1661
+ intervals [188]:
1662
+ xmin = 16.35
1663
+ xmax = 16.38
1664
+ text = "IH1"
1665
+ intervals [189]:
1666
+ xmin = 16.38
1667
+ xmax = 16.41
1668
+ text = "N"
1669
+ intervals [190]:
1670
+ xmin = 16.41
1671
+ xmax = 16.46
1672
+ text = "T"
1673
+ intervals [191]:
1674
+ xmin = 16.46
1675
+ xmax = 16.49
1676
+ text = "R"
1677
+ intervals [192]:
1678
+ xmin = 16.49
1679
+ xmax = 16.53
1680
+ text = "IH0"
1681
+ intervals [193]:
1682
+ xmin = 16.53
1683
+ xmax = 16.57
1684
+ text = "S"
1685
+ intervals [194]:
1686
+ xmin = 16.57
1687
+ xmax = 16.6
1688
+ text = "T"
1689
+ intervals [195]:
1690
+ xmin = 16.6
1691
+ xmax = 16.64
1692
+ text = "IH0"
1693
+ intervals [196]:
1694
+ xmin = 16.64
1695
+ xmax = 16.71
1696
+ text = "NG"
1697
+ intervals [197]:
1698
+ xmin = 16.71
1699
+ xmax = 16.78
1700
+ text = "B"
1701
+ intervals [198]:
1702
+ xmin = 16.78
1703
+ xmax = 17.0
1704
+ text = "UH1"
1705
+ intervals [199]:
1706
+ xmin = 17.0
1707
+ xmax = 17.09
1708
+ text = "K"
1709
+ intervals [200]:
1710
+ xmin = 17.09
1711
+ xmax = 17.19
1712
+ text = "S"
1713
+ intervals [201]:
1714
+ xmin = 17.19
1715
+ xmax = 17.25
1716
+ text = "AH0"
1717
+ intervals [202]:
1718
+ xmin = 17.25
1719
+ xmax = 17.28
1720
+ text = "N"
1721
+ intervals [203]:
1722
+ xmin = 17.28
1723
+ xmax = 17.31
1724
+ text = "D"
1725
+ intervals [204]:
1726
+ xmin = 17.31
1727
+ xmax = 17.34
1728
+ text = "DH"
1729
+ intervals [205]:
1730
+ xmin = 17.34
1731
+ xmax = 17.42
1732
+ text = "EH1"
1733
+ intervals [206]:
1734
+ xmin = 17.42
1735
+ xmax = 17.51
1736
+ text = "N"
1737
+ intervals [207]:
1738
+ xmin = 17.51
1739
+ xmax = 17.58
1740
+ text = "G"
1741
+ intervals [208]:
1742
+ xmin = 17.58
1743
+ xmax = 17.63
1744
+ text = "OW1"
1745
+ intervals [209]:
1746
+ xmin = 17.63
1747
+ xmax = 17.67
1748
+ text = "T"
1749
+ intervals [210]:
1750
+ xmin = 17.67
1751
+ xmax = 17.7
1752
+ text = "AH0"
1753
+ intervals [211]:
1754
+ xmin = 17.7
1755
+ xmax = 17.78
1756
+ text = "AH0"
1757
+ intervals [212]:
1758
+ xmin = 17.78
1759
+ xmax = 17.89
1760
+ text = "P"
1761
+ intervals [213]:
1762
+ xmin = 17.89
1763
+ xmax = 17.95
1764
+ text = "AA1"
1765
+ intervals [214]:
1766
+ xmin = 17.95
1767
+ xmax = 18.04
1768
+ text = "R"
1769
+ intervals [215]:
1770
+ xmin = 18.04
1771
+ xmax = 18.08
1772
+ text = "K"
1773
+ intervals [216]:
1774
+ xmin = 18.08
1775
+ xmax = 18.11
1776
+ text = "AH0"
1777
+ intervals [217]:
1778
+ xmin = 18.11
1779
+ xmax = 18.14
1780
+ text = "N"
1781
+ intervals [218]:
1782
+ xmin = 18.14
1783
+ xmax = 18.17
1784
+ text = "D"
1785
+ intervals [219]:
1786
+ xmin = 18.17
1787
+ xmax = 18.2
1788
+ text = "R"
1789
+ intervals [220]:
1790
+ xmin = 18.2
1791
+ xmax = 18.25
1792
+ text = "IH0"
1793
+ intervals [221]:
1794
+ xmin = 18.25
1795
+ xmax = 18.33
1796
+ text = "L"
1797
+ intervals [222]:
1798
+ xmin = 18.33
1799
+ xmax = 18.53
1800
+ text = "AE1"
1801
+ intervals [223]:
1802
+ xmin = 18.53
1803
+ xmax = 18.58
1804
+ text = "K"
1805
+ intervals [224]:
1806
+ xmin = 18.58
1807
+ xmax = 18.75
1808
+ text = "S"
1809
+ intervals [225]:
1810
+ xmin = 18.75
1811
+ xmax = 19.04
1812
+ text = ""
1813
+ intervals [226]:
1814
+ xmin = 19.04
1815
+ xmax = 19.14
1816
+ text = "DH"
1817
+ intervals [227]:
1818
+ xmin = 19.14
1819
+ xmax = 19.18
1820
+ text = "EH1"
1821
+ intervals [228]:
1822
+ xmin = 19.18
1823
+ xmax = 19.22
1824
+ text = "R"
1825
+ intervals [229]:
1826
+ xmin = 19.22
1827
+ xmax = 19.27
1828
+ text = "ER0"
1829
+ intervals [230]:
1830
+ xmin = 19.27
1831
+ xmax = 19.34
1832
+ text = "M"
1833
+ intervals [231]:
1834
+ xmin = 19.34
1835
+ xmax = 19.39
1836
+ text = "EH1"
1837
+ intervals [232]:
1838
+ xmin = 19.39
1839
+ xmax = 19.43
1840
+ text = "N"
1841
+ intervals [233]:
1842
+ xmin = 19.43
1843
+ xmax = 19.5
1844
+ text = "IY0"
1845
+ intervals [234]:
1846
+ xmin = 19.5
1847
+ xmax = 19.56
1848
+ text = "B"
1849
+ intervals [235]:
1850
+ xmin = 19.56
1851
+ xmax = 19.66
1852
+ text = "UH1"
1853
+ intervals [236]:
1854
+ xmin = 19.66
1855
+ xmax = 19.72
1856
+ text = "K"
1857
+ intervals [237]:
1858
+ xmin = 19.72
1859
+ xmax = 19.78
1860
+ text = "S"
1861
+ intervals [238]:
1862
+ xmin = 19.78
1863
+ xmax = 19.81
1864
+ text = "DH"
1865
+ intervals [239]:
1866
+ xmin = 19.81
1867
+ xmax = 19.84
1868
+ text = "AH0"
1869
+ intervals [240]:
1870
+ xmin = 19.84
1871
+ xmax = 19.93
1872
+ text = "T"
1873
+ intervals [241]:
1874
+ xmin = 19.93
1875
+ xmax = 20.11
1876
+ text = "AY1"
1877
+ intervals [242]:
1878
+ xmin = 20.11
1879
+ xmax = 20.22
1880
+ text = "F"
1881
+ intervals [243]:
1882
+ xmin = 20.22
1883
+ xmax = 20.3
1884
+ text = "AY1"
1885
+ intervals [244]:
1886
+ xmin = 20.3
1887
+ xmax = 20.37
1888
+ text = "N"
1889
+ intervals [245]:
1890
+ xmin = 20.37
1891
+ xmax = 20.4
1892
+ text = "D"
1893
+ intervals [246]:
1894
+ xmin = 20.4
1895
+ xmax = 20.52
1896
+ text = "IH1"
1897
+ intervals [247]:
1898
+ xmin = 20.52
1899
+ xmax = 20.55
1900
+ text = "N"
1901
+ intervals [248]:
1902
+ xmin = 20.55
1903
+ xmax = 20.59
1904
+ text = "T"
1905
+ intervals [249]:
1906
+ xmin = 20.59
1907
+ xmax = 20.62
1908
+ text = "R"
1909
+ intervals [250]:
1910
+ xmin = 20.62
1911
+ xmax = 20.67
1912
+ text = "AH0"
1913
+ intervals [251]:
1914
+ xmin = 20.67
1915
+ xmax = 20.74
1916
+ text = "S"
1917
+ intervals [252]:
1918
+ xmin = 20.74
1919
+ xmax = 20.78
1920
+ text = "T"
1921
+ intervals [253]:
1922
+ xmin = 20.78
1923
+ xmax = 20.85
1924
+ text = "IH0"
1925
+ intervals [254]:
1926
+ xmin = 20.85
1927
+ xmax = 20.92
1928
+ text = "NG"
1929
+ intervals [255]:
1930
+ xmin = 20.92
1931
+ xmax = 21.02
1932
+ text = "S"
1933
+ intervals [256]:
1934
+ xmin = 21.02
1935
+ xmax = 21.06
1936
+ text = "AH1"
1937
+ intervals [257]:
1938
+ xmin = 21.06
1939
+ xmax = 21.15
1940
+ text = "CH"
1941
+ intervals [258]:
1942
+ xmin = 21.15
1943
+ xmax = 21.2
1944
+ text = "EH1"
1945
+ intervals [259]:
1946
+ xmin = 21.2
1947
+ xmax = 21.3
1948
+ text = "Z"
1949
+ intervals [260]:
1950
+ xmin = 21.3
1951
+ xmax = 21.36
1952
+ text = "F"
1953
+ intervals [261]:
1954
+ xmin = 21.36
1955
+ xmax = 21.47
1956
+ text = "AE1"
1957
+ intervals [262]:
1958
+ xmin = 21.47
1959
+ xmax = 21.56
1960
+ text = "SH"
1961
+ intervals [263]:
1962
+ xmin = 21.56
1963
+ xmax = 21.59
1964
+ text = "AH0"
1965
+ intervals [264]:
1966
+ xmin = 21.59
1967
+ xmax = 21.62
1968
+ text = "N"
1969
+ intervals [265]:
1970
+ xmin = 21.62
1971
+ xmax = 21.68
1972
+ text = "M"
1973
+ intervals [266]:
1974
+ xmin = 21.68
1975
+ xmax = 21.76
1976
+ text = "AE1"
1977
+ intervals [267]:
1978
+ xmin = 21.76
1979
+ xmax = 21.81
1980
+ text = "G"
1981
+ intervals [268]:
1982
+ xmin = 21.81
1983
+ xmax = 21.85
1984
+ text = "AH0"
1985
+ intervals [269]:
1986
+ xmin = 21.85
1987
+ xmax = 21.9
1988
+ text = "Z"
1989
+ intervals [270]:
1990
+ xmin = 21.9
1991
+ xmax = 22.0
1992
+ text = "IY2"
1993
+ intervals [271]:
1994
+ xmin = 22.0
1995
+ xmax = 22.1
1996
+ text = "N"
1997
+ intervals [272]:
1998
+ xmin = 22.1
1999
+ xmax = 22.19
2000
+ text = "Z"
2001
+ intervals [273]:
2002
+ xmin = 22.19
2003
+ xmax = 22.22
2004
+ text = "IH2"
2005
+ intervals [274]:
2006
+ xmin = 22.22
2007
+ xmax = 22.29
2008
+ text = "N"
2009
+ intervals [275]:
2010
+ xmin = 22.29
2011
+ xmax = 22.34
2012
+ text = "S"
2013
+ intervals [276]:
2014
+ xmin = 22.34
2015
+ xmax = 22.38
2016
+ text = "P"
2017
+ intervals [277]:
2018
+ xmin = 22.38
2019
+ xmax = 22.48
2020
+ text = "ER0"
2021
+ intervals [278]:
2022
+ xmin = 22.48
2023
+ xmax = 22.55
2024
+ text = "EY1"
2025
+ intervals [279]:
2026
+ xmin = 22.55
2027
+ xmax = 22.64
2028
+ text = "SH"
2029
+ intervals [280]:
2030
+ xmin = 22.64
2031
+ xmax = 22.67
2032
+ text = "AH0"
2033
+ intervals [281]:
2034
+ xmin = 22.67
2035
+ xmax = 22.7
2036
+ text = "N"
2037
+ intervals [282]:
2038
+ xmin = 22.7
2039
+ xmax = 22.73
2040
+ text = "AH0"
2041
+ intervals [283]:
2042
+ xmin = 22.73
2043
+ xmax = 22.8
2044
+ text = "L"
2045
+ intervals [284]:
2046
+ xmin = 22.8
2047
+ xmax = 22.88
2048
+ text = "B"
2049
+ intervals [285]:
2050
+ xmin = 22.88
2051
+ xmax = 23.03
2052
+ text = "UH1"
2053
+ intervals [286]:
2054
+ xmin = 23.03
2055
+ xmax = 23.09
2056
+ text = "K"
2057
+ intervals [287]:
2058
+ xmin = 23.09
2059
+ xmax = 23.15
2060
+ text = "S"
2061
+ intervals [288]:
2062
+ xmin = 23.15
2063
+ xmax = 23.24
2064
+ text = "AH0"
2065
+ intervals [289]:
2066
+ xmin = 23.24
2067
+ xmax = 23.35
2068
+ text = "N"
2069
+ intervals [290]:
2070
+ xmin = 23.35
2071
+ xmax = 23.44
2072
+ text = "D"
2073
+ intervals [291]:
2074
+ xmin = 23.44
2075
+ xmax = 23.5
2076
+ text = "P"
2077
+ intervals [292]:
2078
+ xmin = 23.5
2079
+ xmax = 23.55
2080
+ text = "R"
2081
+ intervals [293]:
2082
+ xmin = 23.55
2083
+ xmax = 23.59
2084
+ text = "AH0"
2085
+ intervals [294]:
2086
+ xmin = 23.59
2087
+ xmax = 23.69
2088
+ text = "F"
2089
+ intervals [295]:
2090
+ xmin = 23.69
2091
+ xmax = 23.76
2092
+ text = "EH1"
2093
+ intervals [296]:
2094
+ xmin = 23.76
2095
+ xmax = 23.87
2096
+ text = "SH"
2097
+ intervals [297]:
2098
+ xmin = 23.87
2099
+ xmax = 23.9
2100
+ text = "AH0"
2101
+ intervals [298]:
2102
+ xmin = 23.9
2103
+ xmax = 23.94
2104
+ text = "N"
2105
+ intervals [299]:
2106
+ xmin = 23.94
2107
+ xmax = 23.98
2108
+ text = "AH0"
2109
+ intervals [300]:
2110
+ xmin = 23.98
2111
+ xmax = 24.04
2112
+ text = "L"
2113
+ intervals [301]:
2114
+ xmin = 24.04
2115
+ xmax = 24.12
2116
+ text = "B"
2117
+ intervals [302]:
2118
+ xmin = 24.12
2119
+ xmax = 24.24
2120
+ text = "UH1"
2121
+ intervals [303]:
2122
+ xmin = 24.24
2123
+ xmax = 24.32
2124
+ text = "K"
2125
+ intervals [304]:
2126
+ xmin = 24.32
2127
+ xmax = 24.46
2128
+ text = "S"
2129
+ intervals [305]:
2130
+ xmin = 24.46
2131
+ xmax = 24.83
2132
+ text = ""
2133
+ intervals [306]:
2134
+ xmin = 24.83
2135
+ xmax = 24.91
2136
+ text = "DH"
2137
+ intervals [307]:
2138
+ xmin = 24.91
2139
+ xmax = 24.98
2140
+ text = "IY1"
2141
+ intervals [308]:
2142
+ xmin = 24.98
2143
+ xmax = 25.06
2144
+ text = "Z"
2145
+ intervals [309]:
2146
+ xmin = 25.06
2147
+ xmax = 25.13
2148
+ text = "B"
2149
+ intervals [310]:
2150
+ xmin = 25.13
2151
+ xmax = 25.23
2152
+ text = "UH1"
2153
+ intervals [311]:
2154
+ xmin = 25.23
2155
+ xmax = 25.3
2156
+ text = "K"
2157
+ intervals [312]:
2158
+ xmin = 25.3
2159
+ xmax = 25.37
2160
+ text = "S"
2161
+ intervals [313]:
2162
+ xmin = 25.37
2163
+ xmax = 25.44
2164
+ text = "K"
2165
+ intervals [314]:
2166
+ xmin = 25.44
2167
+ xmax = 25.51
2168
+ text = "AH0"
2169
+ intervals [315]:
2170
+ xmin = 25.51
2171
+ xmax = 25.54
2172
+ text = "N"
2173
+ intervals [316]:
2174
+ xmin = 25.54
2175
+ xmax = 25.59
2176
+ text = "G"
2177
+ intervals [317]:
2178
+ xmin = 25.59
2179
+ xmax = 25.63
2180
+ text = "IH1"
2181
+ intervals [318]:
2182
+ xmin = 25.63
2183
+ xmax = 25.66
2184
+ text = "V"
2185
+ intervals [319]:
2186
+ xmin = 25.66
2187
+ xmax = 25.71
2188
+ text = "M"
2189
+ intervals [320]:
2190
+ xmin = 25.71
2191
+ xmax = 25.76
2192
+ text = "IY1"
2193
+ intervals [321]:
2194
+ xmin = 25.76
2195
+ xmax = 25.82
2196
+ text = "DH"
2197
+ intervals [322]:
2198
+ xmin = 25.82
2199
+ xmax = 25.86
2200
+ text = "AH0"
2201
+ intervals [323]:
2202
+ xmin = 25.86
2203
+ xmax = 25.95
2204
+ text = "M"
2205
+ intervals [324]:
2206
+ xmin = 25.95
2207
+ xmax = 26.01
2208
+ text = "OW2"
2209
+ intervals [325]:
2210
+ xmin = 26.01
2211
+ xmax = 26.06
2212
+ text = "T"
2213
+ intervals [326]:
2214
+ xmin = 26.06
2215
+ xmax = 26.1
2216
+ text = "AH0"
2217
+ intervals [327]:
2218
+ xmin = 26.1
2219
+ xmax = 26.19
2220
+ text = "V"
2221
+ intervals [328]:
2222
+ xmin = 26.19
2223
+ xmax = 26.32
2224
+ text = "EY1"
2225
+ intervals [329]:
2226
+ xmin = 26.32
2227
+ xmax = 26.42
2228
+ text = "SH"
2229
+ intervals [330]:
2230
+ xmin = 26.42
2231
+ xmax = 26.51
2232
+ text = "AH0"
2233
+ intervals [331]:
2234
+ xmin = 26.51
2235
+ xmax = 26.85
2236
+ text = "N"
2237
+ intervals [332]:
2238
+ xmin = 26.85
2239
+ xmax = 26.88
2240
+ text = ""
2241
+ intervals [333]:
2242
+ xmin = 26.88
2243
+ xmax = 27.0
2244
+ text = "T"
2245
+ intervals [334]:
2246
+ xmin = 27.0
2247
+ xmax = 27.07
2248
+ text = "IH0"
2249
+ intervals [335]:
2250
+ xmin = 27.07
2251
+ xmax = 27.13
2252
+ text = "B"
2253
+ intervals [336]:
2254
+ xmin = 27.13
2255
+ xmax = 27.37
2256
+ text = "IY1"
2257
+ intervals [337]:
2258
+ xmin = 27.37
2259
+ xmax = 27.5
2260
+ text = "HH"
2261
+ intervals [338]:
2262
+ xmin = 27.5
2263
+ xmax = 27.55
2264
+ text = "EH1"
2265
+ intervals [339]:
2266
+ xmin = 27.55
2267
+ xmax = 27.68
2268
+ text = "L"
2269
+ intervals [340]:
2270
+ xmin = 27.68
2271
+ xmax = 27.72
2272
+ text = "TH"
2273
+ intervals [341]:
2274
+ xmin = 27.72
2275
+ xmax = 27.86
2276
+ text = "IY0"
2277
+ intervals [342]:
2278
+ xmin = 27.86
2279
+ xmax = 28.01
2280
+ text = "ER0"
2281
+ intervals [343]:
2282
+ xmin = 28.01
2283
+ xmax = 28.09
2284
+ text = "AE1"
2285
+ intervals [344]:
2286
+ xmin = 28.09
2287
+ xmax = 28.12
2288
+ text = "N"
2289
+ intervals [345]:
2290
+ xmin = 28.12
2291
+ xmax = 28.18
2292
+ text = "D"
2293
+ intervals [346]:
2294
+ xmin = 28.18
2295
+ xmax = 28.25
2296
+ text = "EH2"
2297
+ intervals [347]:
2298
+ xmin = 28.25
2299
+ xmax = 28.32
2300
+ text = "N"
2301
+ intervals [348]:
2302
+ xmin = 28.32
2303
+ xmax = 28.41
2304
+ text = "ER0"
2305
+ intervals [349]:
2306
+ xmin = 28.41
2307
+ xmax = 28.51
2308
+ text = "JH"
2309
+ intervals [350]:
2310
+ xmin = 28.51
2311
+ xmax = 28.59
2312
+ text = "EH1"
2313
+ intervals [351]:
2314
+ xmin = 28.59
2315
+ xmax = 28.62
2316
+ text = "T"
2317
+ intervals [352]:
2318
+ xmin = 28.62
2319
+ xmax = 28.71
2320
+ text = "IH0"
2321
+ intervals [353]:
2322
+ xmin = 28.71
2323
+ xmax = 28.9
2324
+ text = "K"
2325
+ intervals [354]:
2326
+ xmin = 28.9
2327
+ xmax = 29.1
2328
+ text = ""
2329
+ intervals [355]:
2330
+ xmin = 29.1
2331
+ xmax = 29.24
2332
+ text = "AE1"
2333
+ intervals [356]:
2334
+ xmin = 29.24
2335
+ xmax = 29.27
2336
+ text = "N"
2337
+ intervals [357]:
2338
+ xmin = 29.27
2339
+ xmax = 29.3
2340
+ text = "D"
2341
+ intervals [358]:
2342
+ xmin = 29.3
2343
+ xmax = 29.33
2344
+ text = "DH"
2345
+ intervals [359]:
2346
+ xmin = 29.33
2347
+ xmax = 29.37
2348
+ text = "AH0"
2349
+ intervals [360]:
2350
+ xmin = 29.37
2351
+ xmax = 29.47
2352
+ text = "L"
2353
+ intervals [361]:
2354
+ xmin = 29.47
2355
+ xmax = 29.62
2356
+ text = "AE1"
2357
+ intervals [362]:
2358
+ xmin = 29.62
2359
+ xmax = 29.74
2360
+ text = "S"
2361
+ intervals [363]:
2362
+ xmin = 29.74
2363
+ xmax = 29.8
2364
+ text = "TH"
2365
+ intervals [364]:
2366
+ xmin = 29.8
2367
+ xmax = 29.86
2368
+ text = "IH1"
2369
+ intervals [365]:
2370
+ xmin = 29.86
2371
+ xmax = 29.94
2372
+ text = "NG"
2373
+ intervals [366]:
2374
+ xmin = 29.94
2375
+ xmax = 30.14
2376
+ text = "AY1"
2377
+ intervals [367]:
2378
+ xmin = 30.14
2379
+ xmax = 30.23
2380
+ text = "L"
2381
+ intervals [368]:
2382
+ xmin = 30.23
2383
+ xmax = 30.38
2384
+ text = "AY1"
2385
+ intervals [369]:
2386
+ xmin = 30.38
2387
+ xmax = 30.42
2388
+ text = "K"
2389
+ intervals [370]:
2390
+ xmin = 30.42
2391
+ xmax = 30.48
2392
+ text = "T"
2393
+ intervals [371]:
2394
+ xmin = 30.48
2395
+ xmax = 30.53
2396
+ text = "IH0"
2397
+ intervals [372]:
2398
+ xmin = 30.53
2399
+ xmax = 30.59
2400
+ text = "D"
2401
+ intervals [373]:
2402
+ xmin = 30.59
2403
+ xmax = 30.84
2404
+ text = "UW1"
2405
+ intervals [374]:
2406
+ xmin = 30.84
2407
+ xmax = 30.97
2408
+ text = "W"
2409
+ intervals [375]:
2410
+ xmin = 30.97
2411
+ xmax = 31.03
2412
+ text = "EH1"
2413
+ intervals [376]:
2414
+ xmin = 31.03
2415
+ xmax = 31.22
2416
+ text = "N"
2417
+ intervals [377]:
2418
+ xmin = 31.22
2419
+ xmax = 31.35
2420
+ text = "AY1"
2421
+ intervals [378]:
2422
+ xmin = 31.35
2423
+ xmax = 31.43
2424
+ text = "M"
2425
+ intervals [379]:
2426
+ xmin = 31.43
2427
+ xmax = 31.55
2428
+ text = "F"
2429
+ intervals [380]:
2430
+ xmin = 31.55
2431
+ xmax = 31.65
2432
+ text = "R"
2433
+ intervals [381]:
2434
+ xmin = 31.65
2435
+ xmax = 31.87
2436
+ text = "IY1"
2437
+ intervals [382]:
2438
+ xmin = 31.87
2439
+ xmax = 31.91
2440
+ text = "IH1"
2441
+ intervals [383]:
2442
+ xmin = 31.91
2443
+ xmax = 31.99
2444
+ text = "Z"
2445
+ intervals [384]:
2446
+ xmin = 31.99
2447
+ xmax = 32.06
2448
+ text = "IH1"
2449
+ intervals [385]:
2450
+ xmin = 32.06
2451
+ xmax = 32.11
2452
+ text = "T"
2453
+ intervals [386]:
2454
+ xmin = 32.11
2455
+ xmax = 32.2
2456
+ text = "AW1"
2457
+ intervals [387]:
2458
+ xmin = 32.2
2459
+ xmax = 32.23
2460
+ text = "T"
2461
+ intervals [388]:
2462
+ xmin = 32.23
2463
+ xmax = 32.27
2464
+ text = "W"
2465
+ intervals [389]:
2466
+ xmin = 32.27
2467
+ xmax = 32.32
2468
+ text = "IH0"
2469
+ intervals [390]:
2470
+ xmin = 32.32
2471
+ xmax = 32.35
2472
+ text = "TH"
2473
+ intervals [391]:
2474
+ xmin = 32.35
2475
+ xmax = 32.39
2476
+ text = "M"
2477
+ intervals [392]:
2478
+ xmin = 32.39
2479
+ xmax = 32.48
2480
+ text = "AY1"
2481
+ intervals [393]:
2482
+ xmin = 32.48
2483
+ xmax = 32.61
2484
+ text = "F"
2485
+ intervals [394]:
2486
+ xmin = 32.61
2487
+ xmax = 32.72
2488
+ text = "AE1"
2489
+ intervals [395]:
2490
+ xmin = 32.72
2491
+ xmax = 32.76
2492
+ text = "M"
2493
+ intervals [396]:
2494
+ xmin = 32.76
2495
+ xmax = 32.81
2496
+ text = "L"
2497
+ intervals [397]:
2498
+ xmin = 32.81
2499
+ xmax = 32.86
2500
+ text = "IY0"
2501
+ intervals [398]:
2502
+ xmin = 32.86
2503
+ xmax = 32.92
2504
+ text = "M"
2505
+ intervals [399]:
2506
+ xmin = 32.92
2507
+ xmax = 32.97
2508
+ text = "EH1"
2509
+ intervals [400]:
2510
+ xmin = 32.97
2511
+ xmax = 33.0
2512
+ text = "M"
2513
+ intervals [401]:
2514
+ xmin = 33.0
2515
+ xmax = 33.05
2516
+ text = "B"
2517
+ intervals [402]:
2518
+ xmin = 33.05
2519
+ xmax = 33.16
2520
+ text = "ER0"
2521
+ intervals [403]:
2522
+ xmin = 33.16
2523
+ xmax = 33.33
2524
+ text = "Z"
2525
+ intervals [404]:
2526
+ xmin = 33.33
2527
+ xmax = 33.51
2528
+ text = ""
2529
+ intervals [405]:
2530
+ xmin = 33.51
2531
+ xmax = 33.75
2532
+ text = "Y"
2533
+ intervals [406]:
2534
+ xmin = 33.75
2535
+ xmax = 33.89
2536
+ text = "UW1"
2537
+ intervals [407]:
2538
+ xmin = 33.89
2539
+ xmax = 33.97
2540
+ text = "W"
2541
+ intervals [408]:
2542
+ xmin = 33.97
2543
+ xmax = 34.02
2544
+ text = "UH1"
2545
+ intervals [409]:
2546
+ xmin = 34.02
2547
+ xmax = 34.11
2548
+ text = "D"
2549
+ intervals [410]:
2550
+ xmin = 34.11
2551
+ xmax = 34.16
2552
+ text = "B"
2553
+ intervals [411]:
2554
+ xmin = 34.16
2555
+ xmax = 34.29
2556
+ text = "IY1"
2557
+ intervals [412]:
2558
+ xmin = 34.29
2559
+ xmax = 34.36
2560
+ text = "S"
2561
+ intervals [413]:
2562
+ xmin = 34.36
2563
+ xmax = 34.42
2564
+ text = "AH0"
2565
+ intervals [414]:
2566
+ xmin = 34.42
2567
+ xmax = 34.53
2568
+ text = "P"
2569
+ intervals [415]:
2570
+ xmin = 34.53
2571
+ xmax = 34.63
2572
+ text = "R"
2573
+ intervals [416]:
2574
+ xmin = 34.63
2575
+ xmax = 34.91
2576
+ text = "AY1"
2577
+ intervals [417]:
2578
+ xmin = 34.91
2579
+ xmax = 35.02
2580
+ text = "Z"
2581
+ intervals [418]:
2582
+ xmin = 35.02
2583
+ xmax = 35.07
2584
+ text = "D"
2585
+ intervals [419]:
2586
+ xmin = 35.07
2587
+ xmax = 35.1
2588
+ text = "T"
2589
+ intervals [420]:
2590
+ xmin = 35.1
2591
+ xmax = 35.16
2592
+ text = "IH0"
2593
+ intervals [421]:
2594
+ xmin = 35.16
2595
+ xmax = 35.26
2596
+ text = "N"
2597
+ intervals [422]:
2598
+ xmin = 35.26
2599
+ xmax = 35.36
2600
+ text = "OW1"
2601
+ intervals [423]:
2602
+ xmin = 35.36
2603
+ xmax = 35.44
2604
+ text = "DH"
2605
+ intervals [424]:
2606
+ xmin = 35.44
2607
+ xmax = 35.47
2608
+ text = "AE1"
2609
+ intervals [425]:
2610
+ xmin = 35.47
2611
+ xmax = 35.5
2612
+ text = "T"
2613
+ intervals [426]:
2614
+ xmin = 35.5
2615
+ xmax = 35.64
2616
+ text = "AY1"
2617
+ intervals [427]:
2618
+ xmin = 35.64
2619
+ xmax = 35.7
2620
+ text = "HH"
2621
+ intervals [428]:
2622
+ xmin = 35.7
2623
+ xmax = 35.75
2624
+ text = "AE1"
2625
+ intervals [429]:
2626
+ xmin = 35.75
2627
+ xmax = 35.84
2628
+ text = "V"
2629
+ intervals [430]:
2630
+ xmin = 35.84
2631
+ xmax = 35.9
2632
+ text = "T"
2633
+ intervals [431]:
2634
+ xmin = 35.9
2635
+ xmax = 35.98
2636
+ text = "R"
2637
+ intervals [432]:
2638
+ xmin = 35.98
2639
+ xmax = 36.15
2640
+ text = "AY1"
2641
+ intervals [433]:
2642
+ xmin = 36.15
2643
+ xmax = 36.3
2644
+ text = "D"
2645
+ intervals [434]:
2646
+ xmin = 36.3
2647
+ xmax = 36.57
2648
+ text = ""
2649
+ intervals [435]:
2650
+ xmin = 36.57
2651
+ xmax = 36.92
2652
+ text = "AO1"
2653
+ intervals [436]:
2654
+ xmin = 36.92
2655
+ xmax = 36.99
2656
+ text = "L"
2657
+ intervals [437]:
2658
+ xmin = 36.99
2659
+ xmax = 37.03
2660
+ text = "DH"
2661
+ intervals [438]:
2662
+ xmin = 37.03
2663
+ xmax = 37.08
2664
+ text = "AH1"
2665
+ intervals [439]:
2666
+ xmin = 37.08
2667
+ xmax = 37.17
2668
+ text = "R"
2669
+ intervals [440]:
2670
+ xmin = 37.17
2671
+ xmax = 37.28
2672
+ text = "EH1"
2673
+ intervals [441]:
2674
+ xmin = 37.28
2675
+ xmax = 37.34
2676
+ text = "S"
2677
+ intervals [442]:
2678
+ xmin = 37.34
2679
+ xmax = 37.39
2680
+ text = "T"
2681
+ intervals [443]:
2682
+ xmin = 37.39
2683
+ xmax = 37.44
2684
+ text = "R"
2685
+ intervals [444]:
2686
+ xmin = 37.44
2687
+ xmax = 37.55
2688
+ text = "AA2"
2689
+ intervals [445]:
2690
+ xmin = 37.55
2691
+ xmax = 37.6
2692
+ text = "N"
2693
+ intervals [446]:
2694
+ xmin = 37.6
2695
+ xmax = 37.64
2696
+ text = "T"
2697
+ intervals [447]:
2698
+ xmin = 37.64
2699
+ xmax = 37.68
2700
+ text = "S"
2701
+ intervals [448]:
2702
+ xmin = 37.68
2703
+ xmax = 37.71
2704
+ text = ""
2705
+ intervals [449]:
2706
+ xmin = 37.71
2707
+ xmax = 37.77
2708
+ text = "IH0"
2709
+ intervals [450]:
2710
+ xmin = 37.77
2711
+ xmax = 37.83
2712
+ text = "N"
2713
+ intervals [451]:
2714
+ xmin = 37.83
2715
+ xmax = 37.87
2716
+ text = "AA1"
2717
+ intervals [452]:
2718
+ xmin = 37.87
2719
+ xmax = 37.95
2720
+ text = "R"
2721
+ intervals [453]:
2722
+ xmin = 37.95
2723
+ xmax = 38.12
2724
+ text = "HH"
2725
+ intervals [454]:
2726
+ xmin = 38.12
2727
+ xmax = 38.2
2728
+ text = "Y"
2729
+ intervals [455]:
2730
+ xmin = 38.2
2731
+ xmax = 38.33
2732
+ text = "UW1"
2733
+ intervals [456]:
2734
+ xmin = 38.33
2735
+ xmax = 38.5
2736
+ text = "JH"
2737
+ intervals [457]:
2738
+ xmin = 38.5
2739
+ xmax = 38.53
2740
+ text = "K"
2741
+ intervals [458]:
2742
+ xmin = 38.53
2743
+ xmax = 38.59
2744
+ text = "AH0"
2745
+ intervals [459]:
2746
+ xmin = 38.59
2747
+ xmax = 38.64
2748
+ text = "M"
2749
+ intervals [460]:
2750
+ xmin = 38.64
2751
+ xmax = 38.67
2752
+ text = "Y"
2753
+ intervals [461]:
2754
+ xmin = 38.67
2755
+ xmax = 38.7
2756
+ text = "UW1"
2757
+ intervals [462]:
2758
+ xmin = 38.7
2759
+ xmax = 38.76
2760
+ text = "N"
2761
+ intervals [463]:
2762
+ xmin = 38.76
2763
+ xmax = 38.79
2764
+ text = "AH0"
2765
+ intervals [464]:
2766
+ xmin = 38.79
2767
+ xmax = 38.82
2768
+ text = "T"
2769
+ intervals [465]:
2770
+ xmin = 38.82
2771
+ xmax = 39.07
2772
+ text = "IY0"
2773
+ intervals [466]:
2774
+ xmin = 39.07
2775
+ xmax = 39.23
2776
+ text = ""
2777
+ intervals [467]:
2778
+ xmin = 39.23
2779
+ xmax = 39.6
2780
+ text = "AY1"
2781
+ intervals [468]:
2782
+ xmin = 39.6
2783
+ xmax = 39.81
2784
+ text = "AE1"
2785
+ intervals [469]:
2786
+ xmin = 39.81
2787
+ xmax = 39.86
2788
+ text = "K"
2789
+ intervals [470]:
2790
+ xmin = 39.86
2791
+ xmax = 39.93
2792
+ text = "SH"
2793
+ intervals [471]:
2794
+ xmin = 39.93
2795
+ xmax = 39.97
2796
+ text = "AH0"
2797
+ intervals [472]:
2798
+ xmin = 39.97
2799
+ xmax = 40.0
2800
+ text = "L"
2801
+ intervals [473]:
2802
+ xmin = 40.0
2803
+ xmax = 40.09
2804
+ text = "IY0"
2805
+ intervals [474]:
2806
+ xmin = 40.09
2807
+ xmax = 40.17
2808
+ text = "G"
2809
+ intervals [475]:
2810
+ xmin = 40.17
2811
+ xmax = 40.26
2812
+ text = "IH1"
2813
+ intervals [476]:
2814
+ xmin = 40.26
2815
+ xmax = 40.32
2816
+ text = "V"
2817
+ intervals [477]:
2818
+ xmin = 40.32
2819
+ xmax = 40.5
2820
+ text = "IY1"
2821
+ intervals [478]:
2822
+ xmin = 40.5
2823
+ xmax = 40.61
2824
+ text = "CH"
2825
+ intervals [479]:
2826
+ xmin = 40.61
2827
+ xmax = 40.7
2828
+ text = "R"
2829
+ intervals [480]:
2830
+ xmin = 40.7
2831
+ xmax = 40.78
2832
+ text = "EH1"
2833
+ intervals [481]:
2834
+ xmin = 40.78
2835
+ xmax = 40.83
2836
+ text = "S"
2837
+ intervals [482]:
2838
+ xmin = 40.83
2839
+ xmax = 40.9
2840
+ text = "T"
2841
+ intervals [483]:
2842
+ xmin = 40.9
2843
+ xmax = 40.94
2844
+ text = "R"
2845
+ intervals [484]:
2846
+ xmin = 40.94
2847
+ xmax = 41.02
2848
+ text = "AA2"
2849
+ intervals [485]:
2850
+ xmin = 41.02
2851
+ xmax = 41.05
2852
+ text = "N"
2853
+ intervals [486]:
2854
+ xmin = 41.05
2855
+ xmax = 41.08
2856
+ text = "T"
2857
+ intervals [487]:
2858
+ xmin = 41.08
2859
+ xmax = 41.15
2860
+ text = "AH0"
2861
+ intervals [488]:
2862
+ xmin = 41.15
2863
+ xmax = 41.29
2864
+ text = "S"
2865
+ intervals [489]:
2866
+ xmin = 41.29
2867
+ xmax = 41.33
2868
+ text = "K"
2869
+ intervals [490]:
2870
+ xmin = 41.33
2871
+ xmax = 41.44
2872
+ text = "AO1"
2873
+ intervals [491]:
2874
+ xmin = 41.44
2875
+ xmax = 41.55
2876
+ text = "R"
2877
+ intervals [492]:
2878
+ xmin = 41.55
2879
+ xmax = 41.61
2880
+ text = "B"
2881
+ intervals [493]:
2882
+ xmin = 41.61
2883
+ xmax = 41.73
2884
+ text = "EY1"
2885
+ intervals [494]:
2886
+ xmin = 41.73
2887
+ xmax = 41.77
2888
+ text = "S"
2889
+ intervals [495]:
2890
+ xmin = 41.77
2891
+ xmax = 41.82
2892
+ text = "T"
2893
+ intervals [496]:
2894
+ xmin = 41.82
2895
+ xmax = 41.85
2896
+ text = "AA1"
2897
+ intervals [497]:
2898
+ xmin = 41.85
2899
+ xmax = 41.89
2900
+ text = "N"
2901
+ intervals [498]:
2902
+ xmin = 41.89
2903
+ xmax = 41.98
2904
+ text = "HH"
2905
+ intervals [499]:
2906
+ xmin = 41.98
2907
+ xmax = 42.05
2908
+ text = "AW1"
2909
+ intervals [500]:
2910
+ xmin = 42.05
2911
+ xmax = 42.11
2912
+ text = "G"
2913
+ intervals [501]:
2914
+ xmin = 42.11
2915
+ xmax = 42.14
2916
+ text = "IH0"
2917
+ intervals [502]:
2918
+ xmin = 42.14
2919
+ xmax = 42.17
2920
+ text = "D"
2921
+ intervals [503]:
2922
+ xmin = 42.17
2923
+ xmax = 42.2
2924
+ text = "DH"
2925
+ intervals [504]:
2926
+ xmin = 42.2
2927
+ xmax = 42.23
2928
+ text = "IY0"
2929
+ intervals [505]:
2930
+ xmin = 42.23
2931
+ xmax = 42.35
2932
+ text = "F"
2933
+ intervals [506]:
2934
+ xmin = 42.35
2935
+ xmax = 42.48
2936
+ text = "UW1"
2937
+ intervals [507]:
2938
+ xmin = 42.48
2939
+ xmax = 42.51
2940
+ text = "D"
2941
+ intervals [508]:
2942
+ xmin = 42.51
2943
+ xmax = 42.71
2944
+ text = "IH1"
2945
+ intervals [509]:
2946
+ xmin = 42.71
2947
+ xmax = 42.85
2948
+ text = "Z"
2949
+ intervals [510]:
2950
+ xmin = 42.85
2951
+ xmax = 43.13
2952
+ text = ""
2953
+ intervals [511]:
2954
+ xmin = 43.13
2955
+ xmax = 43.28
2956
+ text = "HH"
2957
+ intervals [512]:
2958
+ xmin = 43.28
2959
+ xmax = 43.36
2960
+ text = "AW1"
2961
+ intervals [513]:
2962
+ xmin = 43.36
2963
+ xmax = 43.43
2964
+ text = "G"
2965
+ intervals [514]:
2966
+ xmin = 43.43
2967
+ xmax = 43.46
2968
+ text = "IH0"
2969
+ intervals [515]:
2970
+ xmin = 43.46
2971
+ xmax = 43.51
2972
+ text = "D"
2973
+ intervals [516]:
2974
+ xmin = 43.51
2975
+ xmax = 43.56
2976
+ text = "DH"
2977
+ intervals [517]:
2978
+ xmin = 43.56
2979
+ xmax = 43.62
2980
+ text = "IY0"
2981
+ intervals [518]:
2982
+ xmin = 43.62
2983
+ xmax = 43.65
2984
+ text = "IH0"
2985
+ intervals [519]:
2986
+ xmin = 43.65
2987
+ xmax = 43.69
2988
+ text = "N"
2989
+ intervals [520]:
2990
+ xmin = 43.69
2991
+ xmax = 43.78
2992
+ text = "V"
2993
+ intervals [521]:
2994
+ xmin = 43.78
2995
+ xmax = 43.89
2996
+ text = "AY1"
2997
+ intervals [522]:
2998
+ xmin = 43.89
2999
+ xmax = 43.92
3000
+ text = "R"
3001
+ intervals [523]:
3002
+ xmin = 43.92
3003
+ xmax = 43.95
3004
+ text = "AH0"
3005
+ intervals [524]:
3006
+ xmin = 43.95
3007
+ xmax = 43.98
3008
+ text = "N"
3009
+ intervals [525]:
3010
+ xmin = 43.98
3011
+ xmax = 44.01
3012
+ text = "M"
3013
+ intervals [526]:
3014
+ xmin = 44.01
3015
+ xmax = 44.04
3016
+ text = "AH0"
3017
+ intervals [527]:
3018
+ xmin = 44.04
3019
+ xmax = 44.07
3020
+ text = "N"
3021
+ intervals [528]:
3022
+ xmin = 44.07
3023
+ xmax = 44.1
3024
+ text = "T"
3025
+ intervals [529]:
3026
+ xmin = 44.1
3027
+ xmax = 44.25
3028
+ text = "IH1"
3029
+ intervals [530]:
3030
+ xmin = 44.25
3031
+ xmax = 44.4
3032
+ text = "Z"
3033
+ intervals [531]:
3034
+ xmin = 44.4
3035
+ xmax = 44.49
3036
+ text = ""
3037
+ intervals [532]:
3038
+ xmin = 44.49
3039
+ xmax = 44.79
3040
+ text = "AE1"
3041
+ intervals [533]:
3042
+ xmin = 44.79
3043
+ xmax = 44.9
3044
+ text = "N"
3045
+ intervals [534]:
3046
+ xmin = 44.9
3047
+ xmax = 44.98
3048
+ text = "D"
3049
+ intervals [535]:
3050
+ xmin = 44.98
3051
+ xmax = 45.26
3052
+ text = "AE1"
3053
+ intervals [536]:
3054
+ xmin = 45.26
3055
+ xmax = 45.34
3056
+ text = "T"
3057
+ intervals [537]:
3058
+ xmin = 45.34
3059
+ xmax = 45.39
3060
+ text = "DH"
3061
+ intervals [538]:
3062
+ xmin = 45.39
3063
+ xmax = 45.62
3064
+ text = "AH1"
3065
+ intervals [539]:
3066
+ xmin = 45.62
3067
+ xmax = 45.75
3068
+ text = "S"
3069
+ intervals [540]:
3070
+ xmin = 45.75
3071
+ xmax = 45.87
3072
+ text = "EY1"
3073
+ intervals [541]:
3074
+ xmin = 45.87
3075
+ xmax = 45.91
3076
+ text = "M"
3077
+ intervals [542]:
3078
+ xmin = 45.91
3079
+ xmax = 46.01
3080
+ text = "T"
3081
+ intervals [543]:
3082
+ xmin = 46.01
3083
+ xmax = 46.19
3084
+ text = "AY1"
3085
+ intervals [544]:
3086
+ xmin = 46.19
3087
+ xmax = 46.29
3088
+ text = "M"
3089
+ intervals [545]:
3090
+ xmin = 46.29
3091
+ xmax = 46.42
3092
+ text = "AY1"
3093
+ intervals [546]:
3094
+ xmin = 46.42
3095
+ xmax = 46.45
3096
+ text = "W"
3097
+ intervals [547]:
3098
+ xmin = 46.45
3099
+ xmax = 46.48
3100
+ text = "AH0"
3101
+ intervals [548]:
3102
+ xmin = 46.48
3103
+ xmax = 46.54
3104
+ text = "L"
3105
+ intervals [549]:
3106
+ xmin = 46.54
3107
+ xmax = 46.62
3108
+ text = "R"
3109
+ intervals [550]:
3110
+ xmin = 46.62
3111
+ xmax = 46.69
3112
+ text = "AY1"
3113
+ intervals [551]:
3114
+ xmin = 46.69
3115
+ xmax = 46.74
3116
+ text = "T"
3117
+ intervals [552]:
3118
+ xmin = 46.74
3119
+ xmax = 46.82
3120
+ text = "D"
3121
+ intervals [553]:
3122
+ xmin = 46.82
3123
+ xmax = 46.91
3124
+ text = "AW1"
3125
+ intervals [554]:
3126
+ xmin = 46.91
3127
+ xmax = 46.94
3128
+ text = "N"
3129
+ intervals [555]:
3130
+ xmin = 46.94
3131
+ xmax = 46.97
3132
+ text = "DH"
3133
+ intervals [556]:
3134
+ xmin = 46.97
3135
+ xmax = 47.02
3136
+ text = "AH1"
3137
+ intervals [557]:
3138
+ xmin = 47.02
3139
+ xmax = 47.1
3140
+ text = "T"
3141
+ intervals [558]:
3142
+ xmin = 47.1
3143
+ xmax = 47.19
3144
+ text = "AY1"
3145
+ intervals [559]:
3146
+ xmin = 47.19
3147
+ xmax = 47.24
3148
+ text = "P"
3149
+ intervals [560]:
3150
+ xmin = 47.24
3151
+ xmax = 47.29
3152
+ text = "AH0"
3153
+ intervals [561]:
3154
+ xmin = 47.29
3155
+ xmax = 47.39
3156
+ text = "V"
3157
+ intervals [562]:
3158
+ xmin = 47.39
3159
+ xmax = 47.45
3160
+ text = "F"
3161
+ intervals [563]:
3162
+ xmin = 47.45
3163
+ xmax = 47.64
3164
+ text = "UW1"
3165
+ intervals [564]:
3166
+ xmin = 47.64
3167
+ xmax = 47.8
3168
+ text = "D"
3169
+ intervals [565]:
3170
+ xmin = 47.8
3171
+ xmax = 48.03
3172
+ text = ""
3173
+ intervals [566]:
3174
+ xmin = 48.03
3175
+ xmax = 48.1
3176
+ text = "DH"
3177
+ intervals [567]:
3178
+ xmin = 48.1
3179
+ xmax = 48.24
3180
+ text = "EY1"
3181
+ intervals [568]:
3182
+ xmin = 48.24
3183
+ xmax = 48.37
3184
+ text = "S"
3185
+ intervals [569]:
3186
+ xmin = 48.37
3187
+ xmax = 48.58
3188
+ text = "ER1"
3189
+ intervals [570]:
3190
+ xmin = 48.58
3191
+ xmax = 48.76
3192
+ text = "V"
3193
+ intervals [571]:
3194
+ xmin = 48.76
3195
+ xmax = 49.42
3196
+ text = ""
3197
+ intervals [572]:
3198
+ xmin = 49.42
3199
+ xmax = 49.61
3200
+ text = "S"
3201
+ intervals [573]:
3202
+ xmin = 49.61
3203
+ xmax = 49.9
3204
+ text = "OW1"
3205
+ intervals [574]:
3206
+ xmin = 49.9
3207
+ xmax = 50.09
3208
+ text = "W"
3209
+ intervals [575]:
3210
+ xmin = 50.09
3211
+ xmax = 50.22
3212
+ text = "EH1"
3213
+ intervals [576]:
3214
+ xmin = 50.22
3215
+ xmax = 50.46
3216
+ text = "N"
3217
+ intervals [577]:
3218
+ xmin = 50.46
3219
+ xmax = 50.49
3220
+ text = ""
3221
+ intervals [578]:
3222
+ xmin = 50.49
3223
+ xmax = 50.58
3224
+ text = "Y"
3225
+ intervals [579]:
3226
+ xmin = 50.58
3227
+ xmax = 50.67
3228
+ text = "UW1"
3229
+ intervals [580]:
3230
+ xmin = 50.67
3231
+ xmax = 50.85
3232
+ text = "R"
3233
+ intervals [581]:
3234
+ xmin = 50.85
3235
+ xmax = 50.94
3236
+ text = "S"
3237
+ intervals [582]:
3238
+ xmin = 50.94
3239
+ xmax = 50.98
3240
+ text = "OW1"
3241
+ intervals [583]:
3242
+ xmin = 50.98
3243
+ xmax = 51.03
3244
+ text = "W"
3245
+ intervals [584]:
3246
+ xmin = 51.03
3247
+ xmax = 51.06
3248
+ text = "EH1"
3249
+ intervals [585]:
3250
+ xmin = 51.06
3251
+ xmax = 51.13
3252
+ text = "N"
3253
+ intervals [586]:
3254
+ xmin = 51.13
3255
+ xmax = 51.24
3256
+ text = "IY1"
3257
+ intervals [587]:
3258
+ xmin = 51.24
3259
+ xmax = 51.35
3260
+ text = "CH"
3261
+ intervals [588]:
3262
+ xmin = 51.35
3263
+ xmax = 51.41
3264
+ text = "T"
3265
+ intervals [589]:
3266
+ xmin = 51.41
3267
+ xmax = 51.49
3268
+ text = "AY1"
3269
+ intervals [590]:
3270
+ xmin = 51.49
3271
+ xmax = 51.55
3272
+ text = "M"
3273
+ intervals [591]:
3274
+ xmin = 51.55
3275
+ xmax = 51.62
3276
+ text = "AH0"
3277
+ intervals [592]:
3278
+ xmin = 51.62
3279
+ xmax = 51.69
3280
+ text = "F"
3281
+ intervals [593]:
3282
+ xmin = 51.69
3283
+ xmax = 51.74
3284
+ text = "R"
3285
+ intervals [594]:
3286
+ xmin = 51.74
3287
+ xmax = 51.8
3288
+ text = "EH1"
3289
+ intervals [595]:
3290
+ xmin = 51.8
3291
+ xmax = 51.85
3292
+ text = "N"
3293
+ intervals [596]:
3294
+ xmin = 51.85
3295
+ xmax = 51.91
3296
+ text = "D"
3297
+ intervals [597]:
3298
+ xmin = 51.91
3299
+ xmax = 51.98
3300
+ text = "K"
3301
+ intervals [598]:
3302
+ xmin = 51.98
3303
+ xmax = 52.03
3304
+ text = "AH1"
3305
+ intervals [599]:
3306
+ xmin = 52.03
3307
+ xmax = 52.14
3308
+ text = "M"
3309
+ intervals [600]:
3310
+ xmin = 52.14
3311
+ xmax = 52.32
3312
+ text = "Z"
3313
+ intervals [601]:
3314
+ xmin = 52.32
3315
+ xmax = 52.37
3316
+ text = "T"
3317
+ intervals [602]:
3318
+ xmin = 52.37
3319
+ xmax = 52.46
3320
+ text = "UW1"
3321
+ intervals [603]:
3322
+ xmin = 52.46
3323
+ xmax = 52.53
3324
+ text = "DH"
3325
+ intervals [604]:
3326
+ xmin = 52.53
3327
+ xmax = 52.59
3328
+ text = "AH0"
3329
+ intervals [605]:
3330
+ xmin = 52.59
3331
+ xmax = 52.68
3332
+ text = "S"
3333
+ intervals [606]:
3334
+ xmin = 52.68
3335
+ xmax = 52.74
3336
+ text = "IH1"
3337
+ intervals [607]:
3338
+ xmin = 52.74
3339
+ xmax = 52.77
3340
+ text = "T"
3341
+ intervals [608]:
3342
+ xmin = 52.77
3343
+ xmax = 52.9
3344
+ text = "IY0"
3345
+ intervals [609]:
3346
+ xmin = 52.9
3347
+ xmax = 52.97
3348
+ text = "T"
3349
+ intervals [610]:
3350
+ xmin = 52.97
3351
+ xmax = 53.07
3352
+ text = "UW1"
3353
+ intervals [611]:
3354
+ xmin = 53.07
3355
+ xmax = 53.12
3356
+ text = "IH0"
3357
+ intervals [612]:
3358
+ xmin = 53.12
3359
+ xmax = 53.17
3360
+ text = "N"
3361
+ intervals [613]:
3362
+ xmin = 53.17
3363
+ xmax = 53.26
3364
+ text = "JH"
3365
+ intervals [614]:
3366
+ xmin = 53.26
3367
+ xmax = 53.35
3368
+ text = "OY1"
3369
+ intervals [615]:
3370
+ xmin = 53.35
3371
+ xmax = 53.46
3372
+ text = "T"
3373
+ intervals [616]:
3374
+ xmin = 53.46
3375
+ xmax = 53.59
3376
+ text = "AY1"
3377
+ intervals [617]:
3378
+ xmin = 53.59
3379
+ xmax = 53.62
3380
+ text = "M"
3381
+ intervals [618]:
3382
+ xmin = 53.62
3383
+ xmax = 53.65
3384
+ text = "W"
3385
+ intervals [619]:
3386
+ xmin = 53.65
3387
+ xmax = 53.7
3388
+ text = "IH1"
3389
+ intervals [620]:
3390
+ xmin = 53.7
3391
+ xmax = 53.74
3392
+ text = "DH"
3393
+ intervals [621]:
3394
+ xmin = 53.74
3395
+ xmax = 53.81
3396
+ text = "M"
3397
+ intervals [622]:
3398
+ xmin = 53.81
3399
+ xmax = 54.02
3400
+ text = "IY1"
3401
+ intervals [623]:
3402
+ xmin = 54.02
3403
+ xmax = 54.31
3404
+ text = ""
3405
+ intervals [624]:
3406
+ xmin = 54.31
3407
+ xmax = 54.54
3408
+ text = "AY1"
3409
+ intervals [625]:
3410
+ xmin = 54.54
3411
+ xmax = 54.6
3412
+ text = "W"
3413
+ intervals [626]:
3414
+ xmin = 54.6
3415
+ xmax = 54.66
3416
+ text = "AH0"
3417
+ intervals [627]:
3418
+ xmin = 54.66
3419
+ xmax = 54.69
3420
+ text = "L"
3421
+ intervals [628]:
3422
+ xmin = 54.69
3423
+ xmax = 54.77
3424
+ text = "G"
3425
+ intervals [629]:
3426
+ xmin = 54.77
3427
+ xmax = 54.81
3428
+ text = "IH1"
3429
+ intervals [630]:
3430
+ xmin = 54.81
3431
+ xmax = 54.84
3432
+ text = "V"
3433
+ intervals [631]:
3434
+ xmin = 54.84
3435
+ xmax = 54.87
3436
+ text = "DH"
3437
+ intervals [632]:
3438
+ xmin = 54.87
3439
+ xmax = 54.94
3440
+ text = "AH0"
3441
+ intervals [633]:
3442
+ xmin = 54.94
3443
+ xmax = 54.97
3444
+ text = "M"
3445
+ intervals [634]:
3446
+ xmin = 54.97
3447
+ xmax = 55.0
3448
+ text = "DH"
3449
+ intervals [635]:
3450
+ xmin = 55.0
3451
+ xmax = 55.07
3452
+ text = "AH0"
3453
+ intervals [636]:
3454
+ xmin = 55.07
3455
+ xmax = 55.17
3456
+ text = "T"
3457
+ intervals [637]:
3458
+ xmin = 55.17
3459
+ xmax = 55.27
3460
+ text = "AA1"
3461
+ intervals [638]:
3462
+ xmin = 55.27
3463
+ xmax = 55.38
3464
+ text = "P"
3465
+ intervals [639]:
3466
+ xmin = 55.38
3467
+ xmax = 55.53
3468
+ text = "spn"
3469
+ intervals [640]:
3470
+ xmin = 55.53
3471
+ xmax = 55.62
3472
+ text = "R"
3473
+ intervals [641]:
3474
+ xmin = 55.62
3475
+ xmax = 55.7
3476
+ text = "EH1"
3477
+ intervals [642]:
3478
+ xmin = 55.7
3479
+ xmax = 55.76
3480
+ text = "S"
3481
+ intervals [643]:
3482
+ xmin = 55.76
3483
+ xmax = 55.83
3484
+ text = "T"
3485
+ intervals [644]:
3486
+ xmin = 55.83
3487
+ xmax = 55.86
3488
+ text = "R"
3489
+ intervals [645]:
3490
+ xmin = 55.86
3491
+ xmax = 55.97
3492
+ text = "AA2"
3493
+ intervals [646]:
3494
+ xmin = 55.97
3495
+ xmax = 56.01
3496
+ text = "N"
3497
+ intervals [647]:
3498
+ xmin = 56.01
3499
+ xmax = 56.04
3500
+ text = "T"
3501
+ intervals [648]:
3502
+ xmin = 56.04
3503
+ xmax = 56.1
3504
+ text = "S"
3505
+ intervals [649]:
3506
+ xmin = 56.1
3507
+ xmax = 56.17
3508
+ text = "B"
3509
+ intervals [650]:
3510
+ xmin = 56.17
3511
+ xmax = 56.32
3512
+ text = "EY1"
3513
+ intervals [651]:
3514
+ xmin = 56.32
3515
+ xmax = 56.37
3516
+ text = "S"
3517
+ intervals [652]:
3518
+ xmin = 56.37
3519
+ xmax = 56.44
3520
+ text = "T"
3521
+ intervals [653]:
3522
+ xmin = 56.44
3523
+ xmax = 56.64
3524
+ text = "AA1"
3525
+ intervals [654]:
3526
+ xmin = 56.64
3527
+ xmax = 56.68
3528
+ text = "N"
3529
+ intervals [655]:
3530
+ xmin = 56.68
3531
+ xmax = 56.72
3532
+ text = "DH"
3533
+ intervals [656]:
3534
+ xmin = 56.72
3535
+ xmax = 56.9
3536
+ text = "IH0"
3537
+ intervals [657]:
3538
+ xmin = 56.9
3539
+ xmax = 56.99
3540
+ text = "S"
3541
+ intervals [658]:
3542
+ xmin = 56.99
3543
+ xmax = 57.05
3544
+ text = "R"
3545
+ intervals [659]:
3546
+ xmin = 57.05
3547
+ xmax = 57.11
3548
+ text = "AE1"
3549
+ intervals [660]:
3550
+ xmin = 57.11
3551
+ xmax = 57.16
3552
+ text = "NG"
3553
+ intervals [661]:
3554
+ xmin = 57.16
3555
+ xmax = 57.22
3556
+ text = "K"
3557
+ intervals [662]:
3558
+ xmin = 57.22
3559
+ xmax = 57.29
3560
+ text = "IH0"
3561
+ intervals [663]:
3562
+ xmin = 57.29
3563
+ xmax = 57.35
3564
+ text = "NG"
3565
+ intervals [664]:
3566
+ xmin = 57.35
3567
+ xmax = 57.4
3568
+ text = "AH0"
3569
+ intervals [665]:
3570
+ xmin = 57.4
3571
+ xmax = 57.43
3572
+ text = "N"
3573
+ intervals [666]:
3574
+ xmin = 57.43
3575
+ xmax = 57.53
3576
+ text = "D"
3577
+ intervals [667]:
3578
+ xmin = 57.53
3579
+ xmax = 57.7
3580
+ text = "EH1"
3581
+ intervals [668]:
3582
+ xmin = 57.7
3583
+ xmax = 57.76
3584
+ text = "V"
3585
+ intervals [669]:
3586
+ xmin = 57.76
3587
+ xmax = 57.82
3588
+ text = "R"
3589
+ intervals [670]:
3590
+ xmin = 57.82
3591
+ xmax = 57.86
3592
+ text = "IY0"
3593
+ intervals [671]:
3594
+ xmin = 57.86
3595
+ xmax = 57.95
3596
+ text = "T"
3597
+ intervals [672]:
3598
+ xmin = 57.95
3599
+ xmax = 58.19
3600
+ text = "AY1"
3601
+ intervals [673]:
3602
+ xmin = 58.19
3603
+ xmax = 58.44
3604
+ text = "M"
3605
+ intervals [674]:
3606
+ xmin = 58.44
3607
+ xmax = 59.02
3608
+ text = ""
3609
+ intervals [675]:
3610
+ xmin = 59.02
3611
+ xmax = 59.12
3612
+ text = "Y"
3613
+ intervals [676]:
3614
+ xmin = 59.12
3615
+ xmax = 59.15
3616
+ text = "UH1"
3617
+ intervals [677]:
3618
+ xmin = 59.15
3619
+ xmax = 59.2
3620
+ text = "R"
3621
+ intervals [678]:
3622
+ xmin = 59.2
3623
+ xmax = 59.32
3624
+ text = "S"
3625
+ intervals [679]:
3626
+ xmin = 59.32
3627
+ xmax = 59.41
3628
+ text = "AE1"
3629
+ intervals [680]:
3630
+ xmin = 59.41
3631
+ xmax = 59.44
3632
+ text = "T"
3633
+ intervals [681]:
3634
+ xmin = 59.44
3635
+ xmax = 59.49
3636
+ text = "AH0"
3637
+ intervals [682]:
3638
+ xmin = 59.49
3639
+ xmax = 59.55
3640
+ text = "S"
3641
+ intervals [683]:
3642
+ xmin = 59.55
3643
+ xmax = 59.62
3644
+ text = "F"
3645
+ intervals [684]:
3646
+ xmin = 59.62
3647
+ xmax = 59.69
3648
+ text = "AY2"
3649
+ intervals [685]:
3650
+ xmin = 59.69
3651
+ xmax = 59.72
3652
+ text = "D"
3653
+ intervals [686]:
3654
+ xmin = 59.72
3655
+ xmax = 59.77
3656
+ text = "W"
3657
+ intervals [687]:
3658
+ xmin = 59.77
3659
+ xmax = 59.82
3660
+ text = "IH0"
3661
+ intervals [688]:
3662
+ xmin = 59.82
3663
+ xmax = 59.85
3664
+ text = "DH"
3665
+ intervals [689]:
3666
+ xmin = 59.85
3667
+ xmax = 59.88
3668
+ text = "DH"
3669
+ intervals [690]:
3670
+ xmin = 59.88
3671
+ xmax = 60.0
3672
+ text = "IY1"
3673
+ intervals [691]:
3674
+ xmin = 60.0
3675
+ xmax = 60.1
3676
+ text = "Z"
3677
+ intervals [692]:
3678
+ xmin = 60.1
3679
+ xmax = 60.15
3680
+ text = "R"
3681
+ intervals [693]:
3682
+ xmin = 60.15
3683
+ xmax = 60.23
3684
+ text = "EH1"
3685
+ intervals [694]:
3686
+ xmin = 60.23
3687
+ xmax = 60.28
3688
+ text = "S"
3689
+ intervals [695]:
3690
+ xmin = 60.28
3691
+ xmax = 60.34
3692
+ text = "T"
3693
+ intervals [696]:
3694
+ xmin = 60.34
3695
+ xmax = 60.4
3696
+ text = "R"
3697
+ intervals [697]:
3698
+ xmin = 60.4
3699
+ xmax = 60.52
3700
+ text = "AA2"
3701
+ intervals [698]:
3702
+ xmin = 60.52
3703
+ xmax = 60.57
3704
+ text = "N"
3705
+ intervals [699]:
3706
+ xmin = 60.57
3707
+ xmax = 60.62
3708
+ text = "T"
3709
+ intervals [700]:
3710
+ xmin = 60.62
3711
+ xmax = 60.81
3712
+ text = "S"
3713
+ intervals [701]:
3714
+ xmin = 60.81
3715
+ xmax = 62
3716
+ text = ""
EMAGE/test_sequences/textgrid/2_scott_0_3_3.TextGrid ADDED
@@ -0,0 +1,3676 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ File type = "ooTextFile"
2
+ Object class = "TextGrid"
3
+
4
+ xmin = 0.0
5
+ xmax = 68
6
+ tiers? <exists>
7
+ size = 2
8
+ item []:
9
+ item [1]:
10
+ class = "IntervalTier"
11
+ name = "words"
12
+ xmin = 0.0
13
+ xmax = 68
14
+ intervals: size = 213
15
+ intervals [1]:
16
+ xmin = 0.0
17
+ xmax = 1.47
18
+ text = ""
19
+ intervals [2]:
20
+ xmin = 1.47
21
+ xmax = 2.36
22
+ text = "well"
23
+ intervals [3]:
24
+ xmin = 2.36
25
+ xmax = 2.56
26
+ text = ""
27
+ intervals [4]:
28
+ xmin = 2.56
29
+ xmax = 3.05
30
+ text = "in"
31
+ intervals [5]:
32
+ xmin = 3.05
33
+ xmax = 3.43
34
+ text = "my"
35
+ intervals [6]:
36
+ xmin = 3.43
37
+ xmax = 4.29
38
+ text = "opinion"
39
+ intervals [7]:
40
+ xmin = 4.29
41
+ xmax = 4.43
42
+ text = "i"
43
+ intervals [8]:
44
+ xmin = 4.43
45
+ xmax = 4.7
46
+ text = "think"
47
+ intervals [9]:
48
+ xmin = 4.7
49
+ xmax = 4.77
50
+ text = "the"
51
+ intervals [10]:
52
+ xmin = 4.77
53
+ xmax = 5.06
54
+ text = "best"
55
+ intervals [11]:
56
+ xmin = 5.06
57
+ xmax = 5.31
58
+ text = "job"
59
+ intervals [12]:
60
+ xmin = 5.31
61
+ xmax = 5.41
62
+ text = "for"
63
+ intervals [13]:
64
+ xmin = 5.41
65
+ xmax = 5.62
66
+ text = "me"
67
+ intervals [14]:
68
+ xmin = 5.62
69
+ xmax = 5.76
70
+ text = "is"
71
+ intervals [15]:
72
+ xmin = 5.76
73
+ xmax = 5.84
74
+ text = "to"
75
+ intervals [16]:
76
+ xmin = 5.84
77
+ xmax = 6.11
78
+ text = "become"
79
+ intervals [17]:
80
+ xmin = 6.11
81
+ xmax = 6.2
82
+ text = "a"
83
+ intervals [18]:
84
+ xmin = 6.2
85
+ xmax = 6.93
86
+ text = "journalist"
87
+ intervals [19]:
88
+ xmin = 6.93
89
+ xmax = 7.3
90
+ text = "cuz"
91
+ intervals [20]:
92
+ xmin = 7.3
93
+ xmax = 7.53
94
+ text = "this"
95
+ intervals [21]:
96
+ xmin = 7.53
97
+ xmax = 7.63
98
+ text = "is"
99
+ intervals [22]:
100
+ xmin = 7.63
101
+ xmax = 7.79
102
+ text = "my"
103
+ intervals [23]:
104
+ xmin = 7.79
105
+ xmax = 8.14
106
+ text = "dream"
107
+ intervals [24]:
108
+ xmin = 8.14
109
+ xmax = 8.53
110
+ text = "job"
111
+ intervals [25]:
112
+ xmin = 8.53
113
+ xmax = 8.71
114
+ text = "i've"
115
+ intervals [26]:
116
+ xmin = 8.71
117
+ xmax = 9.13
118
+ text = "always"
119
+ intervals [27]:
120
+ xmin = 9.13
121
+ xmax = 9.53
122
+ text = "wanted"
123
+ intervals [28]:
124
+ xmin = 9.53
125
+ xmax = 9.6
126
+ text = "to"
127
+ intervals [29]:
128
+ xmin = 9.6
129
+ xmax = 9.77
130
+ text = "be"
131
+ intervals [30]:
132
+ xmin = 9.77
133
+ xmax = 9.84
134
+ text = "a"
135
+ intervals [31]:
136
+ xmin = 9.84
137
+ xmax = 10.29
138
+ text = "journalist"
139
+ intervals [32]:
140
+ xmin = 10.29
141
+ xmax = 10.48
142
+ text = "since"
143
+ intervals [33]:
144
+ xmin = 10.48
145
+ xmax = 10.54
146
+ text = "i"
147
+ intervals [34]:
148
+ xmin = 10.54
149
+ xmax = 10.71
150
+ text = "was"
151
+ intervals [35]:
152
+ xmin = 10.71
153
+ xmax = 10.78
154
+ text = "in"
155
+ intervals [36]:
156
+ xmin = 10.78
157
+ xmax = 11.01
158
+ text = "middle"
159
+ intervals [37]:
160
+ xmin = 11.01
161
+ xmax = 11.4
162
+ text = "school"
163
+ intervals [38]:
164
+ xmin = 11.4
165
+ xmax = 11.96
166
+ text = ""
167
+ intervals [39]:
168
+ xmin = 11.96
169
+ xmax = 12.92
170
+ text = "journalists"
171
+ intervals [40]:
172
+ xmin = 12.92
173
+ xmax = 13.73
174
+ text = "never"
175
+ intervals [41]:
176
+ xmin = 13.73
177
+ xmax = 13.81
178
+ text = ""
179
+ intervals [42]:
180
+ xmin = 13.81
181
+ xmax = 14.38
182
+ text = "tell"
183
+ intervals [43]:
184
+ xmin = 14.38
185
+ xmax = 15.08
186
+ text = "lies"
187
+ intervals [44]:
188
+ xmin = 15.08
189
+ xmax = 15.19
190
+ text = "and"
191
+ intervals [45]:
192
+ xmin = 15.19
193
+ xmax = 15.38
194
+ text = "are"
195
+ intervals [46]:
196
+ xmin = 15.38
197
+ xmax = 15.75
198
+ text = "always"
199
+ intervals [47]:
200
+ xmin = 15.75
201
+ xmax = 16.07
202
+ text = "seeking"
203
+ intervals [48]:
204
+ xmin = 16.07
205
+ xmax = 16.17
206
+ text = "the"
207
+ intervals [49]:
208
+ xmin = 16.17
209
+ xmax = 16.69
210
+ text = "truth"
211
+ intervals [50]:
212
+ xmin = 16.69
213
+ xmax = 16.85
214
+ text = ""
215
+ intervals [51]:
216
+ xmin = 16.85
217
+ xmax = 17.09
218
+ text = "i"
219
+ intervals [52]:
220
+ xmin = 17.09
221
+ xmax = 17.27
222
+ text = "want"
223
+ intervals [53]:
224
+ xmin = 17.27
225
+ xmax = 17.33
226
+ text = "to"
227
+ intervals [54]:
228
+ xmin = 17.33
229
+ xmax = 17.45
230
+ text = "be"
231
+ intervals [55]:
232
+ xmin = 17.45
233
+ xmax = 17.73
234
+ text = "just"
235
+ intervals [56]:
236
+ xmin = 17.73
237
+ xmax = 18.0
238
+ text = "like"
239
+ intervals [57]:
240
+ xmin = 18.0
241
+ xmax = 18.36
242
+ text = "that"
243
+ intervals [58]:
244
+ xmin = 18.36
245
+ xmax = 18.73
246
+ text = ""
247
+ intervals [59]:
248
+ xmin = 18.73
249
+ xmax = 19.54
250
+ text = "i"
251
+ intervals [60]:
252
+ xmin = 19.54
253
+ xmax = 19.71
254
+ text = ""
255
+ intervals [61]:
256
+ xmin = 19.71
257
+ xmax = 20.27
258
+ text = "usually"
259
+ intervals [62]:
260
+ xmin = 20.27
261
+ xmax = 20.52
262
+ text = "feel"
263
+ intervals [63]:
264
+ xmin = 20.52
265
+ xmax = 20.96
266
+ text = "shy"
267
+ intervals [64]:
268
+ xmin = 20.96
269
+ xmax = 21.14
270
+ text = "when"
271
+ intervals [65]:
272
+ xmin = 21.14
273
+ xmax = 21.26
274
+ text = "i"
275
+ intervals [66]:
276
+ xmin = 21.26
277
+ xmax = 21.38
278
+ text = "am"
279
+ intervals [67]:
280
+ xmin = 21.38
281
+ xmax = 21.75
282
+ text = "talking"
283
+ intervals [68]:
284
+ xmin = 21.75
285
+ xmax = 21.86
286
+ text = "to"
287
+ intervals [69]:
288
+ xmin = 21.86
289
+ xmax = 22.22
290
+ text = "others"
291
+ intervals [70]:
292
+ xmin = 22.22
293
+ xmax = 22.37
294
+ text = "and"
295
+ intervals [71]:
296
+ xmin = 22.37
297
+ xmax = 22.46
298
+ text = "i"
299
+ intervals [72]:
300
+ xmin = 22.46
301
+ xmax = 22.8
302
+ text = "know"
303
+ intervals [73]:
304
+ xmin = 22.8
305
+ xmax = 23.1
306
+ text = "that"
307
+ intervals [74]:
308
+ xmin = 23.1
309
+ xmax = 23.79
310
+ text = "journalists"
311
+ intervals [75]:
312
+ xmin = 23.79
313
+ xmax = 23.99
314
+ text = "are"
315
+ intervals [76]:
316
+ xmin = 23.99
317
+ xmax = 24.73
318
+ text = "very"
319
+ intervals [77]:
320
+ xmin = 24.73
321
+ xmax = 25.29
322
+ text = "good"
323
+ intervals [78]:
324
+ xmin = 25.29
325
+ xmax = 25.44
326
+ text = ""
327
+ intervals [79]:
328
+ xmin = 25.44
329
+ xmax = 25.7
330
+ text = "at"
331
+ intervals [80]:
332
+ xmin = 25.7
333
+ xmax = 26.41
334
+ text = "communicating"
335
+ intervals [81]:
336
+ xmin = 26.41
337
+ xmax = 26.94
338
+ text = "because"
339
+ intervals [82]:
340
+ xmin = 26.94
341
+ xmax = 26.98
342
+ text = ""
343
+ intervals [83]:
344
+ xmin = 26.98
345
+ xmax = 27.2
346
+ text = "good"
347
+ intervals [84]:
348
+ xmin = 27.2
349
+ xmax = 27.95
350
+ text = "communication"
351
+ intervals [85]:
352
+ xmin = 27.95
353
+ xmax = 28.36
354
+ text = "skills"
355
+ intervals [86]:
356
+ xmin = 28.36
357
+ xmax = 28.51
358
+ text = "are"
359
+ intervals [87]:
360
+ xmin = 28.51
361
+ xmax = 28.75
362
+ text = "very"
363
+ intervals [88]:
364
+ xmin = 28.75
365
+ xmax = 29.22
366
+ text = "important"
367
+ intervals [89]:
368
+ xmin = 29.22
369
+ xmax = 29.39
370
+ text = "when"
371
+ intervals [90]:
372
+ xmin = 29.39
373
+ xmax = 29.51
374
+ text = "you're"
375
+ intervals [91]:
376
+ xmin = 29.51
377
+ xmax = 29.85
378
+ text = "doing"
379
+ intervals [92]:
380
+ xmin = 29.85
381
+ xmax = 30.43
382
+ text = "interviews"
383
+ intervals [93]:
384
+ xmin = 30.43
385
+ xmax = 30.71
386
+ text = ""
387
+ intervals [94]:
388
+ xmin = 30.71
389
+ xmax = 30.99
390
+ text = "i"
391
+ intervals [95]:
392
+ xmin = 30.99
393
+ xmax = 31.21
394
+ text = "want"
395
+ intervals [96]:
396
+ xmin = 31.21
397
+ xmax = 31.3
398
+ text = "to"
399
+ intervals [97]:
400
+ xmin = 31.3
401
+ xmax = 31.71
402
+ text = "possess"
403
+ intervals [98]:
404
+ xmin = 31.71
405
+ xmax = 31.82
406
+ text = "the"
407
+ intervals [99]:
408
+ xmin = 31.82
409
+ xmax = 32.16
410
+ text = "skill"
411
+ intervals [100]:
412
+ xmin = 32.16
413
+ xmax = 32.93
414
+ text = "myself"
415
+ intervals [101]:
416
+ xmin = 32.93
417
+ xmax = 33.0
418
+ text = ""
419
+ intervals [102]:
420
+ xmin = 33.0
421
+ xmax = 33.53
422
+ text = "so"
423
+ intervals [103]:
424
+ xmin = 33.53
425
+ xmax = 33.56
426
+ text = ""
427
+ intervals [104]:
428
+ xmin = 33.56
429
+ xmax = 33.95
430
+ text = "that's"
431
+ intervals [105]:
432
+ xmin = 33.95
433
+ xmax = 34.31
434
+ text = "why"
435
+ intervals [106]:
436
+ xmin = 34.31
437
+ xmax = 34.53
438
+ text = "i"
439
+ intervals [107]:
440
+ xmin = 34.53
441
+ xmax = 34.83
442
+ text = "want"
443
+ intervals [108]:
444
+ xmin = 34.83
445
+ xmax = 34.89
446
+ text = "to"
447
+ intervals [109]:
448
+ xmin = 34.89
449
+ xmax = 35.42
450
+ text = "become"
451
+ intervals [110]:
452
+ xmin = 35.42
453
+ xmax = 35.46
454
+ text = ""
455
+ intervals [111]:
456
+ xmin = 35.46
457
+ xmax = 35.59
458
+ text = "a"
459
+ intervals [112]:
460
+ xmin = 35.59
461
+ xmax = 36.37
462
+ text = "journalist"
463
+ intervals [113]:
464
+ xmin = 36.37
465
+ xmax = 36.74
466
+ text = ""
467
+ intervals [114]:
468
+ xmin = 36.74
469
+ xmax = 37.02
470
+ text = "other"
471
+ intervals [115]:
472
+ xmin = 37.02
473
+ xmax = 37.18
474
+ text = "than"
475
+ intervals [116]:
476
+ xmin = 37.18
477
+ xmax = 37.73
478
+ text = "that"
479
+ intervals [117]:
480
+ xmin = 37.73
481
+ xmax = 37.76
482
+ text = ""
483
+ intervals [118]:
484
+ xmin = 37.76
485
+ xmax = 38.72
486
+ text = "photography"
487
+ intervals [119]:
488
+ xmin = 38.72
489
+ xmax = 38.96
490
+ text = ""
491
+ intervals [120]:
492
+ xmin = 38.96
493
+ xmax = 39.4
494
+ text = "often"
495
+ intervals [121]:
496
+ xmin = 39.4
497
+ xmax = 39.66
498
+ text = "makes"
499
+ intervals [122]:
500
+ xmin = 39.66
501
+ xmax = 39.8
502
+ text = "me"
503
+ intervals [123]:
504
+ xmin = 39.8
505
+ xmax = 40.39
506
+ text = "feel"
507
+ intervals [124]:
508
+ xmin = 40.39
509
+ xmax = 40.72
510
+ text = "like"
511
+ intervals [125]:
512
+ xmin = 40.72
513
+ xmax = 41.42
514
+ text = "i'm"
515
+ intervals [126]:
516
+ xmin = 41.42
517
+ xmax = 41.77
518
+ text = ""
519
+ intervals [127]:
520
+ xmin = 41.77
521
+ xmax = 42.06
522
+ text = "doing"
523
+ intervals [128]:
524
+ xmin = 42.06
525
+ xmax = 42.13
526
+ text = "a"
527
+ intervals [129]:
528
+ xmin = 42.13
529
+ xmax = 42.41
530
+ text = "job"
531
+ intervals [130]:
532
+ xmin = 42.41
533
+ xmax = 42.58
534
+ text = "full"
535
+ intervals [131]:
536
+ xmin = 42.58
537
+ xmax = 42.64
538
+ text = "of"
539
+ intervals [132]:
540
+ xmin = 42.64
541
+ xmax = 42.99
542
+ text = "design"
543
+ intervals [133]:
544
+ xmin = 42.99
545
+ xmax = 43.12
546
+ text = "and"
547
+ intervals [134]:
548
+ xmin = 43.12
549
+ xmax = 43.25
550
+ text = "in"
551
+ intervals [135]:
552
+ xmin = 43.25
553
+ xmax = 43.52
554
+ text = "for"
555
+ intervals [136]:
556
+ xmin = 43.52
557
+ xmax = 44.31
558
+ text = "innovation"
559
+ intervals [137]:
560
+ xmin = 44.31
561
+ xmax = 45.18
562
+ text = ""
563
+ intervals [138]:
564
+ xmin = 45.18
565
+ xmax = 45.73
566
+ text = "because"
567
+ intervals [139]:
568
+ xmin = 45.73
569
+ xmax = 45.89
570
+ text = "for"
571
+ intervals [140]:
572
+ xmin = 45.89
573
+ xmax = 45.99
574
+ text = "the"
575
+ intervals [141]:
576
+ xmin = 45.99
577
+ xmax = 46.35
578
+ text = "same"
579
+ intervals [142]:
580
+ xmin = 46.35
581
+ xmax = 46.88
582
+ text = "scenery"
583
+ intervals [143]:
584
+ xmin = 46.88
585
+ xmax = 47.01
586
+ text = "we"
587
+ intervals [144]:
588
+ xmin = 47.01
589
+ xmax = 47.12
590
+ text = "can"
591
+ intervals [145]:
592
+ xmin = 47.12
593
+ xmax = 47.34
594
+ text = "use"
595
+ intervals [146]:
596
+ xmin = 47.34
597
+ xmax = 47.61
598
+ text = "different"
599
+ intervals [147]:
600
+ xmin = 47.61
601
+ xmax = 48.12
602
+ text = "angles"
603
+ intervals [148]:
604
+ xmin = 48.12
605
+ xmax = 48.21
606
+ text = "and"
607
+ intervals [149]:
608
+ xmin = 48.21
609
+ xmax = 48.48
610
+ text = "different"
611
+ intervals [150]:
612
+ xmin = 48.48
613
+ xmax = 49.32
614
+ text = "compositions"
615
+ intervals [151]:
616
+ xmin = 49.32
617
+ xmax = 49.68
618
+ text = ""
619
+ intervals [152]:
620
+ xmin = 49.68
621
+ xmax = 49.98
622
+ text = "for"
623
+ intervals [153]:
624
+ xmin = 49.98
625
+ xmax = 50.4
626
+ text = "example"
627
+ intervals [154]:
628
+ xmin = 50.4
629
+ xmax = 50.91
630
+ text = "people"
631
+ intervals [155]:
632
+ xmin = 50.91
633
+ xmax = 51.42
634
+ text = "being"
635
+ intervals [156]:
636
+ xmin = 51.42
637
+ xmax = 51.91
638
+ text = "shifted"
639
+ intervals [157]:
640
+ xmin = 51.91
641
+ xmax = 52.06
642
+ text = "from"
643
+ intervals [158]:
644
+ xmin = 52.06
645
+ xmax = 52.15
646
+ text = "the"
647
+ intervals [159]:
648
+ xmin = 52.15
649
+ xmax = 52.47
650
+ text = "center"
651
+ intervals [160]:
652
+ xmin = 52.47
653
+ xmax = 52.54
654
+ text = "of"
655
+ intervals [161]:
656
+ xmin = 52.54
657
+ xmax = 52.63
658
+ text = "the"
659
+ intervals [162]:
660
+ xmin = 52.63
661
+ xmax = 52.95
662
+ text = "frame"
663
+ intervals [163]:
664
+ xmin = 52.95
665
+ xmax = 53.1
666
+ text = "to"
667
+ intervals [164]:
668
+ xmin = 53.1
669
+ xmax = 53.32
670
+ text = "left"
671
+ intervals [165]:
672
+ xmin = 53.32
673
+ xmax = 53.54
674
+ text = "side"
675
+ intervals [166]:
676
+ xmin = 53.54
677
+ xmax = 53.6
678
+ text = "of"
679
+ intervals [167]:
680
+ xmin = 53.6
681
+ xmax = 53.69
682
+ text = "the"
683
+ intervals [168]:
684
+ xmin = 53.69
685
+ xmax = 54.17
686
+ text = "frame"
687
+ intervals [169]:
688
+ xmin = 54.17
689
+ xmax = 54.62
690
+ text = ""
691
+ intervals [170]:
692
+ xmin = 54.62
693
+ xmax = 54.75
694
+ text = "it"
695
+ intervals [171]:
696
+ xmin = 54.75
697
+ xmax = 54.91
698
+ text = "can"
699
+ intervals [172]:
700
+ xmin = 54.91
701
+ xmax = 55.13
702
+ text = "make"
703
+ intervals [173]:
704
+ xmin = 55.13
705
+ xmax = 55.22
706
+ text = "a"
707
+ intervals [174]:
708
+ xmin = 55.22
709
+ xmax = 55.56
710
+ text = "different"
711
+ intervals [175]:
712
+ xmin = 55.56
713
+ xmax = 56.05
714
+ text = "feeling"
715
+ intervals [176]:
716
+ xmin = 56.05
717
+ xmax = 56.41
718
+ text = ""
719
+ intervals [177]:
720
+ xmin = 56.41
721
+ xmax = 56.69
722
+ text = "when"
723
+ intervals [178]:
724
+ xmin = 56.69
725
+ xmax = 57.25
726
+ text = "we"
727
+ intervals [179]:
728
+ xmin = 57.25
729
+ xmax = 57.5
730
+ text = ""
731
+ intervals [180]:
732
+ xmin = 57.5
733
+ xmax = 57.82
734
+ text = "when"
735
+ intervals [181]:
736
+ xmin = 57.82
737
+ xmax = 58.07
738
+ text = "seen"
739
+ intervals [182]:
740
+ xmin = 58.07
741
+ xmax = 58.17
742
+ text = "in"
743
+ intervals [183]:
744
+ xmin = 58.17
745
+ xmax = 58.77
746
+ text = "context"
747
+ intervals [184]:
748
+ xmin = 58.77
749
+ xmax = 58.86
750
+ text = "with"
751
+ intervals [185]:
752
+ xmin = 58.86
753
+ xmax = 58.93
754
+ text = "the"
755
+ intervals [186]:
756
+ xmin = 58.93
757
+ xmax = 59.61
758
+ text = "background"
759
+ intervals [187]:
760
+ xmin = 59.61
761
+ xmax = 59.96
762
+ text = ""
763
+ intervals [188]:
764
+ xmin = 59.96
765
+ xmax = 60.31
766
+ text = "when"
767
+ intervals [189]:
768
+ xmin = 60.31
769
+ xmax = 60.79
770
+ text = "everyone's"
771
+ intervals [190]:
772
+ xmin = 60.79
773
+ xmax = 61.08
774
+ text = "taking"
775
+ intervals [191]:
776
+ xmin = 61.08
777
+ xmax = 61.14
778
+ text = "a"
779
+ intervals [192]:
780
+ xmin = 61.14
781
+ xmax = 61.46
782
+ text = "picture"
783
+ intervals [193]:
784
+ xmin = 61.46
785
+ xmax = 61.53
786
+ text = "of"
787
+ intervals [194]:
788
+ xmin = 61.53
789
+ xmax = 61.6
790
+ text = "the"
791
+ intervals [195]:
792
+ xmin = 61.6
793
+ xmax = 61.98
794
+ text = "exact"
795
+ intervals [196]:
796
+ xmin = 61.98
797
+ xmax = 62.19
798
+ text = "same"
799
+ intervals [197]:
800
+ xmin = 62.19
801
+ xmax = 62.64
802
+ text = "scenery"
803
+ intervals [198]:
804
+ xmin = 62.64
805
+ xmax = 62.67
806
+ text = ""
807
+ intervals [199]:
808
+ xmin = 62.67
809
+ xmax = 62.89
810
+ text = "i'm"
811
+ intervals [200]:
812
+ xmin = 62.89
813
+ xmax = 63.28
814
+ text = "very"
815
+ intervals [201]:
816
+ xmin = 63.28
817
+ xmax = 63.75
818
+ text = "happy"
819
+ intervals [202]:
820
+ xmin = 63.75
821
+ xmax = 63.9
822
+ text = "when"
823
+ intervals [203]:
824
+ xmin = 63.9
825
+ xmax = 64.35
826
+ text = "people"
827
+ intervals [204]:
828
+ xmin = 64.35
829
+ xmax = 64.6
830
+ text = "say"
831
+ intervals [205]:
832
+ xmin = 64.6
833
+ xmax = 64.84
834
+ text = "my"
835
+ intervals [206]:
836
+ xmin = 64.84
837
+ xmax = 65.29
838
+ text = "photos"
839
+ intervals [207]:
840
+ xmin = 65.29
841
+ xmax = 65.47
842
+ text = "look"
843
+ intervals [208]:
844
+ xmin = 65.47
845
+ xmax = 66.11
846
+ text = "better"
847
+ intervals [209]:
848
+ xmin = 66.11
849
+ xmax = 66.43
850
+ text = ""
851
+ intervals [210]:
852
+ xmin = 66.43
853
+ xmax = 66.56
854
+ text = "than"
855
+ intervals [211]:
856
+ xmin = 66.56
857
+ xmax = 66.7
858
+ text = "the"
859
+ intervals [212]:
860
+ xmin = 66.7
861
+ xmax = 67.19
862
+ text = "others"
863
+ intervals [213]:
864
+ xmin = 67.19
865
+ xmax = 68
866
+ text = ""
867
+ item [2]:
868
+ class = "IntervalTier"
869
+ name = "phones"
870
+ xmin = 0.0
871
+ xmax = 68
872
+ intervals: size = 701
873
+ intervals [1]:
874
+ xmin = 0.0
875
+ xmax = 1.47
876
+ text = ""
877
+ intervals [2]:
878
+ xmin = 1.47
879
+ xmax = 1.59
880
+ text = "W"
881
+ intervals [3]:
882
+ xmin = 1.59
883
+ xmax = 1.99
884
+ text = "EH1"
885
+ intervals [4]:
886
+ xmin = 1.99
887
+ xmax = 2.36
888
+ text = "L"
889
+ intervals [5]:
890
+ xmin = 2.36
891
+ xmax = 2.56
892
+ text = ""
893
+ intervals [6]:
894
+ xmin = 2.56
895
+ xmax = 2.88
896
+ text = "IH0"
897
+ intervals [7]:
898
+ xmin = 2.88
899
+ xmax = 3.05
900
+ text = "N"
901
+ intervals [8]:
902
+ xmin = 3.05
903
+ xmax = 3.18
904
+ text = "M"
905
+ intervals [9]:
906
+ xmin = 3.18
907
+ xmax = 3.43
908
+ text = "AY1"
909
+ intervals [10]:
910
+ xmin = 3.43
911
+ xmax = 3.53
912
+ text = "AH0"
913
+ intervals [11]:
914
+ xmin = 3.53
915
+ xmax = 3.6
916
+ text = "P"
917
+ intervals [12]:
918
+ xmin = 3.6
919
+ xmax = 3.7
920
+ text = "IH1"
921
+ intervals [13]:
922
+ xmin = 3.7
923
+ xmax = 3.77
924
+ text = "N"
925
+ intervals [14]:
926
+ xmin = 3.77
927
+ xmax = 3.85
928
+ text = "Y"
929
+ intervals [15]:
930
+ xmin = 3.85
931
+ xmax = 3.92
932
+ text = "AH0"
933
+ intervals [16]:
934
+ xmin = 3.92
935
+ xmax = 4.29
936
+ text = "N"
937
+ intervals [17]:
938
+ xmin = 4.29
939
+ xmax = 4.43
940
+ text = "AY1"
941
+ intervals [18]:
942
+ xmin = 4.43
943
+ xmax = 4.5
944
+ text = "TH"
945
+ intervals [19]:
946
+ xmin = 4.5
947
+ xmax = 4.57
948
+ text = "IH1"
949
+ intervals [20]:
950
+ xmin = 4.57
951
+ xmax = 4.67
952
+ text = "NG"
953
+ intervals [21]:
954
+ xmin = 4.67
955
+ xmax = 4.7
956
+ text = "K"
957
+ intervals [22]:
958
+ xmin = 4.7
959
+ xmax = 4.73
960
+ text = "DH"
961
+ intervals [23]:
962
+ xmin = 4.73
963
+ xmax = 4.77
964
+ text = "AH0"
965
+ intervals [24]:
966
+ xmin = 4.77
967
+ xmax = 4.84
968
+ text = "B"
969
+ intervals [25]:
970
+ xmin = 4.84
971
+ xmax = 4.96
972
+ text = "EH1"
973
+ intervals [26]:
974
+ xmin = 4.96
975
+ xmax = 5.02
976
+ text = "S"
977
+ intervals [27]:
978
+ xmin = 5.02
979
+ xmax = 5.06
980
+ text = "T"
981
+ intervals [28]:
982
+ xmin = 5.06
983
+ xmax = 5.17
984
+ text = "JH"
985
+ intervals [29]:
986
+ xmin = 5.17
987
+ xmax = 5.25
988
+ text = "AA1"
989
+ intervals [30]:
990
+ xmin = 5.25
991
+ xmax = 5.31
992
+ text = "B"
993
+ intervals [31]:
994
+ xmin = 5.31
995
+ xmax = 5.35
996
+ text = "F"
997
+ intervals [32]:
998
+ xmin = 5.35
999
+ xmax = 5.41
1000
+ text = "ER0"
1001
+ intervals [33]:
1002
+ xmin = 5.41
1003
+ xmax = 5.49
1004
+ text = "M"
1005
+ intervals [34]:
1006
+ xmin = 5.49
1007
+ xmax = 5.62
1008
+ text = "IY1"
1009
+ intervals [35]:
1010
+ xmin = 5.62
1011
+ xmax = 5.69
1012
+ text = "IH1"
1013
+ intervals [36]:
1014
+ xmin = 5.69
1015
+ xmax = 5.76
1016
+ text = "Z"
1017
+ intervals [37]:
1018
+ xmin = 5.76
1019
+ xmax = 5.8
1020
+ text = "T"
1021
+ intervals [38]:
1022
+ xmin = 5.8
1023
+ xmax = 5.84
1024
+ text = "IH0"
1025
+ intervals [39]:
1026
+ xmin = 5.84
1027
+ xmax = 5.88
1028
+ text = "B"
1029
+ intervals [40]:
1030
+ xmin = 5.88
1031
+ xmax = 5.94
1032
+ text = "IH0"
1033
+ intervals [41]:
1034
+ xmin = 5.94
1035
+ xmax = 6.01
1036
+ text = "K"
1037
+ intervals [42]:
1038
+ xmin = 6.01
1039
+ xmax = 6.06
1040
+ text = "AH1"
1041
+ intervals [43]:
1042
+ xmin = 6.06
1043
+ xmax = 6.11
1044
+ text = "M"
1045
+ intervals [44]:
1046
+ xmin = 6.11
1047
+ xmax = 6.2
1048
+ text = "AH0"
1049
+ intervals [45]:
1050
+ xmin = 6.2
1051
+ xmax = 6.42
1052
+ text = "JH"
1053
+ intervals [46]:
1054
+ xmin = 6.42
1055
+ xmax = 6.52
1056
+ text = "ER1"
1057
+ intervals [47]:
1058
+ xmin = 6.52
1059
+ xmax = 6.57
1060
+ text = "N"
1061
+ intervals [48]:
1062
+ xmin = 6.57
1063
+ xmax = 6.63
1064
+ text = "AH0"
1065
+ intervals [49]:
1066
+ xmin = 6.63
1067
+ xmax = 6.71
1068
+ text = "L"
1069
+ intervals [50]:
1070
+ xmin = 6.71
1071
+ xmax = 6.77
1072
+ text = "AH0"
1073
+ intervals [51]:
1074
+ xmin = 6.77
1075
+ xmax = 6.87
1076
+ text = "S"
1077
+ intervals [52]:
1078
+ xmin = 6.87
1079
+ xmax = 6.93
1080
+ text = "T"
1081
+ intervals [53]:
1082
+ xmin = 6.93
1083
+ xmax = 7.04
1084
+ text = "K"
1085
+ intervals [54]:
1086
+ xmin = 7.04
1087
+ xmax = 7.18
1088
+ text = "UW0"
1089
+ intervals [55]:
1090
+ xmin = 7.18
1091
+ xmax = 7.3
1092
+ text = "Z"
1093
+ intervals [56]:
1094
+ xmin = 7.3
1095
+ xmax = 7.37
1096
+ text = "DH"
1097
+ intervals [57]:
1098
+ xmin = 7.37
1099
+ xmax = 7.44
1100
+ text = "IH1"
1101
+ intervals [58]:
1102
+ xmin = 7.44
1103
+ xmax = 7.53
1104
+ text = "S"
1105
+ intervals [59]:
1106
+ xmin = 7.53
1107
+ xmax = 7.58
1108
+ text = "IH0"
1109
+ intervals [60]:
1110
+ xmin = 7.58
1111
+ xmax = 7.63
1112
+ text = "Z"
1113
+ intervals [61]:
1114
+ xmin = 7.63
1115
+ xmax = 7.71
1116
+ text = "M"
1117
+ intervals [62]:
1118
+ xmin = 7.71
1119
+ xmax = 7.79
1120
+ text = "AY1"
1121
+ intervals [63]:
1122
+ xmin = 7.79
1123
+ xmax = 7.9
1124
+ text = "D"
1125
+ intervals [64]:
1126
+ xmin = 7.9
1127
+ xmax = 7.97
1128
+ text = "R"
1129
+ intervals [65]:
1130
+ xmin = 7.97
1131
+ xmax = 8.07
1132
+ text = "IY1"
1133
+ intervals [66]:
1134
+ xmin = 8.07
1135
+ xmax = 8.14
1136
+ text = "M"
1137
+ intervals [67]:
1138
+ xmin = 8.14
1139
+ xmax = 8.26
1140
+ text = "JH"
1141
+ intervals [68]:
1142
+ xmin = 8.26
1143
+ xmax = 8.44
1144
+ text = "AA1"
1145
+ intervals [69]:
1146
+ xmin = 8.44
1147
+ xmax = 8.53
1148
+ text = "B"
1149
+ intervals [70]:
1150
+ xmin = 8.53
1151
+ xmax = 8.65
1152
+ text = "AY1"
1153
+ intervals [71]:
1154
+ xmin = 8.65
1155
+ xmax = 8.71
1156
+ text = "V"
1157
+ intervals [72]:
1158
+ xmin = 8.71
1159
+ xmax = 8.82
1160
+ text = "AO1"
1161
+ intervals [73]:
1162
+ xmin = 8.82
1163
+ xmax = 8.88
1164
+ text = "L"
1165
+ intervals [74]:
1166
+ xmin = 8.88
1167
+ xmax = 8.98
1168
+ text = "W"
1169
+ intervals [75]:
1170
+ xmin = 8.98
1171
+ xmax = 9.03
1172
+ text = "IY0"
1173
+ intervals [76]:
1174
+ xmin = 9.03
1175
+ xmax = 9.13
1176
+ text = "Z"
1177
+ intervals [77]:
1178
+ xmin = 9.13
1179
+ xmax = 9.3
1180
+ text = "W"
1181
+ intervals [78]:
1182
+ xmin = 9.3
1183
+ xmax = 9.42
1184
+ text = "AO1"
1185
+ intervals [79]:
1186
+ xmin = 9.42
1187
+ xmax = 9.46
1188
+ text = "N"
1189
+ intervals [80]:
1190
+ xmin = 9.46
1191
+ xmax = 9.5
1192
+ text = "IH0"
1193
+ intervals [81]:
1194
+ xmin = 9.5
1195
+ xmax = 9.53
1196
+ text = "D"
1197
+ intervals [82]:
1198
+ xmin = 9.53
1199
+ xmax = 9.56
1200
+ text = "T"
1201
+ intervals [83]:
1202
+ xmin = 9.56
1203
+ xmax = 9.6
1204
+ text = "AH0"
1205
+ intervals [84]:
1206
+ xmin = 9.6
1207
+ xmax = 9.66
1208
+ text = "B"
1209
+ intervals [85]:
1210
+ xmin = 9.66
1211
+ xmax = 9.77
1212
+ text = "IY1"
1213
+ intervals [86]:
1214
+ xmin = 9.77
1215
+ xmax = 9.84
1216
+ text = "AH0"
1217
+ intervals [87]:
1218
+ xmin = 9.84
1219
+ xmax = 9.95
1220
+ text = "JH"
1221
+ intervals [88]:
1222
+ xmin = 9.95
1223
+ xmax = 10.0
1224
+ text = "ER1"
1225
+ intervals [89]:
1226
+ xmin = 10.0
1227
+ xmax = 10.03
1228
+ text = "N"
1229
+ intervals [90]:
1230
+ xmin = 10.03
1231
+ xmax = 10.1
1232
+ text = "AH0"
1233
+ intervals [91]:
1234
+ xmin = 10.1
1235
+ xmax = 10.18
1236
+ text = "L"
1237
+ intervals [92]:
1238
+ xmin = 10.18
1239
+ xmax = 10.23
1240
+ text = "AH0"
1241
+ intervals [93]:
1242
+ xmin = 10.23
1243
+ xmax = 10.26
1244
+ text = "S"
1245
+ intervals [94]:
1246
+ xmin = 10.26
1247
+ xmax = 10.29
1248
+ text = "T"
1249
+ intervals [95]:
1250
+ xmin = 10.29
1251
+ xmax = 10.33
1252
+ text = "S"
1253
+ intervals [96]:
1254
+ xmin = 10.33
1255
+ xmax = 10.37
1256
+ text = "IH1"
1257
+ intervals [97]:
1258
+ xmin = 10.37
1259
+ xmax = 10.42
1260
+ text = "N"
1261
+ intervals [98]:
1262
+ xmin = 10.42
1263
+ xmax = 10.48
1264
+ text = "S"
1265
+ intervals [99]:
1266
+ xmin = 10.48
1267
+ xmax = 10.54
1268
+ text = "AY1"
1269
+ intervals [100]:
1270
+ xmin = 10.54
1271
+ xmax = 10.6
1272
+ text = "W"
1273
+ intervals [101]:
1274
+ xmin = 10.6
1275
+ xmax = 10.64
1276
+ text = "AH0"
1277
+ intervals [102]:
1278
+ xmin = 10.64
1279
+ xmax = 10.71
1280
+ text = "Z"
1281
+ intervals [103]:
1282
+ xmin = 10.71
1283
+ xmax = 10.75
1284
+ text = "IH0"
1285
+ intervals [104]:
1286
+ xmin = 10.75
1287
+ xmax = 10.78
1288
+ text = "N"
1289
+ intervals [105]:
1290
+ xmin = 10.78
1291
+ xmax = 10.84
1292
+ text = "M"
1293
+ intervals [106]:
1294
+ xmin = 10.84
1295
+ xmax = 10.87
1296
+ text = "IH1"
1297
+ intervals [107]:
1298
+ xmin = 10.87
1299
+ xmax = 10.9
1300
+ text = "D"
1301
+ intervals [108]:
1302
+ xmin = 10.9
1303
+ xmax = 10.95
1304
+ text = "AH0"
1305
+ intervals [109]:
1306
+ xmin = 10.95
1307
+ xmax = 11.01
1308
+ text = "L"
1309
+ intervals [110]:
1310
+ xmin = 11.01
1311
+ xmax = 11.11
1312
+ text = "S"
1313
+ intervals [111]:
1314
+ xmin = 11.11
1315
+ xmax = 11.16
1316
+ text = "K"
1317
+ intervals [112]:
1318
+ xmin = 11.16
1319
+ xmax = 11.21
1320
+ text = "UW1"
1321
+ intervals [113]:
1322
+ xmin = 11.21
1323
+ xmax = 11.4
1324
+ text = "L"
1325
+ intervals [114]:
1326
+ xmin = 11.4
1327
+ xmax = 11.96
1328
+ text = ""
1329
+ intervals [115]:
1330
+ xmin = 11.96
1331
+ xmax = 12.2
1332
+ text = "JH"
1333
+ intervals [116]:
1334
+ xmin = 12.2
1335
+ xmax = 12.28
1336
+ text = "ER1"
1337
+ intervals [117]:
1338
+ xmin = 12.28
1339
+ xmax = 12.34
1340
+ text = "N"
1341
+ intervals [118]:
1342
+ xmin = 12.34
1343
+ xmax = 12.38
1344
+ text = "AH0"
1345
+ intervals [119]:
1346
+ xmin = 12.38
1347
+ xmax = 12.5
1348
+ text = "L"
1349
+ intervals [120]:
1350
+ xmin = 12.5
1351
+ xmax = 12.64
1352
+ text = "AH0"
1353
+ intervals [121]:
1354
+ xmin = 12.64
1355
+ xmax = 12.83
1356
+ text = "S"
1357
+ intervals [122]:
1358
+ xmin = 12.83
1359
+ xmax = 12.86
1360
+ text = "T"
1361
+ intervals [123]:
1362
+ xmin = 12.86
1363
+ xmax = 12.92
1364
+ text = "S"
1365
+ intervals [124]:
1366
+ xmin = 12.92
1367
+ xmax = 13.14
1368
+ text = "N"
1369
+ intervals [125]:
1370
+ xmin = 13.14
1371
+ xmax = 13.34
1372
+ text = "EH1"
1373
+ intervals [126]:
1374
+ xmin = 13.34
1375
+ xmax = 13.46
1376
+ text = "V"
1377
+ intervals [127]:
1378
+ xmin = 13.46
1379
+ xmax = 13.73
1380
+ text = "ER0"
1381
+ intervals [128]:
1382
+ xmin = 13.73
1383
+ xmax = 13.81
1384
+ text = ""
1385
+ intervals [129]:
1386
+ xmin = 13.81
1387
+ xmax = 14.0
1388
+ text = "T"
1389
+ intervals [130]:
1390
+ xmin = 14.0
1391
+ xmax = 14.17
1392
+ text = "EH1"
1393
+ intervals [131]:
1394
+ xmin = 14.17
1395
+ xmax = 14.38
1396
+ text = "L"
1397
+ intervals [132]:
1398
+ xmin = 14.38
1399
+ xmax = 14.43
1400
+ text = "L"
1401
+ intervals [133]:
1402
+ xmin = 14.43
1403
+ xmax = 14.95
1404
+ text = "AY1"
1405
+ intervals [134]:
1406
+ xmin = 14.95
1407
+ xmax = 15.08
1408
+ text = "Z"
1409
+ intervals [135]:
1410
+ xmin = 15.08
1411
+ xmax = 15.13
1412
+ text = "AE1"
1413
+ intervals [136]:
1414
+ xmin = 15.13
1415
+ xmax = 15.16
1416
+ text = "N"
1417
+ intervals [137]:
1418
+ xmin = 15.16
1419
+ xmax = 15.19
1420
+ text = "D"
1421
+ intervals [138]:
1422
+ xmin = 15.19
1423
+ xmax = 15.38
1424
+ text = "ER0"
1425
+ intervals [139]:
1426
+ xmin = 15.38
1427
+ xmax = 15.43
1428
+ text = "AO1"
1429
+ intervals [140]:
1430
+ xmin = 15.43
1431
+ xmax = 15.48
1432
+ text = "L"
1433
+ intervals [141]:
1434
+ xmin = 15.48
1435
+ xmax = 15.57
1436
+ text = "W"
1437
+ intervals [142]:
1438
+ xmin = 15.57
1439
+ xmax = 15.61
1440
+ text = "IY0"
1441
+ intervals [143]:
1442
+ xmin = 15.61
1443
+ xmax = 15.75
1444
+ text = "Z"
1445
+ intervals [144]:
1446
+ xmin = 15.75
1447
+ xmax = 15.8
1448
+ text = "S"
1449
+ intervals [145]:
1450
+ xmin = 15.8
1451
+ xmax = 15.89
1452
+ text = "IY1"
1453
+ intervals [146]:
1454
+ xmin = 15.89
1455
+ xmax = 15.96
1456
+ text = "K"
1457
+ intervals [147]:
1458
+ xmin = 15.96
1459
+ xmax = 16.03
1460
+ text = "IH0"
1461
+ intervals [148]:
1462
+ xmin = 16.03
1463
+ xmax = 16.07
1464
+ text = "NG"
1465
+ intervals [149]:
1466
+ xmin = 16.07
1467
+ xmax = 16.12
1468
+ text = "DH"
1469
+ intervals [150]:
1470
+ xmin = 16.12
1471
+ xmax = 16.17
1472
+ text = "AH0"
1473
+ intervals [151]:
1474
+ xmin = 16.17
1475
+ xmax = 16.3
1476
+ text = "T"
1477
+ intervals [152]:
1478
+ xmin = 16.3
1479
+ xmax = 16.36
1480
+ text = "R"
1481
+ intervals [153]:
1482
+ xmin = 16.36
1483
+ xmax = 16.48
1484
+ text = "UW1"
1485
+ intervals [154]:
1486
+ xmin = 16.48
1487
+ xmax = 16.69
1488
+ text = "TH"
1489
+ intervals [155]:
1490
+ xmin = 16.69
1491
+ xmax = 16.85
1492
+ text = ""
1493
+ intervals [156]:
1494
+ xmin = 16.85
1495
+ xmax = 17.09
1496
+ text = "AY1"
1497
+ intervals [157]:
1498
+ xmin = 17.09
1499
+ xmax = 17.18
1500
+ text = "W"
1501
+ intervals [158]:
1502
+ xmin = 17.18
1503
+ xmax = 17.21
1504
+ text = "AA1"
1505
+ intervals [159]:
1506
+ xmin = 17.21
1507
+ xmax = 17.24
1508
+ text = "N"
1509
+ intervals [160]:
1510
+ xmin = 17.24
1511
+ xmax = 17.27
1512
+ text = "T"
1513
+ intervals [161]:
1514
+ xmin = 17.27
1515
+ xmax = 17.3
1516
+ text = "T"
1517
+ intervals [162]:
1518
+ xmin = 17.3
1519
+ xmax = 17.33
1520
+ text = "AH0"
1521
+ intervals [163]:
1522
+ xmin = 17.33
1523
+ xmax = 17.37
1524
+ text = "B"
1525
+ intervals [164]:
1526
+ xmin = 17.37
1527
+ xmax = 17.45
1528
+ text = "IY0"
1529
+ intervals [165]:
1530
+ xmin = 17.45
1531
+ xmax = 17.57
1532
+ text = "JH"
1533
+ intervals [166]:
1534
+ xmin = 17.57
1535
+ xmax = 17.64
1536
+ text = "IH0"
1537
+ intervals [167]:
1538
+ xmin = 17.64
1539
+ xmax = 17.7
1540
+ text = "S"
1541
+ intervals [168]:
1542
+ xmin = 17.7
1543
+ xmax = 17.73
1544
+ text = "T"
1545
+ intervals [169]:
1546
+ xmin = 17.73
1547
+ xmax = 17.81
1548
+ text = "L"
1549
+ intervals [170]:
1550
+ xmin = 17.81
1551
+ xmax = 17.91
1552
+ text = "AY1"
1553
+ intervals [171]:
1554
+ xmin = 17.91
1555
+ xmax = 18.0
1556
+ text = "K"
1557
+ intervals [172]:
1558
+ xmin = 18.0
1559
+ xmax = 18.06
1560
+ text = "DH"
1561
+ intervals [173]:
1562
+ xmin = 18.06
1563
+ xmax = 18.23
1564
+ text = "AE1"
1565
+ intervals [174]:
1566
+ xmin = 18.23
1567
+ xmax = 18.36
1568
+ text = "T"
1569
+ intervals [175]:
1570
+ xmin = 18.36
1571
+ xmax = 18.73
1572
+ text = ""
1573
+ intervals [176]:
1574
+ xmin = 18.73
1575
+ xmax = 19.54
1576
+ text = "AY1"
1577
+ intervals [177]:
1578
+ xmin = 19.54
1579
+ xmax = 19.71
1580
+ text = ""
1581
+ intervals [178]:
1582
+ xmin = 19.71
1583
+ xmax = 19.92
1584
+ text = "Y"
1585
+ intervals [179]:
1586
+ xmin = 19.92
1587
+ xmax = 20.03
1588
+ text = "UW1"
1589
+ intervals [180]:
1590
+ xmin = 20.03
1591
+ xmax = 20.11
1592
+ text = "ZH"
1593
+ intervals [181]:
1594
+ xmin = 20.11
1595
+ xmax = 20.14
1596
+ text = "AH0"
1597
+ intervals [182]:
1598
+ xmin = 20.14
1599
+ xmax = 20.17
1600
+ text = "L"
1601
+ intervals [183]:
1602
+ xmin = 20.17
1603
+ xmax = 20.27
1604
+ text = "IY0"
1605
+ intervals [184]:
1606
+ xmin = 20.27
1607
+ xmax = 20.37
1608
+ text = "F"
1609
+ intervals [185]:
1610
+ xmin = 20.37
1611
+ xmax = 20.45
1612
+ text = "IY1"
1613
+ intervals [186]:
1614
+ xmin = 20.45
1615
+ xmax = 20.52
1616
+ text = "L"
1617
+ intervals [187]:
1618
+ xmin = 20.52
1619
+ xmax = 20.73
1620
+ text = "SH"
1621
+ intervals [188]:
1622
+ xmin = 20.73
1623
+ xmax = 20.96
1624
+ text = "AY1"
1625
+ intervals [189]:
1626
+ xmin = 20.96
1627
+ xmax = 21.06
1628
+ text = "W"
1629
+ intervals [190]:
1630
+ xmin = 21.06
1631
+ xmax = 21.09
1632
+ text = "EH1"
1633
+ intervals [191]:
1634
+ xmin = 21.09
1635
+ xmax = 21.14
1636
+ text = "N"
1637
+ intervals [192]:
1638
+ xmin = 21.14
1639
+ xmax = 21.26
1640
+ text = "AY1"
1641
+ intervals [193]:
1642
+ xmin = 21.26
1643
+ xmax = 21.31
1644
+ text = "AE1"
1645
+ intervals [194]:
1646
+ xmin = 21.31
1647
+ xmax = 21.38
1648
+ text = "M"
1649
+ intervals [195]:
1650
+ xmin = 21.38
1651
+ xmax = 21.5
1652
+ text = "T"
1653
+ intervals [196]:
1654
+ xmin = 21.5
1655
+ xmax = 21.57
1656
+ text = "AO1"
1657
+ intervals [197]:
1658
+ xmin = 21.57
1659
+ xmax = 21.64
1660
+ text = "K"
1661
+ intervals [198]:
1662
+ xmin = 21.64
1663
+ xmax = 21.69
1664
+ text = "IH0"
1665
+ intervals [199]:
1666
+ xmin = 21.69
1667
+ xmax = 21.75
1668
+ text = "NG"
1669
+ intervals [200]:
1670
+ xmin = 21.75
1671
+ xmax = 21.8
1672
+ text = "T"
1673
+ intervals [201]:
1674
+ xmin = 21.8
1675
+ xmax = 21.86
1676
+ text = "AH0"
1677
+ intervals [202]:
1678
+ xmin = 21.86
1679
+ xmax = 21.96
1680
+ text = "AH1"
1681
+ intervals [203]:
1682
+ xmin = 21.96
1683
+ xmax = 22.02
1684
+ text = "DH"
1685
+ intervals [204]:
1686
+ xmin = 22.02
1687
+ xmax = 22.13
1688
+ text = "ER0"
1689
+ intervals [205]:
1690
+ xmin = 22.13
1691
+ xmax = 22.22
1692
+ text = "Z"
1693
+ intervals [206]:
1694
+ xmin = 22.22
1695
+ xmax = 22.29
1696
+ text = "AE1"
1697
+ intervals [207]:
1698
+ xmin = 22.29
1699
+ xmax = 22.32
1700
+ text = "N"
1701
+ intervals [208]:
1702
+ xmin = 22.32
1703
+ xmax = 22.37
1704
+ text = "D"
1705
+ intervals [209]:
1706
+ xmin = 22.37
1707
+ xmax = 22.46
1708
+ text = "AY1"
1709
+ intervals [210]:
1710
+ xmin = 22.46
1711
+ xmax = 22.6
1712
+ text = "N"
1713
+ intervals [211]:
1714
+ xmin = 22.6
1715
+ xmax = 22.8
1716
+ text = "OW1"
1717
+ intervals [212]:
1718
+ xmin = 22.8
1719
+ xmax = 22.85
1720
+ text = "DH"
1721
+ intervals [213]:
1722
+ xmin = 22.85
1723
+ xmax = 22.98
1724
+ text = "AH0"
1725
+ intervals [214]:
1726
+ xmin = 22.98
1727
+ xmax = 23.1
1728
+ text = "T"
1729
+ intervals [215]:
1730
+ xmin = 23.1
1731
+ xmax = 23.27
1732
+ text = "JH"
1733
+ intervals [216]:
1734
+ xmin = 23.27
1735
+ xmax = 23.35
1736
+ text = "ER1"
1737
+ intervals [217]:
1738
+ xmin = 23.35
1739
+ xmax = 23.39
1740
+ text = "N"
1741
+ intervals [218]:
1742
+ xmin = 23.39
1743
+ xmax = 23.46
1744
+ text = "AH0"
1745
+ intervals [219]:
1746
+ xmin = 23.46
1747
+ xmax = 23.54
1748
+ text = "L"
1749
+ intervals [220]:
1750
+ xmin = 23.54
1751
+ xmax = 23.61
1752
+ text = "AH0"
1753
+ intervals [221]:
1754
+ xmin = 23.61
1755
+ xmax = 23.69
1756
+ text = "S"
1757
+ intervals [222]:
1758
+ xmin = 23.69
1759
+ xmax = 23.72
1760
+ text = "T"
1761
+ intervals [223]:
1762
+ xmin = 23.72
1763
+ xmax = 23.79
1764
+ text = "S"
1765
+ intervals [224]:
1766
+ xmin = 23.79
1767
+ xmax = 23.89
1768
+ text = "AA1"
1769
+ intervals [225]:
1770
+ xmin = 23.89
1771
+ xmax = 23.99
1772
+ text = "R"
1773
+ intervals [226]:
1774
+ xmin = 23.99
1775
+ xmax = 24.22
1776
+ text = "V"
1777
+ intervals [227]:
1778
+ xmin = 24.22
1779
+ xmax = 24.49
1780
+ text = "EH1"
1781
+ intervals [228]:
1782
+ xmin = 24.49
1783
+ xmax = 24.64
1784
+ text = "R"
1785
+ intervals [229]:
1786
+ xmin = 24.64
1787
+ xmax = 24.73
1788
+ text = "IY0"
1789
+ intervals [230]:
1790
+ xmin = 24.73
1791
+ xmax = 24.9
1792
+ text = "G"
1793
+ intervals [231]:
1794
+ xmin = 24.9
1795
+ xmax = 25.12
1796
+ text = "UH1"
1797
+ intervals [232]:
1798
+ xmin = 25.12
1799
+ xmax = 25.29
1800
+ text = "D"
1801
+ intervals [233]:
1802
+ xmin = 25.29
1803
+ xmax = 25.44
1804
+ text = ""
1805
+ intervals [234]:
1806
+ xmin = 25.44
1807
+ xmax = 25.61
1808
+ text = "AE1"
1809
+ intervals [235]:
1810
+ xmin = 25.61
1811
+ xmax = 25.7
1812
+ text = "T"
1813
+ intervals [236]:
1814
+ xmin = 25.7
1815
+ xmax = 25.73
1816
+ text = "K"
1817
+ intervals [237]:
1818
+ xmin = 25.73
1819
+ xmax = 25.77
1820
+ text = "AH0"
1821
+ intervals [238]:
1822
+ xmin = 25.77
1823
+ xmax = 25.83
1824
+ text = "M"
1825
+ intervals [239]:
1826
+ xmin = 25.83
1827
+ xmax = 25.89
1828
+ text = "Y"
1829
+ intervals [240]:
1830
+ xmin = 25.89
1831
+ xmax = 25.93
1832
+ text = "UW1"
1833
+ intervals [241]:
1834
+ xmin = 25.93
1835
+ xmax = 25.98
1836
+ text = "N"
1837
+ intervals [242]:
1838
+ xmin = 25.98
1839
+ xmax = 26.05
1840
+ text = "AH0"
1841
+ intervals [243]:
1842
+ xmin = 26.05
1843
+ xmax = 26.19
1844
+ text = "K"
1845
+ intervals [244]:
1846
+ xmin = 26.19
1847
+ xmax = 26.25
1848
+ text = "EY2"
1849
+ intervals [245]:
1850
+ xmin = 26.25
1851
+ xmax = 26.28
1852
+ text = "T"
1853
+ intervals [246]:
1854
+ xmin = 26.28
1855
+ xmax = 26.35
1856
+ text = "IH0"
1857
+ intervals [247]:
1858
+ xmin = 26.35
1859
+ xmax = 26.41
1860
+ text = "NG"
1861
+ intervals [248]:
1862
+ xmin = 26.41
1863
+ xmax = 26.46
1864
+ text = "B"
1865
+ intervals [249]:
1866
+ xmin = 26.46
1867
+ xmax = 26.54
1868
+ text = "IH0"
1869
+ intervals [250]:
1870
+ xmin = 26.54
1871
+ xmax = 26.64
1872
+ text = "K"
1873
+ intervals [251]:
1874
+ xmin = 26.64
1875
+ xmax = 26.84
1876
+ text = "AH0"
1877
+ intervals [252]:
1878
+ xmin = 26.84
1879
+ xmax = 26.94
1880
+ text = "Z"
1881
+ intervals [253]:
1882
+ xmin = 26.94
1883
+ xmax = 26.98
1884
+ text = ""
1885
+ intervals [254]:
1886
+ xmin = 26.98
1887
+ xmax = 27.07
1888
+ text = "G"
1889
+ intervals [255]:
1890
+ xmin = 27.07
1891
+ xmax = 27.15
1892
+ text = "UH1"
1893
+ intervals [256]:
1894
+ xmin = 27.15
1895
+ xmax = 27.2
1896
+ text = "D"
1897
+ intervals [257]:
1898
+ xmin = 27.2
1899
+ xmax = 27.27
1900
+ text = "K"
1901
+ intervals [258]:
1902
+ xmin = 27.27
1903
+ xmax = 27.32
1904
+ text = "AH0"
1905
+ intervals [259]:
1906
+ xmin = 27.32
1907
+ xmax = 27.38
1908
+ text = "M"
1909
+ intervals [260]:
1910
+ xmin = 27.38
1911
+ xmax = 27.43
1912
+ text = "Y"
1913
+ intervals [261]:
1914
+ xmin = 27.43
1915
+ xmax = 27.46
1916
+ text = "UW2"
1917
+ intervals [262]:
1918
+ xmin = 27.46
1919
+ xmax = 27.49
1920
+ text = "N"
1921
+ intervals [263]:
1922
+ xmin = 27.49
1923
+ xmax = 27.54
1924
+ text = "AH0"
1925
+ intervals [264]:
1926
+ xmin = 27.54
1927
+ xmax = 27.65
1928
+ text = "K"
1929
+ intervals [265]:
1930
+ xmin = 27.65
1931
+ xmax = 27.75
1932
+ text = "EY1"
1933
+ intervals [266]:
1934
+ xmin = 27.75
1935
+ xmax = 27.84
1936
+ text = "SH"
1937
+ intervals [267]:
1938
+ xmin = 27.84
1939
+ xmax = 27.89
1940
+ text = "AH0"
1941
+ intervals [268]:
1942
+ xmin = 27.89
1943
+ xmax = 27.95
1944
+ text = "N"
1945
+ intervals [269]:
1946
+ xmin = 27.95
1947
+ xmax = 28.03
1948
+ text = "S"
1949
+ intervals [270]:
1950
+ xmin = 28.03
1951
+ xmax = 28.08
1952
+ text = "K"
1953
+ intervals [271]:
1954
+ xmin = 28.08
1955
+ xmax = 28.15
1956
+ text = "IH1"
1957
+ intervals [272]:
1958
+ xmin = 28.15
1959
+ xmax = 28.27
1960
+ text = "L"
1961
+ intervals [273]:
1962
+ xmin = 28.27
1963
+ xmax = 28.36
1964
+ text = "Z"
1965
+ intervals [274]:
1966
+ xmin = 28.36
1967
+ xmax = 28.42
1968
+ text = "AA1"
1969
+ intervals [275]:
1970
+ xmin = 28.42
1971
+ xmax = 28.51
1972
+ text = "R"
1973
+ intervals [276]:
1974
+ xmin = 28.51
1975
+ xmax = 28.56
1976
+ text = "V"
1977
+ intervals [277]:
1978
+ xmin = 28.56
1979
+ xmax = 28.61
1980
+ text = "EH1"
1981
+ intervals [278]:
1982
+ xmin = 28.61
1983
+ xmax = 28.72
1984
+ text = "R"
1985
+ intervals [279]:
1986
+ xmin = 28.72
1987
+ xmax = 28.75
1988
+ text = "IY0"
1989
+ intervals [280]:
1990
+ xmin = 28.75
1991
+ xmax = 28.8
1992
+ text = "IH0"
1993
+ intervals [281]:
1994
+ xmin = 28.8
1995
+ xmax = 28.86
1996
+ text = "M"
1997
+ intervals [282]:
1998
+ xmin = 28.86
1999
+ xmax = 28.97
2000
+ text = "P"
2001
+ intervals [283]:
2002
+ xmin = 28.97
2003
+ xmax = 29.01
2004
+ text = "AO1"
2005
+ intervals [284]:
2006
+ xmin = 29.01
2007
+ xmax = 29.07
2008
+ text = "R"
2009
+ intervals [285]:
2010
+ xmin = 29.07
2011
+ xmax = 29.11
2012
+ text = "T"
2013
+ intervals [286]:
2014
+ xmin = 29.11
2015
+ xmax = 29.14
2016
+ text = "AH0"
2017
+ intervals [287]:
2018
+ xmin = 29.14
2019
+ xmax = 29.18
2020
+ text = "N"
2021
+ intervals [288]:
2022
+ xmin = 29.18
2023
+ xmax = 29.22
2024
+ text = "T"
2025
+ intervals [289]:
2026
+ xmin = 29.22
2027
+ xmax = 29.29
2028
+ text = "W"
2029
+ intervals [290]:
2030
+ xmin = 29.29
2031
+ xmax = 29.32
2032
+ text = "EH1"
2033
+ intervals [291]:
2034
+ xmin = 29.32
2035
+ xmax = 29.39
2036
+ text = "N"
2037
+ intervals [292]:
2038
+ xmin = 29.39
2039
+ xmax = 29.43
2040
+ text = "Y"
2041
+ intervals [293]:
2042
+ xmin = 29.43
2043
+ xmax = 29.46
2044
+ text = "UH1"
2045
+ intervals [294]:
2046
+ xmin = 29.46
2047
+ xmax = 29.51
2048
+ text = "R"
2049
+ intervals [295]:
2050
+ xmin = 29.51
2051
+ xmax = 29.6
2052
+ text = "D"
2053
+ intervals [296]:
2054
+ xmin = 29.6
2055
+ xmax = 29.7
2056
+ text = "UW1"
2057
+ intervals [297]:
2058
+ xmin = 29.7
2059
+ xmax = 29.76
2060
+ text = "IH0"
2061
+ intervals [298]:
2062
+ xmin = 29.76
2063
+ xmax = 29.85
2064
+ text = "NG"
2065
+ intervals [299]:
2066
+ xmin = 29.85
2067
+ xmax = 29.88
2068
+ text = "IH1"
2069
+ intervals [300]:
2070
+ xmin = 29.88
2071
+ xmax = 29.99
2072
+ text = "N"
2073
+ intervals [301]:
2074
+ xmin = 29.99
2075
+ xmax = 30.06
2076
+ text = "ER0"
2077
+ intervals [302]:
2078
+ xmin = 30.06
2079
+ xmax = 30.1
2080
+ text = "V"
2081
+ intervals [303]:
2082
+ xmin = 30.1
2083
+ xmax = 30.21
2084
+ text = "Y"
2085
+ intervals [304]:
2086
+ xmin = 30.21
2087
+ xmax = 30.28
2088
+ text = "UW2"
2089
+ intervals [305]:
2090
+ xmin = 30.28
2091
+ xmax = 30.43
2092
+ text = "Z"
2093
+ intervals [306]:
2094
+ xmin = 30.43
2095
+ xmax = 30.71
2096
+ text = ""
2097
+ intervals [307]:
2098
+ xmin = 30.71
2099
+ xmax = 30.99
2100
+ text = "AY1"
2101
+ intervals [308]:
2102
+ xmin = 30.99
2103
+ xmax = 31.11
2104
+ text = "W"
2105
+ intervals [309]:
2106
+ xmin = 31.11
2107
+ xmax = 31.15
2108
+ text = "AA1"
2109
+ intervals [310]:
2110
+ xmin = 31.15
2111
+ xmax = 31.18
2112
+ text = "N"
2113
+ intervals [311]:
2114
+ xmin = 31.18
2115
+ xmax = 31.21
2116
+ text = "T"
2117
+ intervals [312]:
2118
+ xmin = 31.21
2119
+ xmax = 31.24
2120
+ text = "T"
2121
+ intervals [313]:
2122
+ xmin = 31.24
2123
+ xmax = 31.3
2124
+ text = "AH0"
2125
+ intervals [314]:
2126
+ xmin = 31.3
2127
+ xmax = 31.35
2128
+ text = "P"
2129
+ intervals [315]:
2130
+ xmin = 31.35
2131
+ xmax = 31.42
2132
+ text = "AH0"
2133
+ intervals [316]:
2134
+ xmin = 31.42
2135
+ xmax = 31.51
2136
+ text = "Z"
2137
+ intervals [317]:
2138
+ xmin = 31.51
2139
+ xmax = 31.62
2140
+ text = "EH1"
2141
+ intervals [318]:
2142
+ xmin = 31.62
2143
+ xmax = 31.71
2144
+ text = "S"
2145
+ intervals [319]:
2146
+ xmin = 31.71
2147
+ xmax = 31.75
2148
+ text = "DH"
2149
+ intervals [320]:
2150
+ xmin = 31.75
2151
+ xmax = 31.82
2152
+ text = "AH0"
2153
+ intervals [321]:
2154
+ xmin = 31.82
2155
+ xmax = 31.97
2156
+ text = "S"
2157
+ intervals [322]:
2158
+ xmin = 31.97
2159
+ xmax = 32.02
2160
+ text = "K"
2161
+ intervals [323]:
2162
+ xmin = 32.02
2163
+ xmax = 32.09
2164
+ text = "IH1"
2165
+ intervals [324]:
2166
+ xmin = 32.09
2167
+ xmax = 32.16
2168
+ text = "L"
2169
+ intervals [325]:
2170
+ xmin = 32.16
2171
+ xmax = 32.23
2172
+ text = "M"
2173
+ intervals [326]:
2174
+ xmin = 32.23
2175
+ xmax = 32.31
2176
+ text = "AY2"
2177
+ intervals [327]:
2178
+ xmin = 32.31
2179
+ xmax = 32.46
2180
+ text = "S"
2181
+ intervals [328]:
2182
+ xmin = 32.46
2183
+ xmax = 32.53
2184
+ text = "EH1"
2185
+ intervals [329]:
2186
+ xmin = 32.53
2187
+ xmax = 32.76
2188
+ text = "L"
2189
+ intervals [330]:
2190
+ xmin = 32.76
2191
+ xmax = 32.93
2192
+ text = "F"
2193
+ intervals [331]:
2194
+ xmin = 32.93
2195
+ xmax = 33.0
2196
+ text = ""
2197
+ intervals [332]:
2198
+ xmin = 33.0
2199
+ xmax = 33.22
2200
+ text = "S"
2201
+ intervals [333]:
2202
+ xmin = 33.22
2203
+ xmax = 33.53
2204
+ text = "OW1"
2205
+ intervals [334]:
2206
+ xmin = 33.53
2207
+ xmax = 33.56
2208
+ text = ""
2209
+ intervals [335]:
2210
+ xmin = 33.56
2211
+ xmax = 33.67
2212
+ text = "DH"
2213
+ intervals [336]:
2214
+ xmin = 33.67
2215
+ xmax = 33.82
2216
+ text = "AE1"
2217
+ intervals [337]:
2218
+ xmin = 33.82
2219
+ xmax = 33.89
2220
+ text = "T"
2221
+ intervals [338]:
2222
+ xmin = 33.89
2223
+ xmax = 33.95
2224
+ text = "S"
2225
+ intervals [339]:
2226
+ xmin = 33.95
2227
+ xmax = 34.09
2228
+ text = "W"
2229
+ intervals [340]:
2230
+ xmin = 34.09
2231
+ xmax = 34.31
2232
+ text = "AY1"
2233
+ intervals [341]:
2234
+ xmin = 34.31
2235
+ xmax = 34.53
2236
+ text = "AY1"
2237
+ intervals [342]:
2238
+ xmin = 34.53
2239
+ xmax = 34.67
2240
+ text = "W"
2241
+ intervals [343]:
2242
+ xmin = 34.67
2243
+ xmax = 34.77
2244
+ text = "AO1"
2245
+ intervals [344]:
2246
+ xmin = 34.77
2247
+ xmax = 34.8
2248
+ text = "N"
2249
+ intervals [345]:
2250
+ xmin = 34.8
2251
+ xmax = 34.83
2252
+ text = "T"
2253
+ intervals [346]:
2254
+ xmin = 34.83
2255
+ xmax = 34.86
2256
+ text = "T"
2257
+ intervals [347]:
2258
+ xmin = 34.86
2259
+ xmax = 34.89
2260
+ text = "IH0"
2261
+ intervals [348]:
2262
+ xmin = 34.89
2263
+ xmax = 34.93
2264
+ text = "B"
2265
+ intervals [349]:
2266
+ xmin = 34.93
2267
+ xmax = 35.0
2268
+ text = "IH0"
2269
+ intervals [350]:
2270
+ xmin = 35.0
2271
+ xmax = 35.08
2272
+ text = "K"
2273
+ intervals [351]:
2274
+ xmin = 35.08
2275
+ xmax = 35.19
2276
+ text = "AH1"
2277
+ intervals [352]:
2278
+ xmin = 35.19
2279
+ xmax = 35.42
2280
+ text = "M"
2281
+ intervals [353]:
2282
+ xmin = 35.42
2283
+ xmax = 35.46
2284
+ text = ""
2285
+ intervals [354]:
2286
+ xmin = 35.46
2287
+ xmax = 35.59
2288
+ text = "AH0"
2289
+ intervals [355]:
2290
+ xmin = 35.59
2291
+ xmax = 35.68
2292
+ text = "JH"
2293
+ intervals [356]:
2294
+ xmin = 35.68
2295
+ xmax = 35.79
2296
+ text = "ER1"
2297
+ intervals [357]:
2298
+ xmin = 35.79
2299
+ xmax = 35.84
2300
+ text = "N"
2301
+ intervals [358]:
2302
+ xmin = 35.84
2303
+ xmax = 35.89
2304
+ text = "AH0"
2305
+ intervals [359]:
2306
+ xmin = 35.89
2307
+ xmax = 35.97
2308
+ text = "L"
2309
+ intervals [360]:
2310
+ xmin = 35.97
2311
+ xmax = 36.07
2312
+ text = "AH0"
2313
+ intervals [361]:
2314
+ xmin = 36.07
2315
+ xmax = 36.27
2316
+ text = "S"
2317
+ intervals [362]:
2318
+ xmin = 36.27
2319
+ xmax = 36.37
2320
+ text = "T"
2321
+ intervals [363]:
2322
+ xmin = 36.37
2323
+ xmax = 36.74
2324
+ text = ""
2325
+ intervals [364]:
2326
+ xmin = 36.74
2327
+ xmax = 36.92
2328
+ text = "AH1"
2329
+ intervals [365]:
2330
+ xmin = 36.92
2331
+ xmax = 36.96
2332
+ text = "DH"
2333
+ intervals [366]:
2334
+ xmin = 36.96
2335
+ xmax = 37.02
2336
+ text = "ER0"
2337
+ intervals [367]:
2338
+ xmin = 37.02
2339
+ xmax = 37.05
2340
+ text = "DH"
2341
+ intervals [368]:
2342
+ xmin = 37.05
2343
+ xmax = 37.13
2344
+ text = "AE1"
2345
+ intervals [369]:
2346
+ xmin = 37.13
2347
+ xmax = 37.18
2348
+ text = "N"
2349
+ intervals [370]:
2350
+ xmin = 37.18
2351
+ xmax = 37.23
2352
+ text = "DH"
2353
+ intervals [371]:
2354
+ xmin = 37.23
2355
+ xmax = 37.47
2356
+ text = "AE1"
2357
+ intervals [372]:
2358
+ xmin = 37.47
2359
+ xmax = 37.73
2360
+ text = "T"
2361
+ intervals [373]:
2362
+ xmin = 37.73
2363
+ xmax = 37.76
2364
+ text = ""
2365
+ intervals [374]:
2366
+ xmin = 37.76
2367
+ xmax = 37.8
2368
+ text = "F"
2369
+ intervals [375]:
2370
+ xmin = 37.8
2371
+ xmax = 37.85
2372
+ text = "AH0"
2373
+ intervals [376]:
2374
+ xmin = 37.85
2375
+ xmax = 37.96
2376
+ text = "T"
2377
+ intervals [377]:
2378
+ xmin = 37.96
2379
+ xmax = 38.08
2380
+ text = "AA1"
2381
+ intervals [378]:
2382
+ xmin = 38.08
2383
+ xmax = 38.13
2384
+ text = "G"
2385
+ intervals [379]:
2386
+ xmin = 38.13
2387
+ xmax = 38.2
2388
+ text = "R"
2389
+ intervals [380]:
2390
+ xmin = 38.2
2391
+ xmax = 38.26
2392
+ text = "AH0"
2393
+ intervals [381]:
2394
+ xmin = 38.26
2395
+ xmax = 38.35
2396
+ text = "F"
2397
+ intervals [382]:
2398
+ xmin = 38.35
2399
+ xmax = 38.72
2400
+ text = "IY0"
2401
+ intervals [383]:
2402
+ xmin = 38.72
2403
+ xmax = 38.96
2404
+ text = ""
2405
+ intervals [384]:
2406
+ xmin = 38.96
2407
+ xmax = 39.25
2408
+ text = "AO1"
2409
+ intervals [385]:
2410
+ xmin = 39.25
2411
+ xmax = 39.3
2412
+ text = "F"
2413
+ intervals [386]:
2414
+ xmin = 39.3
2415
+ xmax = 39.36
2416
+ text = "AH0"
2417
+ intervals [387]:
2418
+ xmin = 39.36
2419
+ xmax = 39.4
2420
+ text = "N"
2421
+ intervals [388]:
2422
+ xmin = 39.4
2423
+ xmax = 39.47
2424
+ text = "M"
2425
+ intervals [389]:
2426
+ xmin = 39.47
2427
+ xmax = 39.54
2428
+ text = "EY1"
2429
+ intervals [390]:
2430
+ xmin = 39.54
2431
+ xmax = 39.59
2432
+ text = "K"
2433
+ intervals [391]:
2434
+ xmin = 39.59
2435
+ xmax = 39.66
2436
+ text = "S"
2437
+ intervals [392]:
2438
+ xmin = 39.66
2439
+ xmax = 39.7
2440
+ text = "M"
2441
+ intervals [393]:
2442
+ xmin = 39.7
2443
+ xmax = 39.8
2444
+ text = "IY1"
2445
+ intervals [394]:
2446
+ xmin = 39.8
2447
+ xmax = 39.94
2448
+ text = "F"
2449
+ intervals [395]:
2450
+ xmin = 39.94
2451
+ xmax = 40.09
2452
+ text = "IY1"
2453
+ intervals [396]:
2454
+ xmin = 40.09
2455
+ xmax = 40.39
2456
+ text = "L"
2457
+ intervals [397]:
2458
+ xmin = 40.39
2459
+ xmax = 40.48
2460
+ text = "L"
2461
+ intervals [398]:
2462
+ xmin = 40.48
2463
+ xmax = 40.62
2464
+ text = "AY1"
2465
+ intervals [399]:
2466
+ xmin = 40.62
2467
+ xmax = 40.72
2468
+ text = "K"
2469
+ intervals [400]:
2470
+ xmin = 40.72
2471
+ xmax = 40.97
2472
+ text = "AY1"
2473
+ intervals [401]:
2474
+ xmin = 40.97
2475
+ xmax = 41.42
2476
+ text = "M"
2477
+ intervals [402]:
2478
+ xmin = 41.42
2479
+ xmax = 41.77
2480
+ text = ""
2481
+ intervals [403]:
2482
+ xmin = 41.77
2483
+ xmax = 41.85
2484
+ text = "D"
2485
+ intervals [404]:
2486
+ xmin = 41.85
2487
+ xmax = 41.95
2488
+ text = "UW1"
2489
+ intervals [405]:
2490
+ xmin = 41.95
2491
+ xmax = 42.02
2492
+ text = "IH0"
2493
+ intervals [406]:
2494
+ xmin = 42.02
2495
+ xmax = 42.06
2496
+ text = "NG"
2497
+ intervals [407]:
2498
+ xmin = 42.06
2499
+ xmax = 42.13
2500
+ text = "EY1"
2501
+ intervals [408]:
2502
+ xmin = 42.13
2503
+ xmax = 42.25
2504
+ text = "JH"
2505
+ intervals [409]:
2506
+ xmin = 42.25
2507
+ xmax = 42.36
2508
+ text = "AA1"
2509
+ intervals [410]:
2510
+ xmin = 42.36
2511
+ xmax = 42.41
2512
+ text = "B"
2513
+ intervals [411]:
2514
+ xmin = 42.41
2515
+ xmax = 42.47
2516
+ text = "F"
2517
+ intervals [412]:
2518
+ xmin = 42.47
2519
+ xmax = 42.51
2520
+ text = "UH1"
2521
+ intervals [413]:
2522
+ xmin = 42.51
2523
+ xmax = 42.58
2524
+ text = "L"
2525
+ intervals [414]:
2526
+ xmin = 42.58
2527
+ xmax = 42.61
2528
+ text = "AH0"
2529
+ intervals [415]:
2530
+ xmin = 42.61
2531
+ xmax = 42.64
2532
+ text = "V"
2533
+ intervals [416]:
2534
+ xmin = 42.64
2535
+ xmax = 42.68
2536
+ text = "D"
2537
+ intervals [417]:
2538
+ xmin = 42.68
2539
+ xmax = 42.74
2540
+ text = "IH0"
2541
+ intervals [418]:
2542
+ xmin = 42.74
2543
+ xmax = 42.83
2544
+ text = "Z"
2545
+ intervals [419]:
2546
+ xmin = 42.83
2547
+ xmax = 42.96
2548
+ text = "AY1"
2549
+ intervals [420]:
2550
+ xmin = 42.96
2551
+ xmax = 42.99
2552
+ text = "N"
2553
+ intervals [421]:
2554
+ xmin = 42.99
2555
+ xmax = 43.03
2556
+ text = "AE1"
2557
+ intervals [422]:
2558
+ xmin = 43.03
2559
+ xmax = 43.07
2560
+ text = "N"
2561
+ intervals [423]:
2562
+ xmin = 43.07
2563
+ xmax = 43.12
2564
+ text = "D"
2565
+ intervals [424]:
2566
+ xmin = 43.12
2567
+ xmax = 43.19
2568
+ text = "IH0"
2569
+ intervals [425]:
2570
+ xmin = 43.19
2571
+ xmax = 43.25
2572
+ text = "N"
2573
+ intervals [426]:
2574
+ xmin = 43.25
2575
+ xmax = 43.3
2576
+ text = "F"
2577
+ intervals [427]:
2578
+ xmin = 43.3
2579
+ xmax = 43.52
2580
+ text = "ER0"
2581
+ intervals [428]:
2582
+ xmin = 43.52
2583
+ xmax = 43.68
2584
+ text = "IH2"
2585
+ intervals [429]:
2586
+ xmin = 43.68
2587
+ xmax = 43.74
2588
+ text = "N"
2589
+ intervals [430]:
2590
+ xmin = 43.74
2591
+ xmax = 43.8
2592
+ text = "AH0"
2593
+ intervals [431]:
2594
+ xmin = 43.8
2595
+ xmax = 43.87
2596
+ text = "V"
2597
+ intervals [432]:
2598
+ xmin = 43.87
2599
+ xmax = 44.01
2600
+ text = "EY1"
2601
+ intervals [433]:
2602
+ xmin = 44.01
2603
+ xmax = 44.09
2604
+ text = "SH"
2605
+ intervals [434]:
2606
+ xmin = 44.09
2607
+ xmax = 44.16
2608
+ text = "AH0"
2609
+ intervals [435]:
2610
+ xmin = 44.16
2611
+ xmax = 44.31
2612
+ text = "N"
2613
+ intervals [436]:
2614
+ xmin = 44.31
2615
+ xmax = 45.18
2616
+ text = ""
2617
+ intervals [437]:
2618
+ xmin = 45.18
2619
+ xmax = 45.24
2620
+ text = "B"
2621
+ intervals [438]:
2622
+ xmin = 45.24
2623
+ xmax = 45.3
2624
+ text = "IH0"
2625
+ intervals [439]:
2626
+ xmin = 45.3
2627
+ xmax = 45.39
2628
+ text = "K"
2629
+ intervals [440]:
2630
+ xmin = 45.39
2631
+ xmax = 45.54
2632
+ text = "AH1"
2633
+ intervals [441]:
2634
+ xmin = 45.54
2635
+ xmax = 45.73
2636
+ text = "Z"
2637
+ intervals [442]:
2638
+ xmin = 45.73
2639
+ xmax = 45.81
2640
+ text = "F"
2641
+ intervals [443]:
2642
+ xmin = 45.81
2643
+ xmax = 45.84
2644
+ text = "R"
2645
+ intervals [444]:
2646
+ xmin = 45.84
2647
+ xmax = 45.89
2648
+ text = "ER0"
2649
+ intervals [445]:
2650
+ xmin = 45.89
2651
+ xmax = 45.93
2652
+ text = "DH"
2653
+ intervals [446]:
2654
+ xmin = 45.93
2655
+ xmax = 45.99
2656
+ text = "AH0"
2657
+ intervals [447]:
2658
+ xmin = 45.99
2659
+ xmax = 46.12
2660
+ text = "S"
2661
+ intervals [448]:
2662
+ xmin = 46.12
2663
+ xmax = 46.25
2664
+ text = "EY1"
2665
+ intervals [449]:
2666
+ xmin = 46.25
2667
+ xmax = 46.35
2668
+ text = "M"
2669
+ intervals [450]:
2670
+ xmin = 46.35
2671
+ xmax = 46.48
2672
+ text = "S"
2673
+ intervals [451]:
2674
+ xmin = 46.48
2675
+ xmax = 46.59
2676
+ text = "IY1"
2677
+ intervals [452]:
2678
+ xmin = 46.59
2679
+ xmax = 46.65
2680
+ text = "N"
2681
+ intervals [453]:
2682
+ xmin = 46.65
2683
+ xmax = 46.74
2684
+ text = "ER0"
2685
+ intervals [454]:
2686
+ xmin = 46.74
2687
+ xmax = 46.88
2688
+ text = "IY0"
2689
+ intervals [455]:
2690
+ xmin = 46.88
2691
+ xmax = 46.94
2692
+ text = "W"
2693
+ intervals [456]:
2694
+ xmin = 46.94
2695
+ xmax = 47.01
2696
+ text = "IY1"
2697
+ intervals [457]:
2698
+ xmin = 47.01
2699
+ xmax = 47.06
2700
+ text = "K"
2701
+ intervals [458]:
2702
+ xmin = 47.06
2703
+ xmax = 47.09
2704
+ text = "AH0"
2705
+ intervals [459]:
2706
+ xmin = 47.09
2707
+ xmax = 47.12
2708
+ text = "N"
2709
+ intervals [460]:
2710
+ xmin = 47.12
2711
+ xmax = 47.22
2712
+ text = "Y"
2713
+ intervals [461]:
2714
+ xmin = 47.22
2715
+ xmax = 47.27
2716
+ text = "UW1"
2717
+ intervals [462]:
2718
+ xmin = 47.27
2719
+ xmax = 47.34
2720
+ text = "Z"
2721
+ intervals [463]:
2722
+ xmin = 47.34
2723
+ xmax = 47.4
2724
+ text = "D"
2725
+ intervals [464]:
2726
+ xmin = 47.4
2727
+ xmax = 47.45
2728
+ text = "IH1"
2729
+ intervals [465]:
2730
+ xmin = 47.45
2731
+ xmax = 47.49
2732
+ text = "F"
2733
+ intervals [466]:
2734
+ xmin = 47.49
2735
+ xmax = 47.52
2736
+ text = "R"
2737
+ intervals [467]:
2738
+ xmin = 47.52
2739
+ xmax = 47.55
2740
+ text = "AH0"
2741
+ intervals [468]:
2742
+ xmin = 47.55
2743
+ xmax = 47.58
2744
+ text = "N"
2745
+ intervals [469]:
2746
+ xmin = 47.58
2747
+ xmax = 47.61
2748
+ text = "T"
2749
+ intervals [470]:
2750
+ xmin = 47.61
2751
+ xmax = 47.74
2752
+ text = "AE1"
2753
+ intervals [471]:
2754
+ xmin = 47.74
2755
+ xmax = 47.82
2756
+ text = "NG"
2757
+ intervals [472]:
2758
+ xmin = 47.82
2759
+ xmax = 47.85
2760
+ text = "G"
2761
+ intervals [473]:
2762
+ xmin = 47.85
2763
+ xmax = 47.89
2764
+ text = "AH0"
2765
+ intervals [474]:
2766
+ xmin = 47.89
2767
+ xmax = 48.04
2768
+ text = "L"
2769
+ intervals [475]:
2770
+ xmin = 48.04
2771
+ xmax = 48.12
2772
+ text = "Z"
2773
+ intervals [476]:
2774
+ xmin = 48.12
2775
+ xmax = 48.15
2776
+ text = "AH0"
2777
+ intervals [477]:
2778
+ xmin = 48.15
2779
+ xmax = 48.18
2780
+ text = "N"
2781
+ intervals [478]:
2782
+ xmin = 48.18
2783
+ xmax = 48.21
2784
+ text = "D"
2785
+ intervals [479]:
2786
+ xmin = 48.21
2787
+ xmax = 48.26
2788
+ text = "D"
2789
+ intervals [480]:
2790
+ xmin = 48.26
2791
+ xmax = 48.31
2792
+ text = "IH1"
2793
+ intervals [481]:
2794
+ xmin = 48.31
2795
+ xmax = 48.36
2796
+ text = "F"
2797
+ intervals [482]:
2798
+ xmin = 48.36
2799
+ xmax = 48.39
2800
+ text = "R"
2801
+ intervals [483]:
2802
+ xmin = 48.39
2803
+ xmax = 48.42
2804
+ text = "AH0"
2805
+ intervals [484]:
2806
+ xmin = 48.42
2807
+ xmax = 48.45
2808
+ text = "N"
2809
+ intervals [485]:
2810
+ xmin = 48.45
2811
+ xmax = 48.48
2812
+ text = "T"
2813
+ intervals [486]:
2814
+ xmin = 48.48
2815
+ xmax = 48.53
2816
+ text = "K"
2817
+ intervals [487]:
2818
+ xmin = 48.53
2819
+ xmax = 48.6
2820
+ text = "AA2"
2821
+ intervals [488]:
2822
+ xmin = 48.6
2823
+ xmax = 48.64
2824
+ text = "M"
2825
+ intervals [489]:
2826
+ xmin = 48.64
2827
+ xmax = 48.67
2828
+ text = "P"
2829
+ intervals [490]:
2830
+ xmin = 48.67
2831
+ xmax = 48.72
2832
+ text = "AH0"
2833
+ intervals [491]:
2834
+ xmin = 48.72
2835
+ xmax = 48.8
2836
+ text = "Z"
2837
+ intervals [492]:
2838
+ xmin = 48.8
2839
+ xmax = 48.88
2840
+ text = "IH1"
2841
+ intervals [493]:
2842
+ xmin = 48.88
2843
+ xmax = 48.95
2844
+ text = "SH"
2845
+ intervals [494]:
2846
+ xmin = 48.95
2847
+ xmax = 49.02
2848
+ text = "AH0"
2849
+ intervals [495]:
2850
+ xmin = 49.02
2851
+ xmax = 49.12
2852
+ text = "N"
2853
+ intervals [496]:
2854
+ xmin = 49.12
2855
+ xmax = 49.32
2856
+ text = "Z"
2857
+ intervals [497]:
2858
+ xmin = 49.32
2859
+ xmax = 49.68
2860
+ text = ""
2861
+ intervals [498]:
2862
+ xmin = 49.68
2863
+ xmax = 49.91
2864
+ text = "F"
2865
+ intervals [499]:
2866
+ xmin = 49.91
2867
+ xmax = 49.98
2868
+ text = "ER0"
2869
+ intervals [500]:
2870
+ xmin = 49.98
2871
+ xmax = 50.02
2872
+ text = "IH0"
2873
+ intervals [501]:
2874
+ xmin = 50.02
2875
+ xmax = 50.06
2876
+ text = "G"
2877
+ intervals [502]:
2878
+ xmin = 50.06
2879
+ xmax = 50.13
2880
+ text = "Z"
2881
+ intervals [503]:
2882
+ xmin = 50.13
2883
+ xmax = 50.22
2884
+ text = "AE1"
2885
+ intervals [504]:
2886
+ xmin = 50.22
2887
+ xmax = 50.27
2888
+ text = "M"
2889
+ intervals [505]:
2890
+ xmin = 50.27
2891
+ xmax = 50.31
2892
+ text = "P"
2893
+ intervals [506]:
2894
+ xmin = 50.31
2895
+ xmax = 50.34
2896
+ text = "AH0"
2897
+ intervals [507]:
2898
+ xmin = 50.34
2899
+ xmax = 50.4
2900
+ text = "L"
2901
+ intervals [508]:
2902
+ xmin = 50.4
2903
+ xmax = 50.48
2904
+ text = "P"
2905
+ intervals [509]:
2906
+ xmin = 50.48
2907
+ xmax = 50.58
2908
+ text = "IY1"
2909
+ intervals [510]:
2910
+ xmin = 50.58
2911
+ xmax = 50.63
2912
+ text = "P"
2913
+ intervals [511]:
2914
+ xmin = 50.63
2915
+ xmax = 50.69
2916
+ text = "AH0"
2917
+ intervals [512]:
2918
+ xmin = 50.69
2919
+ xmax = 50.91
2920
+ text = "L"
2921
+ intervals [513]:
2922
+ xmin = 50.91
2923
+ xmax = 51.21
2924
+ text = "B"
2925
+ intervals [514]:
2926
+ xmin = 51.21
2927
+ xmax = 51.29
2928
+ text = "IY1"
2929
+ intervals [515]:
2930
+ xmin = 51.29
2931
+ xmax = 51.34
2932
+ text = "IH0"
2933
+ intervals [516]:
2934
+ xmin = 51.34
2935
+ xmax = 51.42
2936
+ text = "NG"
2937
+ intervals [517]:
2938
+ xmin = 51.42
2939
+ xmax = 51.57
2940
+ text = "SH"
2941
+ intervals [518]:
2942
+ xmin = 51.57
2943
+ xmax = 51.62
2944
+ text = "IH1"
2945
+ intervals [519]:
2946
+ xmin = 51.62
2947
+ xmax = 51.68
2948
+ text = "F"
2949
+ intervals [520]:
2950
+ xmin = 51.68
2951
+ xmax = 51.74
2952
+ text = "T"
2953
+ intervals [521]:
2954
+ xmin = 51.74
2955
+ xmax = 51.79
2956
+ text = "IH0"
2957
+ intervals [522]:
2958
+ xmin = 51.79
2959
+ xmax = 51.91
2960
+ text = "D"
2961
+ intervals [523]:
2962
+ xmin = 51.91
2963
+ xmax = 51.94
2964
+ text = "F"
2965
+ intervals [524]:
2966
+ xmin = 51.94
2967
+ xmax = 52.02
2968
+ text = "ER0"
2969
+ intervals [525]:
2970
+ xmin = 52.02
2971
+ xmax = 52.06
2972
+ text = "M"
2973
+ intervals [526]:
2974
+ xmin = 52.06
2975
+ xmax = 52.1
2976
+ text = "DH"
2977
+ intervals [527]:
2978
+ xmin = 52.1
2979
+ xmax = 52.15
2980
+ text = "AH0"
2981
+ intervals [528]:
2982
+ xmin = 52.15
2983
+ xmax = 52.27
2984
+ text = "S"
2985
+ intervals [529]:
2986
+ xmin = 52.27
2987
+ xmax = 52.32
2988
+ text = "EH1"
2989
+ intervals [530]:
2990
+ xmin = 52.32
2991
+ xmax = 52.38
2992
+ text = "N"
2993
+ intervals [531]:
2994
+ xmin = 52.38
2995
+ xmax = 52.47
2996
+ text = "ER0"
2997
+ intervals [532]:
2998
+ xmin = 52.47
2999
+ xmax = 52.51
3000
+ text = "AH0"
3001
+ intervals [533]:
3002
+ xmin = 52.51
3003
+ xmax = 52.54
3004
+ text = "V"
3005
+ intervals [534]:
3006
+ xmin = 52.54
3007
+ xmax = 52.57
3008
+ text = "DH"
3009
+ intervals [535]:
3010
+ xmin = 52.57
3011
+ xmax = 52.63
3012
+ text = "AH0"
3013
+ intervals [536]:
3014
+ xmin = 52.63
3015
+ xmax = 52.72
3016
+ text = "F"
3017
+ intervals [537]:
3018
+ xmin = 52.72
3019
+ xmax = 52.8
3020
+ text = "R"
3021
+ intervals [538]:
3022
+ xmin = 52.8
3023
+ xmax = 52.89
3024
+ text = "EY1"
3025
+ intervals [539]:
3026
+ xmin = 52.89
3027
+ xmax = 52.95
3028
+ text = "M"
3029
+ intervals [540]:
3030
+ xmin = 52.95
3031
+ xmax = 53.01
3032
+ text = "T"
3033
+ intervals [541]:
3034
+ xmin = 53.01
3035
+ xmax = 53.1
3036
+ text = "AH0"
3037
+ intervals [542]:
3038
+ xmin = 53.1
3039
+ xmax = 53.19
3040
+ text = "L"
3041
+ intervals [543]:
3042
+ xmin = 53.19
3043
+ xmax = 53.26
3044
+ text = "EH1"
3045
+ intervals [544]:
3046
+ xmin = 53.26
3047
+ xmax = 53.29
3048
+ text = "F"
3049
+ intervals [545]:
3050
+ xmin = 53.29
3051
+ xmax = 53.32
3052
+ text = "T"
3053
+ intervals [546]:
3054
+ xmin = 53.32
3055
+ xmax = 53.4
3056
+ text = "S"
3057
+ intervals [547]:
3058
+ xmin = 53.4
3059
+ xmax = 53.5
3060
+ text = "AY1"
3061
+ intervals [548]:
3062
+ xmin = 53.5
3063
+ xmax = 53.54
3064
+ text = "D"
3065
+ intervals [549]:
3066
+ xmin = 53.54
3067
+ xmax = 53.57
3068
+ text = "AH0"
3069
+ intervals [550]:
3070
+ xmin = 53.57
3071
+ xmax = 53.6
3072
+ text = "V"
3073
+ intervals [551]:
3074
+ xmin = 53.6
3075
+ xmax = 53.63
3076
+ text = "DH"
3077
+ intervals [552]:
3078
+ xmin = 53.63
3079
+ xmax = 53.69
3080
+ text = "AH0"
3081
+ intervals [553]:
3082
+ xmin = 53.69
3083
+ xmax = 53.78
3084
+ text = "F"
3085
+ intervals [554]:
3086
+ xmin = 53.78
3087
+ xmax = 53.92
3088
+ text = "R"
3089
+ intervals [555]:
3090
+ xmin = 53.92
3091
+ xmax = 54.03
3092
+ text = "EY1"
3093
+ intervals [556]:
3094
+ xmin = 54.03
3095
+ xmax = 54.17
3096
+ text = "M"
3097
+ intervals [557]:
3098
+ xmin = 54.17
3099
+ xmax = 54.62
3100
+ text = ""
3101
+ intervals [558]:
3102
+ xmin = 54.62
3103
+ xmax = 54.72
3104
+ text = "IH0"
3105
+ intervals [559]:
3106
+ xmin = 54.72
3107
+ xmax = 54.75
3108
+ text = "T"
3109
+ intervals [560]:
3110
+ xmin = 54.75
3111
+ xmax = 54.82
3112
+ text = "K"
3113
+ intervals [561]:
3114
+ xmin = 54.82
3115
+ xmax = 54.88
3116
+ text = "AH0"
3117
+ intervals [562]:
3118
+ xmin = 54.88
3119
+ xmax = 54.91
3120
+ text = "N"
3121
+ intervals [563]:
3122
+ xmin = 54.91
3123
+ xmax = 54.97
3124
+ text = "M"
3125
+ intervals [564]:
3126
+ xmin = 54.97
3127
+ xmax = 55.1
3128
+ text = "EY1"
3129
+ intervals [565]:
3130
+ xmin = 55.1
3131
+ xmax = 55.13
3132
+ text = "K"
3133
+ intervals [566]:
3134
+ xmin = 55.13
3135
+ xmax = 55.22
3136
+ text = "EY1"
3137
+ intervals [567]:
3138
+ xmin = 55.22
3139
+ xmax = 55.29
3140
+ text = "D"
3141
+ intervals [568]:
3142
+ xmin = 55.29
3143
+ xmax = 55.35
3144
+ text = "IH1"
3145
+ intervals [569]:
3146
+ xmin = 55.35
3147
+ xmax = 55.43
3148
+ text = "F"
3149
+ intervals [570]:
3150
+ xmin = 55.43
3151
+ xmax = 55.46
3152
+ text = "R"
3153
+ intervals [571]:
3154
+ xmin = 55.46
3155
+ xmax = 55.49
3156
+ text = "AH0"
3157
+ intervals [572]:
3158
+ xmin = 55.49
3159
+ xmax = 55.52
3160
+ text = "N"
3161
+ intervals [573]:
3162
+ xmin = 55.52
3163
+ xmax = 55.56
3164
+ text = "T"
3165
+ intervals [574]:
3166
+ xmin = 55.56
3167
+ xmax = 55.64
3168
+ text = "F"
3169
+ intervals [575]:
3170
+ xmin = 55.64
3171
+ xmax = 55.77
3172
+ text = "IY1"
3173
+ intervals [576]:
3174
+ xmin = 55.77
3175
+ xmax = 55.82
3176
+ text = "L"
3177
+ intervals [577]:
3178
+ xmin = 55.82
3179
+ xmax = 55.88
3180
+ text = "IH0"
3181
+ intervals [578]:
3182
+ xmin = 55.88
3183
+ xmax = 56.05
3184
+ text = "NG"
3185
+ intervals [579]:
3186
+ xmin = 56.05
3187
+ xmax = 56.41
3188
+ text = ""
3189
+ intervals [580]:
3190
+ xmin = 56.41
3191
+ xmax = 56.48
3192
+ text = "W"
3193
+ intervals [581]:
3194
+ xmin = 56.48
3195
+ xmax = 56.66
3196
+ text = "EH1"
3197
+ intervals [582]:
3198
+ xmin = 56.66
3199
+ xmax = 56.69
3200
+ text = "N"
3201
+ intervals [583]:
3202
+ xmin = 56.69
3203
+ xmax = 57.1
3204
+ text = "W"
3205
+ intervals [584]:
3206
+ xmin = 57.1
3207
+ xmax = 57.25
3208
+ text = "IY1"
3209
+ intervals [585]:
3210
+ xmin = 57.25
3211
+ xmax = 57.5
3212
+ text = ""
3213
+ intervals [586]:
3214
+ xmin = 57.5
3215
+ xmax = 57.68
3216
+ text = "W"
3217
+ intervals [587]:
3218
+ xmin = 57.68
3219
+ xmax = 57.72
3220
+ text = "EH1"
3221
+ intervals [588]:
3222
+ xmin = 57.72
3223
+ xmax = 57.82
3224
+ text = "N"
3225
+ intervals [589]:
3226
+ xmin = 57.82
3227
+ xmax = 57.96
3228
+ text = "S"
3229
+ intervals [590]:
3230
+ xmin = 57.96
3231
+ xmax = 58.02
3232
+ text = "IY1"
3233
+ intervals [591]:
3234
+ xmin = 58.02
3235
+ xmax = 58.07
3236
+ text = "N"
3237
+ intervals [592]:
3238
+ xmin = 58.07
3239
+ xmax = 58.11
3240
+ text = "IH1"
3241
+ intervals [593]:
3242
+ xmin = 58.11
3243
+ xmax = 58.17
3244
+ text = "N"
3245
+ intervals [594]:
3246
+ xmin = 58.17
3247
+ xmax = 58.25
3248
+ text = "K"
3249
+ intervals [595]:
3250
+ xmin = 58.25
3251
+ xmax = 58.41
3252
+ text = "AA1"
3253
+ intervals [596]:
3254
+ xmin = 58.41
3255
+ xmax = 58.47
3256
+ text = "N"
3257
+ intervals [597]:
3258
+ xmin = 58.47
3259
+ xmax = 58.53
3260
+ text = "T"
3261
+ intervals [598]:
3262
+ xmin = 58.53
3263
+ xmax = 58.65
3264
+ text = "EH0"
3265
+ intervals [599]:
3266
+ xmin = 58.65
3267
+ xmax = 58.69
3268
+ text = "K"
3269
+ intervals [600]:
3270
+ xmin = 58.69
3271
+ xmax = 58.74
3272
+ text = "S"
3273
+ intervals [601]:
3274
+ xmin = 58.74
3275
+ xmax = 58.77
3276
+ text = "T"
3277
+ intervals [602]:
3278
+ xmin = 58.77
3279
+ xmax = 58.8
3280
+ text = "W"
3281
+ intervals [603]:
3282
+ xmin = 58.8
3283
+ xmax = 58.83
3284
+ text = "IH0"
3285
+ intervals [604]:
3286
+ xmin = 58.83
3287
+ xmax = 58.86
3288
+ text = "DH"
3289
+ intervals [605]:
3290
+ xmin = 58.86
3291
+ xmax = 58.9
3292
+ text = "DH"
3293
+ intervals [606]:
3294
+ xmin = 58.9
3295
+ xmax = 58.93
3296
+ text = "AH1"
3297
+ intervals [607]:
3298
+ xmin = 58.93
3299
+ xmax = 59.03
3300
+ text = "B"
3301
+ intervals [608]:
3302
+ xmin = 59.03
3303
+ xmax = 59.2
3304
+ text = "AE1"
3305
+ intervals [609]:
3306
+ xmin = 59.2
3307
+ xmax = 59.25
3308
+ text = "K"
3309
+ intervals [610]:
3310
+ xmin = 59.25
3311
+ xmax = 59.29
3312
+ text = "G"
3313
+ intervals [611]:
3314
+ xmin = 59.29
3315
+ xmax = 59.33
3316
+ text = "R"
3317
+ intervals [612]:
3318
+ xmin = 59.33
3319
+ xmax = 59.45
3320
+ text = "AW2"
3321
+ intervals [613]:
3322
+ xmin = 59.45
3323
+ xmax = 59.52
3324
+ text = "N"
3325
+ intervals [614]:
3326
+ xmin = 59.52
3327
+ xmax = 59.61
3328
+ text = "D"
3329
+ intervals [615]:
3330
+ xmin = 59.61
3331
+ xmax = 59.96
3332
+ text = ""
3333
+ intervals [616]:
3334
+ xmin = 59.96
3335
+ xmax = 60.13
3336
+ text = "W"
3337
+ intervals [617]:
3338
+ xmin = 60.13
3339
+ xmax = 60.17
3340
+ text = "EH1"
3341
+ intervals [618]:
3342
+ xmin = 60.17
3343
+ xmax = 60.31
3344
+ text = "N"
3345
+ intervals [619]:
3346
+ xmin = 60.31
3347
+ xmax = 60.41
3348
+ text = "EH1"
3349
+ intervals [620]:
3350
+ xmin = 60.41
3351
+ xmax = 60.45
3352
+ text = "V"
3353
+ intervals [621]:
3354
+ xmin = 60.45
3355
+ xmax = 60.48
3356
+ text = "R"
3357
+ intervals [622]:
3358
+ xmin = 60.48
3359
+ xmax = 60.51
3360
+ text = "IY0"
3361
+ intervals [623]:
3362
+ xmin = 60.51
3363
+ xmax = 60.58
3364
+ text = "W"
3365
+ intervals [624]:
3366
+ xmin = 60.58
3367
+ xmax = 60.65
3368
+ text = "AH2"
3369
+ intervals [625]:
3370
+ xmin = 60.65
3371
+ xmax = 60.69
3372
+ text = "N"
3373
+ intervals [626]:
3374
+ xmin = 60.69
3375
+ xmax = 60.79
3376
+ text = "Z"
3377
+ intervals [627]:
3378
+ xmin = 60.79
3379
+ xmax = 60.86
3380
+ text = "T"
3381
+ intervals [628]:
3382
+ xmin = 60.86
3383
+ xmax = 60.92
3384
+ text = "EY1"
3385
+ intervals [629]:
3386
+ xmin = 60.92
3387
+ xmax = 60.95
3388
+ text = "K"
3389
+ intervals [630]:
3390
+ xmin = 60.95
3391
+ xmax = 61.0
3392
+ text = "IH0"
3393
+ intervals [631]:
3394
+ xmin = 61.0
3395
+ xmax = 61.08
3396
+ text = "NG"
3397
+ intervals [632]:
3398
+ xmin = 61.08
3399
+ xmax = 61.14
3400
+ text = "AH0"
3401
+ intervals [633]:
3402
+ xmin = 61.14
3403
+ xmax = 61.2
3404
+ text = "P"
3405
+ intervals [634]:
3406
+ xmin = 61.2
3407
+ xmax = 61.28
3408
+ text = "IH1"
3409
+ intervals [635]:
3410
+ xmin = 61.28
3411
+ xmax = 61.32
3412
+ text = "K"
3413
+ intervals [636]:
3414
+ xmin = 61.32
3415
+ xmax = 61.43
3416
+ text = "CH"
3417
+ intervals [637]:
3418
+ xmin = 61.43
3419
+ xmax = 61.46
3420
+ text = "ER0"
3421
+ intervals [638]:
3422
+ xmin = 61.46
3423
+ xmax = 61.49
3424
+ text = "AH0"
3425
+ intervals [639]:
3426
+ xmin = 61.49
3427
+ xmax = 61.53
3428
+ text = "V"
3429
+ intervals [640]:
3430
+ xmin = 61.53
3431
+ xmax = 61.56
3432
+ text = "DH"
3433
+ intervals [641]:
3434
+ xmin = 61.56
3435
+ xmax = 61.6
3436
+ text = "AH0"
3437
+ intervals [642]:
3438
+ xmin = 61.6
3439
+ xmax = 61.64
3440
+ text = "IH0"
3441
+ intervals [643]:
3442
+ xmin = 61.64
3443
+ xmax = 61.69
3444
+ text = "G"
3445
+ intervals [644]:
3446
+ xmin = 61.69
3447
+ xmax = 61.76
3448
+ text = "Z"
3449
+ intervals [645]:
3450
+ xmin = 61.76
3451
+ xmax = 61.9
3452
+ text = "AE1"
3453
+ intervals [646]:
3454
+ xmin = 61.9
3455
+ xmax = 61.94
3456
+ text = "K"
3457
+ intervals [647]:
3458
+ xmin = 61.94
3459
+ xmax = 61.98
3460
+ text = "T"
3461
+ intervals [648]:
3462
+ xmin = 61.98
3463
+ xmax = 62.05
3464
+ text = "S"
3465
+ intervals [649]:
3466
+ xmin = 62.05
3467
+ xmax = 62.13
3468
+ text = "EY1"
3469
+ intervals [650]:
3470
+ xmin = 62.13
3471
+ xmax = 62.19
3472
+ text = "M"
3473
+ intervals [651]:
3474
+ xmin = 62.19
3475
+ xmax = 62.3
3476
+ text = "S"
3477
+ intervals [652]:
3478
+ xmin = 62.3
3479
+ xmax = 62.34
3480
+ text = "IY1"
3481
+ intervals [653]:
3482
+ xmin = 62.34
3483
+ xmax = 62.39
3484
+ text = "N"
3485
+ intervals [654]:
3486
+ xmin = 62.39
3487
+ xmax = 62.47
3488
+ text = "ER0"
3489
+ intervals [655]:
3490
+ xmin = 62.47
3491
+ xmax = 62.64
3492
+ text = "IY0"
3493
+ intervals [656]:
3494
+ xmin = 62.64
3495
+ xmax = 62.67
3496
+ text = ""
3497
+ intervals [657]:
3498
+ xmin = 62.67
3499
+ xmax = 62.8
3500
+ text = "AY1"
3501
+ intervals [658]:
3502
+ xmin = 62.8
3503
+ xmax = 62.89
3504
+ text = "M"
3505
+ intervals [659]:
3506
+ xmin = 62.89
3507
+ xmax = 63.03
3508
+ text = "V"
3509
+ intervals [660]:
3510
+ xmin = 63.03
3511
+ xmax = 63.12
3512
+ text = "EH1"
3513
+ intervals [661]:
3514
+ xmin = 63.12
3515
+ xmax = 63.22
3516
+ text = "R"
3517
+ intervals [662]:
3518
+ xmin = 63.22
3519
+ xmax = 63.28
3520
+ text = "IY0"
3521
+ intervals [663]:
3522
+ xmin = 63.28
3523
+ xmax = 63.39
3524
+ text = "HH"
3525
+ intervals [664]:
3526
+ xmin = 63.39
3527
+ xmax = 63.56
3528
+ text = "AE1"
3529
+ intervals [665]:
3530
+ xmin = 63.56
3531
+ xmax = 63.62
3532
+ text = "P"
3533
+ intervals [666]:
3534
+ xmin = 63.62
3535
+ xmax = 63.75
3536
+ text = "IY0"
3537
+ intervals [667]:
3538
+ xmin = 63.75
3539
+ xmax = 63.81
3540
+ text = "W"
3541
+ intervals [668]:
3542
+ xmin = 63.81
3543
+ xmax = 63.85
3544
+ text = "IH1"
3545
+ intervals [669]:
3546
+ xmin = 63.85
3547
+ xmax = 63.9
3548
+ text = "N"
3549
+ intervals [670]:
3550
+ xmin = 63.9
3551
+ xmax = 64.03
3552
+ text = "P"
3553
+ intervals [671]:
3554
+ xmin = 64.03
3555
+ xmax = 64.14
3556
+ text = "IY1"
3557
+ intervals [672]:
3558
+ xmin = 64.14
3559
+ xmax = 64.19
3560
+ text = "P"
3561
+ intervals [673]:
3562
+ xmin = 64.19
3563
+ xmax = 64.23
3564
+ text = "AH0"
3565
+ intervals [674]:
3566
+ xmin = 64.23
3567
+ xmax = 64.35
3568
+ text = "L"
3569
+ intervals [675]:
3570
+ xmin = 64.35
3571
+ xmax = 64.48
3572
+ text = "S"
3573
+ intervals [676]:
3574
+ xmin = 64.48
3575
+ xmax = 64.6
3576
+ text = "EY1"
3577
+ intervals [677]:
3578
+ xmin = 64.6
3579
+ xmax = 64.69
3580
+ text = "M"
3581
+ intervals [678]:
3582
+ xmin = 64.69
3583
+ xmax = 64.84
3584
+ text = "AY1"
3585
+ intervals [679]:
3586
+ xmin = 64.84
3587
+ xmax = 64.99
3588
+ text = "F"
3589
+ intervals [680]:
3590
+ xmin = 64.99
3591
+ xmax = 65.07
3592
+ text = "OW1"
3593
+ intervals [681]:
3594
+ xmin = 65.07
3595
+ xmax = 65.1
3596
+ text = "T"
3597
+ intervals [682]:
3598
+ xmin = 65.1
3599
+ xmax = 65.18
3600
+ text = "OW2"
3601
+ intervals [683]:
3602
+ xmin = 65.18
3603
+ xmax = 65.29
3604
+ text = "Z"
3605
+ intervals [684]:
3606
+ xmin = 65.29
3607
+ xmax = 65.37
3608
+ text = "L"
3609
+ intervals [685]:
3610
+ xmin = 65.37
3611
+ xmax = 65.42
3612
+ text = "UH1"
3613
+ intervals [686]:
3614
+ xmin = 65.42
3615
+ xmax = 65.47
3616
+ text = "K"
3617
+ intervals [687]:
3618
+ xmin = 65.47
3619
+ xmax = 65.67
3620
+ text = "B"
3621
+ intervals [688]:
3622
+ xmin = 65.67
3623
+ xmax = 65.79
3624
+ text = "EH1"
3625
+ intervals [689]:
3626
+ xmin = 65.79
3627
+ xmax = 65.88
3628
+ text = "T"
3629
+ intervals [690]:
3630
+ xmin = 65.88
3631
+ xmax = 66.11
3632
+ text = "ER0"
3633
+ intervals [691]:
3634
+ xmin = 66.11
3635
+ xmax = 66.43
3636
+ text = ""
3637
+ intervals [692]:
3638
+ xmin = 66.43
3639
+ xmax = 66.5
3640
+ text = "DH"
3641
+ intervals [693]:
3642
+ xmin = 66.5
3643
+ xmax = 66.53
3644
+ text = "AH0"
3645
+ intervals [694]:
3646
+ xmin = 66.53
3647
+ xmax = 66.56
3648
+ text = "N"
3649
+ intervals [695]:
3650
+ xmin = 66.56
3651
+ xmax = 66.6
3652
+ text = "DH"
3653
+ intervals [696]:
3654
+ xmin = 66.6
3655
+ xmax = 66.7
3656
+ text = "IY0"
3657
+ intervals [697]:
3658
+ xmin = 66.7
3659
+ xmax = 66.76
3660
+ text = "AH1"
3661
+ intervals [698]:
3662
+ xmin = 66.76
3663
+ xmax = 66.82
3664
+ text = "DH"
3665
+ intervals [699]:
3666
+ xmin = 66.82
3667
+ xmax = 66.95
3668
+ text = "ER0"
3669
+ intervals [700]:
3670
+ xmin = 66.95
3671
+ xmax = 67.19
3672
+ text = "Z"
3673
+ intervals [701]:
3674
+ xmin = 67.19
3675
+ xmax = 68
3676
+ text = ""
EMAGE/test_sequences/textgrid/2_scott_0_4_4.TextGrid ADDED
@@ -0,0 +1,3844 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ File type = "ooTextFile"
2
+ Object class = "TextGrid"
3
+
4
+ xmin = 0.0
5
+ xmax = 67
6
+ tiers? <exists>
7
+ size = 2
8
+ item []:
9
+ item [1]:
10
+ class = "IntervalTier"
11
+ name = "words"
12
+ xmin = 0.0
13
+ xmax = 67
14
+ intervals: size = 235
15
+ intervals [1]:
16
+ xmin = 0.0
17
+ xmax = 0.53
18
+ text = ""
19
+ intervals [2]:
20
+ xmin = 0.53
21
+ xmax = 0.93
22
+ text = "my"
23
+ intervals [3]:
24
+ xmin = 0.93
25
+ xmax = 1.34
26
+ text = "favorite"
27
+ intervals [4]:
28
+ xmin = 1.34
29
+ xmax = 1.57
30
+ text = "kind"
31
+ intervals [5]:
32
+ xmin = 1.57
33
+ xmax = 1.65
34
+ text = "of"
35
+ intervals [6]:
36
+ xmin = 1.65
37
+ xmax = 2.2
38
+ text = "movies"
39
+ intervals [7]:
40
+ xmin = 2.2
41
+ xmax = 2.45
42
+ text = "are"
43
+ intervals [8]:
44
+ xmin = 2.45
45
+ xmax = 3.2
46
+ text = "romantic"
47
+ intervals [9]:
48
+ xmin = 3.2
49
+ xmax = 3.72
50
+ text = "movies"
51
+ intervals [10]:
52
+ xmin = 3.72
53
+ xmax = 3.75
54
+ text = ""
55
+ intervals [11]:
56
+ xmin = 3.75
57
+ xmax = 4.1
58
+ text = "such"
59
+ intervals [12]:
60
+ xmin = 4.1
61
+ xmax = 4.33
62
+ text = "as"
63
+ intervals [13]:
64
+ xmin = 4.33
65
+ xmax = 5.23
66
+ text = "titanic"
67
+ intervals [14]:
68
+ xmin = 5.23
69
+ xmax = 5.78
70
+ text = ""
71
+ intervals [15]:
72
+ xmin = 5.78
73
+ xmax = 6.19
74
+ text = "it's"
75
+ intervals [16]:
76
+ xmin = 6.19
77
+ xmax = 6.46
78
+ text = "a"
79
+ intervals [17]:
80
+ xmin = 6.46
81
+ xmax = 6.49
82
+ text = ""
83
+ intervals [18]:
84
+ xmin = 6.49
85
+ xmax = 7.13
86
+ text = "fantastic"
87
+ intervals [19]:
88
+ xmin = 7.13
89
+ xmax = 7.56
90
+ text = "film"
91
+ intervals [20]:
92
+ xmin = 7.56
93
+ xmax = 7.77
94
+ text = "it"
95
+ intervals [21]:
96
+ xmin = 7.77
97
+ xmax = 8.28
98
+ text = "captured"
99
+ intervals [22]:
100
+ xmin = 8.28
101
+ xmax = 8.73
102
+ text = "many"
103
+ intervals [23]:
104
+ xmin = 8.73
105
+ xmax = 9.1
106
+ text = "young"
107
+ intervals [24]:
108
+ xmin = 9.1
109
+ xmax = 9.44
110
+ text = "people's"
111
+ intervals [25]:
112
+ xmin = 9.44
113
+ xmax = 9.79
114
+ text = "hearts"
115
+ intervals [26]:
116
+ xmin = 9.79
117
+ xmax = 10.02
118
+ text = "with"
119
+ intervals [27]:
120
+ xmin = 10.02
121
+ xmax = 10.17
122
+ text = "it's"
123
+ intervals [28]:
124
+ xmin = 10.17
125
+ xmax = 10.65
126
+ text = "amazing"
127
+ intervals [29]:
128
+ xmin = 10.65
129
+ xmax = 11.12
130
+ text = "music"
131
+ intervals [30]:
132
+ xmin = 11.12
133
+ xmax = 11.36
134
+ text = "and"
135
+ intervals [31]:
136
+ xmin = 11.36
137
+ xmax = 11.92
138
+ text = "sentimental"
139
+ intervals [32]:
140
+ xmin = 11.92
141
+ xmax = 12.47
142
+ text = "plots"
143
+ intervals [33]:
144
+ xmin = 12.47
145
+ xmax = 12.84
146
+ text = ""
147
+ intervals [34]:
148
+ xmin = 12.84
149
+ xmax = 12.98
150
+ text = "when"
151
+ intervals [35]:
152
+ xmin = 12.98
153
+ xmax = 13.12
154
+ text = "i"
155
+ intervals [36]:
156
+ xmin = 13.12
157
+ xmax = 13.28
158
+ text = "think"
159
+ intervals [37]:
160
+ xmin = 13.28
161
+ xmax = 13.35
162
+ text = "of"
163
+ intervals [38]:
164
+ xmin = 13.35
165
+ xmax = 13.42
166
+ text = "the"
167
+ intervals [39]:
168
+ xmin = 13.42
169
+ xmax = 13.62
170
+ text = "movie"
171
+ intervals [40]:
172
+ xmin = 13.62
173
+ xmax = 14.2
174
+ text = "titanic"
175
+ intervals [41]:
176
+ xmin = 14.2
177
+ xmax = 14.23
178
+ text = ""
179
+ intervals [42]:
180
+ xmin = 14.23
181
+ xmax = 14.42
182
+ text = "the"
183
+ intervals [43]:
184
+ xmin = 14.42
185
+ xmax = 14.92
186
+ text = "word"
187
+ intervals [44]:
188
+ xmin = 14.92
189
+ xmax = 15.06
190
+ text = "that"
191
+ intervals [45]:
192
+ xmin = 15.06
193
+ xmax = 15.3
194
+ text = "comes"
195
+ intervals [46]:
196
+ xmin = 15.3
197
+ xmax = 15.39
198
+ text = "to"
199
+ intervals [47]:
200
+ xmin = 15.39
201
+ xmax = 15.5
202
+ text = "my"
203
+ intervals [48]:
204
+ xmin = 15.5
205
+ xmax = 15.91
206
+ text = "mind"
207
+ intervals [49]:
208
+ xmin = 15.91
209
+ xmax = 16.06
210
+ text = "mind"
211
+ intervals [50]:
212
+ xmin = 16.06
213
+ xmax = 16.41
214
+ text = ""
215
+ intervals [51]:
216
+ xmin = 16.41
217
+ xmax = 16.6
218
+ text = "to"
219
+ intervals [52]:
220
+ xmin = 16.6
221
+ xmax = 17.07
222
+ text = "mises"
223
+ intervals [53]:
224
+ xmin = 17.07
225
+ xmax = 17.15
226
+ text = "the"
227
+ intervals [54]:
228
+ xmin = 17.15
229
+ xmax = 17.39
230
+ text = "whole"
231
+ intervals [55]:
232
+ xmin = 17.39
233
+ xmax = 17.94
234
+ text = "film"
235
+ intervals [56]:
236
+ xmin = 17.94
237
+ xmax = 17.97
238
+ text = ""
239
+ intervals [57]:
240
+ xmin = 17.97
241
+ xmax = 18.18
242
+ text = "would"
243
+ intervals [58]:
244
+ xmin = 18.18
245
+ xmax = 18.62
246
+ text = "be"
247
+ intervals [59]:
248
+ xmin = 18.62
249
+ xmax = 19.09
250
+ text = ""
251
+ intervals [60]:
252
+ xmin = 19.09
253
+ xmax = 19.94
254
+ text = "love"
255
+ intervals [61]:
256
+ xmin = 19.94
257
+ xmax = 20.07
258
+ text = ""
259
+ intervals [62]:
260
+ xmin = 20.07
261
+ xmax = 20.27
262
+ text = "it's"
263
+ intervals [63]:
264
+ xmin = 20.27
265
+ xmax = 20.36
266
+ text = "a"
267
+ intervals [64]:
268
+ xmin = 20.36
269
+ xmax = 20.83
270
+ text = "kind"
271
+ intervals [65]:
272
+ xmin = 20.83
273
+ xmax = 20.98
274
+ text = "of"
275
+ intervals [66]:
276
+ xmin = 20.98
277
+ xmax = 21.25
278
+ text = "thing"
279
+ intervals [67]:
280
+ xmin = 21.25
281
+ xmax = 21.43
282
+ text = "that"
283
+ intervals [68]:
284
+ xmin = 21.43
285
+ xmax = 21.8
286
+ text = "makes"
287
+ intervals [69]:
288
+ xmin = 21.8
289
+ xmax = 22.28
290
+ text = "you"
291
+ intervals [70]:
292
+ xmin = 22.28
293
+ xmax = 22.31
294
+ text = ""
295
+ intervals [71]:
296
+ xmin = 22.31
297
+ xmax = 22.8
298
+ text = "makes"
299
+ intervals [72]:
300
+ xmin = 22.8
301
+ xmax = 22.91
302
+ text = "the"
303
+ intervals [73]:
304
+ xmin = 22.91
305
+ xmax = 23.21
306
+ text = "world"
307
+ intervals [74]:
308
+ xmin = 23.21
309
+ xmax = 23.38
310
+ text = "go"
311
+ intervals [75]:
312
+ xmin = 23.38
313
+ xmax = 23.87
314
+ text = "round"
315
+ intervals [76]:
316
+ xmin = 23.87
317
+ xmax = 24.08
318
+ text = ""
319
+ intervals [77]:
320
+ xmin = 24.08
321
+ xmax = 24.6
322
+ text = "watching"
323
+ intervals [78]:
324
+ xmin = 24.6
325
+ xmax = 24.8
326
+ text = "these"
327
+ intervals [79]:
328
+ xmin = 24.8
329
+ xmax = 25.18
330
+ text = "kinds"
331
+ intervals [80]:
332
+ xmin = 25.18
333
+ xmax = 25.29
334
+ text = "of"
335
+ intervals [81]:
336
+ xmin = 25.29
337
+ xmax = 25.83
338
+ text = "romantic"
339
+ intervals [82]:
340
+ xmin = 25.83
341
+ xmax = 26.23
342
+ text = "movies"
343
+ intervals [83]:
344
+ xmin = 26.23
345
+ xmax = 26.43
346
+ text = "is"
347
+ intervals [84]:
348
+ xmin = 26.43
349
+ xmax = 26.86
350
+ text = "just"
351
+ intervals [85]:
352
+ xmin = 26.86
353
+ xmax = 27.07
354
+ text = "like"
355
+ intervals [86]:
356
+ xmin = 27.07
357
+ xmax = 27.49
358
+ text = "reading"
359
+ intervals [87]:
360
+ xmin = 27.49
361
+ xmax = 27.56
362
+ text = "a"
363
+ intervals [88]:
364
+ xmin = 27.56
365
+ xmax = 27.98
366
+ text = "book"
367
+ intervals [89]:
368
+ xmin = 27.98
369
+ xmax = 28.11
370
+ text = ""
371
+ intervals [90]:
372
+ xmin = 28.11
373
+ xmax = 28.29
374
+ text = "that"
375
+ intervals [91]:
376
+ xmin = 28.29
377
+ xmax = 28.65
378
+ text = "teaches"
379
+ intervals [92]:
380
+ xmin = 28.65
381
+ xmax = 28.78
382
+ text = "me"
383
+ intervals [93]:
384
+ xmin = 28.78
385
+ xmax = 28.99
386
+ text = "how"
387
+ intervals [94]:
388
+ xmin = 28.99
389
+ xmax = 29.19
390
+ text = "to"
391
+ intervals [95]:
392
+ xmin = 29.19
393
+ xmax = 29.61
394
+ text = "love"
395
+ intervals [96]:
396
+ xmin = 29.61
397
+ xmax = 29.93
398
+ text = "and"
399
+ intervals [97]:
400
+ xmin = 29.93
401
+ xmax = 30.09
402
+ text = "be"
403
+ intervals [98]:
404
+ xmin = 30.09
405
+ xmax = 30.53
406
+ text = "loved"
407
+ intervals [99]:
408
+ xmin = 30.53
409
+ xmax = 30.96
410
+ text = ""
411
+ intervals [100]:
412
+ xmin = 30.96
413
+ xmax = 31.68
414
+ text = "moreover"
415
+ intervals [101]:
416
+ xmin = 31.68
417
+ xmax = 31.81
418
+ text = "we"
419
+ intervals [102]:
420
+ xmin = 31.81
421
+ xmax = 32.01
422
+ text = ""
423
+ intervals [103]:
424
+ xmin = 32.01
425
+ xmax = 32.51
426
+ text = "can"
427
+ intervals [104]:
428
+ xmin = 32.51
429
+ xmax = 32.56
430
+ text = ""
431
+ intervals [105]:
432
+ xmin = 32.56
433
+ xmax = 32.72
434
+ text = "learn"
435
+ intervals [106]:
436
+ xmin = 32.72
437
+ xmax = 33.09
438
+ text = "we"
439
+ intervals [107]:
440
+ xmin = 33.09
441
+ xmax = 33.25
442
+ text = "can"
443
+ intervals [108]:
444
+ xmin = 33.25
445
+ xmax = 34.05
446
+ text = "learn"
447
+ intervals [109]:
448
+ xmin = 34.05
449
+ xmax = 34.2
450
+ text = ""
451
+ intervals [110]:
452
+ xmin = 34.2
453
+ xmax = 35.12
454
+ text = "more"
455
+ intervals [111]:
456
+ xmin = 35.12
457
+ xmax = 35.44
458
+ text = "from"
459
+ intervals [112]:
460
+ xmin = 35.44
461
+ xmax = 35.66
462
+ text = "it"
463
+ intervals [113]:
464
+ xmin = 35.66
465
+ xmax = 35.98
466
+ text = "such"
467
+ intervals [114]:
468
+ xmin = 35.98
469
+ xmax = 36.35
470
+ text = "things"
471
+ intervals [115]:
472
+ xmin = 36.35
473
+ xmax = 36.69
474
+ text = "as"
475
+ intervals [116]:
476
+ xmin = 36.69
477
+ xmax = 36.89
478
+ text = ""
479
+ intervals [117]:
480
+ xmin = 36.89
481
+ xmax = 37.59
482
+ text = "loyalty"
483
+ intervals [118]:
484
+ xmin = 37.59
485
+ xmax = 37.76
486
+ text = "and"
487
+ intervals [119]:
488
+ xmin = 37.76
489
+ xmax = 37.88
490
+ text = "what"
491
+ intervals [120]:
492
+ xmin = 37.88
493
+ xmax = 37.99
494
+ text = "we"
495
+ intervals [121]:
496
+ xmin = 37.99
497
+ xmax = 38.47
498
+ text = "treasure"
499
+ intervals [122]:
500
+ xmin = 38.47
501
+ xmax = 38.58
502
+ text = "in"
503
+ intervals [123]:
504
+ xmin = 38.58
505
+ xmax = 38.71
506
+ text = "our"
507
+ intervals [124]:
508
+ xmin = 38.71
509
+ xmax = 39.11
510
+ text = "lives"
511
+ intervals [125]:
512
+ xmin = 39.11
513
+ xmax = 39.4
514
+ text = ""
515
+ intervals [126]:
516
+ xmin = 39.4
517
+ xmax = 39.8
518
+ text = "another"
519
+ intervals [127]:
520
+ xmin = 39.8
521
+ xmax = 40.13
522
+ text = "movie"
523
+ intervals [128]:
524
+ xmin = 40.13
525
+ xmax = 40.51
526
+ text = "about"
527
+ intervals [129]:
528
+ xmin = 40.51
529
+ xmax = 40.83
530
+ text = "love"
531
+ intervals [130]:
532
+ xmin = 40.83
533
+ xmax = 41.08
534
+ text = "is"
535
+ intervals [131]:
536
+ xmin = 41.08
537
+ xmax = 41.24
538
+ text = "the"
539
+ intervals [132]:
540
+ xmin = 41.24
541
+ xmax = 41.3
542
+ text = ""
543
+ intervals [133]:
544
+ xmin = 41.3
545
+ xmax = 41.9
546
+ text = "secret"
547
+ intervals [134]:
548
+ xmin = 41.9
549
+ xmax = 42.13
550
+ text = ""
551
+ intervals [135]:
552
+ xmin = 42.13
553
+ xmax = 42.47
554
+ text = "the"
555
+ intervals [136]:
556
+ xmin = 42.47
557
+ xmax = 43.01
558
+ text = "movie"
559
+ intervals [137]:
560
+ xmin = 43.01
561
+ xmax = 43.58
562
+ text = "secret"
563
+ intervals [138]:
564
+ xmin = 43.58
565
+ xmax = 43.71
566
+ text = "is"
567
+ intervals [139]:
568
+ xmin = 43.71
569
+ xmax = 44.1
570
+ text = "about"
571
+ intervals [140]:
572
+ xmin = 44.1
573
+ xmax = 44.15
574
+ text = "a"
575
+ intervals [141]:
576
+ xmin = 44.15
577
+ xmax = 44.88
578
+ text = "story"
579
+ intervals [142]:
580
+ xmin = 44.88
581
+ xmax = 44.95
582
+ text = ""
583
+ intervals [143]:
584
+ xmin = 44.95
585
+ xmax = 45.14
586
+ text = "of"
587
+ intervals [144]:
588
+ xmin = 45.14
589
+ xmax = 45.21
590
+ text = "a"
591
+ intervals [145]:
592
+ xmin = 45.21
593
+ xmax = 45.56
594
+ text = "musical"
595
+ intervals [146]:
596
+ xmin = 45.56
597
+ xmax = 45.96
598
+ text = "prodigy"
599
+ intervals [147]:
600
+ xmin = 45.96
601
+ xmax = 46.04
602
+ text = "do"
603
+ intervals [148]:
604
+ xmin = 46.04
605
+ xmax = 46.17
606
+ text = "that"
607
+ intervals [149]:
608
+ xmin = 46.17
609
+ xmax = 46.42
610
+ text = "falls"
611
+ intervals [150]:
612
+ xmin = 46.42
613
+ xmax = 46.49
614
+ text = "in"
615
+ intervals [151]:
616
+ xmin = 46.49
617
+ xmax = 46.62
618
+ text = "love"
619
+ intervals [152]:
620
+ xmin = 46.62
621
+ xmax = 46.72
622
+ text = "with"
623
+ intervals [153]:
624
+ xmin = 46.72
625
+ xmax = 46.85
626
+ text = "a"
627
+ intervals [154]:
628
+ xmin = 46.85
629
+ xmax = 46.91
630
+ text = ""
631
+ intervals [155]:
632
+ xmin = 46.91
633
+ xmax = 47.21
634
+ text = "girl"
635
+ intervals [156]:
636
+ xmin = 47.21
637
+ xmax = 47.46
638
+ text = "who's"
639
+ intervals [157]:
640
+ xmin = 47.46
641
+ xmax = 48.01
642
+ text = "dying"
643
+ intervals [158]:
644
+ xmin = 48.01
645
+ xmax = 49.08
646
+ text = ""
647
+ intervals [159]:
648
+ xmin = 49.08
649
+ xmax = 49.33
650
+ text = "there"
651
+ intervals [160]:
652
+ xmin = 49.33
653
+ xmax = 49.39
654
+ text = "are"
655
+ intervals [161]:
656
+ xmin = 49.39
657
+ xmax = 49.46
658
+ text = "a"
659
+ intervals [162]:
660
+ xmin = 49.46
661
+ xmax = 49.82
662
+ text = "lot"
663
+ intervals [163]:
664
+ xmin = 49.82
665
+ xmax = 50.2
666
+ text = "of"
667
+ intervals [164]:
668
+ xmin = 50.2
669
+ xmax = 50.29
670
+ text = ""
671
+ intervals [165]:
672
+ xmin = 50.29
673
+ xmax = 50.88
674
+ text = "enviable"
675
+ intervals [166]:
676
+ xmin = 50.88
677
+ xmax = 51.3
678
+ text = "moments"
679
+ intervals [167]:
680
+ xmin = 51.3
681
+ xmax = 51.37
682
+ text = "in"
683
+ intervals [168]:
684
+ xmin = 51.37
685
+ xmax = 51.53
686
+ text = "this"
687
+ intervals [169]:
688
+ xmin = 51.53
689
+ xmax = 51.77
690
+ text = "film"
691
+ intervals [170]:
692
+ xmin = 51.77
693
+ xmax = 52.01
694
+ text = "such"
695
+ intervals [171]:
696
+ xmin = 52.01
697
+ xmax = 52.2
698
+ text = "as"
699
+ intervals [172]:
700
+ xmin = 52.2
701
+ xmax = 52.3
702
+ text = "the"
703
+ intervals [173]:
704
+ xmin = 52.3
705
+ xmax = 52.57
706
+ text = "simple"
707
+ intervals [174]:
708
+ xmin = 52.57
709
+ xmax = 52.74
710
+ text = "love"
711
+ intervals [175]:
712
+ xmin = 52.74
713
+ xmax = 53.06
714
+ text = "between"
715
+ intervals [176]:
716
+ xmin = 53.06
717
+ xmax = 53.26
718
+ text = "high"
719
+ intervals [177]:
720
+ xmin = 53.26
721
+ xmax = 53.52
722
+ text = "school"
723
+ intervals [178]:
724
+ xmin = 53.52
725
+ xmax = 54.09
726
+ text = "students"
727
+ intervals [179]:
728
+ xmin = 54.09
729
+ xmax = 54.32
730
+ text = ""
731
+ intervals [180]:
732
+ xmin = 54.32
733
+ xmax = 54.56
734
+ text = "every"
735
+ intervals [181]:
736
+ xmin = 54.56
737
+ xmax = 54.93
738
+ text = "time"
739
+ intervals [182]:
740
+ xmin = 54.93
741
+ xmax = 54.96
742
+ text = ""
743
+ intervals [183]:
744
+ xmin = 54.96
745
+ xmax = 55.08
746
+ text = "i"
747
+ intervals [184]:
748
+ xmin = 55.08
749
+ xmax = 55.45
750
+ text = "watch"
751
+ intervals [185]:
752
+ xmin = 55.45
753
+ xmax = 55.68
754
+ text = "this"
755
+ intervals [186]:
756
+ xmin = 55.68
757
+ xmax = 55.89
758
+ text = "movie"
759
+ intervals [187]:
760
+ xmin = 55.89
761
+ xmax = 55.98
762
+ text = "it"
763
+ intervals [188]:
764
+ xmin = 55.98
765
+ xmax = 56.44
766
+ text = "reminds"
767
+ intervals [189]:
768
+ xmin = 56.44
769
+ xmax = 56.55
770
+ text = "me"
771
+ intervals [190]:
772
+ xmin = 56.55
773
+ xmax = 56.63
774
+ text = "of"
775
+ intervals [191]:
776
+ xmin = 56.63
777
+ xmax = 56.7
778
+ text = "a"
779
+ intervals [192]:
780
+ xmin = 56.7
781
+ xmax = 56.99
782
+ text = "time"
783
+ intervals [193]:
784
+ xmin = 56.99
785
+ xmax = 57.08
786
+ text = "that"
787
+ intervals [194]:
788
+ xmin = 57.08
789
+ xmax = 57.13
790
+ text = "i"
791
+ intervals [195]:
792
+ xmin = 57.13
793
+ xmax = 57.23
794
+ text = "was"
795
+ intervals [196]:
796
+ xmin = 57.23
797
+ xmax = 57.29
798
+ text = "in"
799
+ intervals [197]:
800
+ xmin = 57.29
801
+ xmax = 57.53
802
+ text = "high"
803
+ intervals [198]:
804
+ xmin = 57.53
805
+ xmax = 57.88
806
+ text = "school"
807
+ intervals [199]:
808
+ xmin = 57.88
809
+ xmax = 58.03
810
+ text = "and"
811
+ intervals [200]:
812
+ xmin = 58.03
813
+ xmax = 58.25
814
+ text = ""
815
+ intervals [201]:
816
+ xmin = 58.25
817
+ xmax = 58.4
818
+ text = "you"
819
+ intervals [202]:
820
+ xmin = 58.4
821
+ xmax = 58.55
822
+ text = "might"
823
+ intervals [203]:
824
+ xmin = 58.55
825
+ xmax = 59.1
826
+ text = "remember"
827
+ intervals [204]:
828
+ xmin = 59.1
829
+ xmax = 59.29
830
+ text = ""
831
+ intervals [205]:
832
+ xmin = 59.29
833
+ xmax = 59.44
834
+ text = "the"
835
+ intervals [206]:
836
+ xmin = 59.44
837
+ xmax = 59.83
838
+ text = "crush"
839
+ intervals [207]:
840
+ xmin = 59.83
841
+ xmax = 59.94
842
+ text = "you"
843
+ intervals [208]:
844
+ xmin = 59.94
845
+ xmax = 60.16
846
+ text = "had"
847
+ intervals [209]:
848
+ xmin = 60.16
849
+ xmax = 60.27
850
+ text = "in"
851
+ intervals [210]:
852
+ xmin = 60.27
853
+ xmax = 60.74
854
+ text = "school"
855
+ intervals [211]:
856
+ xmin = 60.74
857
+ xmax = 60.9
858
+ text = ""
859
+ intervals [212]:
860
+ xmin = 60.9
861
+ xmax = 61.12
862
+ text = "and"
863
+ intervals [213]:
864
+ xmin = 61.12
865
+ xmax = 61.24
866
+ text = "how"
867
+ intervals [214]:
868
+ xmin = 61.24
869
+ xmax = 61.36
870
+ text = "you"
871
+ intervals [215]:
872
+ xmin = 61.36
873
+ xmax = 61.48
874
+ text = "would"
875
+ intervals [216]:
876
+ xmin = 61.48
877
+ xmax = 61.7
878
+ text = "look"
879
+ intervals [217]:
880
+ xmin = 61.7
881
+ xmax = 61.77
882
+ text = "at"
883
+ intervals [218]:
884
+ xmin = 61.77
885
+ xmax = 62.16
886
+ text = "him"
887
+ intervals [219]:
888
+ xmin = 62.16
889
+ xmax = 62.37
890
+ text = ""
891
+ intervals [220]:
892
+ xmin = 62.37
893
+ xmax = 62.54
894
+ text = "while"
895
+ intervals [221]:
896
+ xmin = 62.54
897
+ xmax = 62.74
898
+ text = "he's"
899
+ intervals [222]:
900
+ xmin = 62.74
901
+ xmax = 63.02
902
+ text = "at"
903
+ intervals [223]:
904
+ xmin = 63.02
905
+ xmax = 63.61
906
+ text = "in"
907
+ intervals [224]:
908
+ xmin = 63.61
909
+ xmax = 64.04
910
+ text = "class"
911
+ intervals [225]:
912
+ xmin = 64.04
913
+ xmax = 64.38
914
+ text = "without"
915
+ intervals [226]:
916
+ xmin = 64.38
917
+ xmax = 64.83
918
+ text = "thinking"
919
+ intervals [227]:
920
+ xmin = 64.83
921
+ xmax = 64.95
922
+ text = "or"
923
+ intervals [228]:
924
+ xmin = 64.95
925
+ xmax = 64.98
926
+ text = ""
927
+ intervals [229]:
928
+ xmin = 64.98
929
+ xmax = 65.27
930
+ text = "wanting"
931
+ intervals [230]:
932
+ xmin = 65.27
933
+ xmax = 65.36
934
+ text = "to"
935
+ intervals [231]:
936
+ xmin = 65.36
937
+ xmax = 65.54
938
+ text = "go"
939
+ intervals [232]:
940
+ xmin = 65.54
941
+ xmax = 65.95
942
+ text = "places"
943
+ intervals [233]:
944
+ xmin = 65.95
945
+ xmax = 66.12
946
+ text = "with"
947
+ intervals [234]:
948
+ xmin = 66.12
949
+ xmax = 66.38
950
+ text = "him"
951
+ intervals [235]:
952
+ xmin = 66.38
953
+ xmax = 67
954
+ text = ""
955
+ item [2]:
956
+ class = "IntervalTier"
957
+ name = "phones"
958
+ xmin = 0.0
959
+ xmax = 67
960
+ intervals: size = 721
961
+ intervals [1]:
962
+ xmin = 0.0
963
+ xmax = 0.53
964
+ text = ""
965
+ intervals [2]:
966
+ xmin = 0.53
967
+ xmax = 0.75
968
+ text = "M"
969
+ intervals [3]:
970
+ xmin = 0.75
971
+ xmax = 0.93
972
+ text = "AY1"
973
+ intervals [4]:
974
+ xmin = 0.93
975
+ xmax = 1.06
976
+ text = "F"
977
+ intervals [5]:
978
+ xmin = 1.06
979
+ xmax = 1.16
980
+ text = "EY1"
981
+ intervals [6]:
982
+ xmin = 1.16
983
+ xmax = 1.23
984
+ text = "V"
985
+ intervals [7]:
986
+ xmin = 1.23
987
+ xmax = 1.26
988
+ text = "ER0"
989
+ intervals [8]:
990
+ xmin = 1.26
991
+ xmax = 1.31
992
+ text = "IH0"
993
+ intervals [9]:
994
+ xmin = 1.31
995
+ xmax = 1.34
996
+ text = "T"
997
+ intervals [10]:
998
+ xmin = 1.34
999
+ xmax = 1.42
1000
+ text = "K"
1001
+ intervals [11]:
1002
+ xmin = 1.42
1003
+ xmax = 1.51
1004
+ text = "AY1"
1005
+ intervals [12]:
1006
+ xmin = 1.51
1007
+ xmax = 1.54
1008
+ text = "N"
1009
+ intervals [13]:
1010
+ xmin = 1.54
1011
+ xmax = 1.57
1012
+ text = "D"
1013
+ intervals [14]:
1014
+ xmin = 1.57
1015
+ xmax = 1.61
1016
+ text = "AH0"
1017
+ intervals [15]:
1018
+ xmin = 1.61
1019
+ xmax = 1.65
1020
+ text = "V"
1021
+ intervals [16]:
1022
+ xmin = 1.65
1023
+ xmax = 1.74
1024
+ text = "M"
1025
+ intervals [17]:
1026
+ xmin = 1.74
1027
+ xmax = 1.8
1028
+ text = "UW1"
1029
+ intervals [18]:
1030
+ xmin = 1.8
1031
+ xmax = 1.9
1032
+ text = "V"
1033
+ intervals [19]:
1034
+ xmin = 1.9
1035
+ xmax = 2.01
1036
+ text = "IY0"
1037
+ intervals [20]:
1038
+ xmin = 2.01
1039
+ xmax = 2.2
1040
+ text = "Z"
1041
+ intervals [21]:
1042
+ xmin = 2.2
1043
+ xmax = 2.35
1044
+ text = "AA1"
1045
+ intervals [22]:
1046
+ xmin = 2.35
1047
+ xmax = 2.45
1048
+ text = "R"
1049
+ intervals [23]:
1050
+ xmin = 2.45
1051
+ xmax = 2.55
1052
+ text = "R"
1053
+ intervals [24]:
1054
+ xmin = 2.55
1055
+ xmax = 2.6
1056
+ text = "OW0"
1057
+ intervals [25]:
1058
+ xmin = 2.6
1059
+ xmax = 2.81
1060
+ text = "M"
1061
+ intervals [26]:
1062
+ xmin = 2.81
1063
+ xmax = 2.93
1064
+ text = "AE1"
1065
+ intervals [27]:
1066
+ xmin = 2.93
1067
+ xmax = 2.99
1068
+ text = "N"
1069
+ intervals [28]:
1070
+ xmin = 2.99
1071
+ xmax = 3.06
1072
+ text = "T"
1073
+ intervals [29]:
1074
+ xmin = 3.06
1075
+ xmax = 3.13
1076
+ text = "IH0"
1077
+ intervals [30]:
1078
+ xmin = 3.13
1079
+ xmax = 3.2
1080
+ text = "K"
1081
+ intervals [31]:
1082
+ xmin = 3.2
1083
+ xmax = 3.28
1084
+ text = "M"
1085
+ intervals [32]:
1086
+ xmin = 3.28
1087
+ xmax = 3.38
1088
+ text = "UW1"
1089
+ intervals [33]:
1090
+ xmin = 3.38
1091
+ xmax = 3.42
1092
+ text = "V"
1093
+ intervals [34]:
1094
+ xmin = 3.42
1095
+ xmax = 3.55
1096
+ text = "IY0"
1097
+ intervals [35]:
1098
+ xmin = 3.55
1099
+ xmax = 3.72
1100
+ text = "Z"
1101
+ intervals [36]:
1102
+ xmin = 3.72
1103
+ xmax = 3.75
1104
+ text = ""
1105
+ intervals [37]:
1106
+ xmin = 3.75
1107
+ xmax = 3.92
1108
+ text = "S"
1109
+ intervals [38]:
1110
+ xmin = 3.92
1111
+ xmax = 3.99
1112
+ text = "AH1"
1113
+ intervals [39]:
1114
+ xmin = 3.99
1115
+ xmax = 4.1
1116
+ text = "CH"
1117
+ intervals [40]:
1118
+ xmin = 4.1
1119
+ xmax = 4.22
1120
+ text = "EH1"
1121
+ intervals [41]:
1122
+ xmin = 4.22
1123
+ xmax = 4.33
1124
+ text = "Z"
1125
+ intervals [42]:
1126
+ xmin = 4.33
1127
+ xmax = 4.47
1128
+ text = "T"
1129
+ intervals [43]:
1130
+ xmin = 4.47
1131
+ xmax = 4.58
1132
+ text = "AY0"
1133
+ intervals [44]:
1134
+ xmin = 4.58
1135
+ xmax = 4.77
1136
+ text = "T"
1137
+ intervals [45]:
1138
+ xmin = 4.77
1139
+ xmax = 4.88
1140
+ text = "AE1"
1141
+ intervals [46]:
1142
+ xmin = 4.88
1143
+ xmax = 4.94
1144
+ text = "N"
1145
+ intervals [47]:
1146
+ xmin = 4.94
1147
+ xmax = 5.04
1148
+ text = "IH0"
1149
+ intervals [48]:
1150
+ xmin = 5.04
1151
+ xmax = 5.23
1152
+ text = "K"
1153
+ intervals [49]:
1154
+ xmin = 5.23
1155
+ xmax = 5.78
1156
+ text = ""
1157
+ intervals [50]:
1158
+ xmin = 5.78
1159
+ xmax = 5.95
1160
+ text = "IH1"
1161
+ intervals [51]:
1162
+ xmin = 5.95
1163
+ xmax = 6.05
1164
+ text = "T"
1165
+ intervals [52]:
1166
+ xmin = 6.05
1167
+ xmax = 6.19
1168
+ text = "S"
1169
+ intervals [53]:
1170
+ xmin = 6.19
1171
+ xmax = 6.46
1172
+ text = "AH0"
1173
+ intervals [54]:
1174
+ xmin = 6.46
1175
+ xmax = 6.49
1176
+ text = ""
1177
+ intervals [55]:
1178
+ xmin = 6.49
1179
+ xmax = 6.55
1180
+ text = "F"
1181
+ intervals [56]:
1182
+ xmin = 6.55
1183
+ xmax = 6.6
1184
+ text = "AE0"
1185
+ intervals [57]:
1186
+ xmin = 6.6
1187
+ xmax = 6.66
1188
+ text = "N"
1189
+ intervals [58]:
1190
+ xmin = 6.66
1191
+ xmax = 6.79
1192
+ text = "T"
1193
+ intervals [59]:
1194
+ xmin = 6.79
1195
+ xmax = 6.92
1196
+ text = "AE1"
1197
+ intervals [60]:
1198
+ xmin = 6.92
1199
+ xmax = 6.99
1200
+ text = "S"
1201
+ intervals [61]:
1202
+ xmin = 6.99
1203
+ xmax = 7.03
1204
+ text = "T"
1205
+ intervals [62]:
1206
+ xmin = 7.03
1207
+ xmax = 7.08
1208
+ text = "IH0"
1209
+ intervals [63]:
1210
+ xmin = 7.08
1211
+ xmax = 7.13
1212
+ text = "K"
1213
+ intervals [64]:
1214
+ xmin = 7.13
1215
+ xmax = 7.21
1216
+ text = "F"
1217
+ intervals [65]:
1218
+ xmin = 7.21
1219
+ xmax = 7.31
1220
+ text = "IH1"
1221
+ intervals [66]:
1222
+ xmin = 7.31
1223
+ xmax = 7.51
1224
+ text = "L"
1225
+ intervals [67]:
1226
+ xmin = 7.51
1227
+ xmax = 7.56
1228
+ text = "M"
1229
+ intervals [68]:
1230
+ xmin = 7.56
1231
+ xmax = 7.71
1232
+ text = "IH1"
1233
+ intervals [69]:
1234
+ xmin = 7.71
1235
+ xmax = 7.77
1236
+ text = "T"
1237
+ intervals [70]:
1238
+ xmin = 7.77
1239
+ xmax = 7.86
1240
+ text = "K"
1241
+ intervals [71]:
1242
+ xmin = 7.86
1243
+ xmax = 7.96
1244
+ text = "AE1"
1245
+ intervals [72]:
1246
+ xmin = 7.96
1247
+ xmax = 8.02
1248
+ text = "P"
1249
+ intervals [73]:
1250
+ xmin = 8.02
1251
+ xmax = 8.1
1252
+ text = "CH"
1253
+ intervals [74]:
1254
+ xmin = 8.1
1255
+ xmax = 8.16
1256
+ text = "ER0"
1257
+ intervals [75]:
1258
+ xmin = 8.16
1259
+ xmax = 8.28
1260
+ text = "D"
1261
+ intervals [76]:
1262
+ xmin = 8.28
1263
+ xmax = 8.4
1264
+ text = "M"
1265
+ intervals [77]:
1266
+ xmin = 8.4
1267
+ xmax = 8.46
1268
+ text = "EH1"
1269
+ intervals [78]:
1270
+ xmin = 8.46
1271
+ xmax = 8.53
1272
+ text = "N"
1273
+ intervals [79]:
1274
+ xmin = 8.53
1275
+ xmax = 8.73
1276
+ text = "IY0"
1277
+ intervals [80]:
1278
+ xmin = 8.73
1279
+ xmax = 8.81
1280
+ text = "Y"
1281
+ intervals [81]:
1282
+ xmin = 8.81
1283
+ xmax = 8.99
1284
+ text = "AH1"
1285
+ intervals [82]:
1286
+ xmin = 8.99
1287
+ xmax = 9.1
1288
+ text = "NG"
1289
+ intervals [83]:
1290
+ xmin = 9.1
1291
+ xmax = 9.18
1292
+ text = "P"
1293
+ intervals [84]:
1294
+ xmin = 9.18
1295
+ xmax = 9.26
1296
+ text = "IY1"
1297
+ intervals [85]:
1298
+ xmin = 9.26
1299
+ xmax = 9.31
1300
+ text = "P"
1301
+ intervals [86]:
1302
+ xmin = 9.31
1303
+ xmax = 9.34
1304
+ text = "AH0"
1305
+ intervals [87]:
1306
+ xmin = 9.34
1307
+ xmax = 9.39
1308
+ text = "L"
1309
+ intervals [88]:
1310
+ xmin = 9.39
1311
+ xmax = 9.44
1312
+ text = "Z"
1313
+ intervals [89]:
1314
+ xmin = 9.44
1315
+ xmax = 9.5
1316
+ text = "HH"
1317
+ intervals [90]:
1318
+ xmin = 9.5
1319
+ xmax = 9.57
1320
+ text = "AA1"
1321
+ intervals [91]:
1322
+ xmin = 9.57
1323
+ xmax = 9.68
1324
+ text = "R"
1325
+ intervals [92]:
1326
+ xmin = 9.68
1327
+ xmax = 9.73
1328
+ text = "T"
1329
+ intervals [93]:
1330
+ xmin = 9.73
1331
+ xmax = 9.79
1332
+ text = "S"
1333
+ intervals [94]:
1334
+ xmin = 9.79
1335
+ xmax = 9.88
1336
+ text = "W"
1337
+ intervals [95]:
1338
+ xmin = 9.88
1339
+ xmax = 9.94
1340
+ text = "IH1"
1341
+ intervals [96]:
1342
+ xmin = 9.94
1343
+ xmax = 10.02
1344
+ text = "DH"
1345
+ intervals [97]:
1346
+ xmin = 10.02
1347
+ xmax = 10.1
1348
+ text = "IH0"
1349
+ intervals [98]:
1350
+ xmin = 10.1
1351
+ xmax = 10.13
1352
+ text = "T"
1353
+ intervals [99]:
1354
+ xmin = 10.13
1355
+ xmax = 10.17
1356
+ text = "S"
1357
+ intervals [100]:
1358
+ xmin = 10.17
1359
+ xmax = 10.28
1360
+ text = "AH0"
1361
+ intervals [101]:
1362
+ xmin = 10.28
1363
+ xmax = 10.36
1364
+ text = "M"
1365
+ intervals [102]:
1366
+ xmin = 10.36
1367
+ xmax = 10.47
1368
+ text = "EY1"
1369
+ intervals [103]:
1370
+ xmin = 10.47
1371
+ xmax = 10.53
1372
+ text = "Z"
1373
+ intervals [104]:
1374
+ xmin = 10.53
1375
+ xmax = 10.59
1376
+ text = "IH0"
1377
+ intervals [105]:
1378
+ xmin = 10.59
1379
+ xmax = 10.65
1380
+ text = "NG"
1381
+ intervals [106]:
1382
+ xmin = 10.65
1383
+ xmax = 10.7
1384
+ text = "M"
1385
+ intervals [107]:
1386
+ xmin = 10.7
1387
+ xmax = 10.78
1388
+ text = "Y"
1389
+ intervals [108]:
1390
+ xmin = 10.78
1391
+ xmax = 10.81
1392
+ text = "UW1"
1393
+ intervals [109]:
1394
+ xmin = 10.81
1395
+ xmax = 10.9
1396
+ text = "Z"
1397
+ intervals [110]:
1398
+ xmin = 10.9
1399
+ xmax = 10.98
1400
+ text = "IH0"
1401
+ intervals [111]:
1402
+ xmin = 10.98
1403
+ xmax = 11.12
1404
+ text = "K"
1405
+ intervals [112]:
1406
+ xmin = 11.12
1407
+ xmax = 11.21
1408
+ text = "AE1"
1409
+ intervals [113]:
1410
+ xmin = 11.21
1411
+ xmax = 11.27
1412
+ text = "N"
1413
+ intervals [114]:
1414
+ xmin = 11.27
1415
+ xmax = 11.36
1416
+ text = "D"
1417
+ intervals [115]:
1418
+ xmin = 11.36
1419
+ xmax = 11.47
1420
+ text = "S"
1421
+ intervals [116]:
1422
+ xmin = 11.47
1423
+ xmax = 11.52
1424
+ text = "EH2"
1425
+ intervals [117]:
1426
+ xmin = 11.52
1427
+ xmax = 11.59
1428
+ text = "N"
1429
+ intervals [118]:
1430
+ xmin = 11.59
1431
+ xmax = 11.64
1432
+ text = "T"
1433
+ intervals [119]:
1434
+ xmin = 11.64
1435
+ xmax = 11.69
1436
+ text = "AH0"
1437
+ intervals [120]:
1438
+ xmin = 11.69
1439
+ xmax = 11.74
1440
+ text = "M"
1441
+ intervals [121]:
1442
+ xmin = 11.74
1443
+ xmax = 11.78
1444
+ text = "EH1"
1445
+ intervals [122]:
1446
+ xmin = 11.78
1447
+ xmax = 11.81
1448
+ text = "N"
1449
+ intervals [123]:
1450
+ xmin = 11.81
1451
+ xmax = 11.85
1452
+ text = "T"
1453
+ intervals [124]:
1454
+ xmin = 11.85
1455
+ xmax = 11.88
1456
+ text = "AH0"
1457
+ intervals [125]:
1458
+ xmin = 11.88
1459
+ xmax = 11.92
1460
+ text = "L"
1461
+ intervals [126]:
1462
+ xmin = 11.92
1463
+ xmax = 11.99
1464
+ text = "P"
1465
+ intervals [127]:
1466
+ xmin = 11.99
1467
+ xmax = 12.04
1468
+ text = "L"
1469
+ intervals [128]:
1470
+ xmin = 12.04
1471
+ xmax = 12.23
1472
+ text = "AA1"
1473
+ intervals [129]:
1474
+ xmin = 12.23
1475
+ xmax = 12.31
1476
+ text = "T"
1477
+ intervals [130]:
1478
+ xmin = 12.31
1479
+ xmax = 12.47
1480
+ text = "S"
1481
+ intervals [131]:
1482
+ xmin = 12.47
1483
+ xmax = 12.84
1484
+ text = ""
1485
+ intervals [132]:
1486
+ xmin = 12.84
1487
+ xmax = 12.92
1488
+ text = "W"
1489
+ intervals [133]:
1490
+ xmin = 12.92
1491
+ xmax = 12.95
1492
+ text = "EH1"
1493
+ intervals [134]:
1494
+ xmin = 12.95
1495
+ xmax = 12.98
1496
+ text = "N"
1497
+ intervals [135]:
1498
+ xmin = 12.98
1499
+ xmax = 13.12
1500
+ text = "AY1"
1501
+ intervals [136]:
1502
+ xmin = 13.12
1503
+ xmax = 13.16
1504
+ text = "TH"
1505
+ intervals [137]:
1506
+ xmin = 13.16
1507
+ xmax = 13.22
1508
+ text = "IH1"
1509
+ intervals [138]:
1510
+ xmin = 13.22
1511
+ xmax = 13.25
1512
+ text = "NG"
1513
+ intervals [139]:
1514
+ xmin = 13.25
1515
+ xmax = 13.28
1516
+ text = "K"
1517
+ intervals [140]:
1518
+ xmin = 13.28
1519
+ xmax = 13.32
1520
+ text = "AH0"
1521
+ intervals [141]:
1522
+ xmin = 13.32
1523
+ xmax = 13.35
1524
+ text = "V"
1525
+ intervals [142]:
1526
+ xmin = 13.35
1527
+ xmax = 13.38
1528
+ text = "DH"
1529
+ intervals [143]:
1530
+ xmin = 13.38
1531
+ xmax = 13.42
1532
+ text = "AH0"
1533
+ intervals [144]:
1534
+ xmin = 13.42
1535
+ xmax = 13.46
1536
+ text = "M"
1537
+ intervals [145]:
1538
+ xmin = 13.46
1539
+ xmax = 13.52
1540
+ text = "UW1"
1541
+ intervals [146]:
1542
+ xmin = 13.52
1543
+ xmax = 13.58
1544
+ text = "V"
1545
+ intervals [147]:
1546
+ xmin = 13.58
1547
+ xmax = 13.62
1548
+ text = "IY0"
1549
+ intervals [148]:
1550
+ xmin = 13.62
1551
+ xmax = 13.69
1552
+ text = "T"
1553
+ intervals [149]:
1554
+ xmin = 13.69
1555
+ xmax = 13.79
1556
+ text = "AY0"
1557
+ intervals [150]:
1558
+ xmin = 13.79
1559
+ xmax = 13.89
1560
+ text = "T"
1561
+ intervals [151]:
1562
+ xmin = 13.89
1563
+ xmax = 13.96
1564
+ text = "AE1"
1565
+ intervals [152]:
1566
+ xmin = 13.96
1567
+ xmax = 14.02
1568
+ text = "N"
1569
+ intervals [153]:
1570
+ xmin = 14.02
1571
+ xmax = 14.17
1572
+ text = "IH0"
1573
+ intervals [154]:
1574
+ xmin = 14.17
1575
+ xmax = 14.2
1576
+ text = "K"
1577
+ intervals [155]:
1578
+ xmin = 14.2
1579
+ xmax = 14.23
1580
+ text = ""
1581
+ intervals [156]:
1582
+ xmin = 14.23
1583
+ xmax = 14.34
1584
+ text = "DH"
1585
+ intervals [157]:
1586
+ xmin = 14.34
1587
+ xmax = 14.42
1588
+ text = "AH1"
1589
+ intervals [158]:
1590
+ xmin = 14.42
1591
+ xmax = 14.61
1592
+ text = "W"
1593
+ intervals [159]:
1594
+ xmin = 14.61
1595
+ xmax = 14.85
1596
+ text = "ER1"
1597
+ intervals [160]:
1598
+ xmin = 14.85
1599
+ xmax = 14.92
1600
+ text = "D"
1601
+ intervals [161]:
1602
+ xmin = 14.92
1603
+ xmax = 14.95
1604
+ text = "DH"
1605
+ intervals [162]:
1606
+ xmin = 14.95
1607
+ xmax = 15.02
1608
+ text = "AH0"
1609
+ intervals [163]:
1610
+ xmin = 15.02
1611
+ xmax = 15.06
1612
+ text = "T"
1613
+ intervals [164]:
1614
+ xmin = 15.06
1615
+ xmax = 15.13
1616
+ text = "K"
1617
+ intervals [165]:
1618
+ xmin = 15.13
1619
+ xmax = 15.19
1620
+ text = "AH1"
1621
+ intervals [166]:
1622
+ xmin = 15.19
1623
+ xmax = 15.24
1624
+ text = "M"
1625
+ intervals [167]:
1626
+ xmin = 15.24
1627
+ xmax = 15.3
1628
+ text = "Z"
1629
+ intervals [168]:
1630
+ xmin = 15.3
1631
+ xmax = 15.35
1632
+ text = "T"
1633
+ intervals [169]:
1634
+ xmin = 15.35
1635
+ xmax = 15.39
1636
+ text = "AH0"
1637
+ intervals [170]:
1638
+ xmin = 15.39
1639
+ xmax = 15.44
1640
+ text = "M"
1641
+ intervals [171]:
1642
+ xmin = 15.44
1643
+ xmax = 15.5
1644
+ text = "AY1"
1645
+ intervals [172]:
1646
+ xmin = 15.5
1647
+ xmax = 15.61
1648
+ text = "M"
1649
+ intervals [173]:
1650
+ xmin = 15.61
1651
+ xmax = 15.85
1652
+ text = "AY1"
1653
+ intervals [174]:
1654
+ xmin = 15.85
1655
+ xmax = 15.88
1656
+ text = "N"
1657
+ intervals [175]:
1658
+ xmin = 15.88
1659
+ xmax = 15.91
1660
+ text = "D"
1661
+ intervals [176]:
1662
+ xmin = 15.91
1663
+ xmax = 15.94
1664
+ text = "M"
1665
+ intervals [177]:
1666
+ xmin = 15.94
1667
+ xmax = 15.97
1668
+ text = "AY1"
1669
+ intervals [178]:
1670
+ xmin = 15.97
1671
+ xmax = 16.0
1672
+ text = "N"
1673
+ intervals [179]:
1674
+ xmin = 16.0
1675
+ xmax = 16.06
1676
+ text = "D"
1677
+ intervals [180]:
1678
+ xmin = 16.06
1679
+ xmax = 16.41
1680
+ text = ""
1681
+ intervals [181]:
1682
+ xmin = 16.41
1683
+ xmax = 16.54
1684
+ text = "T"
1685
+ intervals [182]:
1686
+ xmin = 16.54
1687
+ xmax = 16.6
1688
+ text = "IH0"
1689
+ intervals [183]:
1690
+ xmin = 16.6
1691
+ xmax = 16.69
1692
+ text = "M"
1693
+ intervals [184]:
1694
+ xmin = 16.69
1695
+ xmax = 16.85
1696
+ text = "AY1"
1697
+ intervals [185]:
1698
+ xmin = 16.85
1699
+ xmax = 16.95
1700
+ text = "Z"
1701
+ intervals [186]:
1702
+ xmin = 16.95
1703
+ xmax = 16.99
1704
+ text = "IH0"
1705
+ intervals [187]:
1706
+ xmin = 16.99
1707
+ xmax = 17.07
1708
+ text = "Z"
1709
+ intervals [188]:
1710
+ xmin = 17.07
1711
+ xmax = 17.11
1712
+ text = "DH"
1713
+ intervals [189]:
1714
+ xmin = 17.11
1715
+ xmax = 17.15
1716
+ text = "AH1"
1717
+ intervals [190]:
1718
+ xmin = 17.15
1719
+ xmax = 17.24
1720
+ text = "HH"
1721
+ intervals [191]:
1722
+ xmin = 17.24
1723
+ xmax = 17.32
1724
+ text = "OW1"
1725
+ intervals [192]:
1726
+ xmin = 17.32
1727
+ xmax = 17.39
1728
+ text = "L"
1729
+ intervals [193]:
1730
+ xmin = 17.39
1731
+ xmax = 17.48
1732
+ text = "F"
1733
+ intervals [194]:
1734
+ xmin = 17.48
1735
+ xmax = 17.57
1736
+ text = "IH1"
1737
+ intervals [195]:
1738
+ xmin = 17.57
1739
+ xmax = 17.68
1740
+ text = "L"
1741
+ intervals [196]:
1742
+ xmin = 17.68
1743
+ xmax = 17.94
1744
+ text = "M"
1745
+ intervals [197]:
1746
+ xmin = 17.94
1747
+ xmax = 17.97
1748
+ text = ""
1749
+ intervals [198]:
1750
+ xmin = 17.97
1751
+ xmax = 18.06
1752
+ text = "W"
1753
+ intervals [199]:
1754
+ xmin = 18.06
1755
+ xmax = 18.12
1756
+ text = "UH1"
1757
+ intervals [200]:
1758
+ xmin = 18.12
1759
+ xmax = 18.18
1760
+ text = "D"
1761
+ intervals [201]:
1762
+ xmin = 18.18
1763
+ xmax = 18.24
1764
+ text = "B"
1765
+ intervals [202]:
1766
+ xmin = 18.24
1767
+ xmax = 18.62
1768
+ text = "IY1"
1769
+ intervals [203]:
1770
+ xmin = 18.62
1771
+ xmax = 19.09
1772
+ text = ""
1773
+ intervals [204]:
1774
+ xmin = 19.09
1775
+ xmax = 19.34
1776
+ text = "L"
1777
+ intervals [205]:
1778
+ xmin = 19.34
1779
+ xmax = 19.51
1780
+ text = "AH1"
1781
+ intervals [206]:
1782
+ xmin = 19.51
1783
+ xmax = 19.94
1784
+ text = "V"
1785
+ intervals [207]:
1786
+ xmin = 19.94
1787
+ xmax = 20.07
1788
+ text = ""
1789
+ intervals [208]:
1790
+ xmin = 20.07
1791
+ xmax = 20.18
1792
+ text = "IH1"
1793
+ intervals [209]:
1794
+ xmin = 20.18
1795
+ xmax = 20.24
1796
+ text = "T"
1797
+ intervals [210]:
1798
+ xmin = 20.24
1799
+ xmax = 20.27
1800
+ text = "S"
1801
+ intervals [211]:
1802
+ xmin = 20.27
1803
+ xmax = 20.36
1804
+ text = "AH0"
1805
+ intervals [212]:
1806
+ xmin = 20.36
1807
+ xmax = 20.59
1808
+ text = "K"
1809
+ intervals [213]:
1810
+ xmin = 20.59
1811
+ xmax = 20.74
1812
+ text = "AY1"
1813
+ intervals [214]:
1814
+ xmin = 20.74
1815
+ xmax = 20.79
1816
+ text = "N"
1817
+ intervals [215]:
1818
+ xmin = 20.79
1819
+ xmax = 20.83
1820
+ text = "D"
1821
+ intervals [216]:
1822
+ xmin = 20.83
1823
+ xmax = 20.87
1824
+ text = "AH0"
1825
+ intervals [217]:
1826
+ xmin = 20.87
1827
+ xmax = 20.98
1828
+ text = "V"
1829
+ intervals [218]:
1830
+ xmin = 20.98
1831
+ xmax = 21.04
1832
+ text = "TH"
1833
+ intervals [219]:
1834
+ xmin = 21.04
1835
+ xmax = 21.13
1836
+ text = "IH1"
1837
+ intervals [220]:
1838
+ xmin = 21.13
1839
+ xmax = 21.25
1840
+ text = "NG"
1841
+ intervals [221]:
1842
+ xmin = 21.25
1843
+ xmax = 21.31
1844
+ text = "DH"
1845
+ intervals [222]:
1846
+ xmin = 21.31
1847
+ xmax = 21.37
1848
+ text = "AE1"
1849
+ intervals [223]:
1850
+ xmin = 21.37
1851
+ xmax = 21.43
1852
+ text = "T"
1853
+ intervals [224]:
1854
+ xmin = 21.43
1855
+ xmax = 21.54
1856
+ text = "M"
1857
+ intervals [225]:
1858
+ xmin = 21.54
1859
+ xmax = 21.64
1860
+ text = "EY1"
1861
+ intervals [226]:
1862
+ xmin = 21.64
1863
+ xmax = 21.68
1864
+ text = "K"
1865
+ intervals [227]:
1866
+ xmin = 21.68
1867
+ xmax = 21.8
1868
+ text = "S"
1869
+ intervals [228]:
1870
+ xmin = 21.8
1871
+ xmax = 21.87
1872
+ text = "Y"
1873
+ intervals [229]:
1874
+ xmin = 21.87
1875
+ xmax = 22.28
1876
+ text = "UW1"
1877
+ intervals [230]:
1878
+ xmin = 22.28
1879
+ xmax = 22.31
1880
+ text = ""
1881
+ intervals [231]:
1882
+ xmin = 22.31
1883
+ xmax = 22.63
1884
+ text = "M"
1885
+ intervals [232]:
1886
+ xmin = 22.63
1887
+ xmax = 22.7
1888
+ text = "EY1"
1889
+ intervals [233]:
1890
+ xmin = 22.7
1891
+ xmax = 22.75
1892
+ text = "K"
1893
+ intervals [234]:
1894
+ xmin = 22.75
1895
+ xmax = 22.8
1896
+ text = "S"
1897
+ intervals [235]:
1898
+ xmin = 22.8
1899
+ xmax = 22.84
1900
+ text = "DH"
1901
+ intervals [236]:
1902
+ xmin = 22.84
1903
+ xmax = 22.91
1904
+ text = "AH0"
1905
+ intervals [237]:
1906
+ xmin = 22.91
1907
+ xmax = 23.0
1908
+ text = "W"
1909
+ intervals [238]:
1910
+ xmin = 23.0
1911
+ xmax = 23.08
1912
+ text = "ER1"
1913
+ intervals [239]:
1914
+ xmin = 23.08
1915
+ xmax = 23.18
1916
+ text = "L"
1917
+ intervals [240]:
1918
+ xmin = 23.18
1919
+ xmax = 23.21
1920
+ text = "D"
1921
+ intervals [241]:
1922
+ xmin = 23.21
1923
+ xmax = 23.27
1924
+ text = "G"
1925
+ intervals [242]:
1926
+ xmin = 23.27
1927
+ xmax = 23.38
1928
+ text = "OW1"
1929
+ intervals [243]:
1930
+ xmin = 23.38
1931
+ xmax = 23.48
1932
+ text = "R"
1933
+ intervals [244]:
1934
+ xmin = 23.48
1935
+ xmax = 23.68
1936
+ text = "AW1"
1937
+ intervals [245]:
1938
+ xmin = 23.68
1939
+ xmax = 23.75
1940
+ text = "N"
1941
+ intervals [246]:
1942
+ xmin = 23.75
1943
+ xmax = 23.87
1944
+ text = "D"
1945
+ intervals [247]:
1946
+ xmin = 23.87
1947
+ xmax = 24.08
1948
+ text = ""
1949
+ intervals [248]:
1950
+ xmin = 24.08
1951
+ xmax = 24.27
1952
+ text = "W"
1953
+ intervals [249]:
1954
+ xmin = 24.27
1955
+ xmax = 24.36
1956
+ text = "AA1"
1957
+ intervals [250]:
1958
+ xmin = 24.36
1959
+ xmax = 24.46
1960
+ text = "CH"
1961
+ intervals [251]:
1962
+ xmin = 24.46
1963
+ xmax = 24.54
1964
+ text = "IH0"
1965
+ intervals [252]:
1966
+ xmin = 24.54
1967
+ xmax = 24.6
1968
+ text = "NG"
1969
+ intervals [253]:
1970
+ xmin = 24.6
1971
+ xmax = 24.65
1972
+ text = "DH"
1973
+ intervals [254]:
1974
+ xmin = 24.65
1975
+ xmax = 24.72
1976
+ text = "IY1"
1977
+ intervals [255]:
1978
+ xmin = 24.72
1979
+ xmax = 24.8
1980
+ text = "Z"
1981
+ intervals [256]:
1982
+ xmin = 24.8
1983
+ xmax = 24.9
1984
+ text = "K"
1985
+ intervals [257]:
1986
+ xmin = 24.9
1987
+ xmax = 25.05
1988
+ text = "AY1"
1989
+ intervals [258]:
1990
+ xmin = 25.05
1991
+ xmax = 25.12
1992
+ text = "N"
1993
+ intervals [259]:
1994
+ xmin = 25.12
1995
+ xmax = 25.18
1996
+ text = "Z"
1997
+ intervals [260]:
1998
+ xmin = 25.18
1999
+ xmax = 25.21
2000
+ text = "AH0"
2001
+ intervals [261]:
2002
+ xmin = 25.21
2003
+ xmax = 25.29
2004
+ text = "V"
2005
+ intervals [262]:
2006
+ xmin = 25.29
2007
+ xmax = 25.36
2008
+ text = "R"
2009
+ intervals [263]:
2010
+ xmin = 25.36
2011
+ xmax = 25.39
2012
+ text = "OW0"
2013
+ intervals [264]:
2014
+ xmin = 25.39
2015
+ xmax = 25.5
2016
+ text = "M"
2017
+ intervals [265]:
2018
+ xmin = 25.5
2019
+ xmax = 25.56
2020
+ text = "AE1"
2021
+ intervals [266]:
2022
+ xmin = 25.56
2023
+ xmax = 25.6
2024
+ text = "N"
2025
+ intervals [267]:
2026
+ xmin = 25.6
2027
+ xmax = 25.65
2028
+ text = "T"
2029
+ intervals [268]:
2030
+ xmin = 25.65
2031
+ xmax = 25.75
2032
+ text = "IH0"
2033
+ intervals [269]:
2034
+ xmin = 25.75
2035
+ xmax = 25.83
2036
+ text = "K"
2037
+ intervals [270]:
2038
+ xmin = 25.83
2039
+ xmax = 25.9
2040
+ text = "M"
2041
+ intervals [271]:
2042
+ xmin = 25.9
2043
+ xmax = 25.99
2044
+ text = "UW1"
2045
+ intervals [272]:
2046
+ xmin = 25.99
2047
+ xmax = 26.06
2048
+ text = "V"
2049
+ intervals [273]:
2050
+ xmin = 26.06
2051
+ xmax = 26.14
2052
+ text = "IY0"
2053
+ intervals [274]:
2054
+ xmin = 26.14
2055
+ xmax = 26.23
2056
+ text = "Z"
2057
+ intervals [275]:
2058
+ xmin = 26.23
2059
+ xmax = 26.34
2060
+ text = "IH1"
2061
+ intervals [276]:
2062
+ xmin = 26.34
2063
+ xmax = 26.43
2064
+ text = "Z"
2065
+ intervals [277]:
2066
+ xmin = 26.43
2067
+ xmax = 26.64
2068
+ text = "JH"
2069
+ intervals [278]:
2070
+ xmin = 26.64
2071
+ xmax = 26.73
2072
+ text = "IH0"
2073
+ intervals [279]:
2074
+ xmin = 26.73
2075
+ xmax = 26.82
2076
+ text = "S"
2077
+ intervals [280]:
2078
+ xmin = 26.82
2079
+ xmax = 26.86
2080
+ text = "T"
2081
+ intervals [281]:
2082
+ xmin = 26.86
2083
+ xmax = 26.92
2084
+ text = "L"
2085
+ intervals [282]:
2086
+ xmin = 26.92
2087
+ xmax = 27.04
2088
+ text = "AY1"
2089
+ intervals [283]:
2090
+ xmin = 27.04
2091
+ xmax = 27.07
2092
+ text = "K"
2093
+ intervals [284]:
2094
+ xmin = 27.07
2095
+ xmax = 27.26
2096
+ text = "R"
2097
+ intervals [285]:
2098
+ xmin = 27.26
2099
+ xmax = 27.33
2100
+ text = "IY1"
2101
+ intervals [286]:
2102
+ xmin = 27.33
2103
+ xmax = 27.36
2104
+ text = "D"
2105
+ intervals [287]:
2106
+ xmin = 27.36
2107
+ xmax = 27.43
2108
+ text = "IH0"
2109
+ intervals [288]:
2110
+ xmin = 27.43
2111
+ xmax = 27.49
2112
+ text = "NG"
2113
+ intervals [289]:
2114
+ xmin = 27.49
2115
+ xmax = 27.56
2116
+ text = "AH0"
2117
+ intervals [290]:
2118
+ xmin = 27.56
2119
+ xmax = 27.63
2120
+ text = "B"
2121
+ intervals [291]:
2122
+ xmin = 27.63
2123
+ xmax = 27.77
2124
+ text = "UH1"
2125
+ intervals [292]:
2126
+ xmin = 27.77
2127
+ xmax = 27.98
2128
+ text = "K"
2129
+ intervals [293]:
2130
+ xmin = 27.98
2131
+ xmax = 28.11
2132
+ text = ""
2133
+ intervals [294]:
2134
+ xmin = 28.11
2135
+ xmax = 28.21
2136
+ text = "DH"
2137
+ intervals [295]:
2138
+ xmin = 28.21
2139
+ xmax = 28.25
2140
+ text = "AH0"
2141
+ intervals [296]:
2142
+ xmin = 28.25
2143
+ xmax = 28.29
2144
+ text = "T"
2145
+ intervals [297]:
2146
+ xmin = 28.29
2147
+ xmax = 28.38
2148
+ text = "T"
2149
+ intervals [298]:
2150
+ xmin = 28.38
2151
+ xmax = 28.44
2152
+ text = "IY1"
2153
+ intervals [299]:
2154
+ xmin = 28.44
2155
+ xmax = 28.52
2156
+ text = "CH"
2157
+ intervals [300]:
2158
+ xmin = 28.52
2159
+ xmax = 28.57
2160
+ text = "IH0"
2161
+ intervals [301]:
2162
+ xmin = 28.57
2163
+ xmax = 28.65
2164
+ text = "Z"
2165
+ intervals [302]:
2166
+ xmin = 28.65
2167
+ xmax = 28.69
2168
+ text = "M"
2169
+ intervals [303]:
2170
+ xmin = 28.69
2171
+ xmax = 28.78
2172
+ text = "IY1"
2173
+ intervals [304]:
2174
+ xmin = 28.78
2175
+ xmax = 28.91
2176
+ text = "HH"
2177
+ intervals [305]:
2178
+ xmin = 28.91
2179
+ xmax = 28.99
2180
+ text = "AW1"
2181
+ intervals [306]:
2182
+ xmin = 28.99
2183
+ xmax = 29.08
2184
+ text = "T"
2185
+ intervals [307]:
2186
+ xmin = 29.08
2187
+ xmax = 29.19
2188
+ text = "AH0"
2189
+ intervals [308]:
2190
+ xmin = 29.19
2191
+ xmax = 29.27
2192
+ text = "L"
2193
+ intervals [309]:
2194
+ xmin = 29.27
2195
+ xmax = 29.52
2196
+ text = "AH1"
2197
+ intervals [310]:
2198
+ xmin = 29.52
2199
+ xmax = 29.61
2200
+ text = "V"
2201
+ intervals [311]:
2202
+ xmin = 29.61
2203
+ xmax = 29.78
2204
+ text = "AE1"
2205
+ intervals [312]:
2206
+ xmin = 29.78
2207
+ xmax = 29.86
2208
+ text = "N"
2209
+ intervals [313]:
2210
+ xmin = 29.86
2211
+ xmax = 29.93
2212
+ text = "D"
2213
+ intervals [314]:
2214
+ xmin = 29.93
2215
+ xmax = 29.97
2216
+ text = "B"
2217
+ intervals [315]:
2218
+ xmin = 29.97
2219
+ xmax = 30.09
2220
+ text = "IY1"
2221
+ intervals [316]:
2222
+ xmin = 30.09
2223
+ xmax = 30.21
2224
+ text = "L"
2225
+ intervals [317]:
2226
+ xmin = 30.21
2227
+ xmax = 30.33
2228
+ text = "AH1"
2229
+ intervals [318]:
2230
+ xmin = 30.33
2231
+ xmax = 30.43
2232
+ text = "V"
2233
+ intervals [319]:
2234
+ xmin = 30.43
2235
+ xmax = 30.53
2236
+ text = "D"
2237
+ intervals [320]:
2238
+ xmin = 30.53
2239
+ xmax = 30.96
2240
+ text = ""
2241
+ intervals [321]:
2242
+ xmin = 30.96
2243
+ xmax = 31.09
2244
+ text = "M"
2245
+ intervals [322]:
2246
+ xmin = 31.09
2247
+ xmax = 31.14
2248
+ text = "AO0"
2249
+ intervals [323]:
2250
+ xmin = 31.14
2251
+ xmax = 31.22
2252
+ text = "R"
2253
+ intervals [324]:
2254
+ xmin = 31.22
2255
+ xmax = 31.5
2256
+ text = "OW1"
2257
+ intervals [325]:
2258
+ xmin = 31.5
2259
+ xmax = 31.53
2260
+ text = "V"
2261
+ intervals [326]:
2262
+ xmin = 31.53
2263
+ xmax = 31.68
2264
+ text = "ER0"
2265
+ intervals [327]:
2266
+ xmin = 31.68
2267
+ xmax = 31.74
2268
+ text = "W"
2269
+ intervals [328]:
2270
+ xmin = 31.74
2271
+ xmax = 31.81
2272
+ text = "IY1"
2273
+ intervals [329]:
2274
+ xmin = 31.81
2275
+ xmax = 32.01
2276
+ text = ""
2277
+ intervals [330]:
2278
+ xmin = 32.01
2279
+ xmax = 32.13
2280
+ text = "K"
2281
+ intervals [331]:
2282
+ xmin = 32.13
2283
+ xmax = 32.39
2284
+ text = "AE1"
2285
+ intervals [332]:
2286
+ xmin = 32.39
2287
+ xmax = 32.51
2288
+ text = "N"
2289
+ intervals [333]:
2290
+ xmin = 32.51
2291
+ xmax = 32.56
2292
+ text = ""
2293
+ intervals [334]:
2294
+ xmin = 32.56
2295
+ xmax = 32.65
2296
+ text = "L"
2297
+ intervals [335]:
2298
+ xmin = 32.65
2299
+ xmax = 32.68
2300
+ text = "ER1"
2301
+ intervals [336]:
2302
+ xmin = 32.68
2303
+ xmax = 32.72
2304
+ text = "N"
2305
+ intervals [337]:
2306
+ xmin = 32.72
2307
+ xmax = 33.02
2308
+ text = "W"
2309
+ intervals [338]:
2310
+ xmin = 33.02
2311
+ xmax = 33.09
2312
+ text = "IY1"
2313
+ intervals [339]:
2314
+ xmin = 33.09
2315
+ xmax = 33.16
2316
+ text = "K"
2317
+ intervals [340]:
2318
+ xmin = 33.16
2319
+ xmax = 33.21
2320
+ text = "AH0"
2321
+ intervals [341]:
2322
+ xmin = 33.21
2323
+ xmax = 33.25
2324
+ text = "N"
2325
+ intervals [342]:
2326
+ xmin = 33.25
2327
+ xmax = 33.4
2328
+ text = "L"
2329
+ intervals [343]:
2330
+ xmin = 33.4
2331
+ xmax = 33.58
2332
+ text = "ER1"
2333
+ intervals [344]:
2334
+ xmin = 33.58
2335
+ xmax = 34.05
2336
+ text = "N"
2337
+ intervals [345]:
2338
+ xmin = 34.05
2339
+ xmax = 34.2
2340
+ text = ""
2341
+ intervals [346]:
2342
+ xmin = 34.2
2343
+ xmax = 34.91
2344
+ text = "M"
2345
+ intervals [347]:
2346
+ xmin = 34.91
2347
+ xmax = 35.05
2348
+ text = "AO1"
2349
+ intervals [348]:
2350
+ xmin = 35.05
2351
+ xmax = 35.12
2352
+ text = "R"
2353
+ intervals [349]:
2354
+ xmin = 35.12
2355
+ xmax = 35.23
2356
+ text = "F"
2357
+ intervals [350]:
2358
+ xmin = 35.23
2359
+ xmax = 35.32
2360
+ text = "R"
2361
+ intervals [351]:
2362
+ xmin = 35.32
2363
+ xmax = 35.36
2364
+ text = "AH1"
2365
+ intervals [352]:
2366
+ xmin = 35.36
2367
+ xmax = 35.44
2368
+ text = "M"
2369
+ intervals [353]:
2370
+ xmin = 35.44
2371
+ xmax = 35.56
2372
+ text = "IH0"
2373
+ intervals [354]:
2374
+ xmin = 35.56
2375
+ xmax = 35.66
2376
+ text = "T"
2377
+ intervals [355]:
2378
+ xmin = 35.66
2379
+ xmax = 35.76
2380
+ text = "S"
2381
+ intervals [356]:
2382
+ xmin = 35.76
2383
+ xmax = 35.84
2384
+ text = "AH1"
2385
+ intervals [357]:
2386
+ xmin = 35.84
2387
+ xmax = 35.98
2388
+ text = "CH"
2389
+ intervals [358]:
2390
+ xmin = 35.98
2391
+ xmax = 36.06
2392
+ text = "TH"
2393
+ intervals [359]:
2394
+ xmin = 36.06
2395
+ xmax = 36.16
2396
+ text = "IH1"
2397
+ intervals [360]:
2398
+ xmin = 36.16
2399
+ xmax = 36.24
2400
+ text = "NG"
2401
+ intervals [361]:
2402
+ xmin = 36.24
2403
+ xmax = 36.35
2404
+ text = "Z"
2405
+ intervals [362]:
2406
+ xmin = 36.35
2407
+ xmax = 36.56
2408
+ text = "AE1"
2409
+ intervals [363]:
2410
+ xmin = 36.56
2411
+ xmax = 36.69
2412
+ text = "Z"
2413
+ intervals [364]:
2414
+ xmin = 36.69
2415
+ xmax = 36.89
2416
+ text = ""
2417
+ intervals [365]:
2418
+ xmin = 36.89
2419
+ xmax = 37.03
2420
+ text = "L"
2421
+ intervals [366]:
2422
+ xmin = 37.03
2423
+ xmax = 37.16
2424
+ text = "OY1"
2425
+ intervals [367]:
2426
+ xmin = 37.16
2427
+ xmax = 37.23
2428
+ text = "AH0"
2429
+ intervals [368]:
2430
+ xmin = 37.23
2431
+ xmax = 37.32
2432
+ text = "L"
2433
+ intervals [369]:
2434
+ xmin = 37.32
2435
+ xmax = 37.4
2436
+ text = "T"
2437
+ intervals [370]:
2438
+ xmin = 37.4
2439
+ xmax = 37.59
2440
+ text = "IY0"
2441
+ intervals [371]:
2442
+ xmin = 37.59
2443
+ xmax = 37.68
2444
+ text = "AE1"
2445
+ intervals [372]:
2446
+ xmin = 37.68
2447
+ xmax = 37.73
2448
+ text = "N"
2449
+ intervals [373]:
2450
+ xmin = 37.73
2451
+ xmax = 37.76
2452
+ text = "D"
2453
+ intervals [374]:
2454
+ xmin = 37.76
2455
+ xmax = 37.8
2456
+ text = "W"
2457
+ intervals [375]:
2458
+ xmin = 37.8
2459
+ xmax = 37.83
2460
+ text = "AH1"
2461
+ intervals [376]:
2462
+ xmin = 37.83
2463
+ xmax = 37.88
2464
+ text = "T"
2465
+ intervals [377]:
2466
+ xmin = 37.88
2467
+ xmax = 37.94
2468
+ text = "W"
2469
+ intervals [378]:
2470
+ xmin = 37.94
2471
+ xmax = 37.99
2472
+ text = "IY1"
2473
+ intervals [379]:
2474
+ xmin = 37.99
2475
+ xmax = 38.15
2476
+ text = "T"
2477
+ intervals [380]:
2478
+ xmin = 38.15
2479
+ xmax = 38.21
2480
+ text = "R"
2481
+ intervals [381]:
2482
+ xmin = 38.21
2483
+ xmax = 38.26
2484
+ text = "EH1"
2485
+ intervals [382]:
2486
+ xmin = 38.26
2487
+ xmax = 38.38
2488
+ text = "ZH"
2489
+ intervals [383]:
2490
+ xmin = 38.38
2491
+ xmax = 38.47
2492
+ text = "ER0"
2493
+ intervals [384]:
2494
+ xmin = 38.47
2495
+ xmax = 38.53
2496
+ text = "IH0"
2497
+ intervals [385]:
2498
+ xmin = 38.53
2499
+ xmax = 38.58
2500
+ text = "N"
2501
+ intervals [386]:
2502
+ xmin = 38.58
2503
+ xmax = 38.64
2504
+ text = "AA1"
2505
+ intervals [387]:
2506
+ xmin = 38.64
2507
+ xmax = 38.71
2508
+ text = "R"
2509
+ intervals [388]:
2510
+ xmin = 38.71
2511
+ xmax = 38.77
2512
+ text = "L"
2513
+ intervals [389]:
2514
+ xmin = 38.77
2515
+ xmax = 38.96
2516
+ text = "AY1"
2517
+ intervals [390]:
2518
+ xmin = 38.96
2519
+ xmax = 39.02
2520
+ text = "V"
2521
+ intervals [391]:
2522
+ xmin = 39.02
2523
+ xmax = 39.11
2524
+ text = "Z"
2525
+ intervals [392]:
2526
+ xmin = 39.11
2527
+ xmax = 39.4
2528
+ text = ""
2529
+ intervals [393]:
2530
+ xmin = 39.4
2531
+ xmax = 39.57
2532
+ text = "AH0"
2533
+ intervals [394]:
2534
+ xmin = 39.57
2535
+ xmax = 39.63
2536
+ text = "N"
2537
+ intervals [395]:
2538
+ xmin = 39.63
2539
+ xmax = 39.69
2540
+ text = "AH1"
2541
+ intervals [396]:
2542
+ xmin = 39.69
2543
+ xmax = 39.73
2544
+ text = "DH"
2545
+ intervals [397]:
2546
+ xmin = 39.73
2547
+ xmax = 39.8
2548
+ text = "ER0"
2549
+ intervals [398]:
2550
+ xmin = 39.8
2551
+ xmax = 39.85
2552
+ text = "M"
2553
+ intervals [399]:
2554
+ xmin = 39.85
2555
+ xmax = 39.98
2556
+ text = "UW1"
2557
+ intervals [400]:
2558
+ xmin = 39.98
2559
+ xmax = 40.06
2560
+ text = "V"
2561
+ intervals [401]:
2562
+ xmin = 40.06
2563
+ xmax = 40.13
2564
+ text = "IY0"
2565
+ intervals [402]:
2566
+ xmin = 40.13
2567
+ xmax = 40.25
2568
+ text = "AH0"
2569
+ intervals [403]:
2570
+ xmin = 40.25
2571
+ xmax = 40.31
2572
+ text = "B"
2573
+ intervals [404]:
2574
+ xmin = 40.31
2575
+ xmax = 40.46
2576
+ text = "AW1"
2577
+ intervals [405]:
2578
+ xmin = 40.46
2579
+ xmax = 40.51
2580
+ text = "T"
2581
+ intervals [406]:
2582
+ xmin = 40.51
2583
+ xmax = 40.62
2584
+ text = "L"
2585
+ intervals [407]:
2586
+ xmin = 40.62
2587
+ xmax = 40.76
2588
+ text = "AH1"
2589
+ intervals [408]:
2590
+ xmin = 40.76
2591
+ xmax = 40.83
2592
+ text = "V"
2593
+ intervals [409]:
2594
+ xmin = 40.83
2595
+ xmax = 41.01
2596
+ text = "IH1"
2597
+ intervals [410]:
2598
+ xmin = 41.01
2599
+ xmax = 41.08
2600
+ text = "Z"
2601
+ intervals [411]:
2602
+ xmin = 41.08
2603
+ xmax = 41.11
2604
+ text = "DH"
2605
+ intervals [412]:
2606
+ xmin = 41.11
2607
+ xmax = 41.24
2608
+ text = "AH0"
2609
+ intervals [413]:
2610
+ xmin = 41.24
2611
+ xmax = 41.3
2612
+ text = ""
2613
+ intervals [414]:
2614
+ xmin = 41.3
2615
+ xmax = 41.47
2616
+ text = "S"
2617
+ intervals [415]:
2618
+ xmin = 41.47
2619
+ xmax = 41.53
2620
+ text = "IY1"
2621
+ intervals [416]:
2622
+ xmin = 41.53
2623
+ xmax = 41.61
2624
+ text = "K"
2625
+ intervals [417]:
2626
+ xmin = 41.61
2627
+ xmax = 41.64
2628
+ text = "R"
2629
+ intervals [418]:
2630
+ xmin = 41.64
2631
+ xmax = 41.75
2632
+ text = "IH0"
2633
+ intervals [419]:
2634
+ xmin = 41.75
2635
+ xmax = 41.9
2636
+ text = "T"
2637
+ intervals [420]:
2638
+ xmin = 41.9
2639
+ xmax = 42.13
2640
+ text = ""
2641
+ intervals [421]:
2642
+ xmin = 42.13
2643
+ xmax = 42.35
2644
+ text = "DH"
2645
+ intervals [422]:
2646
+ xmin = 42.35
2647
+ xmax = 42.47
2648
+ text = "AH1"
2649
+ intervals [423]:
2650
+ xmin = 42.47
2651
+ xmax = 42.56
2652
+ text = "M"
2653
+ intervals [424]:
2654
+ xmin = 42.56
2655
+ xmax = 42.62
2656
+ text = "UW1"
2657
+ intervals [425]:
2658
+ xmin = 42.62
2659
+ xmax = 42.71
2660
+ text = "V"
2661
+ intervals [426]:
2662
+ xmin = 42.71
2663
+ xmax = 43.01
2664
+ text = "IY0"
2665
+ intervals [427]:
2666
+ xmin = 43.01
2667
+ xmax = 43.19
2668
+ text = "S"
2669
+ intervals [428]:
2670
+ xmin = 43.19
2671
+ xmax = 43.26
2672
+ text = "IY1"
2673
+ intervals [429]:
2674
+ xmin = 43.26
2675
+ xmax = 43.31
2676
+ text = "K"
2677
+ intervals [430]:
2678
+ xmin = 43.31
2679
+ xmax = 43.37
2680
+ text = "R"
2681
+ intervals [431]:
2682
+ xmin = 43.37
2683
+ xmax = 43.53
2684
+ text = "IH0"
2685
+ intervals [432]:
2686
+ xmin = 43.53
2687
+ xmax = 43.58
2688
+ text = "T"
2689
+ intervals [433]:
2690
+ xmin = 43.58
2691
+ xmax = 43.65
2692
+ text = "IH1"
2693
+ intervals [434]:
2694
+ xmin = 43.65
2695
+ xmax = 43.71
2696
+ text = "Z"
2697
+ intervals [435]:
2698
+ xmin = 43.71
2699
+ xmax = 43.77
2700
+ text = "AH0"
2701
+ intervals [436]:
2702
+ xmin = 43.77
2703
+ xmax = 43.84
2704
+ text = "B"
2705
+ intervals [437]:
2706
+ xmin = 43.84
2707
+ xmax = 44.03
2708
+ text = "AW1"
2709
+ intervals [438]:
2710
+ xmin = 44.03
2711
+ xmax = 44.1
2712
+ text = "T"
2713
+ intervals [439]:
2714
+ xmin = 44.1
2715
+ xmax = 44.15
2716
+ text = "AH0"
2717
+ intervals [440]:
2718
+ xmin = 44.15
2719
+ xmax = 44.33
2720
+ text = "S"
2721
+ intervals [441]:
2722
+ xmin = 44.33
2723
+ xmax = 44.4
2724
+ text = "T"
2725
+ intervals [442]:
2726
+ xmin = 44.4
2727
+ xmax = 44.51
2728
+ text = "AO1"
2729
+ intervals [443]:
2730
+ xmin = 44.51
2731
+ xmax = 44.65
2732
+ text = "R"
2733
+ intervals [444]:
2734
+ xmin = 44.65
2735
+ xmax = 44.88
2736
+ text = "IY0"
2737
+ intervals [445]:
2738
+ xmin = 44.88
2739
+ xmax = 44.95
2740
+ text = ""
2741
+ intervals [446]:
2742
+ xmin = 44.95
2743
+ xmax = 45.09
2744
+ text = "AH0"
2745
+ intervals [447]:
2746
+ xmin = 45.09
2747
+ xmax = 45.14
2748
+ text = "V"
2749
+ intervals [448]:
2750
+ xmin = 45.14
2751
+ xmax = 45.21
2752
+ text = "AH0"
2753
+ intervals [449]:
2754
+ xmin = 45.21
2755
+ xmax = 45.27
2756
+ text = "M"
2757
+ intervals [450]:
2758
+ xmin = 45.27
2759
+ xmax = 45.31
2760
+ text = "Y"
2761
+ intervals [451]:
2762
+ xmin = 45.31
2763
+ xmax = 45.34
2764
+ text = "UW1"
2765
+ intervals [452]:
2766
+ xmin = 45.34
2767
+ xmax = 45.41
2768
+ text = "Z"
2769
+ intervals [453]:
2770
+ xmin = 45.41
2771
+ xmax = 45.45
2772
+ text = "IH0"
2773
+ intervals [454]:
2774
+ xmin = 45.45
2775
+ xmax = 45.48
2776
+ text = "K"
2777
+ intervals [455]:
2778
+ xmin = 45.48
2779
+ xmax = 45.51
2780
+ text = "AH0"
2781
+ intervals [456]:
2782
+ xmin = 45.51
2783
+ xmax = 45.56
2784
+ text = "L"
2785
+ intervals [457]:
2786
+ xmin = 45.56
2787
+ xmax = 45.62
2788
+ text = "P"
2789
+ intervals [458]:
2790
+ xmin = 45.62
2791
+ xmax = 45.69
2792
+ text = "R"
2793
+ intervals [459]:
2794
+ xmin = 45.69
2795
+ xmax = 45.81
2796
+ text = "AA1"
2797
+ intervals [460]:
2798
+ xmin = 45.81
2799
+ xmax = 45.84
2800
+ text = "D"
2801
+ intervals [461]:
2802
+ xmin = 45.84
2803
+ xmax = 45.87
2804
+ text = "AH0"
2805
+ intervals [462]:
2806
+ xmin = 45.87
2807
+ xmax = 45.91
2808
+ text = "JH"
2809
+ intervals [463]:
2810
+ xmin = 45.91
2811
+ xmax = 45.96
2812
+ text = "IY0"
2813
+ intervals [464]:
2814
+ xmin = 45.96
2815
+ xmax = 45.99
2816
+ text = "D"
2817
+ intervals [465]:
2818
+ xmin = 45.99
2819
+ xmax = 46.04
2820
+ text = "UW1"
2821
+ intervals [466]:
2822
+ xmin = 46.04
2823
+ xmax = 46.09
2824
+ text = "DH"
2825
+ intervals [467]:
2826
+ xmin = 46.09
2827
+ xmax = 46.12
2828
+ text = "AH0"
2829
+ intervals [468]:
2830
+ xmin = 46.12
2831
+ xmax = 46.17
2832
+ text = "T"
2833
+ intervals [469]:
2834
+ xmin = 46.17
2835
+ xmax = 46.24
2836
+ text = "F"
2837
+ intervals [470]:
2838
+ xmin = 46.24
2839
+ xmax = 46.29
2840
+ text = "AO1"
2841
+ intervals [471]:
2842
+ xmin = 46.29
2843
+ xmax = 46.36
2844
+ text = "L"
2845
+ intervals [472]:
2846
+ xmin = 46.36
2847
+ xmax = 46.42
2848
+ text = "Z"
2849
+ intervals [473]:
2850
+ xmin = 46.42
2851
+ xmax = 46.46
2852
+ text = "IH0"
2853
+ intervals [474]:
2854
+ xmin = 46.46
2855
+ xmax = 46.49
2856
+ text = "N"
2857
+ intervals [475]:
2858
+ xmin = 46.49
2859
+ xmax = 46.53
2860
+ text = "L"
2861
+ intervals [476]:
2862
+ xmin = 46.53
2863
+ xmax = 46.59
2864
+ text = "AH1"
2865
+ intervals [477]:
2866
+ xmin = 46.59
2867
+ xmax = 46.62
2868
+ text = "V"
2869
+ intervals [478]:
2870
+ xmin = 46.62
2871
+ xmax = 46.65
2872
+ text = "W"
2873
+ intervals [479]:
2874
+ xmin = 46.65
2875
+ xmax = 46.68
2876
+ text = "IH0"
2877
+ intervals [480]:
2878
+ xmin = 46.68
2879
+ xmax = 46.72
2880
+ text = "DH"
2881
+ intervals [481]:
2882
+ xmin = 46.72
2883
+ xmax = 46.85
2884
+ text = "AH0"
2885
+ intervals [482]:
2886
+ xmin = 46.85
2887
+ xmax = 46.91
2888
+ text = ""
2889
+ intervals [483]:
2890
+ xmin = 46.91
2891
+ xmax = 47.04
2892
+ text = "G"
2893
+ intervals [484]:
2894
+ xmin = 47.04
2895
+ xmax = 47.13
2896
+ text = "ER1"
2897
+ intervals [485]:
2898
+ xmin = 47.13
2899
+ xmax = 47.21
2900
+ text = "L"
2901
+ intervals [486]:
2902
+ xmin = 47.21
2903
+ xmax = 47.27
2904
+ text = "HH"
2905
+ intervals [487]:
2906
+ xmin = 47.27
2907
+ xmax = 47.38
2908
+ text = "UW1"
2909
+ intervals [488]:
2910
+ xmin = 47.38
2911
+ xmax = 47.46
2912
+ text = "Z"
2913
+ intervals [489]:
2914
+ xmin = 47.46
2915
+ xmax = 47.55
2916
+ text = "D"
2917
+ intervals [490]:
2918
+ xmin = 47.55
2919
+ xmax = 47.73
2920
+ text = "AY1"
2921
+ intervals [491]:
2922
+ xmin = 47.73
2923
+ xmax = 47.84
2924
+ text = "IH0"
2925
+ intervals [492]:
2926
+ xmin = 47.84
2927
+ xmax = 48.01
2928
+ text = "NG"
2929
+ intervals [493]:
2930
+ xmin = 48.01
2931
+ xmax = 49.08
2932
+ text = ""
2933
+ intervals [494]:
2934
+ xmin = 49.08
2935
+ xmax = 49.15
2936
+ text = "DH"
2937
+ intervals [495]:
2938
+ xmin = 49.15
2939
+ xmax = 49.18
2940
+ text = "EH1"
2941
+ intervals [496]:
2942
+ xmin = 49.18
2943
+ xmax = 49.33
2944
+ text = "R"
2945
+ intervals [497]:
2946
+ xmin = 49.33
2947
+ xmax = 49.36
2948
+ text = "AA1"
2949
+ intervals [498]:
2950
+ xmin = 49.36
2951
+ xmax = 49.39
2952
+ text = "R"
2953
+ intervals [499]:
2954
+ xmin = 49.39
2955
+ xmax = 49.46
2956
+ text = "AH0"
2957
+ intervals [500]:
2958
+ xmin = 49.46
2959
+ xmax = 49.52
2960
+ text = "L"
2961
+ intervals [501]:
2962
+ xmin = 49.52
2963
+ xmax = 49.69
2964
+ text = "AA1"
2965
+ intervals [502]:
2966
+ xmin = 49.69
2967
+ xmax = 49.82
2968
+ text = "T"
2969
+ intervals [503]:
2970
+ xmin = 49.82
2971
+ xmax = 49.98
2972
+ text = "AH1"
2973
+ intervals [504]:
2974
+ xmin = 49.98
2975
+ xmax = 50.2
2976
+ text = "V"
2977
+ intervals [505]:
2978
+ xmin = 50.2
2979
+ xmax = 50.29
2980
+ text = ""
2981
+ intervals [506]:
2982
+ xmin = 50.29
2983
+ xmax = 50.43
2984
+ text = "EH1"
2985
+ intervals [507]:
2986
+ xmin = 50.43
2987
+ xmax = 50.52
2988
+ text = "N"
2989
+ intervals [508]:
2990
+ xmin = 50.52
2991
+ xmax = 50.56
2992
+ text = "V"
2993
+ intervals [509]:
2994
+ xmin = 50.56
2995
+ xmax = 50.65
2996
+ text = "IY0"
2997
+ intervals [510]:
2998
+ xmin = 50.65
2999
+ xmax = 50.7
3000
+ text = "AH0"
3001
+ intervals [511]:
3002
+ xmin = 50.7
3003
+ xmax = 50.75
3004
+ text = "B"
3005
+ intervals [512]:
3006
+ xmin = 50.75
3007
+ xmax = 50.78
3008
+ text = "AH0"
3009
+ intervals [513]:
3010
+ xmin = 50.78
3011
+ xmax = 50.88
3012
+ text = "L"
3013
+ intervals [514]:
3014
+ xmin = 50.88
3015
+ xmax = 50.94
3016
+ text = "M"
3017
+ intervals [515]:
3018
+ xmin = 50.94
3019
+ xmax = 51.05
3020
+ text = "OW1"
3021
+ intervals [516]:
3022
+ xmin = 51.05
3023
+ xmax = 51.12
3024
+ text = "M"
3025
+ intervals [517]:
3026
+ xmin = 51.12
3027
+ xmax = 51.16
3028
+ text = "AH0"
3029
+ intervals [518]:
3030
+ xmin = 51.16
3031
+ xmax = 51.19
3032
+ text = "N"
3033
+ intervals [519]:
3034
+ xmin = 51.19
3035
+ xmax = 51.23
3036
+ text = "T"
3037
+ intervals [520]:
3038
+ xmin = 51.23
3039
+ xmax = 51.3
3040
+ text = "S"
3041
+ intervals [521]:
3042
+ xmin = 51.3
3043
+ xmax = 51.34
3044
+ text = "IH0"
3045
+ intervals [522]:
3046
+ xmin = 51.34
3047
+ xmax = 51.37
3048
+ text = "N"
3049
+ intervals [523]:
3050
+ xmin = 51.37
3051
+ xmax = 51.4
3052
+ text = "DH"
3053
+ intervals [524]:
3054
+ xmin = 51.4
3055
+ xmax = 51.46
3056
+ text = "IH0"
3057
+ intervals [525]:
3058
+ xmin = 51.46
3059
+ xmax = 51.53
3060
+ text = "S"
3061
+ intervals [526]:
3062
+ xmin = 51.53
3063
+ xmax = 51.58
3064
+ text = "F"
3065
+ intervals [527]:
3066
+ xmin = 51.58
3067
+ xmax = 51.62
3068
+ text = "IH1"
3069
+ intervals [528]:
3070
+ xmin = 51.62
3071
+ xmax = 51.72
3072
+ text = "L"
3073
+ intervals [529]:
3074
+ xmin = 51.72
3075
+ xmax = 51.77
3076
+ text = "M"
3077
+ intervals [530]:
3078
+ xmin = 51.77
3079
+ xmax = 51.86
3080
+ text = "S"
3081
+ intervals [531]:
3082
+ xmin = 51.86
3083
+ xmax = 51.91
3084
+ text = "AH1"
3085
+ intervals [532]:
3086
+ xmin = 51.91
3087
+ xmax = 52.01
3088
+ text = "CH"
3089
+ intervals [533]:
3090
+ xmin = 52.01
3091
+ xmax = 52.09
3092
+ text = "EH1"
3093
+ intervals [534]:
3094
+ xmin = 52.09
3095
+ xmax = 52.2
3096
+ text = "Z"
3097
+ intervals [535]:
3098
+ xmin = 52.2
3099
+ xmax = 52.23
3100
+ text = "DH"
3101
+ intervals [536]:
3102
+ xmin = 52.23
3103
+ xmax = 52.3
3104
+ text = "AH0"
3105
+ intervals [537]:
3106
+ xmin = 52.3
3107
+ xmax = 52.39
3108
+ text = "S"
3109
+ intervals [538]:
3110
+ xmin = 52.39
3111
+ xmax = 52.43
3112
+ text = "IH1"
3113
+ intervals [539]:
3114
+ xmin = 52.43
3115
+ xmax = 52.46
3116
+ text = "M"
3117
+ intervals [540]:
3118
+ xmin = 52.46
3119
+ xmax = 52.5
3120
+ text = "P"
3121
+ intervals [541]:
3122
+ xmin = 52.5
3123
+ xmax = 52.53
3124
+ text = "AH0"
3125
+ intervals [542]:
3126
+ xmin = 52.53
3127
+ xmax = 52.57
3128
+ text = "L"
3129
+ intervals [543]:
3130
+ xmin = 52.57
3131
+ xmax = 52.66
3132
+ text = "L"
3133
+ intervals [544]:
3134
+ xmin = 52.66
3135
+ xmax = 52.71
3136
+ text = "AH1"
3137
+ intervals [545]:
3138
+ xmin = 52.71
3139
+ xmax = 52.74
3140
+ text = "V"
3141
+ intervals [546]:
3142
+ xmin = 52.74
3143
+ xmax = 52.79
3144
+ text = "B"
3145
+ intervals [547]:
3146
+ xmin = 52.79
3147
+ xmax = 52.83
3148
+ text = "IH0"
3149
+ intervals [548]:
3150
+ xmin = 52.83
3151
+ xmax = 52.91
3152
+ text = "T"
3153
+ intervals [549]:
3154
+ xmin = 52.91
3155
+ xmax = 52.99
3156
+ text = "W"
3157
+ intervals [550]:
3158
+ xmin = 52.99
3159
+ xmax = 53.03
3160
+ text = "IY1"
3161
+ intervals [551]:
3162
+ xmin = 53.03
3163
+ xmax = 53.06
3164
+ text = "N"
3165
+ intervals [552]:
3166
+ xmin = 53.06
3167
+ xmax = 53.18
3168
+ text = "HH"
3169
+ intervals [553]:
3170
+ xmin = 53.18
3171
+ xmax = 53.26
3172
+ text = "AY1"
3173
+ intervals [554]:
3174
+ xmin = 53.26
3175
+ xmax = 53.34
3176
+ text = "S"
3177
+ intervals [555]:
3178
+ xmin = 53.34
3179
+ xmax = 53.42
3180
+ text = "K"
3181
+ intervals [556]:
3182
+ xmin = 53.42
3183
+ xmax = 53.45
3184
+ text = "UW1"
3185
+ intervals [557]:
3186
+ xmin = 53.45
3187
+ xmax = 53.52
3188
+ text = "L"
3189
+ intervals [558]:
3190
+ xmin = 53.52
3191
+ xmax = 53.63
3192
+ text = "S"
3193
+ intervals [559]:
3194
+ xmin = 53.63
3195
+ xmax = 53.68
3196
+ text = "T"
3197
+ intervals [560]:
3198
+ xmin = 53.68
3199
+ xmax = 53.77
3200
+ text = "UW1"
3201
+ intervals [561]:
3202
+ xmin = 53.77
3203
+ xmax = 53.8
3204
+ text = "D"
3205
+ intervals [562]:
3206
+ xmin = 53.8
3207
+ xmax = 53.84
3208
+ text = "AH0"
3209
+ intervals [563]:
3210
+ xmin = 53.84
3211
+ xmax = 53.89
3212
+ text = "N"
3213
+ intervals [564]:
3214
+ xmin = 53.89
3215
+ xmax = 53.95
3216
+ text = "T"
3217
+ intervals [565]:
3218
+ xmin = 53.95
3219
+ xmax = 54.09
3220
+ text = "S"
3221
+ intervals [566]:
3222
+ xmin = 54.09
3223
+ xmax = 54.32
3224
+ text = ""
3225
+ intervals [567]:
3226
+ xmin = 54.32
3227
+ xmax = 54.42
3228
+ text = "EH1"
3229
+ intervals [568]:
3230
+ xmin = 54.42
3231
+ xmax = 54.45
3232
+ text = "V"
3233
+ intervals [569]:
3234
+ xmin = 54.45
3235
+ xmax = 54.51
3236
+ text = "R"
3237
+ intervals [570]:
3238
+ xmin = 54.51
3239
+ xmax = 54.56
3240
+ text = "IY0"
3241
+ intervals [571]:
3242
+ xmin = 54.56
3243
+ xmax = 54.65
3244
+ text = "T"
3245
+ intervals [572]:
3246
+ xmin = 54.65
3247
+ xmax = 54.83
3248
+ text = "AY1"
3249
+ intervals [573]:
3250
+ xmin = 54.83
3251
+ xmax = 54.93
3252
+ text = "M"
3253
+ intervals [574]:
3254
+ xmin = 54.93
3255
+ xmax = 54.96
3256
+ text = ""
3257
+ intervals [575]:
3258
+ xmin = 54.96
3259
+ xmax = 55.08
3260
+ text = "AY1"
3261
+ intervals [576]:
3262
+ xmin = 55.08
3263
+ xmax = 55.28
3264
+ text = "W"
3265
+ intervals [577]:
3266
+ xmin = 55.28
3267
+ xmax = 55.36
3268
+ text = "AA1"
3269
+ intervals [578]:
3270
+ xmin = 55.36
3271
+ xmax = 55.45
3272
+ text = "CH"
3273
+ intervals [579]:
3274
+ xmin = 55.45
3275
+ xmax = 55.53
3276
+ text = "DH"
3277
+ intervals [580]:
3278
+ xmin = 55.53
3279
+ xmax = 55.59
3280
+ text = "IH0"
3281
+ intervals [581]:
3282
+ xmin = 55.59
3283
+ xmax = 55.68
3284
+ text = "S"
3285
+ intervals [582]:
3286
+ xmin = 55.68
3287
+ xmax = 55.73
3288
+ text = "M"
3289
+ intervals [583]:
3290
+ xmin = 55.73
3291
+ xmax = 55.76
3292
+ text = "UW1"
3293
+ intervals [584]:
3294
+ xmin = 55.76
3295
+ xmax = 55.84
3296
+ text = "V"
3297
+ intervals [585]:
3298
+ xmin = 55.84
3299
+ xmax = 55.89
3300
+ text = "IY0"
3301
+ intervals [586]:
3302
+ xmin = 55.89
3303
+ xmax = 55.92
3304
+ text = "IH1"
3305
+ intervals [587]:
3306
+ xmin = 55.92
3307
+ xmax = 55.98
3308
+ text = "T"
3309
+ intervals [588]:
3310
+ xmin = 55.98
3311
+ xmax = 56.05
3312
+ text = "R"
3313
+ intervals [589]:
3314
+ xmin = 56.05
3315
+ xmax = 56.12
3316
+ text = "IY0"
3317
+ intervals [590]:
3318
+ xmin = 56.12
3319
+ xmax = 56.2
3320
+ text = "M"
3321
+ intervals [591]:
3322
+ xmin = 56.2
3323
+ xmax = 56.34
3324
+ text = "AY1"
3325
+ intervals [592]:
3326
+ xmin = 56.34
3327
+ xmax = 56.38
3328
+ text = "N"
3329
+ intervals [593]:
3330
+ xmin = 56.38
3331
+ xmax = 56.41
3332
+ text = "D"
3333
+ intervals [594]:
3334
+ xmin = 56.41
3335
+ xmax = 56.44
3336
+ text = "Z"
3337
+ intervals [595]:
3338
+ xmin = 56.44
3339
+ xmax = 56.49
3340
+ text = "M"
3341
+ intervals [596]:
3342
+ xmin = 56.49
3343
+ xmax = 56.55
3344
+ text = "IY1"
3345
+ intervals [597]:
3346
+ xmin = 56.55
3347
+ xmax = 56.6
3348
+ text = "AH0"
3349
+ intervals [598]:
3350
+ xmin = 56.6
3351
+ xmax = 56.63
3352
+ text = "V"
3353
+ intervals [599]:
3354
+ xmin = 56.63
3355
+ xmax = 56.7
3356
+ text = "AH0"
3357
+ intervals [600]:
3358
+ xmin = 56.7
3359
+ xmax = 56.82
3360
+ text = "T"
3361
+ intervals [601]:
3362
+ xmin = 56.82
3363
+ xmax = 56.94
3364
+ text = "AY1"
3365
+ intervals [602]:
3366
+ xmin = 56.94
3367
+ xmax = 56.99
3368
+ text = "M"
3369
+ intervals [603]:
3370
+ xmin = 56.99
3371
+ xmax = 57.02
3372
+ text = "DH"
3373
+ intervals [604]:
3374
+ xmin = 57.02
3375
+ xmax = 57.05
3376
+ text = "AH0"
3377
+ intervals [605]:
3378
+ xmin = 57.05
3379
+ xmax = 57.08
3380
+ text = "T"
3381
+ intervals [606]:
3382
+ xmin = 57.08
3383
+ xmax = 57.13
3384
+ text = "AY1"
3385
+ intervals [607]:
3386
+ xmin = 57.13
3387
+ xmax = 57.17
3388
+ text = "W"
3389
+ intervals [608]:
3390
+ xmin = 57.17
3391
+ xmax = 57.2
3392
+ text = "AH0"
3393
+ intervals [609]:
3394
+ xmin = 57.2
3395
+ xmax = 57.23
3396
+ text = "Z"
3397
+ intervals [610]:
3398
+ xmin = 57.23
3399
+ xmax = 57.26
3400
+ text = "IH0"
3401
+ intervals [611]:
3402
+ xmin = 57.26
3403
+ xmax = 57.29
3404
+ text = "N"
3405
+ intervals [612]:
3406
+ xmin = 57.29
3407
+ xmax = 57.41
3408
+ text = "HH"
3409
+ intervals [613]:
3410
+ xmin = 57.41
3411
+ xmax = 57.53
3412
+ text = "AY1"
3413
+ intervals [614]:
3414
+ xmin = 57.53
3415
+ xmax = 57.66
3416
+ text = "S"
3417
+ intervals [615]:
3418
+ xmin = 57.66
3419
+ xmax = 57.69
3420
+ text = "K"
3421
+ intervals [616]:
3422
+ xmin = 57.69
3423
+ xmax = 57.84
3424
+ text = "UW1"
3425
+ intervals [617]:
3426
+ xmin = 57.84
3427
+ xmax = 57.88
3428
+ text = "L"
3429
+ intervals [618]:
3430
+ xmin = 57.88
3431
+ xmax = 57.91
3432
+ text = "AH0"
3433
+ intervals [619]:
3434
+ xmin = 57.91
3435
+ xmax = 57.94
3436
+ text = "N"
3437
+ intervals [620]:
3438
+ xmin = 57.94
3439
+ xmax = 58.03
3440
+ text = "D"
3441
+ intervals [621]:
3442
+ xmin = 58.03
3443
+ xmax = 58.25
3444
+ text = ""
3445
+ intervals [622]:
3446
+ xmin = 58.25
3447
+ xmax = 58.36
3448
+ text = "Y"
3449
+ intervals [623]:
3450
+ xmin = 58.36
3451
+ xmax = 58.4
3452
+ text = "UW1"
3453
+ intervals [624]:
3454
+ xmin = 58.4
3455
+ xmax = 58.45
3456
+ text = "M"
3457
+ intervals [625]:
3458
+ xmin = 58.45
3459
+ xmax = 58.51
3460
+ text = "AY1"
3461
+ intervals [626]:
3462
+ xmin = 58.51
3463
+ xmax = 58.55
3464
+ text = "T"
3465
+ intervals [627]:
3466
+ xmin = 58.55
3467
+ xmax = 58.59
3468
+ text = "R"
3469
+ intervals [628]:
3470
+ xmin = 58.59
3471
+ xmax = 58.66
3472
+ text = "IH0"
3473
+ intervals [629]:
3474
+ xmin = 58.66
3475
+ xmax = 58.7
3476
+ text = "M"
3477
+ intervals [630]:
3478
+ xmin = 58.7
3479
+ xmax = 58.76
3480
+ text = "EH1"
3481
+ intervals [631]:
3482
+ xmin = 58.76
3483
+ xmax = 58.79
3484
+ text = "M"
3485
+ intervals [632]:
3486
+ xmin = 58.79
3487
+ xmax = 58.84
3488
+ text = "B"
3489
+ intervals [633]:
3490
+ xmin = 58.84
3491
+ xmax = 59.1
3492
+ text = "ER0"
3493
+ intervals [634]:
3494
+ xmin = 59.1
3495
+ xmax = 59.29
3496
+ text = ""
3497
+ intervals [635]:
3498
+ xmin = 59.29
3499
+ xmax = 59.38
3500
+ text = "DH"
3501
+ intervals [636]:
3502
+ xmin = 59.38
3503
+ xmax = 59.44
3504
+ text = "AH0"
3505
+ intervals [637]:
3506
+ xmin = 59.44
3507
+ xmax = 59.56
3508
+ text = "K"
3509
+ intervals [638]:
3510
+ xmin = 59.56
3511
+ xmax = 59.63
3512
+ text = "R"
3513
+ intervals [639]:
3514
+ xmin = 59.63
3515
+ xmax = 59.69
3516
+ text = "AH1"
3517
+ intervals [640]:
3518
+ xmin = 59.69
3519
+ xmax = 59.83
3520
+ text = "SH"
3521
+ intervals [641]:
3522
+ xmin = 59.83
3523
+ xmax = 59.89
3524
+ text = "Y"
3525
+ intervals [642]:
3526
+ xmin = 59.89
3527
+ xmax = 59.94
3528
+ text = "UW1"
3529
+ intervals [643]:
3530
+ xmin = 59.94
3531
+ xmax = 60.03
3532
+ text = "HH"
3533
+ intervals [644]:
3534
+ xmin = 60.03
3535
+ xmax = 60.12
3536
+ text = "AE1"
3537
+ intervals [645]:
3538
+ xmin = 60.12
3539
+ xmax = 60.16
3540
+ text = "D"
3541
+ intervals [646]:
3542
+ xmin = 60.16
3543
+ xmax = 60.2
3544
+ text = "IH0"
3545
+ intervals [647]:
3546
+ xmin = 60.2
3547
+ xmax = 60.27
3548
+ text = "N"
3549
+ intervals [648]:
3550
+ xmin = 60.27
3551
+ xmax = 60.37
3552
+ text = "S"
3553
+ intervals [649]:
3554
+ xmin = 60.37
3555
+ xmax = 60.43
3556
+ text = "K"
3557
+ intervals [650]:
3558
+ xmin = 60.43
3559
+ xmax = 60.54
3560
+ text = "UW1"
3561
+ intervals [651]:
3562
+ xmin = 60.54
3563
+ xmax = 60.74
3564
+ text = "L"
3565
+ intervals [652]:
3566
+ xmin = 60.74
3567
+ xmax = 60.9
3568
+ text = ""
3569
+ intervals [653]:
3570
+ xmin = 60.9
3571
+ xmax = 61.06
3572
+ text = "AE1"
3573
+ intervals [654]:
3574
+ xmin = 61.06
3575
+ xmax = 61.09
3576
+ text = "N"
3577
+ intervals [655]:
3578
+ xmin = 61.09
3579
+ xmax = 61.12
3580
+ text = "D"
3581
+ intervals [656]:
3582
+ xmin = 61.12
3583
+ xmax = 61.2
3584
+ text = "HH"
3585
+ intervals [657]:
3586
+ xmin = 61.2
3587
+ xmax = 61.24
3588
+ text = "AW1"
3589
+ intervals [658]:
3590
+ xmin = 61.24
3591
+ xmax = 61.29
3592
+ text = "Y"
3593
+ intervals [659]:
3594
+ xmin = 61.29
3595
+ xmax = 61.36
3596
+ text = "UW1"
3597
+ intervals [660]:
3598
+ xmin = 61.36
3599
+ xmax = 61.4
3600
+ text = "W"
3601
+ intervals [661]:
3602
+ xmin = 61.4
3603
+ xmax = 61.43
3604
+ text = "UH1"
3605
+ intervals [662]:
3606
+ xmin = 61.43
3607
+ xmax = 61.48
3608
+ text = "D"
3609
+ intervals [663]:
3610
+ xmin = 61.48
3611
+ xmax = 61.57
3612
+ text = "L"
3613
+ intervals [664]:
3614
+ xmin = 61.57
3615
+ xmax = 61.63
3616
+ text = "UH1"
3617
+ intervals [665]:
3618
+ xmin = 61.63
3619
+ xmax = 61.7
3620
+ text = "K"
3621
+ intervals [666]:
3622
+ xmin = 61.7
3623
+ xmax = 61.73
3624
+ text = "AE1"
3625
+ intervals [667]:
3626
+ xmin = 61.73
3627
+ xmax = 61.77
3628
+ text = "T"
3629
+ intervals [668]:
3630
+ xmin = 61.77
3631
+ xmax = 61.84
3632
+ text = "HH"
3633
+ intervals [669]:
3634
+ xmin = 61.84
3635
+ xmax = 61.98
3636
+ text = "IH1"
3637
+ intervals [670]:
3638
+ xmin = 61.98
3639
+ xmax = 62.16
3640
+ text = "M"
3641
+ intervals [671]:
3642
+ xmin = 62.16
3643
+ xmax = 62.37
3644
+ text = ""
3645
+ intervals [672]:
3646
+ xmin = 62.37
3647
+ xmax = 62.42
3648
+ text = "HH"
3649
+ intervals [673]:
3650
+ xmin = 62.42
3651
+ xmax = 62.46
3652
+ text = "W"
3653
+ intervals [674]:
3654
+ xmin = 62.46
3655
+ xmax = 62.49
3656
+ text = "AY1"
3657
+ intervals [675]:
3658
+ xmin = 62.49
3659
+ xmax = 62.54
3660
+ text = "L"
3661
+ intervals [676]:
3662
+ xmin = 62.54
3663
+ xmax = 62.59
3664
+ text = "HH"
3665
+ intervals [677]:
3666
+ xmin = 62.59
3667
+ xmax = 62.64
3668
+ text = "IY1"
3669
+ intervals [678]:
3670
+ xmin = 62.64
3671
+ xmax = 62.74
3672
+ text = "Z"
3673
+ intervals [679]:
3674
+ xmin = 62.74
3675
+ xmax = 62.93
3676
+ text = "AE1"
3677
+ intervals [680]:
3678
+ xmin = 62.93
3679
+ xmax = 63.02
3680
+ text = "T"
3681
+ intervals [681]:
3682
+ xmin = 63.02
3683
+ xmax = 63.5
3684
+ text = "IH1"
3685
+ intervals [682]:
3686
+ xmin = 63.5
3687
+ xmax = 63.61
3688
+ text = "N"
3689
+ intervals [683]:
3690
+ xmin = 63.61
3691
+ xmax = 63.7
3692
+ text = "K"
3693
+ intervals [684]:
3694
+ xmin = 63.7
3695
+ xmax = 63.77
3696
+ text = "L"
3697
+ intervals [685]:
3698
+ xmin = 63.77
3699
+ xmax = 63.93
3700
+ text = "AE1"
3701
+ intervals [686]:
3702
+ xmin = 63.93
3703
+ xmax = 64.04
3704
+ text = "S"
3705
+ intervals [687]:
3706
+ xmin = 64.04
3707
+ xmax = 64.13
3708
+ text = "W"
3709
+ intervals [688]:
3710
+ xmin = 64.13
3711
+ xmax = 64.16
3712
+ text = "IH0"
3713
+ intervals [689]:
3714
+ xmin = 64.16
3715
+ xmax = 64.2
3716
+ text = "DH"
3717
+ intervals [690]:
3718
+ xmin = 64.2
3719
+ xmax = 64.3
3720
+ text = "AW1"
3721
+ intervals [691]:
3722
+ xmin = 64.3
3723
+ xmax = 64.38
3724
+ text = "T"
3725
+ intervals [692]:
3726
+ xmin = 64.38
3727
+ xmax = 64.45
3728
+ text = "TH"
3729
+ intervals [693]:
3730
+ xmin = 64.45
3731
+ xmax = 64.52
3732
+ text = "IH1"
3733
+ intervals [694]:
3734
+ xmin = 64.52
3735
+ xmax = 64.58
3736
+ text = "NG"
3737
+ intervals [695]:
3738
+ xmin = 64.58
3739
+ xmax = 64.64
3740
+ text = "K"
3741
+ intervals [696]:
3742
+ xmin = 64.64
3743
+ xmax = 64.76
3744
+ text = "IH0"
3745
+ intervals [697]:
3746
+ xmin = 64.76
3747
+ xmax = 64.83
3748
+ text = "NG"
3749
+ intervals [698]:
3750
+ xmin = 64.83
3751
+ xmax = 64.88
3752
+ text = "AO1"
3753
+ intervals [699]:
3754
+ xmin = 64.88
3755
+ xmax = 64.95
3756
+ text = "R"
3757
+ intervals [700]:
3758
+ xmin = 64.95
3759
+ xmax = 64.98
3760
+ text = ""
3761
+ intervals [701]:
3762
+ xmin = 64.98
3763
+ xmax = 65.13
3764
+ text = "W"
3765
+ intervals [702]:
3766
+ xmin = 65.13
3767
+ xmax = 65.17
3768
+ text = "AA1"
3769
+ intervals [703]:
3770
+ xmin = 65.17
3771
+ xmax = 65.21
3772
+ text = "N"
3773
+ intervals [704]:
3774
+ xmin = 65.21
3775
+ xmax = 65.24
3776
+ text = "IH0"
3777
+ intervals [705]:
3778
+ xmin = 65.24
3779
+ xmax = 65.27
3780
+ text = "NG"
3781
+ intervals [706]:
3782
+ xmin = 65.27
3783
+ xmax = 65.31
3784
+ text = "T"
3785
+ intervals [707]:
3786
+ xmin = 65.31
3787
+ xmax = 65.36
3788
+ text = "AH0"
3789
+ intervals [708]:
3790
+ xmin = 65.36
3791
+ xmax = 65.42
3792
+ text = "G"
3793
+ intervals [709]:
3794
+ xmin = 65.42
3795
+ xmax = 65.54
3796
+ text = "OW1"
3797
+ intervals [710]:
3798
+ xmin = 65.54
3799
+ xmax = 65.63
3800
+ text = "P"
3801
+ intervals [711]:
3802
+ xmin = 65.63
3803
+ xmax = 65.7
3804
+ text = "L"
3805
+ intervals [712]:
3806
+ xmin = 65.7
3807
+ xmax = 65.76
3808
+ text = "EY1"
3809
+ intervals [713]:
3810
+ xmin = 65.76
3811
+ xmax = 65.83
3812
+ text = "S"
3813
+ intervals [714]:
3814
+ xmin = 65.83
3815
+ xmax = 65.88
3816
+ text = "IH0"
3817
+ intervals [715]:
3818
+ xmin = 65.88
3819
+ xmax = 65.95
3820
+ text = "Z"
3821
+ intervals [716]:
3822
+ xmin = 65.95
3823
+ xmax = 66.0
3824
+ text = "W"
3825
+ intervals [717]:
3826
+ xmin = 66.0
3827
+ xmax = 66.03
3828
+ text = "IH1"
3829
+ intervals [718]:
3830
+ xmin = 66.03
3831
+ xmax = 66.12
3832
+ text = "DH"
3833
+ intervals [719]:
3834
+ xmin = 66.12
3835
+ xmax = 66.2
3836
+ text = "IH0"
3837
+ intervals [720]:
3838
+ xmin = 66.2
3839
+ xmax = 66.38
3840
+ text = "M"
3841
+ intervals [721]:
3842
+ xmin = 66.38
3843
+ xmax = 67
3844
+ text = ""
EMAGE/test_sequences/wave16k/2_scott_0_1_1.wav ADDED
Binary file (481 kB). View file
 
EMAGE/test_sequences/wave16k/2_scott_0_2_2.wav ADDED
Binary file (235 kB). View file
 
EMAGE/test_sequences/wave16k/2_scott_0_3_3.wav ADDED
Binary file (231 kB). View file
 
EMAGE/test_sequences/wave16k/2_scott_0_4_4.wav ADDED
Binary file (124 kB). View file
 
EMAGE/test_sequences/weights/AESKConv_240_100.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5cd9566b24264f34d44003b3de62cdfd50aa85b7cdde2d369214599023c40f55
3
+ size 17558653
EMAGE/test_sequences/weights/mean_vel_smplxflame_30.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:53b5e48f2a7bf78c41a6de6395d6bb4f29018465ca5d0ee2820a2be3eebb7137
3
+ size 348
EMAGE/test_sequences/weights/vocab.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:54fbcea7b19e0ee9b5c5836c85087a682d3a9513041091ce3e95d83eed0b2acd
3
+ size 13821361
README.md CHANGED
@@ -1,12 +1,13 @@
1
  ---
2
  title: EMAGE
3
- emoji: 💻
4
- colorFrom: green
5
  colorTo: green
6
  sdk: gradio
7
  sdk_version: 4.24.0
8
  app_file: app.py
9
  pinned: false
 
10
  ---
11
 
12
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
  title: EMAGE
3
+ emoji:
4
+ colorFrom: yellow
5
  colorTo: green
6
  sdk: gradio
7
  sdk_version: 4.24.0
8
  app_file: app.py
9
  pinned: false
10
+ license: apache-2.0
11
  ---
12
 
13
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
ae_trainer.py ADDED
@@ -0,0 +1,375 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import train
2
+ import os
3
+ import time
4
+ import csv
5
+ import sys
6
+ import warnings
7
+ import random
8
+ import numpy as np
9
+ import time
10
+ import pprint
11
+ import pickle
12
+
13
+ import torch
14
+ import torch.nn as nn
15
+ import torch.nn.functional as F
16
+ from torch.utils.tensorboard import SummaryWriter
17
+ from torch.nn.parallel import DistributedDataParallel as DDP
18
+ from loguru import logger
19
+ import smplx
20
+
21
+ from utils import config, logger_tools, other_tools, metric
22
+ from utils import rotation_conversions as rc
23
+ from dataloaders import data_tools
24
+ from optimizers.optim_factory import create_optimizer
25
+ from optimizers.scheduler_factory import create_scheduler
26
+ from optimizers.loss_factory import get_loss_func
27
+ from scipy.spatial.transform import Rotation
28
+
29
+
30
+ class CustomTrainer(train.BaseTrainer):
31
+ """
32
+ motion representation learning
33
+ """
34
+ def __init__(self, args):
35
+ super().__init__(args)
36
+ self.joints = self.train_data.joints
37
+ self.smplx = smplx.create(
38
+ self.args.data_path_1+"smplx_models/",
39
+ model_type='smplx',
40
+ gender='NEUTRAL_2020',
41
+ use_face_contour=False,
42
+ num_betas=300,
43
+ num_expression_coeffs=100,
44
+ ext='npz',
45
+ use_pca=False,
46
+ ).cuda().eval()
47
+ self.tracker = other_tools.EpochTracker(["rec", "vel", "ver", "com", "kl", "acc"], [False, False, False, False, False, False])
48
+ if not self.args.rot6d: #"rot6d" not in args.pose_rep:
49
+ logger.error(f"this script is for rot6d, your pose rep. is {args.pose_rep}")
50
+ self.rec_loss = get_loss_func("GeodesicLoss")
51
+ self.vel_loss = torch.nn.L1Loss(reduction='mean')
52
+ self.vectices_loss = torch.nn.MSELoss(reduction='mean')
53
+
54
+ def inverse_selection(self, filtered_t, selection_array, n):
55
+ # 创建一个全为零的数组,形状为 n*165
56
+ original_shape_t = np.zeros((n, selection_array.size))
57
+
58
+ # 找到选择数组中为1的索引位置
59
+ selected_indices = np.where(selection_array == 1)[0]
60
+
61
+ # 将 filtered_t 的值填充到 original_shape_t 中相应的位置
62
+ for i in range(n):
63
+ original_shape_t[i, selected_indices] = filtered_t[i]
64
+
65
+ return original_shape_t
66
+
67
+ def inverse_selection_tensor(self, filtered_t, selection_array, n):
68
+ # 创建一个全为零的数组,形状为 n*165
69
+ selection_array = torch.from_numpy(selection_array).cuda()
70
+ original_shape_t = torch.zeros((n, 165)).cuda()
71
+
72
+ # 找到选择数组中为1的索引位置
73
+ selected_indices = torch.where(selection_array == 1)[0]
74
+
75
+ # 将 filtered_t 的值填充到 original_shape_t 中相应的位置
76
+ for i in range(n):
77
+ original_shape_t[i, selected_indices] = filtered_t[i]
78
+
79
+ return original_shape_t
80
+
81
+ def train(self, epoch):
82
+ self.model.train()
83
+ t_start = time.time()
84
+ self.tracker.reset()
85
+ for its, dict_data in enumerate(self.train_loader):
86
+ tar_pose = dict_data["pose"]
87
+ tar_beta = dict_data["beta"].cuda()
88
+ tar_trans = dict_data["trans"].cuda()
89
+ tar_pose = tar_pose.cuda()
90
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
91
+ tar_exps = torch.zeros((bs, n, 100)).cuda()
92
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
93
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
94
+ t_data = time.time() - t_start
95
+
96
+ self.opt.zero_grad()
97
+ g_loss_final = 0
98
+ net_out = self.model(tar_pose)
99
+ rec_pose = net_out["rec_pose"]
100
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
101
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
102
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
103
+ loss_rec = self.rec_loss(rec_pose, tar_pose) * self.args.rec_weight * self.args.rec_pos_weight
104
+ self.tracker.update_meter("rec", "train", loss_rec.item())
105
+ g_loss_final += loss_rec
106
+
107
+ velocity_loss = self.vel_loss(rec_pose[:, 1:] - rec_pose[:, :-1], tar_pose[:, 1:] - tar_pose[:, :-1]) * self.args.rec_weight
108
+ acceleration_loss = self.vel_loss(rec_pose[:, 2:] + rec_pose[:, :-2] - 2 * rec_pose[:, 1:-1], tar_pose[:, 2:] + tar_pose[:, :-2] - 2 * tar_pose[:, 1:-1]) * self.args.rec_weight
109
+ self.tracker.update_meter("vel", "train", velocity_loss.item())
110
+ self.tracker.update_meter("acc", "train", acceleration_loss.item())
111
+ g_loss_final += velocity_loss
112
+ g_loss_final += acceleration_loss
113
+ # vertices loss
114
+ if self.args.rec_ver_weight > 0:
115
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
116
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
117
+ rec_pose = self.inverse_selection_tensor(rec_pose, self.train_data.joint_mask, rec_pose.shape[0])
118
+ tar_pose = self.inverse_selection_tensor(tar_pose, self.train_data.joint_mask, tar_pose.shape[0])
119
+ vertices_rec = self.smplx(
120
+ betas=tar_beta.reshape(bs*n, 300),
121
+ transl=tar_trans.reshape(bs*n, 3),
122
+ expression=tar_exps.reshape(bs*n, 100),
123
+ jaw_pose=rec_pose[:, 66:69],
124
+ global_orient=rec_pose[:,:3],
125
+ body_pose=rec_pose[:,3:21*3+3],
126
+ left_hand_pose=rec_pose[:,25*3:40*3],
127
+ right_hand_pose=rec_pose[:,40*3:55*3],
128
+ return_verts=True,
129
+ return_joints=True,
130
+ leye_pose=tar_pose[:, 69:72],
131
+ reye_pose=tar_pose[:, 72:75],
132
+ )
133
+ vertices_tar = self.smplx(
134
+ betas=tar_beta.reshape(bs*n, 300),
135
+ transl=tar_trans.reshape(bs*n, 3),
136
+ expression=tar_exps.reshape(bs*n, 100),
137
+ jaw_pose=tar_pose[:, 66:69],
138
+ global_orient=tar_pose[:,:3],
139
+ body_pose=tar_pose[:,3:21*3+3],
140
+ left_hand_pose=tar_pose[:,25*3:40*3],
141
+ right_hand_pose=tar_pose[:,40*3:55*3],
142
+ return_verts=True,
143
+ return_joints=True,
144
+ leye_pose=tar_pose[:, 69:72],
145
+ reye_pose=tar_pose[:, 72:75],
146
+ )
147
+ vectices_loss = self.vectices_loss(vertices_rec['vertices'], vertices_tar['vertices'])
148
+ self.tracker.update_meter("ver", "train", vectices_loss.item()*self.args.rec_weight * self.args.rec_ver_weight)
149
+ g_loss_final += vectices_loss*self.args.rec_weight*self.args.rec_ver_weight
150
+
151
+ vertices_vel_loss = self.vel_loss(vertices_rec['vertices'][:, 1:] - vertices_rec['vertices'][:, :-1], vertices_tar['vertices'][:, 1:] - vertices_tar['vertices'][:, :-1]) * self.args.rec_weight
152
+ vertices_acc_loss = self.vel_loss(vertices_rec['vertices'][:, 2:] + vertices_rec['vertices'][:, :-2] - 2 * vertices_rec['vertices'][:, 1:-1], vertices_tar['vertices'][:, 2:] + vertices_tar['vertices'][:, :-2] - 2 * vertices_tar['vertices'][:, 1:-1]) * self.args.rec_weight
153
+ g_loss_final += vertices_vel_loss * self.args.rec_weight * self.args.rec_ver_weight
154
+ g_loss_final += vertices_acc_loss * self.args.rec_weight * self.args.rec_ver_weight
155
+
156
+ # if self.args.vel_weight > 0:
157
+ # pos_rec_vel = other_tools.estimate_linear_velocity(vertices_rec['joints'], 1/self.pose_fps)
158
+ # pos_tar_vel = other_tools.estimate_linear_velocity(vertices_tar['joints'], 1/self.pose_fps)
159
+ # vel_rec_loss = self.vel_loss(pos_rec_vel, pos_tar_vel)
160
+ # tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
161
+ # rec_pose = rc.axis_angle_to_matrix(rec_pose.reshape(bs, n, j, 3))
162
+ # rot_rec_vel = other_tools.estimate_angular_velocity(rec_pose, 1/self.pose_fps)
163
+ # rot_tar_vel = other_tools.estimate_angular_velocity(tar_pose, 1/self.pose_fps)
164
+ # vel_rec_loss += self.vel_loss(pos_rec_vel, pos_tar_vel)
165
+ # self.tracker.update_meter("vel", "train", vel_rec_loss.item()*self.args.vel_weight)
166
+ # loss += (vel_rec_loss*self.args.vel_weight)
167
+
168
+ # ---------------------- vae -------------------------- #
169
+ if "VQVAE" in self.args.g_name:
170
+ loss_embedding = net_out["embedding_loss"]
171
+ g_loss_final += loss_embedding
172
+ self.tracker.update_meter("com", "train", loss_embedding.item())
173
+ # elif "VAE" in self.args.g_name:
174
+ # pose_mu, pose_logvar = net_out["pose_mu"], net_out["pose_logvar"]
175
+ # KLD = -0.5 * torch.sum(1 + pose_logvar - pose_mu.pow(2) - pose_logvar.exp())
176
+ # if epoch < 0:
177
+ # KLD_weight = 0
178
+ # else:
179
+ # KLD_weight = min(1.0, (epoch - 0) * 0.05) * 0.01
180
+ # loss += KLD_weight * KLD
181
+ # self.tracker.update_meter("kl", "train", KLD_weight * KLD.item())
182
+ g_loss_final.backward()
183
+ if self.args.grad_norm != 0:
184
+ torch.nn.utils.clip_grad_norm_(self.model.parameters(), self.args.grad_norm)
185
+ self.opt.step()
186
+ t_train = time.time() - t_start - t_data
187
+ t_start = time.time()
188
+ mem_cost = torch.cuda.memory_cached() / 1E9
189
+ lr_g = self.opt.param_groups[0]['lr']
190
+ if its % self.args.log_period == 0:
191
+ self.train_recording(epoch, its, t_data, t_train, mem_cost, lr_g)
192
+ if self.args.debug:
193
+ if its == 1: break
194
+ self.opt_s.step(epoch)
195
+
196
+ def val(self, epoch):
197
+ self.model.eval()
198
+ t_start = time.time()
199
+ with torch.no_grad():
200
+ for its, dict_data in enumerate(self.val_loader):
201
+ tar_pose = dict_data["pose"]
202
+ tar_beta = dict_data["beta"].cuda()
203
+ tar_trans = dict_data["trans"].cuda()
204
+ tar_pose = tar_pose.cuda()
205
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
206
+ tar_exps = torch.zeros((bs, n, 100)).cuda()
207
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
208
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
209
+ t_data = time.time() - t_start
210
+
211
+ #self.opt.zero_grad()
212
+ #g_loss_final = 0
213
+ net_out = self.model(tar_pose)
214
+ rec_pose = net_out["rec_pose"]
215
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
216
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
217
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
218
+ loss_rec = self.rec_loss(rec_pose, tar_pose) * self.args.rec_weight * self.args.rec_pos_weight
219
+ self.tracker.update_meter("rec", "val", loss_rec.item())
220
+ #g_loss_final += loss_rec
221
+
222
+ # vertices loss
223
+ if self.args.rec_ver_weight > 0:
224
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
225
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
226
+ rec_pose = self.inverse_selection_tensor(rec_pose, self.train_data.joint_mask, rec_pose.shape[0])
227
+ tar_pose = self.inverse_selection_tensor(tar_pose, self.train_data.joint_mask, tar_pose.shape[0])
228
+ vertices_rec = self.smplx(
229
+ betas=tar_beta.reshape(bs*n, 300),
230
+ transl=tar_trans.reshape(bs*n, 3),
231
+ expression=tar_exps.reshape(bs*n, 100),
232
+ jaw_pose=rec_pose[:, 66:69],
233
+ global_orient=rec_pose[:,:3],
234
+ body_pose=rec_pose[:,3:21*3+3],
235
+ left_hand_pose=rec_pose[:,25*3:40*3],
236
+ right_hand_pose=rec_pose[:,40*3:55*3],
237
+ return_verts=True,
238
+ leye_pose=tar_pose[:, 69:72],
239
+ reye_pose=tar_pose[:, 72:75],
240
+ )
241
+ vertices_tar = self.smplx(
242
+ betas=tar_beta.reshape(bs*n, 300),
243
+ transl=tar_trans.reshape(bs*n, 3),
244
+ expression=tar_exps.reshape(bs*n, 100),
245
+ jaw_pose=tar_pose[:, 66:69],
246
+ global_orient=tar_pose[:,:3],
247
+ body_pose=tar_pose[:,3:21*3+3],
248
+ left_hand_pose=tar_pose[:,25*3:40*3],
249
+ right_hand_pose=tar_pose[:,40*3:55*3],
250
+ return_verts=True,
251
+ leye_pose=tar_pose[:, 69:72],
252
+ reye_pose=tar_pose[:, 72:75],
253
+ )
254
+ vectices_loss = self.vectices_loss(vertices_rec['vertices'], vertices_tar['vertices'])
255
+ self.tracker.update_meter("ver", "val", vectices_loss.item()*self.args.rec_weight * self.args.rec_ver_weight)
256
+ if "VQVAE" in self.args.g_name:
257
+ loss_embedding = net_out["embedding_loss"]
258
+ self.tracker.update_meter("com", "val", loss_embedding.item())
259
+ #g_loss_final += vectices_loss*self.args.rec_weight*self.args.rec_ver_weight
260
+ self.val_recording(epoch)
261
+
262
+ def test(self, epoch):
263
+ results_save_path = self.checkpoint_path + f"/{epoch}/"
264
+ if os.path.exists(results_save_path):
265
+ return 0
266
+ os.makedirs(results_save_path)
267
+ start_time = time.time()
268
+ total_length = 0
269
+ test_seq_list = self.test_data.selected_file
270
+ self.model.eval()
271
+ with torch.no_grad():
272
+ for its, dict_data in enumerate(self.test_loader):
273
+ tar_pose = dict_data["pose"]
274
+ tar_pose = tar_pose.cuda()
275
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
276
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
277
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
278
+ remain = n%self.args.pose_length
279
+ tar_pose = tar_pose[:, :n-remain, :]
280
+ #print(tar_pose.shape)
281
+ if True:
282
+ net_out = self.model(tar_pose)
283
+ rec_pose = net_out["rec_pose"]
284
+ n = rec_pose.shape[1]
285
+ tar_pose = tar_pose[:, :n, :]
286
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
287
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
288
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
289
+ rec_pose = rec_pose.cpu().numpy()
290
+ else:
291
+ pass
292
+ # for i in range(tar_pose.shape[1]//(self.args.vae_test_len)):
293
+ # tar_pose_new = tar_pose[:,i*(self.args.vae_test_len):i*(self.args.vae_test_len)+self.args.vae_test_len,:]
294
+ # net_out = self.model(**dict(inputs=tar_pose_new))
295
+ # rec_pose = net_out["rec_pose"]
296
+ # rec_pose = (rec_pose.reshape(rec_pose.shape[0], rec_pose.shape[1], -1, 6) * self.joint_level_mask_cuda).reshape(rec_pose.shape[0], rec_pose.shape[1], -1)
297
+ # if "rot6d" in self.args.pose_rep:
298
+ # rec_pose = data_transfer.rotation_6d_to_matrix(rec_pose.reshape(tar_pose.shape[0], self.args.vae_test_len, -1, 6))
299
+ # rec_pose = data_transfer.matrix_to_euler_angles(rec_pose, "XYZ").reshape(rec_pose.shape[0], rec_pose.shape[1], -1)
300
+ # if "smplx" not in self.args.pose_rep:
301
+ # rec_pose = torch.rad2deg(rec_pose)
302
+ # rec_pose = rec_pose * self.joint_mask_cuda
303
+
304
+ # out_sub = rec_pose.cpu().numpy().reshape(-1, rec_pose.shape[2])
305
+ # if i != 0:
306
+ # out_final = np.concatenate((out_final,out_sub), 0)
307
+ # else:
308
+ # out_final = out_sub
309
+
310
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
311
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
312
+ tar_pose = tar_pose.cpu().numpy()
313
+
314
+ total_length += n
315
+ # --- save --- #
316
+ if 'smplx' in self.args.pose_rep:
317
+ gt_npz = np.load(self.args.data_path+self.args.pose_rep+"/"+test_seq_list.iloc[its]['id']+'.npz', allow_pickle=True)
318
+ stride = int(30 / self.args.pose_fps)
319
+ tar_pose = self.inverse_selection(tar_pose, self.test_data.joint_mask, tar_pose.shape[0])
320
+ np.savez(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
321
+ betas=gt_npz["betas"],
322
+ poses=tar_pose[:n],
323
+ expressions=gt_npz["expressions"]-gt_npz["expressions"],
324
+ trans=gt_npz["trans"][::stride][:n] - gt_npz["trans"][::stride][:n],
325
+ model='smplx2020',
326
+ gender='neutral',
327
+ mocap_frame_rate = 30 ,
328
+ )
329
+ rec_pose = self.inverse_selection(rec_pose, self.test_data.joint_mask, rec_pose.shape[0])
330
+ np.savez(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
331
+ betas=gt_npz["betas"],
332
+ poses=rec_pose,
333
+ expressions=gt_npz["expressions"]-gt_npz["expressions"],
334
+ trans=gt_npz["trans"][::stride][:n] - gt_npz["trans"][::stride][:n],
335
+ model='smplx2020',
336
+ gender='neutral',
337
+ mocap_frame_rate = 30 ,
338
+ )
339
+ else:
340
+ rec_pose = rc.axis_angle_to_matrix(torch.from_numpy(rec_pose.reshape(bs*n, j, 3)))
341
+ rec_pose = np.rad2deg(rc.matrix_to_euler_angles(rec_pose, "XYZ")).reshape(bs*n, j*3).numpy()
342
+ tar_pose = rc.axis_angle_to_matrix(torch.from_numpy(tar_pose.reshape(bs*n, j, 3)))
343
+ tar_pose = np.rad2deg(rc.matrix_to_euler_angles(tar_pose, "XYZ")).reshape(bs*n, j*3).numpy()
344
+ #trans="0.000000 0.000000 0.000000"
345
+
346
+ with open(f"{self.args.data_path}{self.args.pose_rep}/{test_seq_list.iloc[its]['id']}.bvh", "r") as f_demo:
347
+ with open(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.bvh', 'w+') as f_gt:
348
+ with open(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.bvh', 'w+') as f_real:
349
+ for i, line_data in enumerate(f_demo.readlines()):
350
+ if i < 431:
351
+ f_real.write(line_data)
352
+ f_gt.write(line_data)
353
+ else: break
354
+ for line_id in range(n): #,args.pre_frames, args.pose_length
355
+ line_data = np.array2string(rec_pose[line_id], max_line_width=np.inf, precision=6, suppress_small=False, separator=' ')
356
+ f_real.write(line_data[1:-2]+'\n')
357
+ for line_id in range(n): #,args.pre_frames, args.pose_length
358
+ line_data = np.array2string(tar_pose[line_id], max_line_width=np.inf, precision=6, suppress_small=False, separator=' ')
359
+ f_gt.write(line_data[1:-2]+'\n')
360
+ # with open(results_save_path+"gt_"+test_seq_list[its]+'.pkl', 'wb') as fw:
361
+ # pickle.dump(new_dict, fw)
362
+ # #new_dict2["fullpose"] = out_final
363
+ # with open(results_save_path+"res_"+test_seq_list[its]+'.pkl', 'wb') as fw1:
364
+ # pickle.dump(new_dict2, fw1)
365
+
366
+ # other_tools.render_one_sequence(
367
+ # results_save_path+"res_"+test_seq_list[its]+'.pkl',
368
+ # results_save_path+"gt_"+test_seq_list[its]+'.pkl',
369
+ # results_save_path,
370
+ # self.args.data_path + self.args.test_data_path + 'wave16k/' + test_seq_list[its]+'.npy',
371
+ # )
372
+
373
+ #if its == 1:break
374
+ end_time = time.time() - start_time
375
+ logger.info(f"total inference time: {int(end_time)} s for {int(total_length/self.args.pose_fps)} s motion")
aeface_trainer.py ADDED
@@ -0,0 +1,388 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import train
2
+ import os
3
+ import time
4
+ import csv
5
+ import sys
6
+ import warnings
7
+ import random
8
+ import numpy as np
9
+ import time
10
+ import pprint
11
+ import pickle
12
+
13
+ import torch
14
+ import torch.nn as nn
15
+ import torch.nn.functional as F
16
+ from torch.utils.tensorboard import SummaryWriter
17
+ from torch.nn.parallel import DistributedDataParallel as DDP
18
+ from loguru import logger
19
+ import smplx
20
+
21
+ from utils import config, logger_tools, other_tools, metric
22
+ from utils import rotation_conversions as rc
23
+ from dataloaders import data_tools
24
+ from optimizers.optim_factory import create_optimizer
25
+ from optimizers.scheduler_factory import create_scheduler
26
+ from optimizers.loss_factory import get_loss_func
27
+ from scipy.spatial.transform import Rotation
28
+
29
+
30
+ class CustomTrainer(train.BaseTrainer):
31
+ """
32
+ motion representation learning
33
+ """
34
+ def __init__(self, args):
35
+ super().__init__(args)
36
+ self.joints = self.train_data.joints
37
+ self.tracker = other_tools.EpochTracker(["rec", "vel", "acc", "com", "face", "face_vel", "face_acc", "ver", "ver_vel", "ver_acc"], [False, False, False, False, False, False, False, False, False, False])
38
+ self.rec_loss = get_loss_func("GeodesicLoss")
39
+ self.mse_loss = torch.nn.MSELoss(reduction='mean')
40
+ self.vel_loss = torch.nn.MSELoss(reduction='mean') #torch.nn.L1Loss(reduction='mean')
41
+ self.vectices_loss = torch.nn.MSELoss(reduction='mean')
42
+
43
+ def inverse_selection(self, filtered_t, selection_array, n):
44
+ # 创建一个全为零的数组,形状为 n*165
45
+ original_shape_t = np.zeros((n, selection_array.size))
46
+
47
+ # 找到选择数组中为1的索引位置
48
+ selected_indices = np.where(selection_array == 1)[0]
49
+
50
+ # 将 filtered_t 的值填充到 original_shape_t 中相应的位置
51
+ for i in range(n):
52
+ original_shape_t[i, selected_indices] = filtered_t[i]
53
+
54
+ return original_shape_t
55
+
56
+ def train(self, epoch):
57
+ self.model.train()
58
+ t_start = time.time()
59
+ self.tracker.reset()
60
+ for its, dict_data in enumerate(self.train_loader):
61
+ tar_pose = dict_data["pose"]
62
+ tar_beta = dict_data["beta"].cuda()
63
+ tar_trans = dict_data["trans"].cuda()
64
+ tar_pose = tar_pose.cuda()
65
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
66
+ tar_exps = dict_data["facial"].to(self.rank)
67
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
68
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
69
+ in_tar_pose = torch.cat([tar_pose, tar_exps], -1) # 103
70
+ t_data = time.time() - t_start
71
+
72
+ self.opt.zero_grad()
73
+ g_loss_final = 0
74
+ net_out = self.model(in_tar_pose)
75
+ # jaw open 6d loss
76
+ rec_pose = net_out["rec_pose"][:, :, :j*6]
77
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
78
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
79
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
80
+ loss_rec = self.rec_loss(rec_pose, tar_pose) * self.args.rec_weight * self.args.rec_pos_weight
81
+ self.tracker.update_meter("rec", "train", loss_rec.item())
82
+ g_loss_final += loss_rec
83
+ # jaw open 6d vel and acc loss
84
+ velocity_loss = self.vel_loss(rec_pose[:, 1:] - rec_pose[:, :-1], tar_pose[:, 1:] - tar_pose[:, :-1]) * self.args.rec_weight
85
+ acceleration_loss = self.vel_loss(rec_pose[:, 2:] + rec_pose[:, :-2] - 2 * rec_pose[:, 1:-1], tar_pose[:, 2:] + tar_pose[:, :-2] - 2 * tar_pose[:, 1:-1]) * self.args.rec_weight
86
+ self.tracker.update_meter("vel", "train", velocity_loss.item())
87
+ self.tracker.update_meter("acc", "train", acceleration_loss.item())
88
+ g_loss_final += velocity_loss
89
+ g_loss_final += acceleration_loss
90
+ # face parameter l1 loss
91
+ rec_exps = net_out["rec_pose"][:, :, j*6:]
92
+ loss_face = self.mse_loss(rec_exps, tar_exps) * self.args.rec_weight
93
+ self.tracker.update_meter("face", "train", loss_face.item())
94
+ g_loss_final += loss_face
95
+ # face parameter l1 vel and acc loss
96
+ face_velocity_loss = self.vel_loss(rec_exps[:, 1:] - rec_exps[:, :-1], tar_exps[:, 1:] - tar_exps[:, :-1]) * self.args.rec_weight
97
+ face_acceleration_loss = self.vel_loss(rec_exps[:, 2:] + rec_exps[:, :-2] - 2 * rec_exps[:, 1:-1], tar_exps[:, 2:] + tar_exps[:, :-2] - 2 * tar_exps[:, 1:-1]) * self.args.rec_weight
98
+ self.tracker.update_meter("face_vel", "train", face_velocity_loss.item())
99
+ self.tracker.update_meter("face_acc", "train", face_acceleration_loss.item())
100
+ g_loss_final += face_velocity_loss
101
+ g_loss_final += face_acceleration_loss
102
+
103
+ # vertices loss
104
+ if self.args.rec_ver_weight > 0:
105
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
106
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
107
+ vertices_rec = self.smplx(
108
+ betas=tar_beta.reshape(bs*n, 300),
109
+ transl=tar_trans.reshape(bs*n, 3)-tar_trans.reshape(bs*n, 3),
110
+ expression=tar_exps.reshape(bs*n, 100),
111
+ jaw_pose=rec_pose,
112
+ global_orient=torch.zeros(bs*n, 3).cuda(),
113
+ body_pose=torch.zeros(bs*n, 21*3).cuda(),
114
+ left_hand_pose=torch.zeros(bs*n, 15*3).cuda(),
115
+ right_hand_pose=torch.zeros(bs*n, 15*3).cuda(),
116
+ return_verts=True,
117
+ # return_joints=True,
118
+ leye_pose=torch.zeros(bs*n, 3).cuda(),
119
+ reye_pose=torch.zeros(bs*n, 3).cuda(),
120
+ )
121
+ vertices_tar = self.smplx(
122
+ betas=tar_beta.reshape(bs*n, 300),
123
+ transl=tar_trans.reshape(bs*n, 3)-tar_trans.reshape(bs*n, 3),
124
+ expression=rec_exps.reshape(bs*n, 100),
125
+ jaw_pose=tar_pose,
126
+ global_orient=torch.zeros(bs*n, 3).cuda(),
127
+ body_pose=torch.zeros(bs*n, 21*3).cuda(),
128
+ left_hand_pose=torch.zeros(bs*n, 15*3).cuda(),
129
+ right_hand_pose=torch.zeros(bs*n, 15*3).cuda(),
130
+ return_verts=True,
131
+ # return_joints=True,
132
+ leye_pose=torch.zeros(bs*n, 3).cuda(),
133
+ reye_pose=torch.zeros(bs*n, 3).cuda(),
134
+ )
135
+ vectices_loss = self.mse_loss(vertices_rec['vertices'], vertices_tar['vertices'])
136
+ self.tracker.update_meter("ver", "train", vectices_loss.item()*self.args.rec_weight * self.args.rec_ver_weight)
137
+ g_loss_final += vectices_loss*self.args.rec_weight*self.args.rec_ver_weight
138
+ # vertices vel and acc loss
139
+ vert_velocity_loss = self.vel_loss(vertices_rec['vertices'][:, 1:] - vertices_rec['vertices'][:, :-1], vertices_tar['vertices'][:, 1:] - vertices_tar['vertices'][:, :-1]) * self.args.rec_weight * self.args.rec_ver_weight
140
+ vert_acceleration_loss = self.vel_loss(vertices_rec['vertices'][:, 2:] + vertices_rec['vertices'][:, :-2] - 2 * vertices_rec['vertices'][:, 1:-1], vertices_tar['vertices'][:, 2:] + vertices_tar['vertices'][:, :-2] - 2 * vertices_tar['vertices'][:, 1:-1]) * self.args.rec_weight * self.args.rec_ver_weight
141
+ self.tracker.update_meter("ver_vel", "train", vert_velocity_loss.item())
142
+ self.tracker.update_meter("ver_acc", "train", vert_acceleration_loss.item())
143
+ g_loss_final += vert_velocity_loss
144
+ g_loss_final += vert_acceleration_loss
145
+
146
+ # ---------------------- vae -------------------------- #
147
+ if "VQVAE" in self.args.g_name:
148
+ loss_embedding = net_out["embedding_loss"]
149
+ g_loss_final += loss_embedding
150
+ self.tracker.update_meter("com", "train", loss_embedding.item())
151
+ # elif "VAE" in self.args.g_name:
152
+ # pose_mu, pose_logvar = net_out["pose_mu"], net_out["pose_logvar"]
153
+ # KLD = -0.5 * torch.sum(1 + pose_logvar - pose_mu.pow(2) - pose_logvar.exp())
154
+ # if epoch < 0:
155
+ # KLD_weight = 0
156
+ # else:
157
+ # KLD_weight = min(1.0, (epoch - 0) * 0.05) * 0.01
158
+ # loss += KLD_weight * KLD
159
+ # self.tracker.update_meter("kl", "train", KLD_weight * KLD.item())
160
+ g_loss_final.backward()
161
+ if self.args.grad_norm != 0:
162
+ torch.nn.utils.clip_grad_norm_(self.model.parameters(), self.args.grad_norm)
163
+ self.opt.step()
164
+ t_train = time.time() - t_start - t_data
165
+ t_start = time.time()
166
+ mem_cost = torch.cuda.memory_cached() / 1E9
167
+ lr_g = self.opt.param_groups[0]['lr']
168
+ if its % self.args.log_period == 0:
169
+ self.train_recording(epoch, its, t_data, t_train, mem_cost, lr_g)
170
+ if self.args.debug:
171
+ if its == 1: break
172
+ self.opt_s.step(epoch)
173
+
174
+ def val(self, epoch):
175
+ self.model.eval()
176
+ t_start = time.time()
177
+ with torch.no_grad():
178
+ for its, dict_data in enumerate(self.val_loader):
179
+ tar_pose = dict_data["pose"]
180
+ tar_beta = dict_data["beta"].cuda()
181
+ tar_trans = dict_data["trans"].cuda()
182
+ tar_pose = tar_pose.cuda()
183
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
184
+ tar_exps = dict_data["facial"].to(self.rank)
185
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
186
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
187
+ in_tar_pose = torch.cat([tar_pose, tar_exps], -1) # 103
188
+ # print(tar_pose.shape, in_tar_pose.shape, tar_exps.shape)
189
+ t_data = time.time() - t_start
190
+
191
+ #self.opt.zero_grad()
192
+ #g_loss_final = 0
193
+ net_out = self.model(in_tar_pose)
194
+ # jaw open 6d loss
195
+ rec_pose = net_out["rec_pose"][:, :, :j*6]
196
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
197
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
198
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
199
+ loss_rec = self.rec_loss(rec_pose, tar_pose) * self.args.rec_weight * self.args.rec_pos_weight
200
+ self.tracker.update_meter("rec", "val", loss_rec.item())
201
+ # g_loss_final += loss_rec
202
+ # jaw open 6d vel and acc loss
203
+ velocity_loss = self.vel_loss(rec_pose[:, 1:] - rec_pose[:, :-1], tar_pose[:, 1:] - tar_pose[:, :-1]) * self.args.rec_weight
204
+ acceleration_loss = self.vel_loss(rec_pose[:, 2:] + rec_pose[:, :-2] - 2 * rec_pose[:, 1:-1], tar_pose[:, 2:] + tar_pose[:, :-2] - 2 * tar_pose[:, 1:-1]) * self.args.rec_weight
205
+ self.tracker.update_meter("vel", "val", velocity_loss.item())
206
+ self.tracker.update_meter("acc", "val", acceleration_loss.item())
207
+ # g_loss_final += velocity_loss
208
+ # g_loss_final += acceleration_loss
209
+ # face parameter l1 loss
210
+ rec_exps = net_out["rec_pose"][:, :, j*6:]
211
+ loss_face = self.vel_loss(rec_exps, tar_exps) * self.args.rec_weight
212
+ self.tracker.update_meter("face", "val", loss_face.item())
213
+ # g_loss_final += loss_face
214
+ # face parameter l1 vel and acc loss
215
+ face_velocity_loss = self.vel_loss(rec_exps[:, 1:] - rec_exps[:, :-1], tar_exps[:, 1:] - tar_exps[:, :-1]) * self.args.rec_weight
216
+ face_acceleration_loss = self.vel_loss(rec_exps[:, 2:] + rec_exps[:, :-2] - 2 * rec_exps[:, 1:-1], tar_exps[:, 2:] + tar_exps[:, :-2] - 2 * tar_exps[:, 1:-1]) * self.args.rec_weight
217
+ self.tracker.update_meter("face_vel", "val", face_velocity_loss.item())
218
+ self.tracker.update_meter("face_acc", "val", face_acceleration_loss.item())
219
+ # g_loss_final += face_velocity_loss
220
+ # g_loss_final += face_acceleration_loss
221
+
222
+ # vertices loss
223
+ if self.args.rec_ver_weight > 0:
224
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
225
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
226
+ vertices_rec = self.smplx(
227
+ betas=tar_beta.reshape(bs*n, 300),
228
+ transl=tar_trans.reshape(bs*n, 3)-tar_trans.reshape(bs*n, 3),
229
+ expression=tar_exps.reshape(bs*n, 100),
230
+ jaw_pose=rec_pose,
231
+ global_orient=torch.zeros(bs*n, 3).cuda(),
232
+ body_pose=torch.zeros(bs*n, 21*3).cuda(),
233
+ left_hand_pose=torch.zeros(bs*n, 15*3).cuda(),
234
+ right_hand_pose=torch.zeros(bs*n, 15*3).cuda(),
235
+ return_verts=True,
236
+ # return_joints=True,
237
+ leye_pose=torch.zeros(bs*n, 3).cuda(),
238
+ reye_pose=torch.zeros(bs*n, 3).cuda(),
239
+ )
240
+ vertices_tar = self.smplx(
241
+ betas=tar_beta.reshape(bs*n, 300),
242
+ transl=tar_trans.reshape(bs*n, 3)-tar_trans.reshape(bs*n, 3),
243
+ expression=rec_exps.reshape(bs*n, 100),
244
+ jaw_pose=tar_pose,
245
+ global_orient=torch.zeros(bs*n, 3).cuda(),
246
+ body_pose=torch.zeros(bs*n, 21*3).cuda(),
247
+ left_hand_pose=torch.zeros(bs*n, 15*3).cuda(),
248
+ right_hand_pose=torch.zeros(bs*n, 15*3).cuda(),
249
+ return_verts=True,
250
+ # return_joints=True,
251
+ leye_pose=torch.zeros(bs*n, 3).cuda(),
252
+ reye_pose=torch.zeros(bs*n, 3).cuda(),
253
+ )
254
+ vectices_loss = self.mse_loss(vertices_rec['vertices'], vertices_tar['vertices'])
255
+ self.tracker.update_meter("ver", "val", vectices_loss.item()*self.args.rec_weight * self.args.rec_ver_weight)
256
+ # g_loss_final += vectices_loss*self.args.rec_weight*self.args.rec_ver_weight
257
+ # vertices vel and acc loss
258
+ vert_velocity_loss = self.vel_loss(vertices_rec['vertices'][:, 1:] - vertices_rec['vertices'][:, :-1], vertices_tar['vertices'][:, 1:] - vertices_tar['vertices'][:, :-1]) * self.args.rec_weight * self.args.rec_ver_weight
259
+ vert_acceleration_loss = self.vel_loss(vertices_rec['vertices'][:, 2:] + vertices_rec['vertices'][:, :-2] - 2 * vertices_rec['vertices'][:, 1:-1], vertices_tar['vertices'][:, 2:] + vertices_tar['vertices'][:, :-2] - 2 * vertices_tar['vertices'][:, 1:-1]) * self.args.rec_weight * self.args.rec_ver_weight
260
+ self.tracker.update_meter("ver_vel", "val", vert_velocity_loss.item())
261
+ self.tracker.update_meter("ver_acc", "val", vert_acceleration_loss.item())
262
+ # g_loss_final += vert_velocity_loss
263
+ # g_loss_final += vert_acceleration_loss
264
+ if "VQVAE" in self.args.g_name:
265
+ loss_embedding = net_out["embedding_loss"]
266
+ self.tracker.update_meter("com", "val", loss_embedding.item())
267
+ #g_loss_final += vectices_loss*self.args.rec_weight*self.args.rec_ver_weight
268
+ self.val_recording(epoch)
269
+
270
+ def test(self, epoch):
271
+ results_save_path = self.checkpoint_path + f"/{epoch}/"
272
+ if os.path.exists(results_save_path):
273
+ return 0
274
+ os.makedirs(results_save_path)
275
+ start_time = time.time()
276
+ total_length = 0
277
+ test_seq_list = self.test_data.selected_file
278
+ self.model.eval()
279
+ with torch.no_grad():
280
+ for its, dict_data in enumerate(self.test_loader):
281
+ tar_pose = dict_data["pose"]
282
+ tar_pose = tar_pose.cuda()
283
+ tar_exps = dict_data["facial"].to(self.rank)
284
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
285
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
286
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
287
+ remain = n%self.args.pose_length
288
+ tar_pose = tar_pose[:, :n-remain, :]
289
+ # print(tar_exps.shape)
290
+ in_tar_pose = torch.cat([tar_pose, tar_exps[:, :n-remain, :]], -1) # 103
291
+ #print(tar_pose.shape)
292
+ if True:
293
+ net_out = self.model(in_tar_pose)
294
+ rec_pose = net_out["rec_pose"][:, :, :j*6]
295
+ n = rec_pose.shape[1]
296
+ tar_pose = tar_pose[:, :n, :]
297
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
298
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
299
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
300
+ rec_pose = rec_pose.cpu().numpy()
301
+ rec_exps = net_out["rec_pose"][:, :, j*6:]
302
+ rec_exps = rec_exps.cpu().numpy().reshape(bs*n, 100)
303
+ else:
304
+ pass
305
+ # for i in range(tar_pose.shape[1]//(self.args.vae_test_len)):
306
+ # tar_pose_new = tar_pose[:,i*(self.args.vae_test_len):i*(self.args.vae_test_len)+self.args.vae_test_len,:]
307
+ # net_out = self.model(**dict(inputs=tar_pose_new))
308
+ # rec_pose = net_out["rec_pose"]
309
+ # rec_pose = (rec_pose.reshape(rec_pose.shape[0], rec_pose.shape[1], -1, 6) * self.joint_level_mask_cuda).reshape(rec_pose.shape[0], rec_pose.shape[1], -1)
310
+ # if "rot6d" in self.args.pose_rep:
311
+ # rec_pose = data_transfer.rotation_6d_to_matrix(rec_pose.reshape(tar_pose.shape[0], self.args.vae_test_len, -1, 6))
312
+ # rec_pose = data_transfer.matrix_to_euler_angles(rec_pose, "XYZ").reshape(rec_pose.shape[0], rec_pose.shape[1], -1)
313
+ # if "smplx" not in self.args.pose_rep:
314
+ # rec_pose = torch.rad2deg(rec_pose)
315
+ # rec_pose = rec_pose * self.joint_mask_cuda
316
+
317
+ # out_sub = rec_pose.cpu().numpy().reshape(-1, rec_pose.shape[2])
318
+ # if i != 0:
319
+ # out_final = np.concatenate((out_final,out_sub), 0)
320
+ # else:
321
+ # out_final = out_sub
322
+
323
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
324
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
325
+ tar_pose = tar_pose.cpu().numpy()
326
+
327
+ total_length += n
328
+ # --- save --- #
329
+ if 'smplx' in self.args.pose_rep:
330
+ gt_npz = np.load(self.args.data_path+self.args.pose_rep+"/"+test_seq_list.iloc[its]['id']+'.npz', allow_pickle=True)
331
+ stride = int(30 / self.args.pose_fps)
332
+ tar_pose = self.inverse_selection(tar_pose, self.test_data.joint_mask, tar_pose.shape[0])
333
+ np.savez(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
334
+ betas=gt_npz["betas"],
335
+ poses=tar_pose[:n],
336
+ expressions=gt_npz["expressions"],
337
+ trans=gt_npz["trans"][::stride][:n] - gt_npz["trans"][::stride][:n],
338
+ model='smplx2020',
339
+ gender='neutral',
340
+ mocap_frame_rate = 30 ,
341
+ )
342
+ rec_pose = self.inverse_selection(rec_pose, self.test_data.joint_mask, rec_pose.shape[0])
343
+ np.savez(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
344
+ betas=gt_npz["betas"],
345
+ poses=rec_pose,
346
+ expressions=rec_exps,
347
+ trans=gt_npz["trans"][::stride][:n] - gt_npz["trans"][::stride][:n],
348
+ model='smplx2020',
349
+ gender='neutral',
350
+ mocap_frame_rate = 30 ,
351
+ )
352
+ else:
353
+ rec_pose = rc.axis_angle_to_matrix(torch.from_numpy(rec_pose.reshape(bs*n, j, 3)))
354
+ rec_pose = np.rad2deg(rc.matrix_to_euler_angles(rec_pose, "XYZ")).reshape(bs*n, j*3).numpy()
355
+ tar_pose = rc.axis_angle_to_matrix(torch.from_numpy(tar_pose.reshape(bs*n, j, 3)))
356
+ tar_pose = np.rad2deg(rc.matrix_to_euler_angles(tar_pose, "XYZ")).reshape(bs*n, j*3).numpy()
357
+ #trans="0.000000 0.000000 0.000000"
358
+
359
+ with open(f"{self.args.data_path}{self.args.pose_rep}/{test_seq_list.iloc[its]['id']}.bvh", "r") as f_demo:
360
+ with open(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.bvh', 'w+') as f_gt:
361
+ with open(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.bvh', 'w+') as f_real:
362
+ for i, line_data in enumerate(f_demo.readlines()):
363
+ if i < 431:
364
+ f_real.write(line_data)
365
+ f_gt.write(line_data)
366
+ else: break
367
+ for line_id in range(n): #,args.pre_frames, args.pose_length
368
+ line_data = np.array2string(rec_pose[line_id], max_line_width=np.inf, precision=6, suppress_small=False, separator=' ')
369
+ f_real.write(line_data[1:-2]+'\n')
370
+ for line_id in range(n): #,args.pre_frames, args.pose_length
371
+ line_data = np.array2string(tar_pose[line_id], max_line_width=np.inf, precision=6, suppress_small=False, separator=' ')
372
+ f_gt.write(line_data[1:-2]+'\n')
373
+ # with open(results_save_path+"gt_"+test_seq_list[its]+'.pkl', 'wb') as fw:
374
+ # pickle.dump(new_dict, fw)
375
+ # #new_dict2["fullpose"] = out_final
376
+ # with open(results_save_path+"res_"+test_seq_list[its]+'.pkl', 'wb') as fw1:
377
+ # pickle.dump(new_dict2, fw1)
378
+
379
+ # other_tools.render_one_sequence(
380
+ # results_save_path+"res_"+test_seq_list[its]+'.pkl',
381
+ # results_save_path+"gt_"+test_seq_list[its]+'.pkl',
382
+ # results_save_path,
383
+ # self.args.data_path + self.args.test_data_path + 'wave16k/' + test_seq_list[its]+'.npy',
384
+ # )
385
+
386
+ #if its == 1:break
387
+ end_time = time.time() - start_time
388
+ logger.info(f"total inference time: {int(end_time)} s for {int(total_length/self.args.pose_fps)} s motion")
aelower_trainer.py ADDED
@@ -0,0 +1,494 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import train
2
+ import os
3
+ import time
4
+ import csv
5
+ import sys
6
+ import warnings
7
+ import random
8
+ import numpy as np
9
+ import time
10
+ import pprint
11
+ import pickle
12
+
13
+ import torch
14
+ import torch.nn as nn
15
+ import torch.nn.functional as F
16
+ from torch.utils.tensorboard import SummaryWriter
17
+ from torch.nn.parallel import DistributedDataParallel as DDP
18
+ from loguru import logger
19
+ import smplx
20
+
21
+ from utils import config, logger_tools, other_tools, metric
22
+ from utils import rotation_conversions as rc
23
+ from dataloaders import data_tools
24
+ from optimizers.optim_factory import create_optimizer
25
+ from optimizers.scheduler_factory import create_scheduler
26
+ from optimizers.loss_factory import get_loss_func
27
+ from scipy.spatial.transform import Rotation
28
+
29
+
30
+ class CustomTrainer(train.BaseTrainer):
31
+ """
32
+ motion representation learning
33
+ """
34
+ def __init__(self, args):
35
+ super().__init__(args)
36
+ self.joints = self.train_data.joints
37
+ self.smplx = smplx.create(
38
+ self.args.data_path_1+"smplx_models/",
39
+ model_type='smplx',
40
+ gender='NEUTRAL_2020',
41
+ use_face_contour=False,
42
+ num_betas=300,
43
+ num_expression_coeffs=100,
44
+ ext='npz',
45
+ use_pca=False,
46
+ ).cuda().eval()
47
+ self.tracker = other_tools.EpochTracker(["rec", "contact", "vel", "foot", "ver", "com", "kl", "acc", "trans", "transv"], [False,False, False, False, False, False, False, False, False, False])
48
+ if not self.args.rot6d: #"rot6d" not in args.pose_rep:
49
+ logger.error(f"this script is for rot6d, your pose rep. is {args.pose_rep}")
50
+ self.rec_loss = get_loss_func("GeodesicLoss")
51
+ self.vel_loss = torch.nn.L1Loss(reduction='mean')
52
+ self.vectices_loss = torch.nn.MSELoss(reduction='mean')
53
+
54
+ def inverse_selection(self, filtered_t, selection_array, n):
55
+ # 创建一个全为零的数组,形状为 n*165
56
+ original_shape_t = np.zeros((n, selection_array.size))
57
+
58
+ # 找到选择数组中为1的索引位置
59
+ selected_indices = np.where(selection_array == 1)[0]
60
+
61
+ # 将 filtered_t 的值填充到 original_shape_t 中相应的位置
62
+ for i in range(n):
63
+ original_shape_t[i, selected_indices] = filtered_t[i]
64
+
65
+ return original_shape_t
66
+
67
+ def inverse_selection_tensor(self, filtered_t, selection_array, n):
68
+ # 创建一个全为零的数组,形状为 n*165
69
+ selection_array = torch.from_numpy(selection_array).cuda()
70
+ original_shape_t = torch.zeros((n, 165)).cuda()
71
+
72
+ # 找到选择数组中为1的索引位置
73
+ selected_indices = torch.where(selection_array == 1)[0]
74
+
75
+ # 将 filtered_t 的值填充到 original_shape_t 中相应的位置
76
+ for i in range(n):
77
+ original_shape_t[i, selected_indices] = filtered_t[i]
78
+
79
+ return original_shape_t
80
+
81
+
82
+ def train(self, epoch):
83
+ self.model.train()
84
+ t_start = time.time()
85
+ self.tracker.reset()
86
+ for its, dict_data in enumerate(self.train_loader):
87
+ tar_pose_raw = dict_data["pose"]
88
+ tar_beta = dict_data["beta"].cuda()
89
+ tar_trans = dict_data["trans"].cuda()
90
+ tar_trans_vel_x = other_tools.estimate_linear_velocity(tar_trans[:, :, 0:1], dt=1/self.args.pose_fps)
91
+ tar_trans_vel_z = other_tools.estimate_linear_velocity(tar_trans[:, :, 2:3], dt=1/self.args.pose_fps)
92
+ tar_pose = tar_pose_raw[:, :, :27].cuda()
93
+ tar_contact = tar_pose_raw[:, :, 27:31].cuda()
94
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
95
+ tar_exps = torch.zeros((bs, n, 100)).cuda()
96
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
97
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
98
+ tar_trans_copy = tar_trans-tar_trans
99
+ tar_contact_copy = tar_contact-tar_contact
100
+ in_tar_pose = torch.cat((tar_pose, tar_trans_copy, tar_contact_copy), dim=-1)
101
+
102
+ t_data = time.time() - t_start
103
+
104
+ self.opt.zero_grad()
105
+ g_loss_final = 0
106
+ net_out = self.model(in_tar_pose)
107
+ rec_pose = tar_pose#net_out["rec_pose"][:, :, :j*6]
108
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
109
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
110
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
111
+ # loss_rec = self.rec_loss(rec_pose, tar_pose) * self.args.rec_weight * self.args.rec_pos_weight
112
+ # self.tracker.update_meter("rec", "train", loss_rec.item())
113
+ # g_loss_final += loss_rec
114
+
115
+ rec_contact = net_out["rec_pose"][:, :, j*6+3:j*6+7]
116
+ loss_contact = self.vectices_loss(rec_contact, tar_contact) * self.args.rec_weight * self.args.rec_pos_weight
117
+ self.tracker.update_meter("contact", "train", loss_contact.item())
118
+ g_loss_final += loss_contact
119
+
120
+ # velocity_loss = self.vel_loss(rec_pose[:, 1:] - rec_pose[:, :-1], tar_pose[:, 1:] - tar_pose[:, :-1]) * self.args.rec_weight
121
+ # acceleration_loss = self.vel_loss(rec_pose[:, 2:] + rec_pose[:, :-2] - 2 * rec_pose[:, 1:-1], tar_pose[:, 2:] + tar_pose[:, :-2] - 2 * tar_pose[:, 1:-1]) * self.args.rec_weight
122
+ # self.tracker.update_meter("vel", "train", velocity_loss.item())
123
+ # self.tracker.update_meter("acc", "train", acceleration_loss.item())
124
+ # g_loss_final += velocity_loss
125
+ # g_loss_final += acceleration_loss
126
+
127
+ rec_trans = net_out["rec_pose"][:, :, j*6:j*6+3]
128
+ rec_x_trans = other_tools.velocity2position(rec_trans[:, :, 0:1], 1/self.args.pose_fps, tar_trans[:, 0, 0:1])
129
+ rec_z_trans = other_tools.velocity2position(rec_trans[:, :, 2:3], 1/self.args.pose_fps, tar_trans[:, 0, 2:3])
130
+ rec_y_trans = rec_trans[:,:,1:2]
131
+ rec_xyz_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
132
+ loss_trans_vel = self.vel_loss(rec_trans[:, :, 0:1], tar_trans_vel_x) * self.args.rec_weight \
133
+ + self.vel_loss(rec_trans[:, :, 2:3], tar_trans_vel_z) * self.args.rec_weight
134
+ v3 = self.vel_loss(rec_trans[:, :, 0:1][:, 1:] - rec_trans[:, :, 0:1][:, :-1], tar_trans_vel_x[:, 1:] - tar_trans_vel_x[:, :-1]) * self.args.rec_weight \
135
+ + self.vel_loss(rec_trans[:, :, 2:3][:, 1:] - rec_trans[:, :, 2:3][:, :-1], tar_trans_vel_z[:, 1:] - tar_trans_vel_z[:, :-1]) * self.args.rec_weight
136
+ a3 = self.vel_loss(rec_trans[:, :, 0:1][:, 2:] + rec_trans[:, :, 0:1][:, :-2] - 2 * rec_trans[:, :, 0:1][:, 1:-1], tar_trans_vel_x[:, 2:] + tar_trans_vel_x[:, :-2] - 2 * tar_trans_vel_x[:, 1:-1]) * self.args.rec_weight \
137
+ + self.vel_loss(rec_trans[:, :, 2:3][:, 2:] + rec_trans[:, :, 2:3][:, :-2] - 2 * rec_trans[:, :, 2:3][:, 1:-1], tar_trans_vel_z[:, 2:] + tar_trans_vel_z[:, :-2] - 2 * tar_trans_vel_z[:, 1:-1]) * self.args.rec_weight
138
+ g_loss_final += 5*v3
139
+ g_loss_final += 5*a3
140
+ v2 = self.vel_loss(rec_xyz_trans[:, 1:] - rec_xyz_trans[:, :-1], tar_trans[:, 1:] - tar_trans[:, :-1]) * self.args.rec_weight
141
+ a2 = self.vel_loss(rec_xyz_trans[:, 2:] + rec_xyz_trans[:, :-2] - 2 * rec_xyz_trans[:, 1:-1], tar_trans[:, 2:] + tar_trans[:, :-2] - 2 * tar_trans[:, 1:-1]) * self.args.rec_weight
142
+ g_loss_final += 5*v2
143
+ g_loss_final += 5*a2
144
+ self.tracker.update_meter("transv", "train", loss_trans_vel.item())
145
+ g_loss_final += loss_trans_vel
146
+ loss_trans = self.vel_loss(rec_xyz_trans, tar_trans) * self.args.rec_weight
147
+ self.tracker.update_meter("trans", "train", loss_trans.item())
148
+ g_loss_final += loss_trans
149
+
150
+ # vertices loss
151
+ if self.args.rec_ver_weight > 0:
152
+ # print(tar_pose.shape, j)
153
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
154
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
155
+ rec_pose = self.inverse_selection_tensor(rec_pose, self.train_data.joint_mask, rec_pose.shape[0])
156
+ tar_pose = self.inverse_selection_tensor(tar_pose, self.train_data.joint_mask, tar_pose.shape[0])
157
+ vertices_rec = self.smplx(
158
+ betas=tar_beta.reshape(bs*n, 300),
159
+ transl=rec_xyz_trans.reshape(bs*n, 3),
160
+ expression=tar_exps.reshape(bs*n, 100),
161
+ jaw_pose=rec_pose[:, 66:69],
162
+ global_orient=rec_pose[:,:3],
163
+ body_pose=rec_pose[:,3:21*3+3],
164
+ left_hand_pose=rec_pose[:,25*3:40*3],
165
+ right_hand_pose=rec_pose[:,40*3:55*3],
166
+ return_verts=True,
167
+ return_joints=True,
168
+ leye_pose=tar_pose[:, 69:72],
169
+ reye_pose=tar_pose[:, 72:75],
170
+ )
171
+ vertices_tar = self.smplx(
172
+ betas=tar_beta.reshape(bs*n, 300),
173
+ transl=tar_trans.reshape(bs*n, 3),
174
+ expression=tar_exps.reshape(bs*n, 100),
175
+ jaw_pose=tar_pose[:, 66:69],
176
+ global_orient=tar_pose[:,:3],
177
+ body_pose=tar_pose[:,3:21*3+3],
178
+ left_hand_pose=tar_pose[:,25*3:40*3],
179
+ right_hand_pose=tar_pose[:,40*3:55*3],
180
+ return_verts=True,
181
+ return_joints=True,
182
+ leye_pose=tar_pose[:, 69:72],
183
+ reye_pose=tar_pose[:, 72:75],
184
+ )
185
+ joints_rec = vertices_rec['joints']
186
+ # print(joints_rec.shape)
187
+ joints_rec = joints_rec.reshape(bs, n, -1, 3)
188
+ vectices_loss = self.vectices_loss(vertices_rec['vertices'], vertices_tar['vertices'])
189
+ vertices_vel_loss = self.vectices_loss(
190
+ vertices_rec['vertices'][:, 1:] - vertices_rec['vertices'][:, :-1],
191
+ vertices_tar['vertices'][:, 1:] - vertices_tar['vertices'][:, :-1])
192
+ vertices_acc_loss = self.vectices_loss(
193
+ vertices_rec['vertices'][:, 2:] + vertices_rec['vertices'][:, :-2] - 2 * vertices_rec['vertices'][:, 1:-1],
194
+ vertices_tar['vertices'][:, 2:] + vertices_tar['vertices'][:, :-2] - 2 * vertices_tar['vertices'][:, 1:-1])
195
+ foot_idx = [7, 8, 10, 11]
196
+ model_contact = net_out["rec_pose"][:, :, j*6+3:j*6+7]
197
+ # find static indices consistent with model's own predictions
198
+ static_idx = model_contact > 0.95 # N x S x 4
199
+ # print(model_contact,static_idx)
200
+ model_feet = joints_rec[:, :, foot_idx] # foot positions (N, S, 4, 3)
201
+ model_foot_v = torch.zeros_like(model_feet)
202
+ model_foot_v[:, :-1] = (
203
+ model_feet[:, 1:, :, :] - model_feet[:, :-1, :, :]
204
+ ) # (N, S-1, 4, 3)
205
+ model_foot_v[~static_idx] = 0
206
+ foot_loss = self.vel_loss(
207
+ model_foot_v, torch.zeros_like(model_foot_v)
208
+ )
209
+ self.tracker.update_meter("foot", "train", foot_loss.item()*self.args.rec_weight * self.args.rec_ver_weight*1000)
210
+ self.tracker.update_meter("ver", "train", vectices_loss.item()*self.args.rec_weight * self.args.rec_ver_weight)
211
+ g_loss_final += (vectices_loss+5*vertices_vel_loss+5*vertices_acc_loss)*self.args.rec_weight*self.args.rec_ver_weight
212
+ g_loss_final += foot_loss*self.args.rec_weight*self.args.rec_ver_weight*20
213
+
214
+ # ---------------------- vae -------------------------- #
215
+ if "VQVAE" in self.args.g_name:
216
+ loss_embedding = net_out["embedding_loss"]
217
+ g_loss_final += loss_embedding
218
+ self.tracker.update_meter("com", "train", loss_embedding.item())
219
+ # elif "VAE" in self.args.g_name:
220
+ # pose_mu, pose_logvar = net_out["pose_mu"], net_out["pose_logvar"]
221
+ # KLD = -0.5 * torch.sum(1 + pose_logvar - pose_mu.pow(2) - pose_logvar.exp())
222
+ # if epoch < 0:
223
+ # KLD_weight = 0
224
+ # else:
225
+ # KLD_weight = min(1.0, (epoch - 0) * 0.05) * 0.01
226
+ # loss += KLD_weight * KLD
227
+ # self.tracker.update_meter("kl", "train", KLD_weight * KLD.item())
228
+ g_loss_final.backward()
229
+ if self.args.grad_norm != 0:
230
+ torch.nn.utils.clip_grad_norm_(self.model.parameters(), self.args.grad_norm)
231
+ self.opt.step()
232
+ t_train = time.time() - t_start - t_data
233
+ t_start = time.time()
234
+ mem_cost = torch.cuda.memory_cached() / 1E9
235
+ lr_g = self.opt.param_groups[0]['lr']
236
+ if its % self.args.log_period == 0:
237
+ self.train_recording(epoch, its, t_data, t_train, mem_cost, lr_g)
238
+ if self.args.debug:
239
+ if its == 1: break
240
+ self.opt_s.step(epoch)
241
+
242
+ def val(self, epoch):
243
+ self.model.eval()
244
+ t_start = time.time()
245
+ with torch.no_grad():
246
+ for its, dict_data in enumerate(self.val_loader):
247
+ tar_pose_raw = dict_data["pose"]
248
+ tar_beta = dict_data["beta"].cuda()
249
+ tar_trans = dict_data["trans"].cuda()
250
+ tar_trans_vel_x = other_tools.estimate_linear_velocity(tar_trans[:, :, 0:1], dt=1/self.args.pose_fps)
251
+ tar_trans_vel_z = other_tools.estimate_linear_velocity(tar_trans[:, :, 2:3], dt=1/self.args.pose_fps)
252
+ #print(tar_pose.shape)
253
+ tar_pose = tar_pose_raw[:, :, :27].cuda()
254
+
255
+ tar_contact = tar_pose_raw[:, :, 27:31].cuda()
256
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
257
+ tar_exps = torch.zeros((bs, n, 100)).cuda()
258
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
259
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
260
+ tar_trans_copy = tar_trans-tar_trans
261
+ tar_contact_copy = tar_contact-tar_contact
262
+ in_tar_pose = torch.cat((tar_pose, tar_trans_copy, tar_contact_copy), dim=-1)
263
+ t_data = time.time() - t_start
264
+
265
+ #self.opt.zero_grad()
266
+ #g_loss_final = 0
267
+ net_out = self.model(in_tar_pose)
268
+ rec_pose = tar_pose
269
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
270
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
271
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
272
+ # loss_rec = self.rec_loss(rec_pose, tar_pose) * self.args.rec_weight * self.args.rec_pos_weight
273
+ # self.tracker.update_meter("rec", "val", loss_rec.item())
274
+ rec_contact = net_out["rec_pose"][:, :, j*6+3:j*6+7]
275
+ # print(rec_contact.shape, tar_contact.shape)
276
+ loss_contact = self.vel_loss(rec_contact, tar_contact) * self.args.rec_weight * self.args.rec_pos_weight
277
+ self.tracker.update_meter("contact", "val", loss_contact.item())
278
+ #g_loss_final += loss_rec
279
+ # rec_trans = net_out["rec_pose"][:, :, j*6:j*6+3]
280
+ # rec_x_trans = other_tools.velocity2position(rec_trans[:, :, 0:1], 1/self.args.pose_fps, tar_trans[:, 0, 0:1])
281
+ # rec_z_trans = other_tools.velocity2position(rec_trans[:, :, 2:3], 1/self.args.pose_fps, tar_trans[:, 0, 2:3])
282
+ # rec_y_trans = rec_trans[:,:,1:2]
283
+ # rec_xyz_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
284
+
285
+ rec_trans = net_out["rec_pose"][:, :, j*6:j*6+3]
286
+ rec_x_trans = other_tools.velocity2position(rec_trans[:, :, 0:1], 1/self.args.pose_fps, tar_trans[:, 0, 0:1])
287
+ rec_z_trans = other_tools.velocity2position(rec_trans[:, :, 2:3], 1/self.args.pose_fps, tar_trans[:, 0, 2:3])
288
+ rec_y_trans = rec_trans[:,:,1:2]
289
+ rec_xyz_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
290
+ loss_trans_vel = self.vel_loss(rec_trans[:, :, 0:1], tar_trans_vel_x) * self.args.rec_weight \
291
+ + self.vel_loss(rec_trans[:, :, 2:3], tar_trans_vel_z) * self.args.rec_weight
292
+ # v3 = self.vel_loss(rec_trans[:, :, 0:1][:, 1:] - rec_trans[:, :, 0:1][:, :-1], tar_trans_vel_x[:, 1:] - tar_trans_vel_x[:, :-1]) * self.args.rec_weight \
293
+ # + self.vel_loss(rec_trans[:, :, 2:3][:, 1:] - rec_trans[:, :, 2:3][:, :-1], tar_trans_vel_z[:, 1:] - tar_trans_vel_z[:, :-1]) * self.args.rec_weight
294
+ # a3 = self.vel_loss(rec_trans[:, :, 0:1][:, 2:] + rec_trans[:, :, 0:1][:, :-2] - 2 * rec_trans[:, :, 0:1][:, 1:-1], tar_trans_vel_x[:, 2:] + tar_trans_vel_x[:, :-2] - 2 * tar_trans_vel_x[:, 1:-1]) * self.args.rec_weight \
295
+ # + self.vel_loss(rec_trans[:, :, 2:3][:, 2:] + rec_trans[:, :, 2:3][:, :-2] - 2 * rec_trans[:, :, 2:3][:, 1:-1], tar_trans_vel_z[:, 2:] + tar_trans_vel_z[:, :-2] - 2 * tar_trans_vel_z[:, 1:-1]) * self.args.rec_weight
296
+ # #g_loss_final += 5*v3
297
+ # #g_loss_final += 5*a3
298
+ # v2 = self.vel_loss(rec_xyz_trans[:, 1:] - rec_xyz_trans[:, :-1], tar_trans[:, 1:] - tar_trans[:, :-1]) * self.args.rec_weight
299
+ # a2 = self.vel_loss(rec_xyz_trans[:, 2:] + rec_xyz_trans[:, :-2] - 2 * rec_xyz_trans[:, 1:-1], tar_trans[:, 2:] + tar_trans[:, :-2] - 2 * tar_trans[:, 1:-1]) * self.args.rec_weight
300
+ #g_loss_final += 5*v2
301
+ #g_loss_final += 5*a2
302
+ self.tracker.update_meter("transv", "val", loss_trans_vel.item())
303
+ #g_loss_final += loss_trans_vel
304
+ loss_trans = self.vel_loss(rec_xyz_trans, tar_trans) * self.args.rec_weight
305
+ self.tracker.update_meter("trans", "val", loss_trans.item())
306
+ #g_loss_final += loss_trans
307
+
308
+ # vertices loss
309
+ if self.args.rec_ver_weight > 0:
310
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
311
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
312
+ rec_pose = self.inverse_selection_tensor(rec_pose, self.train_data.joint_mask, rec_pose.shape[0])
313
+ tar_pose = self.inverse_selection_tensor(tar_pose, self.train_data.joint_mask, tar_pose.shape[0])
314
+ vertices_rec = self.smplx(
315
+ betas=tar_beta.reshape(bs*n, 300),
316
+ transl=rec_xyz_trans.reshape(bs*n, 3),
317
+ expression=tar_exps.reshape(bs*n, 100),
318
+ jaw_pose=rec_pose[:, 66:69],
319
+ global_orient=rec_pose[:,:3],
320
+ body_pose=rec_pose[:,3:21*3+3],
321
+ left_hand_pose=rec_pose[:,25*3:40*3],
322
+ right_hand_pose=rec_pose[:,40*3:55*3],
323
+ return_verts=False,
324
+ return_joints=True,
325
+ leye_pose=tar_pose[:, 69:72],
326
+ reye_pose=tar_pose[:, 72:75],
327
+ )
328
+ vertices_tar = self.smplx(
329
+ betas=tar_beta.reshape(bs*n, 300),
330
+ transl=tar_trans.reshape(bs*n, 3),
331
+ expression=tar_exps.reshape(bs*n, 100),
332
+ jaw_pose=tar_pose[:, 66:69],
333
+ global_orient=tar_pose[:,:3],
334
+ body_pose=tar_pose[:,3:21*3+3],
335
+ left_hand_pose=tar_pose[:,25*3:40*3],
336
+ right_hand_pose=tar_pose[:,40*3:55*3],
337
+ return_verts=False,
338
+ return_joints=True,
339
+ leye_pose=tar_pose[:, 69:72],
340
+ reye_pose=tar_pose[:, 72:75],
341
+ )
342
+ joints_rec = vertices_rec['joints']
343
+ joints_rec = joints_rec.reshape(bs, n, -1, 3)
344
+ vectices_loss = self.vectices_loss(vertices_rec['joints'], vertices_tar['joints'])
345
+ foot_idx = [7, 8, 10, 11]
346
+ model_contact = net_out["rec_pose"][:, :, j*6+3:j*6+7]
347
+ # find static indices consistent with model's own predictions
348
+ static_idx = model_contact > 0.95 # N x S x 4
349
+ # print(model_contact)
350
+ model_feet = joints_rec[:, :, foot_idx] # foot positions (N, S, 4, 3)
351
+ model_foot_v = torch.zeros_like(model_feet)
352
+ model_foot_v[:, :-1] = (
353
+ model_feet[:, 1:, :, :] - model_feet[:, :-1, :, :]
354
+ ) # (N, S-1, 4, 3)
355
+ model_foot_v[~static_idx] = 0
356
+ foot_loss = self.vectices_loss(
357
+ model_foot_v, torch.zeros_like(model_foot_v)
358
+ )
359
+ self.tracker.update_meter("foot", "val", foot_loss.item()*self.args.rec_weight * self.args.rec_ver_weight)
360
+ self.tracker.update_meter("ver", "val", vectices_loss.item()*self.args.rec_weight * self.args.rec_ver_weight)
361
+ if "VQVAE" in self.args.g_name:
362
+ loss_embedding = net_out["embedding_loss"]
363
+ self.tracker.update_meter("com", "val", loss_embedding.item())
364
+ #g_loss_final += vectices_loss*self.args.rec_weight*self.args.rec_ver_weight
365
+ self.val_recording(epoch)
366
+
367
+ def test(self, epoch):
368
+ results_save_path = self.checkpoint_path + f"/{epoch}/"
369
+ if os.path.exists(results_save_path):
370
+ return 0
371
+ os.makedirs(results_save_path)
372
+ start_time = time.time()
373
+ total_length = 0
374
+ test_seq_list = self.test_data.selected_file
375
+ self.model.eval()
376
+ with torch.no_grad():
377
+ for its, dict_data in enumerate(self.test_loader):
378
+ tar_pose_raw = dict_data["pose"]
379
+ tar_trans = dict_data["trans"].to(self.rank)
380
+ tar_pose = tar_pose_raw[:, :, :27].cuda()
381
+ tar_contact = tar_pose_raw[:, :, 27:31].cuda()
382
+ # tar_pose = tar_pose.cuda()
383
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
384
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
385
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
386
+ remain = n%self.args.pose_length
387
+ tar_pose = tar_pose[:, :n-remain, :]
388
+ tar_contact = tar_contact[:, :n-remain, :]
389
+ tar_trans_copy = tar_trans[:, :n-remain, :]-tar_trans[:, :n-remain, :]
390
+ tar_contact_copy = tar_contact-tar_contact
391
+ in_tar_pose = torch.cat([tar_pose, tar_trans_copy, tar_contact_copy], dim=-1)
392
+ #print(tar_pose.shape)
393
+ if True:
394
+ net_out = self.model(in_tar_pose)
395
+ rec_pose = tar_pose #net_out["rec_pose"][:, :, :j*6]
396
+ rec_trans = net_out["rec_pose"][:, :, j*6:j*6+3]
397
+ # print(rec_trans.shape)
398
+ rec_x_trans = other_tools.velocity2position(rec_trans[:, :, 0:1], 1/self.args.pose_fps, tar_trans[:, 0, 0:1])
399
+ rec_z_trans = other_tools.velocity2position(rec_trans[:, :, 2:3], 1/self.args.pose_fps, tar_trans[:, 0, 2:3])
400
+ rec_y_trans = rec_trans[:,:,1:2]
401
+ rec_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
402
+ n = rec_pose.shape[1]
403
+ rec_trans = rec_trans.cpu().numpy().reshape(bs*n, 3)
404
+ tar_pose = tar_pose[:, :n, :]
405
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
406
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
407
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
408
+ rec_pose = rec_pose.cpu().numpy()
409
+ else:
410
+ pass
411
+ # for i in range(tar_pose.shape[1]//(self.args.vae_test_len)):
412
+ # tar_pose_new = tar_pose[:,i*(self.args.vae_test_len):i*(self.args.vae_test_len)+self.args.vae_test_len,:]
413
+ # net_out = self.model(**dict(inputs=tar_pose_new))
414
+ # rec_pose = net_out["rec_pose"]
415
+ # rec_pose = (rec_pose.reshape(rec_pose.shape[0], rec_pose.shape[1], -1, 6) * self.joint_level_mask_cuda).reshape(rec_pose.shape[0], rec_pose.shape[1], -1)
416
+ # if "rot6d" in self.args.pose_rep:
417
+ # rec_pose = data_transfer.rotation_6d_to_matrix(rec_pose.reshape(tar_pose.shape[0], self.args.vae_test_len, -1, 6))
418
+ # rec_pose = data_transfer.matrix_to_euler_angles(rec_pose, "XYZ").reshape(rec_pose.shape[0], rec_pose.shape[1], -1)
419
+ # if "smplx" not in self.args.pose_rep:
420
+ # rec_pose = torch.rad2deg(rec_pose)
421
+ # rec_pose = rec_pose * self.joint_mask_cuda
422
+
423
+ # out_sub = rec_pose.cpu().numpy().reshape(-1, rec_pose.shape[2])
424
+ # if i != 0:
425
+ # out_final = np.concatenate((out_final,out_sub), 0)
426
+ # else:
427
+ # out_final = out_sub
428
+
429
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
430
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
431
+ tar_pose = tar_pose.cpu().numpy()
432
+
433
+ total_length += n
434
+ # --- save --- #
435
+ if 'smplx' in self.args.pose_rep:
436
+ gt_npz = np.load(self.args.data_path+self.args.pose_rep+"/"+test_seq_list.iloc[its]['id']+'.npz', allow_pickle=True)
437
+ stride = int(30 / self.args.pose_fps)
438
+ tar_pose = self.inverse_selection(tar_pose, self.test_data.joint_mask, tar_pose.shape[0])
439
+ np.savez(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
440
+ betas=gt_npz["betas"],
441
+ poses=tar_pose[:n],
442
+ expressions=gt_npz["expressions"]-gt_npz["expressions"],
443
+ trans=gt_npz["trans"][::stride][:n],
444
+ model='smplx2020',
445
+ gender='neutral',
446
+ mocap_frame_rate = 30 ,
447
+ )
448
+ rec_pose = self.inverse_selection(rec_pose, self.test_data.joint_mask, rec_pose.shape[0])
449
+ np.savez(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
450
+ betas=gt_npz["betas"],
451
+ poses=rec_pose,
452
+ expressions=gt_npz["expressions"]-gt_npz["expressions"],
453
+ trans=rec_trans,
454
+ model='smplx2020',
455
+ gender='neutral',
456
+ mocap_frame_rate = 30 ,
457
+ )
458
+ else:
459
+ rec_pose = rc.axis_angle_to_matrix(torch.from_numpy(rec_pose.reshape(bs*n, j, 3)))
460
+ rec_pose = np.rad2deg(rc.matrix_to_euler_angles(rec_pose, "XYZ")).reshape(bs*n, j*3).numpy()
461
+ tar_pose = rc.axis_angle_to_matrix(torch.from_numpy(tar_pose.reshape(bs*n, j, 3)))
462
+ tar_pose = np.rad2deg(rc.matrix_to_euler_angles(tar_pose, "XYZ")).reshape(bs*n, j*3).numpy()
463
+ #trans="0.000000 0.000000 0.000000"
464
+
465
+ with open(f"{self.args.data_path}{self.args.pose_rep}/{test_seq_list.iloc[its]['id']}.bvh", "r") as f_demo:
466
+ with open(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.bvh', 'w+') as f_gt:
467
+ with open(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.bvh', 'w+') as f_real:
468
+ for i, line_data in enumerate(f_demo.readlines()):
469
+ if i < 431:
470
+ f_real.write(line_data)
471
+ f_gt.write(line_data)
472
+ else: break
473
+ for line_id in range(n): #,args.pre_frames, args.pose_length
474
+ line_data = np.array2string(rec_pose[line_id], max_line_width=np.inf, precision=6, suppress_small=False, separator=' ')
475
+ f_real.write(line_data[1:-2]+'\n')
476
+ for line_id in range(n): #,args.pre_frames, args.pose_length
477
+ line_data = np.array2string(tar_pose[line_id], max_line_width=np.inf, precision=6, suppress_small=False, separator=' ')
478
+ f_gt.write(line_data[1:-2]+'\n')
479
+ # with open(results_save_path+"gt_"+test_seq_list[its]+'.pkl', 'wb') as fw:
480
+ # pickle.dump(new_dict, fw)
481
+ # #new_dict2["fullpose"] = out_final
482
+ # with open(results_save_path+"res_"+test_seq_list[its]+'.pkl', 'wb') as fw1:
483
+ # pickle.dump(new_dict2, fw1)
484
+
485
+ # other_tools.render_one_sequence(
486
+ # results_save_path+"res_"+test_seq_list[its]+'.pkl',
487
+ # results_save_path+"gt_"+test_seq_list[its]+'.pkl',
488
+ # results_save_path,
489
+ # self.args.data_path + self.args.test_data_path + 'wave16k/' + test_seq_list[its]+'.npy',
490
+ # )
491
+
492
+ #if its == 1:break
493
+ end_time = time.time() - start_time
494
+ logger.info(f"total inference time: {int(end_time)} s for {int(total_length/self.args.pose_fps)} s motion")
aelowerfoot_trainer.py ADDED
@@ -0,0 +1,491 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import train
2
+ import os
3
+ import time
4
+ import csv
5
+ import sys
6
+ import warnings
7
+ import random
8
+ import numpy as np
9
+ import time
10
+ import pprint
11
+ import pickle
12
+
13
+ import torch
14
+ import torch.nn as nn
15
+ import torch.nn.functional as F
16
+ from torch.utils.tensorboard import SummaryWriter
17
+ from torch.nn.parallel import DistributedDataParallel as DDP
18
+ from loguru import logger
19
+ import smplx
20
+
21
+ from utils import config, logger_tools, other_tools, metric
22
+ from utils import rotation_conversions as rc
23
+ from dataloaders import data_tools
24
+ from optimizers.optim_factory import create_optimizer
25
+ from optimizers.scheduler_factory import create_scheduler
26
+ from optimizers.loss_factory import get_loss_func
27
+ from scipy.spatial.transform import Rotation
28
+
29
+
30
+ class CustomTrainer(train.BaseTrainer):
31
+ """
32
+ motion representation learning
33
+ """
34
+ def __init__(self, args):
35
+ super().__init__(args)
36
+ self.joints = self.train_data.joints
37
+ self.smplx = smplx.create(
38
+ self.args.data_path_1+"smplx_models/",
39
+ model_type='smplx',
40
+ gender='NEUTRAL_2020',
41
+ use_face_contour=False,
42
+ num_betas=300,
43
+ num_expression_coeffs=100,
44
+ ext='npz',
45
+ use_pca=False,
46
+ ).cuda().eval()
47
+ self.tracker = other_tools.EpochTracker(["rec", "contact", "vel", "foot", "ver", "com", "kl", "acc", "trans", "transv"], [False,False, False, False, False, False, False, False, False, False])
48
+ if not self.args.rot6d: #"rot6d" not in args.pose_rep:
49
+ logger.error(f"this script is for rot6d, your pose rep. is {args.pose_rep}")
50
+ self.rec_loss = get_loss_func("GeodesicLoss")
51
+ self.vel_loss = torch.nn.L1Loss(reduction='mean')
52
+ self.vectices_loss = torch.nn.MSELoss(reduction='mean')
53
+
54
+ def inverse_selection(self, filtered_t, selection_array, n):
55
+ # 创建一个全为零的数组,形状为 n*165
56
+ original_shape_t = np.zeros((n, selection_array.size))
57
+
58
+ # 找到选择数组中为1的索引位置
59
+ selected_indices = np.where(selection_array == 1)[0]
60
+
61
+ # 将 filtered_t 的值填充到 original_shape_t 中相应的位置
62
+ for i in range(n):
63
+ original_shape_t[i, selected_indices] = filtered_t[i]
64
+
65
+ return original_shape_t
66
+
67
+ def inverse_selection_tensor(self, filtered_t, selection_array, n):
68
+ # 创建一个全为零的数组,形状为 n*165
69
+ selection_array = torch.from_numpy(selection_array).cuda()
70
+ original_shape_t = torch.zeros((n, 165)).cuda()
71
+
72
+ # 找到选择数组中为1的索引位置
73
+ selected_indices = torch.where(selection_array == 1)[0]
74
+
75
+ # 将 filtered_t 的值填充到 original_shape_t 中相应的位置
76
+ for i in range(n):
77
+ original_shape_t[i, selected_indices] = filtered_t[i]
78
+
79
+ return original_shape_t
80
+
81
+
82
+ def train(self, epoch):
83
+ self.model.train()
84
+ t_start = time.time()
85
+ self.tracker.reset()
86
+ for its, dict_data in enumerate(self.train_loader):
87
+ tar_pose_raw = dict_data["pose"]
88
+ tar_beta = dict_data["beta"].cuda()
89
+ tar_trans = dict_data["trans"].cuda()
90
+ # tar_trans_vel_x = other_tools.estimate_linear_velocity(tar_trans[:, :, 0:1], dt=1/self.args.pose_fps)
91
+ # tar_trans_vel_z = other_tools.estimate_linear_velocity(tar_trans[:, :, 2:3], dt=1/self.args.pose_fps)
92
+ tar_pose = tar_pose_raw[:, :, :27].cuda()
93
+ tar_contact = tar_pose_raw[:, :, 27:31].cuda()
94
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
95
+ tar_exps = torch.zeros((bs, n, 100)).cuda()
96
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
97
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
98
+ tar_trans_copy = tar_trans
99
+ tar_contact_copy = tar_contact
100
+ in_tar_pose = torch.cat((tar_pose, tar_trans_copy, tar_contact_copy), dim=-1)
101
+
102
+ t_data = time.time() - t_start
103
+
104
+ self.opt.zero_grad()
105
+ g_loss_final = 0
106
+ net_out = self.model(in_tar_pose)
107
+ rec_pose = net_out["rec_pose"][:, :, :j*6]
108
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
109
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
110
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
111
+ loss_rec = self.rec_loss(rec_pose, tar_pose) * self.args.rec_weight * self.args.rec_pos_weight
112
+ self.tracker.update_meter("rec", "train", loss_rec.item())
113
+ g_loss_final += loss_rec
114
+
115
+ rec_contact = net_out["rec_pose"][:, :, j*6+3:j*6+7]
116
+ loss_contact = self.vectices_loss(rec_contact, tar_contact) * self.args.rec_weight * self.args.rec_pos_weight
117
+ self.tracker.update_meter("contact", "train", loss_contact.item())
118
+ g_loss_final += loss_contact
119
+
120
+ velocity_loss = self.vel_loss(rec_pose[:, 1:] - rec_pose[:, :-1], tar_pose[:, 1:] - tar_pose[:, :-1]) * self.args.rec_weight
121
+ acceleration_loss = self.vel_loss(rec_pose[:, 2:] + rec_pose[:, :-2] - 2 * rec_pose[:, 1:-1], tar_pose[:, 2:] + tar_pose[:, :-2] - 2 * tar_pose[:, 1:-1]) * self.args.rec_weight
122
+ self.tracker.update_meter("vel", "train", velocity_loss.item())
123
+ self.tracker.update_meter("acc", "train", acceleration_loss.item())
124
+ g_loss_final += velocity_loss
125
+ g_loss_final += acceleration_loss
126
+
127
+ # rec_trans = net_out["rec_pose"][:, :, j*6:j*6+3]
128
+ # rec_x_trans = other_tools.velocity2position(rec_trans[:, :, 0:1], 1/self.args.pose_fps, tar_trans[:, 0, 0:1])
129
+ # rec_z_trans = other_tools.velocity2position(rec_trans[:, :, 2:3], 1/self.args.pose_fps, tar_trans[:, 0, 2:3])
130
+ # rec_y_trans = rec_trans[:,:,1:2]
131
+ # rec_xyz_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
132
+ # loss_trans_vel = self.vel_loss(rec_trans[:, :, 0:1], tar_trans_vel_x) * self.args.rec_weight \
133
+ # + self.vel_loss(rec_trans[:, :, 2:3], tar_trans_vel_z) * self.args.rec_weight
134
+ # v3 = self.vel_loss(rec_trans[:, :, 0:1][:, 1:] - rec_trans[:, :, 0:1][:, :-1], tar_trans_vel_x[:, 1:] - tar_trans_vel_x[:, :-1]) * self.args.rec_weight \
135
+ # + self.vel_loss(rec_trans[:, :, 2:3][:, 1:] - rec_trans[:, :, 2:3][:, :-1], tar_trans_vel_z[:, 1:] - tar_trans_vel_z[:, :-1]) * self.args.rec_weight
136
+ # a3 = self.vel_loss(rec_trans[:, :, 0:1][:, 2:] + rec_trans[:, :, 0:1][:, :-2] - 2 * rec_trans[:, :, 0:1][:, 1:-1], tar_trans_vel_x[:, 2:] + tar_trans_vel_x[:, :-2] - 2 * tar_trans_vel_x[:, 1:-1]) * self.args.rec_weight \
137
+ # + self.vel_loss(rec_trans[:, :, 2:3][:, 2:] + rec_trans[:, :, 2:3][:, :-2] - 2 * rec_trans[:, :, 2:3][:, 1:-1], tar_trans_vel_z[:, 2:] + tar_trans_vel_z[:, :-2] - 2 * tar_trans_vel_z[:, 1:-1]) * self.args.rec_weight
138
+ # g_loss_final += 5*v3
139
+ # g_loss_final += 5*a3
140
+ # v2 = self.vel_loss(rec_xyz_trans[:, 1:] - rec_xyz_trans[:, :-1], tar_trans[:, 1:] - tar_trans[:, :-1]) * self.args.rec_weight
141
+ # a2 = self.vel_loss(rec_xyz_trans[:, 2:] + rec_xyz_trans[:, :-2] - 2 * rec_xyz_trans[:, 1:-1], tar_trans[:, 2:] + tar_trans[:, :-2] - 2 * tar_trans[:, 1:-1]) * self.args.rec_weight
142
+ # g_loss_final += 5*v2
143
+ # g_loss_final += 5*a2
144
+ # self.tracker.update_meter("transv", "train", loss_trans_vel.item())
145
+ # g_loss_final += loss_trans_vel
146
+ # loss_trans = self.vel_loss(rec_xyz_trans, tar_trans) * self.args.rec_weight
147
+ # self.tracker.update_meter("trans", "train", loss_trans.item())
148
+ # g_loss_final += loss_trans
149
+
150
+ # vertices loss
151
+ if self.args.rec_ver_weight > 0:
152
+ # print(tar_pose.shape, bs, n, j)
153
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
154
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
155
+ rec_pose = self.inverse_selection_tensor(rec_pose, self.train_data.joint_mask, rec_pose.shape[0])
156
+ tar_pose = self.inverse_selection_tensor(tar_pose, self.train_data.joint_mask, tar_pose.shape[0])
157
+ vertices_rec = self.smplx(
158
+ betas=tar_beta.reshape(bs*n, 300),
159
+ transl=tar_trans.reshape(bs*n, 3)-tar_trans.reshape(bs*n, 3),
160
+ expression=tar_exps.reshape(bs*n, 100),
161
+ jaw_pose=rec_pose[:, 66:69],
162
+ global_orient=rec_pose[:,:3],
163
+ body_pose=rec_pose[:,3:21*3+3],
164
+ left_hand_pose=rec_pose[:,25*3:40*3],
165
+ right_hand_pose=rec_pose[:,40*3:55*3],
166
+ return_verts=False,
167
+ return_joints=True,
168
+ leye_pose=tar_pose[:, 69:72],
169
+ reye_pose=tar_pose[:, 72:75],
170
+ )
171
+ vertices_tar = self.smplx(
172
+ betas=tar_beta.reshape(bs*n, 300),
173
+ transl=tar_trans.reshape(bs*n, 3)-tar_trans.reshape(bs*n, 3),
174
+ expression=tar_exps.reshape(bs*n, 100),
175
+ jaw_pose=tar_pose[:, 66:69],
176
+ global_orient=tar_pose[:,:3],
177
+ body_pose=tar_pose[:,3:21*3+3],
178
+ left_hand_pose=tar_pose[:,25*3:40*3],
179
+ right_hand_pose=tar_pose[:,40*3:55*3],
180
+ return_verts=False,
181
+ return_joints=True,
182
+ leye_pose=tar_pose[:, 69:72],
183
+ reye_pose=tar_pose[:, 72:75],
184
+ )
185
+ joints_rec = vertices_rec['joints']
186
+ # print(joints_rec.shape)
187
+ joints_rec = joints_rec.reshape(bs, n, -1, 3)
188
+ vectices_loss = self.vectices_loss(vertices_rec['joints'], vertices_tar['joints'])
189
+ foot_idx = [7, 8, 10, 11]
190
+ model_contact = net_out["rec_pose"][:, :, j*6+3:j*6+7]
191
+ # find static indices consistent with model's own predictions
192
+ static_idx = model_contact > 0.95 # N x S x 4
193
+ # print(model_contact,static_idx)
194
+ model_feet = joints_rec[:, :, foot_idx] # foot positions (N, S, 4, 3)
195
+ model_foot_v = torch.zeros_like(model_feet)
196
+ model_foot_v[:, :-1] = (
197
+ model_feet[:, 1:, :, :] - model_feet[:, :-1, :, :]
198
+ ) # (N, S-1, 4, 3)
199
+ model_foot_v[~static_idx] = 0
200
+ foot_loss = self.vel_loss(
201
+ model_foot_v, torch.zeros_like(model_foot_v)
202
+ )
203
+ self.tracker.update_meter("foot", "train", foot_loss.item()*self.args.rec_weight * self.args.rec_ver_weight*20)
204
+ self.tracker.update_meter("ver", "train", vectices_loss.item()*self.args.rec_weight * self.args.rec_ver_weight)
205
+ g_loss_final += (vectices_loss)*self.args.rec_weight*self.args.rec_ver_weight
206
+ g_loss_final += foot_loss*self.args.rec_weight*self.args.rec_ver_weight*20
207
+
208
+ # ---------------------- vae -------------------------- #
209
+ if "VQVAE" in self.args.g_name:
210
+ loss_embedding = net_out["embedding_loss"]
211
+ g_loss_final += loss_embedding
212
+ self.tracker.update_meter("com", "train", loss_embedding.item())
213
+ # elif "VAE" in self.args.g_name:
214
+ # pose_mu, pose_logvar = net_out["pose_mu"], net_out["pose_logvar"]
215
+ # KLD = -0.5 * torch.sum(1 + pose_logvar - pose_mu.pow(2) - pose_logvar.exp())
216
+ # if epoch < 0:
217
+ # KLD_weight = 0
218
+ # else:
219
+ # KLD_weight = min(1.0, (epoch - 0) * 0.05) * 0.01
220
+ # loss += KLD_weight * KLD
221
+ # self.tracker.update_meter("kl", "train", KLD_weight * KLD.item())
222
+ g_loss_final.backward()
223
+ if self.args.grad_norm != 0:
224
+ torch.nn.utils.clip_grad_norm_(self.model.parameters(), self.args.grad_norm)
225
+ self.opt.step()
226
+ t_train = time.time() - t_start - t_data
227
+ t_start = time.time()
228
+ mem_cost = torch.cuda.memory_cached() / 1E9
229
+ lr_g = self.opt.param_groups[0]['lr']
230
+ if its % self.args.log_period == 0:
231
+ self.train_recording(epoch, its, t_data, t_train, mem_cost, lr_g)
232
+ if self.args.debug:
233
+ if its == 1: break
234
+ self.opt_s.step(epoch)
235
+
236
+ def val(self, epoch):
237
+ self.model.eval()
238
+ t_start = time.time()
239
+ with torch.no_grad():
240
+ for its, dict_data in enumerate(self.val_loader):
241
+ tar_pose_raw = dict_data["pose"]
242
+ tar_beta = dict_data["beta"].cuda()
243
+ tar_trans = dict_data["trans"].cuda()
244
+ tar_trans_vel_x = other_tools.estimate_linear_velocity(tar_trans[:, :, 0:1], dt=1/self.args.pose_fps)
245
+ tar_trans_vel_z = other_tools.estimate_linear_velocity(tar_trans[:, :, 2:3], dt=1/self.args.pose_fps)
246
+ #print(tar_pose.shape)
247
+ tar_pose = tar_pose_raw[:, :, :27].cuda()
248
+
249
+ tar_contact = tar_pose_raw[:, :, 27:31].cuda()
250
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
251
+ tar_exps = torch.zeros((bs, n, 100)).cuda()
252
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
253
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
254
+ tar_trans_copy = tar_trans
255
+ tar_contact_copy = tar_contact
256
+ in_tar_pose = torch.cat((tar_pose, tar_trans_copy, tar_contact_copy), dim=-1)
257
+ t_data = time.time() - t_start
258
+
259
+ #self.opt.zero_grad()
260
+ #g_loss_final = 0
261
+ net_out = self.model(in_tar_pose)
262
+ rec_pose = net_out["rec_pose"][:, :, :j*6]
263
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
264
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
265
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
266
+ loss_rec = self.rec_loss(rec_pose, tar_pose) * self.args.rec_weight * self.args.rec_pos_weight
267
+ self.tracker.update_meter("rec", "val", loss_rec.item())
268
+ rec_contact = net_out["rec_pose"][:, :, j*6+3:j*6+7]
269
+ # print(rec_contact.shape, tar_contact.shape)
270
+ loss_contact = self.vel_loss(rec_contact, tar_contact) * self.args.rec_weight * self.args.rec_pos_weight
271
+ self.tracker.update_meter("contact", "val", loss_contact.item())
272
+ #g_loss_final += loss_rec
273
+ rec_trans = net_out["rec_pose"][:, :, j*6:j*6+3]
274
+ rec_x_trans = other_tools.velocity2position(rec_trans[:, :, 0:1], 1/self.args.pose_fps, tar_trans[:, 0, 0:1])
275
+ rec_z_trans = other_tools.velocity2position(rec_trans[:, :, 2:3], 1/self.args.pose_fps, tar_trans[:, 0, 2:3])
276
+ rec_y_trans = rec_trans[:,:,1:2]
277
+ rec_xyz_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
278
+
279
+ # rec_trans = net_out["rec_pose"][:, :, j*6:j*6+3]
280
+ # rec_x_trans = other_tools.velocity2position(rec_trans[:, :, 0:1], 1/self.args.pose_fps, tar_trans[:, 0, 0:1])
281
+ # rec_z_trans = other_tools.velocity2position(rec_trans[:, :, 2:3], 1/self.args.pose_fps, tar_trans[:, 0, 2:3])
282
+ # rec_y_trans = rec_trans[:,:,1:2]
283
+ # rec_xyz_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
284
+ # loss_trans_vel = self.vel_loss(rec_trans[:, :, 0:1], tar_trans_vel_x) * self.args.rec_weight \
285
+ # + self.vel_loss(rec_trans[:, :, 2:3], tar_trans_vel_z) * self.args.rec_weight
286
+ # v3 = self.vel_loss(rec_trans[:, :, 0:1][:, 1:] - rec_trans[:, :, 0:1][:, :-1], tar_trans_vel_x[:, 1:] - tar_trans_vel_x[:, :-1]) * self.args.rec_weight \
287
+ # + self.vel_loss(rec_trans[:, :, 2:3][:, 1:] - rec_trans[:, :, 2:3][:, :-1], tar_trans_vel_z[:, 1:] - tar_trans_vel_z[:, :-1]) * self.args.rec_weight
288
+ # a3 = self.vel_loss(rec_trans[:, :, 0:1][:, 2:] + rec_trans[:, :, 0:1][:, :-2] - 2 * rec_trans[:, :, 0:1][:, 1:-1], tar_trans_vel_x[:, 2:] + tar_trans_vel_x[:, :-2] - 2 * tar_trans_vel_x[:, 1:-1]) * self.args.rec_weight \
289
+ # + self.vel_loss(rec_trans[:, :, 2:3][:, 2:] + rec_trans[:, :, 2:3][:, :-2] - 2 * rec_trans[:, :, 2:3][:, 1:-1], tar_trans_vel_z[:, 2:] + tar_trans_vel_z[:, :-2] - 2 * tar_trans_vel_z[:, 1:-1]) * self.args.rec_weight
290
+ # #g_loss_final += 5*v3
291
+ # #g_loss_final += 5*a3
292
+ # v2 = self.vel_loss(rec_xyz_trans[:, 1:] - rec_xyz_trans[:, :-1], tar_trans[:, 1:] - tar_trans[:, :-1]) * self.args.rec_weight
293
+ # a2 = self.vel_loss(rec_xyz_trans[:, 2:] + rec_xyz_trans[:, :-2] - 2 * rec_xyz_trans[:, 1:-1], tar_trans[:, 2:] + tar_trans[:, :-2] - 2 * tar_trans[:, 1:-1]) * self.args.rec_weight
294
+ #g_loss_final += 5*v2
295
+ #g_loss_final += 5*a2
296
+ # self.tracker.update_meter("transv", "val", loss_trans_vel.item())
297
+ # #g_loss_final += loss_trans_vel
298
+ # loss_trans = self.vel_loss(rec_xyz_trans, tar_trans) * self.args.rec_weight
299
+ # self.tracker.update_meter("trans", "val", loss_trans.item())
300
+ #g_loss_final += loss_trans
301
+
302
+ # vertices loss
303
+ if self.args.rec_ver_weight > 0:
304
+ # print(tar_pose.shape, bs, n, j)
305
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
306
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
307
+ rec_pose = self.inverse_selection_tensor(rec_pose, self.train_data.joint_mask, rec_pose.shape[0])
308
+ tar_pose = self.inverse_selection_tensor(tar_pose, self.train_data.joint_mask, tar_pose.shape[0])
309
+ vertices_rec = self.smplx(
310
+ betas=tar_beta.reshape(bs*n, 300),
311
+ transl=tar_trans.reshape(bs*n, 3)-tar_trans.reshape(bs*n, 3),
312
+ expression=tar_exps.reshape(bs*n, 100),
313
+ jaw_pose=rec_pose[:, 66:69],
314
+ global_orient=rec_pose[:,:3],
315
+ body_pose=rec_pose[:,3:21*3+3],
316
+ left_hand_pose=rec_pose[:,25*3:40*3],
317
+ right_hand_pose=rec_pose[:,40*3:55*3],
318
+ return_verts=False,
319
+ return_joints=True,
320
+ leye_pose=tar_pose[:, 69:72],
321
+ reye_pose=tar_pose[:, 72:75],
322
+ )
323
+ vertices_tar = self.smplx(
324
+ betas=tar_beta.reshape(bs*n, 300),
325
+ transl=tar_trans.reshape(bs*n, 3)-tar_trans.reshape(bs*n, 3),
326
+ expression=tar_exps.reshape(bs*n, 100),
327
+ jaw_pose=tar_pose[:, 66:69],
328
+ global_orient=tar_pose[:,:3],
329
+ body_pose=tar_pose[:,3:21*3+3],
330
+ left_hand_pose=tar_pose[:,25*3:40*3],
331
+ right_hand_pose=tar_pose[:,40*3:55*3],
332
+ return_verts=False,
333
+ return_joints=True,
334
+ leye_pose=tar_pose[:, 69:72],
335
+ reye_pose=tar_pose[:, 72:75],
336
+ )
337
+ joints_rec = vertices_rec['joints']
338
+ joints_rec = joints_rec.reshape(bs, n, -1, 3)
339
+ vectices_loss = self.vectices_loss(vertices_rec['joints'], vertices_tar['joints'])
340
+ foot_idx = [7, 8, 10, 11]
341
+ model_contact = net_out["rec_pose"][:, :, j*6+3:j*6+7]
342
+ # find static indices consistent with model's own predictions
343
+ static_idx = model_contact > 0.95 # N x S x 4
344
+ # print(model_contact)
345
+ model_feet = joints_rec[:, :, foot_idx] # foot positions (N, S, 4, 3)
346
+ model_foot_v = torch.zeros_like(model_feet)
347
+ model_foot_v[:, :-1] = (
348
+ model_feet[:, 1:, :, :] - model_feet[:, :-1, :, :]
349
+ ) # (N, S-1, 4, 3)
350
+ model_foot_v[~static_idx] = 0
351
+ foot_loss = self.vectices_loss(
352
+ model_foot_v, torch.zeros_like(model_foot_v)
353
+ )
354
+ self.tracker.update_meter("foot", "val", foot_loss.item()*self.args.rec_weight * self.args.rec_ver_weight)
355
+ self.tracker.update_meter("ver", "val", vectices_loss.item()*self.args.rec_weight * self.args.rec_ver_weight)
356
+ if "VQVAE" in self.args.g_name:
357
+ loss_embedding = net_out["embedding_loss"]
358
+ self.tracker.update_meter("com", "val", loss_embedding.item())
359
+ #g_loss_final += vectices_loss*self.args.rec_weight*self.args.rec_ver_weight
360
+ if self.args.debug:
361
+ if its == 1: break
362
+ self.val_recording(epoch)
363
+
364
+ def test(self, epoch):
365
+ results_save_path = self.checkpoint_path + f"/{epoch}/"
366
+ if os.path.exists(results_save_path):
367
+ return 0
368
+ os.makedirs(results_save_path)
369
+ start_time = time.time()
370
+ total_length = 0
371
+ test_seq_list = self.test_data.selected_file
372
+ self.model.eval()
373
+ with torch.no_grad():
374
+ for its, dict_data in enumerate(self.test_loader):
375
+ tar_pose_raw = dict_data["pose"]
376
+ tar_trans = dict_data["trans"].to(self.rank)
377
+ tar_pose = tar_pose_raw[:, :, :27].cuda()
378
+ tar_contact = tar_pose_raw[:, :, 27:31].cuda()
379
+ # tar_pose = tar_pose.cuda()
380
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
381
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
382
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
383
+ remain = n%self.args.pose_length
384
+ tar_pose = tar_pose[:, :n-remain, :]
385
+ tar_contact = tar_contact[:, :n-remain, :]
386
+ tar_trans_copy = tar_trans[:, :n-remain, :]
387
+ tar_contact_copy = tar_contact
388
+ in_tar_pose = torch.cat([tar_pose, tar_trans_copy, tar_contact_copy], dim=-1)
389
+ #print(tar_pose.shape)
390
+ if True:
391
+ net_out = self.model(in_tar_pose)
392
+ rec_pose = net_out["rec_pose"][:, :, :j*6]
393
+ rec_trans = net_out["rec_pose"][:, :, j*6:j*6+3] - net_out["rec_pose"][:, :, j*6:j*6+3]
394
+ # print(rec_trans.shape)
395
+ rec_x_trans = other_tools.velocity2position(rec_trans[:, :, 0:1], 1/self.args.pose_fps, tar_trans[:, 0, 0:1])
396
+ rec_z_trans = other_tools.velocity2position(rec_trans[:, :, 2:3], 1/self.args.pose_fps, tar_trans[:, 0, 2:3])
397
+ rec_y_trans = rec_trans[:,:,1:2]
398
+ rec_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
399
+ n = rec_pose.shape[1]
400
+ rec_trans = rec_trans.cpu().numpy().reshape(bs*n, 3)
401
+ tar_pose = tar_pose[:, :n, :]
402
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
403
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)#
404
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
405
+ rec_pose = rec_pose.cpu().numpy()
406
+ else:
407
+ pass
408
+ # for i in range(tar_pose.shape[1]//(self.args.vae_test_len)):
409
+ # tar_pose_new = tar_pose[:,i*(self.args.vae_test_len):i*(self.args.vae_test_len)+self.args.vae_test_len,:]
410
+ # net_out = self.model(**dict(inputs=tar_pose_new))
411
+ # rec_pose = net_out["rec_pose"]
412
+ # rec_pose = (rec_pose.reshape(rec_pose.shape[0], rec_pose.shape[1], -1, 6) * self.joint_level_mask_cuda).reshape(rec_pose.shape[0], rec_pose.shape[1], -1)
413
+ # if "rot6d" in self.args.pose_rep:
414
+ # rec_pose = data_transfer.rotation_6d_to_matrix(rec_pose.reshape(tar_pose.shape[0], self.args.vae_test_len, -1, 6))
415
+ # rec_pose = data_transfer.matrix_to_euler_angles(rec_pose, "XYZ").reshape(rec_pose.shape[0], rec_pose.shape[1], -1)
416
+ # if "smplx" not in self.args.pose_rep:
417
+ # rec_pose = torch.rad2deg(rec_pose)
418
+ # rec_pose = rec_pose * self.joint_mask_cuda
419
+
420
+ # out_sub = rec_pose.cpu().numpy().reshape(-1, rec_pose.shape[2])
421
+ # if i != 0:
422
+ # out_final = np.concatenate((out_final,out_sub), 0)
423
+ # else:
424
+ # out_final = out_sub
425
+
426
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
427
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
428
+ tar_pose = tar_pose.cpu().numpy()
429
+
430
+ total_length += n
431
+ # --- save --- #
432
+ if 'smplx' in self.args.pose_rep:
433
+ gt_npz = np.load(self.args.data_path+self.args.pose_rep+"/"+test_seq_list.iloc[its]['id']+'.npz', allow_pickle=True)
434
+ stride = int(30 / self.args.pose_fps)
435
+ tar_pose = self.inverse_selection(tar_pose, self.test_data.joint_mask, tar_pose.shape[0])
436
+ np.savez(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
437
+ betas=gt_npz["betas"],
438
+ poses=tar_pose[:n],
439
+ expressions=gt_npz["expressions"]-gt_npz["expressions"],
440
+ trans=rec_trans-rec_trans,
441
+ model='smplx2020',
442
+ gender='neutral',
443
+ mocap_frame_rate = 30 ,
444
+ )
445
+ rec_pose = self.inverse_selection(rec_pose, self.test_data.joint_mask, rec_pose.shape[0])
446
+ np.savez(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
447
+ betas=gt_npz["betas"],
448
+ poses=rec_pose,
449
+ expressions=gt_npz["expressions"]-gt_npz["expressions"],
450
+ trans=rec_trans-rec_trans,
451
+ model='smplx2020',
452
+ gender='neutral',
453
+ mocap_frame_rate = 30 ,
454
+ )
455
+ else:
456
+ rec_pose = rc.axis_angle_to_matrix(torch.from_numpy(rec_pose.reshape(bs*n, j, 3)))
457
+ rec_pose = np.rad2deg(rc.matrix_to_euler_angles(rec_pose, "XYZ")).reshape(bs*n, j*3).numpy()
458
+ tar_pose = rc.axis_angle_to_matrix(torch.from_numpy(tar_pose.reshape(bs*n, j, 3)))
459
+ tar_pose = np.rad2deg(rc.matrix_to_euler_angles(tar_pose, "XYZ")).reshape(bs*n, j*3).numpy()
460
+ #trans="0.000000 0.000000 0.000000"
461
+
462
+ with open(f"{self.args.data_path}{self.args.pose_rep}/{test_seq_list.iloc[its]['id']}.bvh", "r") as f_demo:
463
+ with open(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.bvh', 'w+') as f_gt:
464
+ with open(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.bvh', 'w+') as f_real:
465
+ for i, line_data in enumerate(f_demo.readlines()):
466
+ if i < 431:
467
+ f_real.write(line_data)
468
+ f_gt.write(line_data)
469
+ else: break
470
+ for line_id in range(n): #,args.pre_frames, args.pose_length
471
+ line_data = np.array2string(rec_pose[line_id], max_line_width=np.inf, precision=6, suppress_small=False, separator=' ')
472
+ f_real.write(line_data[1:-2]+'\n')
473
+ for line_id in range(n): #,args.pre_frames, args.pose_length
474
+ line_data = np.array2string(tar_pose[line_id], max_line_width=np.inf, precision=6, suppress_small=False, separator=' ')
475
+ f_gt.write(line_data[1:-2]+'\n')
476
+ # with open(results_save_path+"gt_"+test_seq_list[its]+'.pkl', 'wb') as fw:
477
+ # pickle.dump(new_dict, fw)
478
+ # #new_dict2["fullpose"] = out_final
479
+ # with open(results_save_path+"res_"+test_seq_list[its]+'.pkl', 'wb') as fw1:
480
+ # pickle.dump(new_dict2, fw1)
481
+
482
+ # other_tools.render_one_sequence(
483
+ # results_save_path+"res_"+test_seq_list[its]+'.pkl',
484
+ # results_save_path+"gt_"+test_seq_list[its]+'.pkl',
485
+ # results_save_path,
486
+ # self.args.data_path + self.args.test_data_path + 'wave16k/' + test_seq_list[its]+'.npy',
487
+ # )
488
+
489
+ #if its == 1:break
490
+ end_time = time.time() - start_time
491
+ logger.info(f"total inference time: {int(end_time)} s for {int(total_length/self.args.pose_fps)} s motion")
app.py ADDED
@@ -0,0 +1,664 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import spaces
2
+ import os
3
+ # os.system("Xvfb :99 -ac &")
4
+ # os.environ["DISPLAY"] = ":99"
5
+ import OpenGL.GL as gl
6
+ os.environ["PYOPENGL_PLATFORM"] = "egl"
7
+ os.environ["MESA_GL_VERSION_OVERRIDE"] = "4.1"
8
+ import signal
9
+ import time
10
+ import csv
11
+ import sys
12
+ import warnings
13
+ import random
14
+ import gradio as gr
15
+ import torch
16
+ import torch.nn as nn
17
+ import torch.nn.functional as F
18
+ import torch.distributed as dist
19
+ from torch.nn.parallel import DistributedDataParallel as DDP
20
+ import torch.multiprocessing as mp
21
+ import numpy as np
22
+ import time
23
+ import pprint
24
+ from loguru import logger
25
+ import smplx
26
+ from torch.utils.tensorboard import SummaryWriter
27
+ import wandb
28
+ import matplotlib.pyplot as plt
29
+ from utils import config, logger_tools, other_tools_hf, metric, data_transfer
30
+ from dataloaders import data_tools
31
+ from dataloaders.build_vocab import Vocab
32
+ from optimizers.optim_factory import create_optimizer
33
+ from optimizers.scheduler_factory import create_scheduler
34
+ from optimizers.loss_factory import get_loss_func
35
+ from dataloaders.data_tools import joints_list
36
+ from utils import rotation_conversions as rc
37
+ import soundfile as sf
38
+ import librosa
39
+
40
+ def inverse_selection_tensor(filtered_t, selection_array, n):
41
+ selection_array = torch.from_numpy(selection_array).cuda()
42
+ original_shape_t = torch.zeros((n, 165)).cuda()
43
+ selected_indices = torch.where(selection_array == 1)[0]
44
+ for i in range(n):
45
+ original_shape_t[i, selected_indices] = filtered_t[i]
46
+ return original_shape_t
47
+
48
+ @spaces.GPU(duration=120)
49
+ def test_demo_gpu(
50
+ model, vq_model_face, vq_model_upper, vq_model_hands, vq_model_lower, global_motion, smplx_model,
51
+ dict_data,
52
+ args,
53
+ joints, joint_mask_upper, joint_mask_lower, joint_mask_hands,
54
+ log_softmax,
55
+ ):
56
+ rank = 0
57
+ other_tools_hf.load_checkpoints(vq_model_face, args.data_path_1 + "pretrained_vq/last_790_face_v2.bin", args.e_name)
58
+ other_tools_hf.load_checkpoints(vq_model_upper, args.data_path_1 + "pretrained_vq/upper_vertex_1layer_710.bin", args.e_name)
59
+ other_tools_hf.load_checkpoints(vq_model_hands, args.data_path_1 + "pretrained_vq/hands_vertex_1layer_710.bin", args.e_name)
60
+ other_tools_hf.load_checkpoints(vq_model_lower, args.data_path_1 + "pretrained_vq/lower_foot_600.bin", args.e_name)
61
+ other_tools_hf.load_checkpoints(global_motion, args.data_path_1 + "pretrained_vq/last_1700_foot.bin", args.e_name)
62
+ other_tools_hf.load_checkpoints(model, args.test_ckpt, args.g_name)
63
+ model.to(rank).eval()
64
+ smplx_model.to(rank).eval()
65
+ vq_model_face.to(rank).eval()
66
+ vq_model_upper.to(rank).eval()
67
+ vq_model_hands.to(rank).eval()
68
+ vq_model_lower.to(rank).eval()
69
+ global_motion.to(rank).eval()
70
+
71
+ with torch.no_grad():
72
+ tar_pose_raw = dict_data["pose"]
73
+ tar_pose = tar_pose_raw[:, :, :165].to(rank)
74
+ tar_contact = tar_pose_raw[:, :, 165:169].to(rank)
75
+ tar_trans = dict_data["trans"].to(rank)
76
+ tar_exps = dict_data["facial"].to(rank)
77
+ in_audio = dict_data["audio"].to(rank)
78
+ in_word = None# dict_data["word"].to(rank)
79
+ tar_beta = dict_data["beta"].to(rank)
80
+ tar_id = dict_data["id"].to(rank).long()
81
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], joints
82
+
83
+ tar_pose_jaw = tar_pose[:, :, 66:69]
84
+ tar_pose_jaw = rc.axis_angle_to_matrix(tar_pose_jaw.reshape(bs, n, 1, 3))
85
+ tar_pose_jaw = rc.matrix_to_rotation_6d(tar_pose_jaw).reshape(bs, n, 1*6)
86
+ tar_pose_face = torch.cat([tar_pose_jaw, tar_exps], dim=2)
87
+
88
+ tar_pose_hands = tar_pose[:, :, 25*3:55*3]
89
+ tar_pose_hands = rc.axis_angle_to_matrix(tar_pose_hands.reshape(bs, n, 30, 3))
90
+ tar_pose_hands = rc.matrix_to_rotation_6d(tar_pose_hands).reshape(bs, n, 30*6)
91
+
92
+ tar_pose_upper = tar_pose[:, :, joint_mask_upper.astype(bool)]
93
+ tar_pose_upper = rc.axis_angle_to_matrix(tar_pose_upper.reshape(bs, n, 13, 3))
94
+ tar_pose_upper = rc.matrix_to_rotation_6d(tar_pose_upper).reshape(bs, n, 13*6)
95
+
96
+ tar_pose_leg = tar_pose[:, :, joint_mask_lower.astype(bool)]
97
+ tar_pose_leg = rc.axis_angle_to_matrix(tar_pose_leg.reshape(bs, n, 9, 3))
98
+ tar_pose_leg = rc.matrix_to_rotation_6d(tar_pose_leg).reshape(bs, n, 9*6)
99
+ tar_pose_lower = torch.cat([tar_pose_leg, tar_trans, tar_contact], dim=2)
100
+
101
+ # tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
102
+ # tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
103
+ tar4dis = torch.cat([tar_pose_jaw, tar_pose_upper, tar_pose_hands, tar_pose_leg], dim=2)
104
+
105
+ tar_index_value_face_top = vq_model_face.map2index(tar_pose_face) # bs*n/4
106
+ tar_index_value_upper_top = vq_model_upper.map2index(tar_pose_upper) # bs*n/4
107
+ tar_index_value_hands_top = vq_model_hands.map2index(tar_pose_hands) # bs*n/4
108
+ tar_index_value_lower_top = vq_model_lower.map2index(tar_pose_lower) # bs*n/4
109
+
110
+ latent_face_top = vq_model_face.map2latent(tar_pose_face) # bs*n/4
111
+ latent_upper_top = vq_model_upper.map2latent(tar_pose_upper) # bs*n/4
112
+ latent_hands_top = vq_model_hands.map2latent(tar_pose_hands) # bs*n/4
113
+ latent_lower_top = vq_model_lower.map2latent(tar_pose_lower) # bs*n/4
114
+
115
+ latent_in = torch.cat([latent_upper_top, latent_hands_top, latent_lower_top], dim=2)
116
+
117
+ index_in = torch.stack([tar_index_value_upper_top, tar_index_value_hands_top, tar_index_value_lower_top], dim=-1).long()
118
+
119
+ tar_pose_6d = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, 55, 3))
120
+ tar_pose_6d = rc.matrix_to_rotation_6d(tar_pose_6d).reshape(bs, n, 55*6)
121
+ latent_all = torch.cat([tar_pose_6d, tar_trans, tar_contact], dim=-1)
122
+
123
+ loaded_data = {
124
+ "tar_pose_jaw": tar_pose_jaw,
125
+ "tar_pose_face": tar_pose_face,
126
+ "tar_pose_upper": tar_pose_upper,
127
+ "tar_pose_lower": tar_pose_lower,
128
+ "tar_pose_hands": tar_pose_hands,
129
+ 'tar_pose_leg': tar_pose_leg,
130
+ "in_audio": in_audio,
131
+ "in_word": in_word,
132
+ "tar_trans": tar_trans,
133
+ "tar_exps": tar_exps,
134
+ "tar_beta": tar_beta,
135
+ "tar_pose": tar_pose,
136
+ "tar4dis": tar4dis,
137
+ "tar_index_value_face_top": tar_index_value_face_top,
138
+ "tar_index_value_upper_top": tar_index_value_upper_top,
139
+ "tar_index_value_hands_top": tar_index_value_hands_top,
140
+ "tar_index_value_lower_top": tar_index_value_lower_top,
141
+ "latent_face_top": latent_face_top,
142
+ "latent_upper_top": latent_upper_top,
143
+ "latent_hands_top": latent_hands_top,
144
+ "latent_lower_top": latent_lower_top,
145
+ "latent_in": latent_in,
146
+ "index_in": index_in,
147
+ "tar_id": tar_id,
148
+ "latent_all": latent_all,
149
+ "tar_pose_6d": tar_pose_6d,
150
+ "tar_contact": tar_contact,
151
+ }
152
+
153
+ mode = 'test'
154
+ bs, n, j = loaded_data["tar_pose"].shape[0], loaded_data["tar_pose"].shape[1], joints
155
+ tar_pose = loaded_data["tar_pose"]
156
+ tar_beta = loaded_data["tar_beta"]
157
+ in_word =None# loaded_data["in_word"]
158
+ tar_exps = loaded_data["tar_exps"]
159
+ tar_contact = loaded_data["tar_contact"]
160
+ in_audio = loaded_data["in_audio"]
161
+ tar_trans = loaded_data["tar_trans"]
162
+
163
+ remain = n%8
164
+ if remain != 0:
165
+ tar_pose = tar_pose[:, :-remain, :]
166
+ tar_beta = tar_beta[:, :-remain, :]
167
+ tar_trans = tar_trans[:, :-remain, :]
168
+ # in_word = in_word[:, :-remain]
169
+ tar_exps = tar_exps[:, :-remain, :]
170
+ tar_contact = tar_contact[:, :-remain, :]
171
+ n = n - remain
172
+
173
+ tar_pose_jaw = tar_pose[:, :, 66:69]
174
+ tar_pose_jaw = rc.axis_angle_to_matrix(tar_pose_jaw.reshape(bs, n, 1, 3))
175
+ tar_pose_jaw = rc.matrix_to_rotation_6d(tar_pose_jaw).reshape(bs, n, 1*6)
176
+ tar_pose_face = torch.cat([tar_pose_jaw, tar_exps], dim=2)
177
+
178
+ tar_pose_hands = tar_pose[:, :, 25*3:55*3]
179
+ tar_pose_hands = rc.axis_angle_to_matrix(tar_pose_hands.reshape(bs, n, 30, 3))
180
+ tar_pose_hands = rc.matrix_to_rotation_6d(tar_pose_hands).reshape(bs, n, 30*6)
181
+
182
+ tar_pose_upper = tar_pose[:, :, joint_mask_upper.astype(bool)]
183
+ tar_pose_upper = rc.axis_angle_to_matrix(tar_pose_upper.reshape(bs, n, 13, 3))
184
+ tar_pose_upper = rc.matrix_to_rotation_6d(tar_pose_upper).reshape(bs, n, 13*6)
185
+
186
+ tar_pose_leg = tar_pose[:, :, joint_mask_lower.astype(bool)]
187
+ tar_pose_leg = rc.axis_angle_to_matrix(tar_pose_leg.reshape(bs, n, 9, 3))
188
+ tar_pose_leg = rc.matrix_to_rotation_6d(tar_pose_leg).reshape(bs, n, 9*6)
189
+ tar_pose_lower = torch.cat([tar_pose_leg, tar_trans, tar_contact], dim=2)
190
+
191
+ tar_pose_6d = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, 55, 3))
192
+ tar_pose_6d = rc.matrix_to_rotation_6d(tar_pose_6d).reshape(bs, n, 55*6)
193
+ latent_all = torch.cat([tar_pose_6d, tar_trans, tar_contact], dim=-1)
194
+
195
+ rec_index_all_face = []
196
+ rec_index_all_upper = []
197
+ rec_index_all_lower = []
198
+ rec_index_all_hands = []
199
+
200
+ roundt = (n - args.pre_frames) // (args.pose_length - args.pre_frames)
201
+ remain = (n - args.pre_frames) % (args.pose_length - args.pre_frames)
202
+ round_l = args.pose_length - args.pre_frames
203
+
204
+ for i in range(0, roundt):
205
+ # in_word_tmp = in_word[:, i*(round_l):(i+1)*(round_l)+args.pre_frames]
206
+ # audio fps is 16000 and pose fps is 30
207
+ in_audio_tmp = in_audio[:, i*(16000//30*round_l):(i+1)*(16000//30*round_l)+16000//30*args.pre_frames]
208
+ in_id_tmp = loaded_data['tar_id'][:, i*(round_l):(i+1)*(round_l)+args.pre_frames]
209
+ mask_val = torch.ones(bs, args.pose_length, args.pose_dims+3+4).float().cuda()
210
+ mask_val[:, :args.pre_frames, :] = 0.0
211
+ if i == 0:
212
+ latent_all_tmp = latent_all[:, i*(round_l):(i+1)*(round_l)+args.pre_frames, :]
213
+ else:
214
+ latent_all_tmp = latent_all[:, i*(round_l):(i+1)*(round_l)+args.pre_frames, :]
215
+ # print(latent_all_tmp.shape, latent_last.shape)
216
+ latent_all_tmp[:, :args.pre_frames, :] = latent_last[:, -args.pre_frames:, :]
217
+
218
+ net_out_val = model(
219
+ in_audio = in_audio_tmp,
220
+ in_word=None, #in_word_tmp,
221
+ mask=mask_val,
222
+ in_motion = latent_all_tmp,
223
+ in_id = in_id_tmp,
224
+ use_attentions=True,)
225
+
226
+ if args.cu != 0:
227
+ rec_index_upper = log_softmax(net_out_val["cls_upper"]).reshape(-1, args.vae_codebook_size)
228
+ _, rec_index_upper = torch.max(rec_index_upper.reshape(-1, args.pose_length, args.vae_codebook_size), dim=2)
229
+ #rec_upper = vq_model_upper.decode(rec_index_upper)
230
+ else:
231
+ _, rec_index_upper, _, _ = vq_model_upper.quantizer(net_out_val["rec_upper"])
232
+ #rec_upper = vq_model_upper.decoder(rec_index_upper)
233
+ if args.cl != 0:
234
+ rec_index_lower = log_softmax(net_out_val["cls_lower"]).reshape(-1, args.vae_codebook_size)
235
+ _, rec_index_lower = torch.max(rec_index_lower.reshape(-1, args.pose_length, args.vae_codebook_size), dim=2)
236
+ #rec_lower = vq_model_lower.decode(rec_index_lower)
237
+ else:
238
+ _, rec_index_lower, _, _ = vq_model_lower.quantizer(net_out_val["rec_lower"])
239
+ #rec_lower = vq_model_lower.decoder(rec_index_lower)
240
+ if args.ch != 0:
241
+ rec_index_hands = log_softmax(net_out_val["cls_hands"]).reshape(-1, args.vae_codebook_size)
242
+ _, rec_index_hands = torch.max(rec_index_hands.reshape(-1, args.pose_length, args.vae_codebook_size), dim=2)
243
+ #rec_hands = vq_model_hands.decode(rec_index_hands)
244
+ else:
245
+ _, rec_index_hands, _, _ = vq_model_hands.quantizer(net_out_val["rec_hands"])
246
+ #rec_hands = vq_model_hands.decoder(rec_index_hands)
247
+ if args.cf != 0:
248
+ rec_index_face = log_softmax(net_out_val["cls_face"]).reshape(-1, args.vae_codebook_size)
249
+ _, rec_index_face = torch.max(rec_index_face.reshape(-1, args.pose_length, args.vae_codebook_size), dim=2)
250
+ #rec_face = vq_model_face.decoder(rec_index_face)
251
+ else:
252
+ _, rec_index_face, _, _ = vq_model_face.quantizer(net_out_val["rec_face"])
253
+ #rec_face = vq_model_face.decoder(rec_index_face)
254
+
255
+ if i == 0:
256
+ rec_index_all_face.append(rec_index_face)
257
+ rec_index_all_upper.append(rec_index_upper)
258
+ rec_index_all_lower.append(rec_index_lower)
259
+ rec_index_all_hands.append(rec_index_hands)
260
+ else:
261
+ rec_index_all_face.append(rec_index_face[:, args.pre_frames:])
262
+ rec_index_all_upper.append(rec_index_upper[:, args.pre_frames:])
263
+ rec_index_all_lower.append(rec_index_lower[:, args.pre_frames:])
264
+ rec_index_all_hands.append(rec_index_hands[:, args.pre_frames:])
265
+
266
+ if args.cu != 0:
267
+ rec_upper_last = vq_model_upper.decode(rec_index_upper)
268
+ else:
269
+ rec_upper_last = vq_model_upper.decoder(rec_index_upper)
270
+ if args.cl != 0:
271
+ rec_lower_last = vq_model_lower.decode(rec_index_lower)
272
+ else:
273
+ rec_lower_last = vq_model_lower.decoder(rec_index_lower)
274
+ if args.ch != 0:
275
+ rec_hands_last = vq_model_hands.decode(rec_index_hands)
276
+ else:
277
+ rec_hands_last = vq_model_hands.decoder(rec_index_hands)
278
+ # if args.cf != 0:
279
+ # rec_face_last = vq_model_face.decode(rec_index_face)
280
+ # else:
281
+ # rec_face_last = vq_model_face.decoder(rec_index_face)
282
+
283
+ rec_pose_legs = rec_lower_last[:, :, :54]
284
+ bs, n = rec_pose_legs.shape[0], rec_pose_legs.shape[1]
285
+ rec_pose_upper = rec_upper_last.reshape(bs, n, 13, 6)
286
+ rec_pose_upper = rc.rotation_6d_to_matrix(rec_pose_upper)#
287
+ rec_pose_upper = rc.matrix_to_axis_angle(rec_pose_upper).reshape(bs*n, 13*3)
288
+ rec_pose_upper_recover = inverse_selection_tensor(rec_pose_upper, joint_mask_upper, bs*n)
289
+ rec_pose_lower = rec_pose_legs.reshape(bs, n, 9, 6)
290
+ rec_pose_lower = rc.rotation_6d_to_matrix(rec_pose_lower)
291
+ rec_pose_lower = rc.matrix_to_axis_angle(rec_pose_lower).reshape(bs*n, 9*3)
292
+ rec_pose_lower_recover = inverse_selection_tensor(rec_pose_lower, joint_mask_lower, bs*n)
293
+ rec_pose_hands = rec_hands_last.reshape(bs, n, 30, 6)
294
+ rec_pose_hands = rc.rotation_6d_to_matrix(rec_pose_hands)
295
+ rec_pose_hands = rc.matrix_to_axis_angle(rec_pose_hands).reshape(bs*n, 30*3)
296
+ rec_pose_hands_recover = inverse_selection_tensor(rec_pose_hands, joint_mask_hands, bs*n)
297
+ rec_pose = rec_pose_upper_recover + rec_pose_lower_recover + rec_pose_hands_recover
298
+ rec_pose = rc.axis_angle_to_matrix(rec_pose.reshape(bs, n, j, 3))
299
+ rec_pose = rc.matrix_to_rotation_6d(rec_pose).reshape(bs, n, j*6)
300
+ rec_trans_v_s = rec_lower_last[:, :, 54:57]
301
+ rec_x_trans = other_tools_hf.velocity2position(rec_trans_v_s[:, :, 0:1], 1/args.pose_fps, tar_trans[:, 0, 0:1])
302
+ rec_z_trans = other_tools_hf.velocity2position(rec_trans_v_s[:, :, 2:3], 1/args.pose_fps, tar_trans[:, 0, 2:3])
303
+ rec_y_trans = rec_trans_v_s[:,:,1:2]
304
+ rec_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
305
+ latent_last = torch.cat([rec_pose, rec_trans, rec_lower_last[:, :, 57:61]], dim=-1)
306
+
307
+ rec_index_face = torch.cat(rec_index_all_face, dim=1)
308
+ rec_index_upper = torch.cat(rec_index_all_upper, dim=1)
309
+ rec_index_lower = torch.cat(rec_index_all_lower, dim=1)
310
+ rec_index_hands = torch.cat(rec_index_all_hands, dim=1)
311
+ if args.cu != 0:
312
+ rec_upper = vq_model_upper.decode(rec_index_upper)
313
+ else:
314
+ rec_upper = vq_model_upper.decoder(rec_index_upper)
315
+ if args.cl != 0:
316
+ rec_lower = vq_model_lower.decode(rec_index_lower)
317
+ else:
318
+ rec_lower = vq_model_lower.decoder(rec_index_lower)
319
+ if args.ch != 0:
320
+ rec_hands = vq_model_hands.decode(rec_index_hands)
321
+ else:
322
+ rec_hands = vq_model_hands.decoder(rec_index_hands)
323
+ if args.cf != 0:
324
+ rec_face = vq_model_face.decode(rec_index_face)
325
+ else:
326
+ rec_face = vq_model_face.decoder(rec_index_face)
327
+
328
+ rec_exps = rec_face[:, :, 6:]
329
+ rec_pose_jaw = rec_face[:, :, :6]
330
+ rec_pose_legs = rec_lower[:, :, :54]
331
+ bs, n = rec_pose_jaw.shape[0], rec_pose_jaw.shape[1]
332
+ rec_pose_upper = rec_upper.reshape(bs, n, 13, 6)
333
+ rec_pose_upper = rc.rotation_6d_to_matrix(rec_pose_upper)#
334
+ rec_pose_upper = rc.matrix_to_axis_angle(rec_pose_upper).reshape(bs*n, 13*3)
335
+ rec_pose_upper_recover = inverse_selection_tensor(rec_pose_upper, joint_mask_upper, bs*n)
336
+ rec_pose_lower = rec_pose_legs.reshape(bs, n, 9, 6)
337
+ rec_pose_lower = rc.rotation_6d_to_matrix(rec_pose_lower)
338
+ rec_lower2global = rc.matrix_to_rotation_6d(rec_pose_lower.clone()).reshape(bs, n, 9*6)
339
+ rec_pose_lower = rc.matrix_to_axis_angle(rec_pose_lower).reshape(bs*n, 9*3)
340
+ rec_pose_lower_recover = inverse_selection_tensor(rec_pose_lower, joint_mask_lower, bs*n)
341
+ rec_pose_hands = rec_hands.reshape(bs, n, 30, 6)
342
+ rec_pose_hands = rc.rotation_6d_to_matrix(rec_pose_hands)
343
+ rec_pose_hands = rc.matrix_to_axis_angle(rec_pose_hands).reshape(bs*n, 30*3)
344
+ rec_pose_hands_recover = inverse_selection_tensor(rec_pose_hands, joint_mask_hands, bs*n)
345
+ rec_pose_jaw = rec_pose_jaw.reshape(bs*n, 6)
346
+ rec_pose_jaw = rc.rotation_6d_to_matrix(rec_pose_jaw)
347
+ rec_pose_jaw = rc.matrix_to_axis_angle(rec_pose_jaw).reshape(bs*n, 1*3)
348
+ rec_pose = rec_pose_upper_recover + rec_pose_lower_recover + rec_pose_hands_recover
349
+ rec_pose[:, 66:69] = rec_pose_jaw
350
+
351
+ to_global = rec_lower
352
+ to_global[:, :, 54:57] = 0.0
353
+ to_global[:, :, :54] = rec_lower2global
354
+ rec_global = global_motion(to_global)
355
+
356
+ rec_trans_v_s = rec_global["rec_pose"][:, :, 54:57]
357
+ rec_x_trans = other_tools_hf.velocity2position(rec_trans_v_s[:, :, 0:1], 1/args.pose_fps, tar_trans[:, 0, 0:1])
358
+ rec_z_trans = other_tools_hf.velocity2position(rec_trans_v_s[:, :, 2:3], 1/args.pose_fps, tar_trans[:, 0, 2:3])
359
+ rec_y_trans = rec_trans_v_s[:,:,1:2]
360
+ rec_trans = torch.cat([rec_x_trans, rec_y_trans, rec_z_trans], dim=-1)
361
+ tar_pose = tar_pose[:, :n, :]
362
+ tar_exps = tar_exps[:, :n, :]
363
+ tar_trans = tar_trans[:, :n, :]
364
+ tar_beta = tar_beta[:, :n, :]
365
+
366
+ rec_pose = rc.axis_angle_to_matrix(rec_pose.reshape(bs*n, j, 3))
367
+ rec_pose = rc.matrix_to_rotation_6d(rec_pose).reshape(bs, n, j*6)
368
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs*n, j, 3))
369
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
370
+
371
+ net_out = {
372
+ 'rec_pose': rec_pose,
373
+ 'rec_trans': rec_trans,
374
+ 'tar_pose': tar_pose,
375
+ 'tar_exps': tar_exps,
376
+ 'tar_beta': tar_beta,
377
+ 'tar_trans': tar_trans,
378
+ 'rec_exps': rec_exps,
379
+ }
380
+
381
+
382
+ tar_pose = net_out['tar_pose']
383
+ rec_pose = net_out['rec_pose']
384
+ tar_exps = net_out['tar_exps']
385
+ tar_beta = net_out['tar_beta']
386
+ rec_trans = net_out['rec_trans']
387
+ tar_trans = net_out['tar_trans']
388
+ rec_exps = net_out['rec_exps']
389
+ # print(rec_pose.shape, tar_pose.shape)
390
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], joints
391
+ # interpolate to 30fps
392
+ if (30/args.pose_fps) != 1:
393
+ assert 30%args.pose_fps == 0
394
+ n *= int(30/args.pose_fps)
395
+ tar_pose = torch.nn.functional.interpolate(tar_pose.permute(0, 2, 1), scale_factor=30/args.pose_fps, mode='linear').permute(0,2,1)
396
+ rec_pose = torch.nn.functional.interpolate(rec_pose.permute(0, 2, 1), scale_factor=30/args.pose_fps, mode='linear').permute(0,2,1)
397
+
398
+ # print(rec_pose.shape, tar_pose.shape)
399
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose.reshape(bs*n, j, 6))
400
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
401
+
402
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs*n, j, 6))
403
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
404
+
405
+ return tar_pose, rec_pose, tar_exps, tar_beta, rec_trans, tar_trans, rec_exps, bs, n, j
406
+
407
+
408
+ class BaseTrainer(object):
409
+ def __init__(self, args, sp, ap, tp):
410
+ hf_dir = "hf"
411
+ if not os.path.exists(args.out_path + "custom/" + hf_dir + "/"):
412
+ os.makedirs(args.out_path + "custom/" + hf_dir + "/")
413
+ sf.write(args.out_path + "custom/" + hf_dir + "/tmp.wav", ap[1][:ap[0]*8], ap[0])
414
+ self.audio_path = args.out_path + "custom/" + hf_dir + "/tmp.wav"
415
+ audio, ssr = librosa.load(self.audio_path)
416
+ ap = (ssr, audio)
417
+ self.args = args
418
+ self.rank = 0 # dist.get_rank()
419
+
420
+ #self.checkpoint_path = args.out_path + "custom/" + args.name + args.notes + "/" #wandb.run.dir #args.cache_path+args.out_path+"/"+args.name
421
+ self.checkpoint_path = args.out_path + "custom/" + hf_dir + "/"
422
+ if self.rank == 0:
423
+ self.test_data = __import__(f"dataloaders.{args.dataset}", fromlist=["something"]).CustomDataset(args, "test", smplx_path=sp, audio_path=ap, text_path=tp)
424
+ self.test_loader = torch.utils.data.DataLoader(
425
+ self.test_data,
426
+ batch_size=1,
427
+ shuffle=False,
428
+ num_workers=args.loader_workers,
429
+ drop_last=False,
430
+ )
431
+ logger.info(f"Init test dataloader success")
432
+ model_module = __import__(f"models.{args.model}", fromlist=["something"])
433
+
434
+ if args.ddp:
435
+ self.model = getattr(model_module, args.g_name)(args).to(self.rank)
436
+ process_group = torch.distributed.new_group()
437
+ self.model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(self.model, process_group)
438
+ self.model = DDP(self.model, device_ids=[self.rank], output_device=self.rank,
439
+ broadcast_buffers=False, find_unused_parameters=False)
440
+ else:
441
+ self.model = torch.nn.DataParallel(getattr(model_module, args.g_name)(args), args.gpus).cpu()
442
+
443
+ if self.rank == 0:
444
+ logger.info(self.model)
445
+ logger.info(f"init {args.g_name} success")
446
+
447
+ self.smplx = smplx.create(
448
+ self.args.data_path_1+"smplx_models/",
449
+ model_type='smplx',
450
+ gender='NEUTRAL_2020',
451
+ use_face_contour=False,
452
+ num_betas=300,
453
+ num_expression_coeffs=100,
454
+ ext='npz',
455
+ use_pca=False,
456
+ )
457
+
458
+ self.args = args
459
+ self.joints = self.test_data.joints
460
+ self.ori_joint_list = joints_list[self.args.ori_joints]
461
+ self.tar_joint_list_face = joints_list["beat_smplx_face"]
462
+ self.tar_joint_list_upper = joints_list["beat_smplx_upper"]
463
+ self.tar_joint_list_hands = joints_list["beat_smplx_hands"]
464
+ self.tar_joint_list_lower = joints_list["beat_smplx_lower"]
465
+
466
+ self.joint_mask_face = np.zeros(len(list(self.ori_joint_list.keys()))*3)
467
+ self.joints = 55
468
+ for joint_name in self.tar_joint_list_face:
469
+ self.joint_mask_face[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
470
+ self.joint_mask_upper = np.zeros(len(list(self.ori_joint_list.keys()))*3)
471
+ for joint_name in self.tar_joint_list_upper:
472
+ self.joint_mask_upper[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
473
+ self.joint_mask_hands = np.zeros(len(list(self.ori_joint_list.keys()))*3)
474
+ for joint_name in self.tar_joint_list_hands:
475
+ self.joint_mask_hands[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
476
+ self.joint_mask_lower = np.zeros(len(list(self.ori_joint_list.keys()))*3)
477
+ for joint_name in self.tar_joint_list_lower:
478
+ self.joint_mask_lower[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
479
+
480
+ self.tracker = other_tools_hf.EpochTracker(["fid", "l1div", "bc", "rec", "trans", "vel", "transv", 'dis', 'gen', 'acc', 'transa', 'exp', 'lvd', 'mse', "cls", "rec_face", "latent", "cls_full", "cls_self", "cls_word", "latent_word","latent_self"], [False,True,True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False,False,False,False])
481
+
482
+ vq_model_module = __import__(f"models.motion_representation", fromlist=["something"])
483
+ self.args.vae_layer = 2
484
+ self.args.vae_length = 256
485
+ self.args.vae_test_dim = 106
486
+ self.vq_model_face = getattr(vq_model_module, "VQVAEConvZero")(self.args).cpu()
487
+ # print(self.vq_model_face)
488
+ # other_tools_hf.load_checkpoints(self.vq_model_face, self.args.data_path_1 + "pretrained_vq/last_790_face_v2.bin", args.e_name)
489
+ self.args.vae_test_dim = 78
490
+ self.vq_model_upper = getattr(vq_model_module, "VQVAEConvZero")(self.args).cpu()
491
+ # other_tools_hf.load_checkpoints(self.vq_model_upper, self.args.data_path_1 + "pretrained_vq/upper_vertex_1layer_710.bin", args.e_name)
492
+ self.args.vae_test_dim = 180
493
+ self.vq_model_hands = getattr(vq_model_module, "VQVAEConvZero")(self.args).cpu()
494
+ # other_tools_hf.load_checkpoints(self.vq_model_hands, self.args.data_path_1 + "pretrained_vq/hands_vertex_1layer_710.bin", args.e_name)
495
+ self.args.vae_test_dim = 61
496
+ self.args.vae_layer = 4
497
+ self.vq_model_lower = getattr(vq_model_module, "VQVAEConvZero")(self.args).cpu()
498
+ # other_tools_hf.load_checkpoints(self.vq_model_lower, self.args.data_path_1 + "pretrained_vq/lower_foot_600.bin", args.e_name)
499
+ self.args.vae_test_dim = 61
500
+ self.args.vae_layer = 4
501
+ self.global_motion = getattr(vq_model_module, "VAEConvZero")(self.args).cpu()
502
+ # other_tools_hf.load_checkpoints(self.global_motion, self.args.data_path_1 + "pretrained_vq/last_1700_foot.bin", args.e_name)
503
+ self.args.vae_test_dim = 330
504
+ self.args.vae_layer = 4
505
+ self.args.vae_length = 240
506
+
507
+ # self.cls_loss = nn.NLLLoss().to(self.rank)
508
+ # self.reclatent_loss = nn.MSELoss().to(self.rank)
509
+ # self.vel_loss = torch.nn.L1Loss(reduction='mean').to(self.rank)
510
+ # self.rec_loss = get_loss_func("GeodesicLoss").to(self.rank)
511
+ self.log_softmax = nn.LogSoftmax(dim=2)
512
+
513
+
514
+ def inverse_selection(self, filtered_t, selection_array, n):
515
+ original_shape_t = np.zeros((n, selection_array.size))
516
+ selected_indices = np.where(selection_array == 1)[0]
517
+ for i in range(n):
518
+ original_shape_t[i, selected_indices] = filtered_t[i]
519
+ return original_shape_t
520
+
521
+ def inverse_selection_tensor(self, filtered_t, selection_array, n):
522
+ selection_array = torch.from_numpy(selection_array).cuda()
523
+ original_shape_t = torch.zeros((n, 165)).cuda()
524
+ selected_indices = torch.where(selection_array == 1)[0]
525
+ for i in range(n):
526
+ original_shape_t[i, selected_indices] = filtered_t[i]
527
+ return original_shape_t
528
+
529
+
530
+ def test_demo(self, epoch):
531
+ '''
532
+ input audio and text, output motion
533
+ do not calculate loss and metric
534
+ save video
535
+ '''
536
+ results_save_path = self.checkpoint_path + f"/{epoch}/"
537
+ if os.path.exists(results_save_path):
538
+ import shutil
539
+ shutil.rmtree(results_save_path)
540
+ os.makedirs(results_save_path)
541
+ start_time = time.time()
542
+ total_length = 0
543
+ test_seq_list = self.test_data.selected_file
544
+ align = 0
545
+ latent_out = []
546
+ latent_ori = []
547
+ l2_all = 0
548
+ lvel = 0
549
+ for its, batch_data in enumerate(self.test_loader):
550
+ tar_pose, rec_pose, tar_exps, tar_beta, rec_trans, tar_trans, rec_exps, bs, n, j = test_demo_gpu(
551
+ self.model, self.vq_model_face, self.vq_model_upper, self.vq_model_hands, self.vq_model_lower, self.global_motion, self.smplx,
552
+ batch_data,
553
+ self.args,
554
+ self.joints, self.joint_mask_upper, self.joint_mask_lower, self.joint_mask_hands,
555
+ self.log_softmax,
556
+ )
557
+
558
+ tar_pose_np = tar_pose.detach().cpu().numpy()
559
+ rec_pose_np = rec_pose.detach().cpu().numpy()
560
+ rec_trans_np = rec_trans.detach().cpu().numpy().reshape(bs*n, 3)
561
+ rec_exp_np = rec_exps.detach().cpu().numpy().reshape(bs*n, 100)
562
+ tar_exp_np = tar_exps.detach().cpu().numpy().reshape(bs*n, 100)
563
+ tar_trans_np = tar_trans.detach().cpu().numpy().reshape(bs*n, 3)
564
+ #'''
565
+ # its = 0
566
+ gt_npz = np.load(self.args.data_path+self.args.pose_rep +"/"+test_seq_list.iloc[its]['id']+".npz", allow_pickle=True)
567
+ np.savez(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
568
+ betas=gt_npz["betas"],
569
+ poses=tar_pose_np,
570
+ expressions=tar_exp_np,
571
+ trans=tar_trans_np,
572
+ model='smplx2020',
573
+ gender='neutral',
574
+ mocap_frame_rate = 30,
575
+ )
576
+ np.savez(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
577
+ betas=gt_npz["betas"],
578
+ poses=rec_pose_np,
579
+ expressions=rec_exp_np,
580
+ trans=rec_trans_np,
581
+ model='smplx2020',
582
+ gender='neutral',
583
+ mocap_frame_rate = 30,
584
+ )
585
+
586
+ total_length += n
587
+ render_vid_path = other_tools_hf.render_one_sequence_no_gt(
588
+ results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
589
+ # results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
590
+ results_save_path,
591
+ self.audio_path,
592
+ self.args.data_path_1+"smplx_models/",
593
+ use_matplotlib = False,
594
+ args = self.args,
595
+ )
596
+ result = gr.Video(value=render_vid_path, visible=True)
597
+ end_time = time.time() - start_time
598
+ logger.info(f"total inference time: {int(end_time)} s for {int(total_length/self.args.pose_fps)} s motion")
599
+ return result
600
+
601
+
602
+ @logger.catch
603
+ def emage(audio_path):
604
+ smplx_path = None
605
+ text_path = None
606
+ rank = 0
607
+ world_size = 1
608
+ args = config.parse_args()
609
+ #os.environ['TRANSFORMERS_CACHE'] = args.data_path_1 + "hub/"
610
+ if not sys.warnoptions:
611
+ warnings.simplefilter("ignore")
612
+ # dist.init_process_group(backend="gloo", rank=rank, world_size=world_size)
613
+
614
+ #logger_tools.set_args_and_logger(args, rank)
615
+ other_tools_hf.set_random_seed(args)
616
+ other_tools_hf.print_exp_info(args)
617
+
618
+ # return one intance of trainer
619
+ trainer = BaseTrainer(args, sp = smplx_path, ap = audio_path, tp = text_path)
620
+ result = trainer.test_demo(999)
621
+ return result
622
+
623
+ examples = [
624
+ ["./EMAGE/test_sequences/wave16k/2_scott_0_1_1.wav"],
625
+ ["./EMAGE/test_sequences/wave16k/2_scott_0_2_2.wav"],
626
+ ["./EMAGE/test_sequences/wave16k/2_scott_0_3_3.wav"],
627
+ ]
628
+
629
+ demo = gr.Interface(
630
+ emage, # function
631
+ inputs=[
632
+ # gr.File(label="Please upload SMPL-X file with npz format here.", file_types=["npz", "NPZ"]),
633
+ gr.Audio(),
634
+ # gr.File(label="Please upload textgrid format file here.", file_types=["TextGrid", "Textgrid", "textgrid"])
635
+ ], # input type
636
+ outputs=gr.Video(format="mp4", visible=True),
637
+ title='\
638
+ <div align="center">\
639
+ EMAGE: Towards Unified Holistic Co-Speech Gesture Generation via Expressive Masked Audio Gesture Modeling <br/>\
640
+ CVPR 2024 <br/>\
641
+ </div>',
642
+ description='\
643
+ <div align="center">\
644
+ Haiyang Liu1*, Zihao Zhu2*, Giorgio Becherini3, Yichen Peng4, Mingyang Su5,<br/>\
645
+ You Zhou, Xuefei Zhe, Naoya Iwamoto, Bo Zheng, Michael J. Black3 <br/>\
646
+ (*Equal Contribution) <br/>\
647
+ 1The University of Tokyo, 2Keio University, 4Japan Advanced Institute of Science and Technology, <br/>\
648
+ 3Max Planck Institute for Intelligent Systems, 5Tsinghua University <br/>\
649
+ </div>\
650
+ ',
651
+ article="\
652
+ Due to the limited resources in this space, we process the first 8s of your uploaded audio. <br/>\
653
+ Try to develop this space locally for longer motion generation, e.g., 60s. <br/>\
654
+ Relevant links: [Project Page (https://pantomatrix.github.io/EMAGE/)\
655
+ ",
656
+ examples=examples,
657
+ )
658
+
659
+
660
+ if __name__ == "__main__":
661
+ os.environ["MASTER_ADDR"]='127.0.0.1'
662
+ os.environ["MASTER_PORT"]='8675'
663
+ #os.environ["TORCH_DISTRIBUTED_DEBUG"] = "DETAIL"
664
+ demo.launch(share=True)
camn_trainer.py ADDED
@@ -0,0 +1,361 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import train
2
+ import os
3
+ import time
4
+ import csv
5
+ import sys
6
+ import warnings
7
+ import random
8
+ import numpy as np
9
+ import time
10
+ import pprint
11
+ import pickle
12
+
13
+ import torch
14
+ import torch.nn as nn
15
+ import torch.nn.functional as F
16
+ from torch.utils.tensorboard import SummaryWriter
17
+ from torch.nn.parallel import DistributedDataParallel as DDP
18
+ from loguru import logger
19
+ import smplx
20
+ import librosa
21
+
22
+ from utils import config, logger_tools, other_tools, metric
23
+ from utils import rotation_conversions as rc
24
+ from dataloaders import data_tools
25
+ from optimizers.optim_factory import create_optimizer
26
+ from optimizers.scheduler_factory import create_scheduler
27
+ from optimizers.loss_factory import get_loss_func
28
+ from scipy.spatial.transform import Rotation
29
+
30
+
31
+ class CustomTrainer(train.BaseTrainer):
32
+ def __init__(self, args):
33
+ super().__init__(args)
34
+ self.joints = self.train_data.joints
35
+ self.tracker = other_tools.EpochTracker(["fid", "l1div", "bc", "rec", "trans", "vel", "transv", 'dis', 'gen', 'acc', 'transa', 'div_reg', "kl"], [False,True,True, False, False, False, False, False, False, False, False, False, False])
36
+ if not self.args.rot6d: #"rot6d" not in args.pose_rep:
37
+ logger.error(f"this script is for rot6d, your pose rep. is {args.pose_rep}")
38
+ self.rec_loss = get_loss_func("GeodesicLoss").to(self.rank)
39
+ self.vel_loss = torch.nn.L1Loss(reduction='mean').to(self.rank)
40
+
41
+ def _load_data(self, dict_data):
42
+ tar_pose = dict_data["pose"].to(self.rank)
43
+ tar_trans = dict_data["trans"].to(self.rank)
44
+ tar_exps = dict_data["facial"].to(self.rank)
45
+ tar_beta = dict_data["beta"].to(self.rank)
46
+ tar_id = dict_data["id"].to(self.rank).long()
47
+ tar_word = dict_data["word"].to(self.rank)
48
+ in_audio = dict_data["audio"].to(self.rank)
49
+ in_emo = dict_data["emo"].to(self.rank)
50
+ #in_sem = dict_data["sem"].to(self.rank)
51
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], self.joints
52
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, j, 3))
53
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
54
+ in_pre_pose_cat = torch.cat([tar_pose[:, 0:self.args.pre_frames], tar_trans[:, :self.args.pre_frames]], dim=2).to(self.rank)
55
+
56
+ in_pre_pose = tar_pose.new_zeros((bs, n, j*6+1+3)).to(self.rank)
57
+ in_pre_pose[:, 0:self.args.pre_frames, :-1] = in_pre_pose_cat[:, 0:self.args.pre_frames]
58
+ in_pre_pose[:, 0:self.args.pre_frames, -1] = 1
59
+ return {
60
+ "tar_pose": tar_pose,
61
+ "in_audio": in_audio,
62
+ "in_motion": in_pre_pose,
63
+ "tar_trans": tar_trans,
64
+ "tar_exps": tar_exps,
65
+ "tar_beta": tar_beta,
66
+ "tar_word": tar_word,
67
+ 'tar_id': tar_id,
68
+ 'in_emo': in_emo,
69
+ #'in_sem': in_sem,
70
+ }
71
+
72
+ def _d_training(self, loaded_data):
73
+ bs, n, j = loaded_data["tar_pose"].shape[0], loaded_data["tar_pose"].shape[1], self.joints
74
+ net_out = self.model(in_audio = loaded_data['in_audio'], pre_seq = loaded_data["in_motion"], in_text=loaded_data["tar_word"], in_id=loaded_data["tar_id"], in_emo=loaded_data["in_emo"], in_facial = loaded_data["tar_exps"])
75
+ rec_pose = net_out["rec_pose"][:, :, :j*6]
76
+ # rec_trans = net_out["rec_pose"][:, :, j*6:j*6+3]
77
+
78
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
79
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)
80
+ rec_pose = rc.matrix_to_rotation_6d(rec_pose).reshape(bs, n, j*6)
81
+ tar_pose = rc.rotation_6d_to_matrix(loaded_data["tar_pose"].reshape(bs, n, j, 6))
82
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
83
+ out_d_fake = self.d_model(rec_pose)
84
+ out_d_real = self.d_model(tar_pose)
85
+
86
+ d_loss_adv = torch.sum(-torch.mean(torch.log(out_d_real + 1e-8) + torch.log(1 - out_d_fake + 1e-8)))
87
+ self.tracker.update_meter("dis", "train", d_loss_adv.item())
88
+ return d_loss_adv
89
+
90
+ def _g_training(self, loaded_data, use_adv, mode="train"):
91
+ bs, n, j = loaded_data["tar_pose"].shape[0], loaded_data["tar_pose"].shape[1], self.joints
92
+ net_out = self.model(in_audio = loaded_data['in_audio'], pre_seq = loaded_data["in_motion"], in_text=loaded_data["tar_word"], in_id=loaded_data["tar_id"], in_emo=loaded_data["in_emo"], in_facial = loaded_data["tar_exps"])
93
+ rec_pose = net_out["rec_pose"][:, :, :j*6]
94
+ rec_trans = net_out["rec_pose"][:, :, j*6:j*6+3]
95
+ # print(rec_pose.shape, bs, n, j, loaded_data['in_audio'].shape, loaded_data["in_motion"].shape)
96
+ rec_pose = rec_pose.reshape(bs, n, j, 6)
97
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose)
98
+ tar_pose = rc.rotation_6d_to_matrix(loaded_data["tar_pose"].reshape(bs, n, j, 6))
99
+
100
+ rec_loss = self.rec_loss(tar_pose, rec_pose)
101
+ rec_loss *= self.args.rec_weight
102
+ self.tracker.update_meter("rec", mode, rec_loss.item())
103
+ # rec_loss_vel = self.vel_loss(rec_pose[:, 1:] - rec_pose[:, :-1], tar_pose[:, 1:] - tar_pose[:, :-1])
104
+ # self.tracker.update_meter("vel", mode, rec_loss_vel.item())
105
+ # rec_loss_acc = self.vel_loss(rec_pose[:, 2:] - 2*rec_pose[:, 1:-1] + rec_pose[:, :-2], tar_pose[:, 2:] - 2*tar_pose[:, 1:-1] + tar_pose[:, :-2])
106
+ # self.tracker.update_meter("acc", mode, rec_loss_acc.item())
107
+
108
+ rec_pose = rc.matrix_to_rotation_6d(rec_pose).reshape(bs, n, j*6)
109
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
110
+ if self.args.pose_dims < 330 and mode != "train":
111
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose.reshape(bs, n, j, 6))
112
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs, n, j*3)
113
+ rec_pose = self.inverse_selection_tensor(rec_pose, self.train_data.joint_mask, rec_pose.shape[0])
114
+ rec_pose = rc.axis_angle_to_matrix(rec_pose.reshape(bs, n, 55, 3))
115
+ rec_pose = rc.matrix_to_rotation_6d(rec_pose).reshape(bs, n, 55*6)
116
+
117
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs, n, j, 6))
118
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs, n, j*3)
119
+ tar_pose = self.inverse_selection_tensor(tar_pose, self.train_data.joint_mask, tar_pose.shape[0])
120
+ tar_pose = rc.axis_angle_to_matrix(tar_pose.reshape(bs, n, 55, 3))
121
+ tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, 55*6)
122
+ if use_adv and mode == 'train':
123
+ out_d_fake = self.d_model(rec_pose)
124
+ d_loss_adv = -torch.mean(torch.log(out_d_fake + 1e-8))
125
+ self.tracker.update_meter("gen", mode, d_loss_adv.item())
126
+ else:
127
+ d_loss_adv = 0
128
+
129
+ if self.args.train_trans:
130
+ trans_loss = self.vel_loss(rec_trans, loaded_data["tar_trans"])
131
+ trans_loss *= self.args.rec_weight
132
+ self.tracker.update_meter("trans", mode, trans_loss.item())
133
+ else:
134
+ trans_loss = 0
135
+ # trans_loss_vel = self.vel_loss(rec_trans[:, 1:] - rec_trans[:, :-1], loaded_data["tar_trans"][:, 1:] - loaded_data["tar_trans"][:, :-1])
136
+ # self.tracker.update_meter("transv", mode, trans_loss_vel.item())
137
+ # trans_loss_acc = self.vel_loss(rec_trans[:, 2:] - 2*rec_trans[:, 1:-1] + rec_trans[:, :-2], loaded_data["tar_trans"][:, 2:] - 2*loaded_data["tar_trans"][:, 1:-1] + loaded_data["tar_trans"][:, :-2])
138
+ # self.tracker.update_meter("transa", mode, trans_loss_acc.item())
139
+
140
+ if mode == 'train':
141
+ return d_loss_adv + rec_loss + trans_loss # + rec_loss_vel + rec_loss_acc + trans_loss_vel + trans_loss_acc
142
+ elif mode == 'val':
143
+ return {
144
+ 'rec_pose': rec_pose,
145
+ 'rec_trans': rec_trans,
146
+ 'tar_pose': tar_pose,
147
+ }
148
+ else:
149
+ return {
150
+ 'rec_pose': rec_pose,
151
+ 'rec_trans': rec_trans,
152
+ 'tar_pose': tar_pose,
153
+ 'tar_exps': loaded_data["tar_exps"],
154
+ 'tar_beta': loaded_data["tar_beta"],
155
+ 'tar_trans': loaded_data["tar_trans"],
156
+ }
157
+
158
+ def train(self, epoch):
159
+ use_adv = bool(epoch>=self.args.no_adv_epoch)
160
+ self.model.train()
161
+ self.d_model.train()
162
+ self.tracker.reset()
163
+ t_start = time.time()
164
+ for its, batch_data in enumerate(self.train_loader):
165
+ loaded_data = self._load_data(batch_data)
166
+ t_data = time.time() - t_start
167
+
168
+ if use_adv:
169
+ d_loss_final = 0
170
+ self.opt_d.zero_grad()
171
+ d_loss_adv = self._d_training(loaded_data)
172
+ d_loss_final += d_loss_adv
173
+ d_loss_final.backward()
174
+ self.opt_d.step()
175
+
176
+ self.opt.zero_grad()
177
+ g_loss_final = 0
178
+ g_loss_final += self._g_training(loaded_data, use_adv, 'train')
179
+ g_loss_final.backward()
180
+ self.opt.step()
181
+
182
+ mem_cost = torch.cuda.memory_cached() / 1E9
183
+ lr_g = self.opt.param_groups[0]['lr']
184
+ lr_d = self.opt_d.param_groups[0]['lr']
185
+ t_train = time.time() - t_start - t_data
186
+ t_start = time.time()
187
+ if its % self.args.log_period == 0:
188
+ self.train_recording(epoch, its, t_data, t_train, mem_cost, lr_g, lr_d=lr_d)
189
+ if self.args.debug:
190
+ if its == 1: break
191
+ self.opt_s.step(epoch)
192
+ self.opt_d_s.step(epoch)
193
+
194
+
195
+ def val(self, epoch):
196
+ self.model.eval()
197
+ self.d_model.eval()
198
+ with torch.no_grad():
199
+ for its, batch_data in enumerate(self.train_loader):
200
+ loaded_data = self._load_data(batch_data)
201
+ net_out = self._g_training(loaded_data, False, 'val')
202
+ tar_pose = net_out['tar_pose']
203
+ rec_pose = net_out['rec_pose']
204
+ n = tar_pose.shape[1]
205
+ if (30/self.args.pose_fps) != 1:
206
+ assert 30%self.args.pose_fps == 0
207
+ n *= int(30/self.args.pose_fps)
208
+ tar_pose = torch.nn.functional.interpolate(tar_pose.permute(0, 2, 1), scale_factor=30/self.args.pose_fps, mode='linear').permute(0,2,1)
209
+ rec_pose = torch.nn.functional.interpolate(rec_pose.permute(0, 2, 1), scale_factor=30/self.args.pose_fps, mode='linear').permute(0,2,1)
210
+ n = tar_pose.shape[1]
211
+ remain = n%self.args.vae_test_len
212
+ tar_pose = tar_pose[:, :n-remain, :]
213
+ rec_pose = rec_pose[:, :n-remain, :]
214
+ latent_out = self.eval_copy.map2latent(rec_pose).reshape(-1, self.args.vae_length).cpu().numpy()
215
+ latent_ori = self.eval_copy.map2latent(tar_pose).reshape(-1, self.args.vae_length).cpu().numpy()
216
+ if its == 0:
217
+ latent_out_motion_all = latent_out
218
+ latent_ori_all = latent_ori
219
+ else:
220
+ latent_out_motion_all = np.concatenate([latent_out_motion_all, latent_out], axis=0)
221
+ latent_ori_all = np.concatenate([latent_ori_all, latent_ori], axis=0)
222
+ if self.args.debug:
223
+ if its == 1: break
224
+ fid_motion = data_tools.FIDCalculator.frechet_distance(latent_out_motion_all, latent_ori_all)
225
+ self.tracker.update_meter("fid", "val", fid_motion)
226
+ self.val_recording(epoch)
227
+
228
+ def test(self, epoch):
229
+ results_save_path = self.checkpoint_path + f"/{epoch}/"
230
+ if os.path.exists(results_save_path):
231
+ return 0
232
+ os.makedirs(results_save_path)
233
+ start_time = time.time()
234
+ total_length = 0
235
+ test_seq_list = self.test_data.selected_file
236
+ align = 0
237
+ latent_out = []
238
+ latent_ori = []
239
+ self.model.eval()
240
+ self.smplx.eval()
241
+ self.eval_copy.eval()
242
+ with torch.no_grad():
243
+ for its, batch_data in enumerate(self.test_loader):
244
+ loaded_data = self._load_data(batch_data)
245
+ net_out = self._g_training(loaded_data, False, 'test')
246
+ tar_pose = net_out['tar_pose']
247
+ rec_pose = net_out['rec_pose']
248
+ tar_exps = net_out['tar_exps']
249
+ tar_beta = net_out['tar_beta']
250
+ rec_trans = net_out['rec_trans']
251
+ tar_trans = net_out['tar_trans']
252
+ bs, n, j = tar_pose.shape[0], tar_pose.shape[1], 55
253
+ if (30/self.args.pose_fps) != 1:
254
+ assert 30%self.args.pose_fps == 0
255
+ n *= int(30/self.args.pose_fps)
256
+ tar_pose = torch.nn.functional.interpolate(tar_pose.permute(0, 2, 1), scale_factor=30/self.args.pose_fps, mode='linear').permute(0,2,1)
257
+ rec_pose = torch.nn.functional.interpolate(rec_pose.permute(0, 2, 1), scale_factor=30/self.args.pose_fps, mode='linear').permute(0,2,1)
258
+ tar_beta = torch.nn.functional.interpolate(tar_beta.permute(0, 2, 1), scale_factor=30/self.args.pose_fps, mode='linear').permute(0,2,1)
259
+ tar_exps = torch.nn.functional.interpolate(tar_exps.permute(0, 2, 1), scale_factor=30/self.args.pose_fps, mode='linear').permute(0,2,1)
260
+ tar_trans = torch.nn.functional.interpolate(tar_trans.permute(0, 2, 1), scale_factor=30/self.args.pose_fps, mode='linear').permute(0,2,1)
261
+ rec_trans = torch.nn.functional.interpolate(rec_trans.permute(0, 2, 1), scale_factor=30/self.args.pose_fps, mode='linear').permute(0,2,1)
262
+
263
+ # print(rec_pose.shape, tar_pose.shape)
264
+ # rec_pose = rc.rotation_6d_to_matrix(rec_pose.reshape(bs*n, j, 6))
265
+ # rec_pose = rc.matrix_to_rotation_6d(rec_pose).reshape(bs, n, j*6)
266
+ # tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs*n, j, 6))
267
+ # tar_pose = rc.matrix_to_rotation_6d(tar_pose).reshape(bs, n, j*6)
268
+ remain = n%self.args.vae_test_len
269
+ latent_out.append(self.eval_copy.map2latent(rec_pose[:, :n-remain]).reshape(-1, self.args.vae_length).detach().cpu().numpy()) # bs * n/8 * 240
270
+ latent_ori.append(self.eval_copy.map2latent(tar_pose[:, :n-remain]).reshape(-1, self.args.vae_length).detach().cpu().numpy())
271
+
272
+ rec_pose = rc.rotation_6d_to_matrix(rec_pose.reshape(bs*n, j, 6))
273
+ rec_pose = rc.matrix_to_axis_angle(rec_pose).reshape(bs*n, j*3)
274
+ tar_pose = rc.rotation_6d_to_matrix(tar_pose.reshape(bs*n, j, 6))
275
+ tar_pose = rc.matrix_to_axis_angle(tar_pose).reshape(bs*n, j*3)
276
+
277
+ vertices_rec = self.smplx(
278
+ betas=tar_beta.reshape(bs*n, 300),
279
+ transl=rec_trans.reshape(bs*n, 3)-rec_trans.reshape(bs*n, 3),
280
+ expression=tar_exps.reshape(bs*n, 100)-tar_exps.reshape(bs*n, 100),
281
+ jaw_pose=rec_pose[:, 66:69],
282
+ global_orient=rec_pose[:,:3],
283
+ body_pose=rec_pose[:,3:21*3+3],
284
+ left_hand_pose=rec_pose[:,25*3:40*3],
285
+ right_hand_pose=rec_pose[:,40*3:55*3],
286
+ return_joints=True,
287
+ leye_pose=rec_pose[:, 69:72],
288
+ reye_pose=rec_pose[:, 72:75],
289
+ )
290
+ # vertices_tar = self.smplx(
291
+ # betas=tar_beta.reshape(bs*n, 300),
292
+ # transl=rec_trans.reshape(bs*n, 3)-rec_trans.reshape(bs*n, 3),
293
+ # expression=tar_exps.reshape(bs*n, 100)-tar_exps.reshape(bs*n, 100),
294
+ # jaw_pose=tar_pose[:, 66:69],
295
+ # global_orient=tar_pose[:,:3],
296
+ # body_pose=tar_pose[:,3:21*3+3],
297
+ # left_hand_pose=tar_pose[:,25*3:40*3],
298
+ # right_hand_pose=tar_pose[:,40*3:55*3],
299
+ # return_joints=True,
300
+ # leye_pose=tar_pose[:, 69:72],
301
+ # reye_pose=tar_pose[:, 72:75],
302
+ # )
303
+ joints_rec = vertices_rec["joints"].detach().cpu().numpy().reshape(1, n, 127*3)[0, :n, :55*3]
304
+ # joints_tar = vertices_tar["joints"].detach().cpu().numpy().reshape(1, n, 127*3)[0, :n, :55*3]
305
+ _ = self.l1_calculator.run(joints_rec)
306
+ if self.alignmenter is not None:
307
+ in_audio_eval, sr = librosa.load(self.args.data_path+"wave16k/"+test_seq_list.iloc[its]['id']+".wav")
308
+ in_audio_eval = librosa.resample(in_audio_eval, orig_sr=sr, target_sr=self.args.audio_sr)
309
+ a_offset = int(self.align_mask * (self.args.audio_sr / self.args.pose_fps))
310
+ onset_bt = self.alignmenter.load_audio(in_audio_eval[:int(self.args.audio_sr / self.args.pose_fps*n)], a_offset, len(in_audio_eval)-a_offset, True)
311
+ beat_vel = self.alignmenter.load_pose(joints_rec, self.align_mask, n-self.align_mask, 30, True)
312
+ # print(beat_vel)
313
+ align += (self.alignmenter.calculate_align(onset_bt, beat_vel, 30) * (n-2*self.align_mask))
314
+
315
+ tar_pose_axis_np = tar_pose.detach().cpu().numpy()
316
+ rec_pose_axis_np = rec_pose.detach().cpu().numpy()
317
+ rec_trans_np = rec_trans.detach().cpu().numpy().reshape(bs*n, 3)
318
+ rec_exp_np = tar_exps.detach().cpu().numpy().reshape(bs*n, 100) - tar_exps.detach().cpu().numpy().reshape(bs*n, 100)
319
+ tar_exp_np = tar_exps.detach().cpu().numpy().reshape(bs*n, 100) - tar_exps.detach().cpu().numpy().reshape(bs*n, 100)
320
+ tar_trans_np = tar_trans.detach().cpu().numpy().reshape(bs*n, 3)
321
+ gt_npz = np.load(self.args.data_path+self.args.pose_rep +"/"+test_seq_list.iloc[its]['id']+".npz", allow_pickle=True)
322
+ if not self.args.train_trans:
323
+ tar_trans_np = tar_trans_np - tar_trans_np
324
+ rec_trans_np = rec_trans_np - rec_trans_np
325
+ np.savez(results_save_path+"gt_"+test_seq_list.iloc[its]['id']+'.npz',
326
+ betas=gt_npz["betas"],
327
+ poses=tar_pose_axis_np,
328
+ expressions=tar_exp_np,
329
+ trans=tar_trans_np,
330
+ model='smplx2020',
331
+ gender='neutral',
332
+ mocap_frame_rate = 30 ,
333
+ )
334
+ np.savez(results_save_path+"res_"+test_seq_list.iloc[its]['id']+'.npz',
335
+ betas=gt_npz["betas"],
336
+ poses=rec_pose_axis_np,
337
+ expressions=rec_exp_np,
338
+ trans=rec_trans_np,
339
+ model='smplx2020',
340
+ gender='neutral',
341
+ mocap_frame_rate = 30,
342
+ )
343
+ total_length += n
344
+
345
+ latent_out_all = np.concatenate(latent_out, axis=0)
346
+ latent_ori_all = np.concatenate(latent_ori, axis=0)
347
+ fid = data_tools.FIDCalculator.frechet_distance(latent_out_all, latent_ori_all)
348
+ logger.info(f"fid score: {fid}")
349
+ self.test_recording("fid", fid, epoch)
350
+
351
+ align_avg = align/(total_length-2*len(self.test_loader)*self.align_mask)
352
+ logger.info(f"align score: {align_avg}")
353
+ self.test_recording("bc", align_avg, epoch)
354
+
355
+ l1div = self.l1_calculator.avg()
356
+ logger.info(f"l1div score: {l1div}")
357
+ self.test_recording("l1div", l1div, epoch)
358
+
359
+ # data_tools.result2target_vis(self.args.pose_version, results_save_path, results_save_path, self.test_demo, False)
360
+ end_time = time.time() - start_time
361
+ logger.info(f"total inference time: {int(end_time)} s for {int(total_length/self.args.pose_fps)} s motion")
configs/.ipynb_checkpoints/emage_test_hf-checkpoint.yaml ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ root_path: ./
5
+ out_path: ./outputs/audio2pose/
6
+ project: s2g
7
+ data_path: ./EMAGE/test_sequences/
8
+ e_path: weights/AESKConv_240_100.bin
9
+ eval_model: motion_representation
10
+ e_name: VAESKConv
11
+ test_ckpt: ./EMAGE/emage_audio_175.bin
12
+ data_path_1: ./EMAGE/
13
+ vae_test_len: 32
14
+ vae_test_dim: 330
15
+ vae_test_stride: 20
16
+ vae_length: 240
17
+ vae_codebook_size: 256
18
+ vae_layer: 4
19
+ vae_grow: [1,1,2,1]
20
+ variational: False
21
+
22
+ # data config
23
+ training_speakers: [2] #[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]
24
+ additional_data: False
25
+ cache_path: ./datasets/beat_cache/beat_smplx_en_emage_test/
26
+ dataset: beat_testonly_hf
27
+ new_cache: True
28
+
29
+ # motion config
30
+ ori_joints: beat_smplx_joints
31
+ tar_joints: beat_smplx_full
32
+ pose_rep: smplxflame_30
33
+ pose_norm: False
34
+ pose_fps: 30
35
+ rot6d: True
36
+ pre_frames: 4
37
+ pose_dims: 330
38
+ pose_length: 64
39
+ stride: 20
40
+ test_length: 64
41
+ motion_f: 256
42
+ m_pre_encoder: null
43
+ m_encoder: null
44
+ m_fix_pre: False
45
+
46
+ # audio config
47
+ audio_rep: wave16k
48
+ audio_sr: 16000
49
+ audio_fps: 16000
50
+ audio_norm: False
51
+ audio_f: 256
52
+ # a_pre_encoder: tcn_camn
53
+ # a_encoder: none
54
+ # a_fix_pre: False
55
+
56
+ # text config
57
+ # word_rep: textgrid
58
+ # word_index_num: 11195
59
+ # word_dims: 300
60
+ # freeze_wordembed: False
61
+ # word_f: 256
62
+ # t_pre_encoder: fasttext
63
+ # t_encoder: null
64
+ # t_fix_pre: False
65
+
66
+ # facial config
67
+ facial_rep: smplxflame_30
68
+ facial_dims: 100
69
+ facial_norm: False
70
+ facial_f: 0
71
+ f_pre_encoder: null
72
+ f_encoder: null
73
+ f_fix_pre: False
74
+
75
+ # speaker config
76
+ id_rep: onehot
77
+ speaker_f: 0
78
+
79
+ # model config
80
+ batch_size: 64
81
+ # warmup_epochs: 1
82
+ # warmup_lr: 1e-6
83
+ lr_base: 5e-4
84
+ model: emage_audio
85
+ g_name: MAGE_Transformer
86
+ trainer: emage
87
+ hidden_size: 768
88
+ n_layer: 1
89
+
90
+ rec_weight: 1
91
+ grad_norm: 0.99
92
+ epochs: 400
93
+ test_period: 20
94
+ ll: 3
95
+ lf: 3
96
+ lu: 3
97
+ lh: 3
98
+ cl: 1
99
+ cf: 0
100
+ cu: 1
101
+ ch: 1
configs/camn.yaml ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ root_path: ./
5
+ out_path: ./outputs/audio2pose/
6
+ project: s2g
7
+ data_path: ./BEAT2/beat_english_v2.0.0/
8
+ e_path: weights/AESKConv_240_100.bin
9
+ eval_model: motion_representation
10
+ e_name: VAESKConv
11
+ test_ckpt: ./EMAGE/camn.bin
12
+ data_path_1: ./EMAGE/
13
+ vae_test_len: 64
14
+ vae_test_dim: 330
15
+ vae_test_stride: 20
16
+ vae_length: 240
17
+ vae_codebook_size: 256
18
+ vae_layer: 4
19
+ vae_grow: [1,1,2,1]
20
+ variational: False
21
+
22
+ # data config
23
+ training_speakers: [2] #[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]
24
+ additional_data: False
25
+ cache_path: datasets/beat_cache/beat_smplx_en_camn/
26
+ dataset: beat_sep
27
+ new_cache: False
28
+
29
+ # motion config
30
+ ori_joints: beat_smplx_joints
31
+ tar_joints: beat_smplx_full
32
+ pose_rep: smplxflame_30
33
+ pose_norm: False
34
+ pose_fps: 15
35
+ rot6d: True
36
+ pre_frames: 4
37
+ pose_dims: 330
38
+ pose_length: 32
39
+ stride: 10
40
+ test_length: 32
41
+ motion_f: 256
42
+ m_pre_encoder: null
43
+ m_encoder: null
44
+ m_fix_pre: False
45
+
46
+ # audio config
47
+ audio_rep: wave16k
48
+ audio_sr: 16000
49
+ audio_fps: 16000
50
+ audio_norm: False
51
+ audio_f: 128
52
+ # a_pre_encoder: tcn_camn
53
+ # a_encoder: none
54
+ # a_fix_pre: False
55
+
56
+ # text config
57
+ word_rep: textgrid
58
+ word_index_num: 11195
59
+ word_dims: 300
60
+ freeze_wordembed: False
61
+ word_f: 128
62
+ t_pre_encoder: fasttext
63
+ t_encoder: null
64
+ t_fix_pre: False
65
+
66
+ # facial config
67
+ facial_rep: smplxflame_30
68
+ facial_dims: 100
69
+ facial_norm: False
70
+ facial_f: 64
71
+ f_pre_encoder: null
72
+ f_encoder: null
73
+ f_fix_pre: False
74
+
75
+ # speaker config
76
+ id_rep: onehot
77
+ speaker_f: 16
78
+ emo_rep: emo
79
+ emotion_f: 8
80
+ # sem_rep: sem
81
+
82
+
83
+ # model config
84
+ batch_size: 128
85
+ # warmup_epochs: 1
86
+ # warmup_lr: 1e-6
87
+ lr_base: 3e-4
88
+ model: camn
89
+ g_name: CaMN
90
+ d_name: ConvDiscriminator
91
+ trainer: camn
92
+ hidden_size: 512
93
+ n_layer: 4
94
+ rec_weight: 500
95
+ no_adv_epoch: 999
96
+ # rec_pos_weight: 1
97
+ # rec_ver_weight: 0
98
+ # rec_fac_weight: 1
99
+ # grad_norm: 1
100
+ epochs: 100
101
+ test_period: 20
configs/cnn_vqvae_face_30.yaml ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ training_speakers: [2] #[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]
5
+ root_path: ./
6
+ out_path: ./outputs/audio2pose/
7
+ cache_path: datasets/beat_cache/beat_smplx_en_face/
8
+ project: mage_smplx
9
+ data_path: ./BEAT2/beat_english_v2.0.0/
10
+ e_path: weights/AESKConv_240_100.bin
11
+ test_ckpt: weights/multi.bin
12
+ data_path_1: ./EMAGE/
13
+ #torch_hub_path: datasets/hub/
14
+ additional_data: False
15
+ dataset: beat_sep
16
+ new_cache: False
17
+ ori_joints: beat_smplx_joints
18
+ tar_joints: beat_smplx_face
19
+ pose_rep: smplxflame_30
20
+ facial_rep: smplxflame_30
21
+ pose_norm: False
22
+ pose_fps: 30
23
+
24
+
25
+ vae_test_len: 64
26
+ vae_test_dim: 106
27
+ vae_test_stride: 20
28
+ vae_length: 256
29
+ vae_codebook_size: 256
30
+ vae_layer: 2
31
+ vae_grow: [1,1,2,1]
32
+ variational: False
33
+
34
+ pose_dims: 106
35
+ pose_length: 64
36
+ stride: 20
37
+ facial_dims: 100
38
+ word_index_num: 11195
39
+ word_dims: 300
40
+ batch_size: 64
41
+ lr_base: 3e-4
42
+ model: motion_representation
43
+ g_name: VQVAEConvZero
44
+ #eval_model: motion_autoencoder
45
+ #e_name: HalfEmbeddingNet
46
+ trainer: aeface
47
+ decay_epochs: 780
48
+ # audio_f: 256
49
+ # a_pre_encoder: tcn_camn
50
+ # a_encoder: lp
51
+ # a_fix_pre: False
52
+
53
+ # freeze_wordembed: False
54
+ # word_f: 128
55
+ # t_pre_encoder: fasttext
56
+ # t_encoder: lp
57
+ # t_fix_pre: False
58
+
59
+ # motion_f: 256
60
+ # m_pre_encoder: lp
61
+ # m_encoder: lp
62
+ # m_fix_pre: False
63
+
64
+ # facial_f: 128
65
+ # f_pre_encoder: lp
66
+ # f_encoder: lp
67
+ # f_fix_pre: False
68
+
69
+ #m_decoder: lstm
70
+ #decode_fusion: cat
71
+ #n_layer: 2
72
+ #hidden_size: 512
73
+ rec_weight: 1
74
+ rec_pos_weight: 1
75
+ rec_ver_weight: 1
76
+ # rec_fac_weight: 1
77
+ #ita_weight: 0
78
+ #iwa_weight: 0
79
+ #fusion_mode: sum
80
+ # grad_norm: 1
81
+ epochs: 800
82
+ test_period: 100
configs/cnn_vqvae_hands_30.yaml ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ training_speakers: [2] #[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]
5
+ root_path: ./
6
+ out_path: ./outputs/audio2pose/
7
+ cache_path: datasets/beat_cache/beat_smplx_en_hands/
8
+ project: mage_smplx
9
+ data_path: ./BEAT2/beat_english_v2.0.0/
10
+ e_path: weights/AESKConv_240_100.bin
11
+ test_ckpt: weights/multi.bin
12
+ data_path_1: ./EMAGE/
13
+ #torch_hub_path: datasets/hub/
14
+ additional_data: False
15
+ dataset: beat_sep
16
+ new_cache: False
17
+ ori_joints: beat_smplx_joints
18
+ tar_joints: beat_smplx_hands
19
+ pose_rep: smplxflame_30
20
+ pose_norm: False
21
+ pose_fps: 30
22
+
23
+
24
+ vae_test_len: 64
25
+ vae_test_dim: 180
26
+ vae_test_stride: 20
27
+ vae_length: 256
28
+ vae_codebook_size: 256
29
+ vae_layer: 2
30
+ vae_grow: [1,1,2,1]
31
+ variational: False
32
+
33
+ pose_dims: 180
34
+ pose_length: 64
35
+ stride: 20
36
+ facial_dims: 100
37
+ word_index_num: 11195
38
+ word_dims: 300
39
+ batch_size: 64
40
+ lr_base: 3e-4
41
+ model: motion_representation
42
+ g_name: VQVAEConvZero
43
+ #eval_model: motion_autoencoder
44
+ #e_name: HalfEmbeddingNet
45
+ trainer: ae
46
+ decay_epochs: 780
47
+ # audio_f: 256
48
+ # a_pre_encoder: tcn_camn
49
+ # a_encoder: lp
50
+ # a_fix_pre: False
51
+
52
+ # freeze_wordembed: False
53
+ # word_f: 128
54
+ # t_pre_encoder: fasttext
55
+ # t_encoder: lp
56
+ # t_fix_pre: False
57
+
58
+ # motion_f: 256
59
+ # m_pre_encoder: lp
60
+ # m_encoder: lp
61
+ # m_fix_pre: False
62
+
63
+ # facial_f: 128
64
+ # f_pre_encoder: lp
65
+ # f_encoder: lp
66
+ # f_fix_pre: False
67
+
68
+ #m_decoder: lstm
69
+ #decode_fusion: cat
70
+ #n_layer: 2
71
+ #hidden_size: 512
72
+ rec_weight: 1
73
+ rec_pos_weight: 1
74
+ rec_ver_weight: 1
75
+ # rec_fac_weight: 1
76
+ #ita_weight: 0
77
+ #iwa_weight: 0
78
+ #fusion_mode: sum
79
+ # grad_norm: 1
80
+ epochs: 800
81
+ test_period: 100
configs/cnn_vqvae_lower_30.yaml ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ training_speakers: [2] #[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]
5
+ root_path: ./
6
+ out_path: ./outputs/audio2pose/
7
+ cache_path: datasets/beat_cache/beat_smplx_en_lower/
8
+ project: mage_smplx
9
+ data_path: ./BEAT2/beat_english_v2.0.0/
10
+ e_path: weights/AESKConv_240_100.bin
11
+ test_ckpt: weights/multi.bin
12
+ data_path_1: ./EMAGE/
13
+ #torch_hub_path: datasets/hub/
14
+ additional_data: False
15
+ dataset: beat_sep_lower
16
+ new_cache: False
17
+ ori_joints: beat_smplx_joints
18
+ tar_joints: beat_smplx_lower
19
+ pose_rep: smplxflame_30
20
+ pose_norm: False
21
+ pose_fps: 30
22
+
23
+
24
+ vae_test_len: 64
25
+ vae_test_dim: 61
26
+ vae_test_stride: 20
27
+ vae_length: 256
28
+ vae_codebook_size: 256
29
+ vae_layer: 4
30
+ vae_grow: [1,1,2,1]
31
+ variational: False
32
+
33
+ pose_dims: 61
34
+ pose_length: 64
35
+ stride: 20
36
+ facial_dims: 100
37
+ word_index_num: 11195
38
+ word_dims: 300
39
+ batch_size: 64
40
+ lr_base: 3e-4
41
+ model: motion_representation
42
+ g_name: VAEConvZero
43
+ #eval_model: motion_autoencoder
44
+ #e_name: HalfEmbeddingNet
45
+ trainer: aelower
46
+ decay_epochs: 780
47
+ # audio_f: 256
48
+ # a_pre_encoder: tcn_camn
49
+ # a_encoder: lp
50
+ # a_fix_pre: False
51
+
52
+ # freeze_wordembed: False
53
+ # word_f: 128
54
+ # t_pre_encoder: fasttext
55
+ # t_encoder: lp
56
+ # t_fix_pre: False
57
+
58
+ # motion_f: 256
59
+ # m_pre_encoder: lp
60
+ # m_encoder: lp
61
+ # m_fix_pre: False
62
+
63
+ # facial_f: 128
64
+ # f_pre_encoder: lp
65
+ # f_encoder: lp
66
+ # f_fix_pre: False
67
+
68
+ #m_decoder: lstm
69
+ #decode_fusion: cat
70
+ #n_layer: 2
71
+ #hidden_size: 512
72
+ rec_weight: 1
73
+ rec_pos_weight: 1
74
+ rec_ver_weight: 1
75
+ # rec_fac_weight: 1
76
+ #ita_weight: 0
77
+ #iwa_weight: 0
78
+ #fusion_mode: sum
79
+ # grad_norm: 1
80
+ epochs: 800
81
+ test_period: 100
configs/cnn_vqvae_lower_foot_30.yaml ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ training_speakers: [2]
5
+ root_path: ./
6
+ out_path: ./outputs/audio2pose/
7
+ cache_path: datasets/beat_cache/beat_smplx_en_lower/
8
+ project: mage_smplx
9
+ data_path: ./BEAT2/beat_english_v2.0.0/
10
+ e_path: weights/AESKConv_240_100.bin
11
+ test_ckpt: weights/multi.bin
12
+ data_path_1: ./EMAGE/
13
+ #torch_hub_path: datasets/hub/
14
+ additional_data: False
15
+ dataset: beat_sep_lower
16
+ new_cache: False
17
+ ori_joints: beat_smplx_joints
18
+ tar_joints: beat_smplx_lower
19
+ pose_rep: smplxflame_30
20
+ pose_norm: False
21
+ pose_fps: 30
22
+
23
+
24
+ vae_test_len: 64
25
+ vae_test_dim: 61
26
+ vae_test_stride: 20
27
+ vae_length: 256
28
+ vae_codebook_size: 256
29
+ vae_layer: 4
30
+ vae_grow: [1,1,2,1]
31
+ variational: False
32
+
33
+ pose_dims: 61
34
+ pose_length: 64
35
+ stride: 20
36
+ facial_dims: 100
37
+ word_index_num: 11195
38
+ word_dims: 300
39
+ batch_size: 64
40
+ lr_base: 3e-4
41
+ model: motion_representation
42
+ g_name: VQVAEConvZero
43
+ #eval_model: motion_autoencoder
44
+ #e_name: HalfEmbeddingNet
45
+ trainer: aelowerfoot
46
+ decay_epochs: 780
47
+ # audio_f: 256
48
+ # a_pre_encoder: tcn_camn
49
+ # a_encoder: lp
50
+ # a_fix_pre: False
51
+
52
+ # freeze_wordembed: False
53
+ # word_f: 128
54
+ # t_pre_encoder: fasttext
55
+ # t_encoder: lp
56
+ # t_fix_pre: False
57
+
58
+ # motion_f: 256
59
+ # m_pre_encoder: lp
60
+ # m_encoder: lp
61
+ # m_fix_pre: False
62
+
63
+ # facial_f: 128
64
+ # f_pre_encoder: lp
65
+ # f_encoder: lp
66
+ # f_fix_pre: False
67
+
68
+ #m_decoder: lstm
69
+ #decode_fusion: cat
70
+ #n_layer: 2
71
+ #hidden_size: 512
72
+ rec_weight: 1
73
+ rec_pos_weight: 1
74
+ rec_ver_weight: 1
75
+ # rec_fac_weight: 1
76
+ #ita_weight: 0
77
+ #iwa_weight: 0
78
+ #fusion_mode: sum
79
+ # grad_norm: 1
80
+ epochs: 800
81
+ test_period: 100
configs/cnn_vqvae_upper_30.yaml ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ training_speakers: [2]
5
+ root_path: ./
6
+ out_path: ./outputs/audio2pose/
7
+ cache_path: datasets/beat_cache/beat_smplx_en_upper/
8
+ project: mage_smplx
9
+ data_path: ./BEAT2/beat_english_v2.0.0/
10
+ e_path: weights/AESKConv_240_100.bin
11
+ test_ckpt: weights/multi.bin
12
+ data_path_1: ./EMAGE/
13
+ #torch_hub_path: datasets/hub/
14
+ additional_data: False
15
+ dataset: beat_sep
16
+ new_cache: False
17
+ ori_joints: beat_smplx_joints
18
+ tar_joints: beat_smplx_upper
19
+ pose_rep: smplxflame_30
20
+ pose_norm: False
21
+ pose_fps: 30
22
+
23
+
24
+ vae_test_len: 64
25
+ vae_test_dim: 78
26
+ vae_test_stride: 20
27
+ vae_length: 256
28
+ vae_codebook_size: 256
29
+ vae_layer: 2
30
+ vae_grow: [1,1,2,1]
31
+ variational: False
32
+
33
+ pose_dims: 78
34
+ pose_length: 64
35
+ stride: 20
36
+ facial_dims: 100
37
+ word_index_num: 11195
38
+ word_dims: 300
39
+ batch_size: 64
40
+ lr_base: 3e-4
41
+ decay_epochs: 9999
42
+ model: motion_representation
43
+ g_name: VQVAEConvZero
44
+ #eval_model: motion_autoencoder
45
+ #e_name: HalfEmbeddingNet
46
+ trainer: ae
47
+
48
+ # audio_f: 256
49
+ # a_pre_encoder: tcn_camn
50
+ # a_encoder: lp
51
+ # a_fix_pre: False
52
+
53
+ # freeze_wordembed: False
54
+ # word_f: 128
55
+ # t_pre_encoder: fasttext
56
+ # t_encoder: lp
57
+ # t_fix_pre: False
58
+
59
+ # motion_f: 256
60
+ # m_pre_encoder: lp
61
+ # m_encoder: lp
62
+ # m_fix_pre: False
63
+
64
+ # facial_f: 128
65
+ # f_pre_encoder: lp
66
+ # f_encoder: lp
67
+ # f_fix_pre: False
68
+
69
+ #m_decoder: lstm
70
+ #decode_fusion: cat
71
+ #n_layer: 2
72
+ #hidden_size: 512
73
+ rec_weight: 1
74
+ rec_pos_weight: 1
75
+ rec_ver_weight: 1
76
+ # rec_fac_weight: 1
77
+ #ita_weight: 0
78
+ #iwa_weight: 0
79
+ #fusion_mode: sum
80
+ # grad_norm: 1
81
+ epochs: 500
82
+ test_period: 100
configs/emage.yaml ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ root_path: ./
5
+ out_path: ./outputs/audio2pose/
6
+ project: s2g
7
+ data_path: ./BEAT2/beat_english_v2.0.0/
8
+ e_path: weights/AESKConv_240_100.bin
9
+ eval_model: motion_representation
10
+ e_name: VAESKConv
11
+ test_ckpt: ./EMAGE/emage_240.bin
12
+ data_path_1: ./EMAGE/
13
+ vae_test_len: 32
14
+ vae_test_dim: 330
15
+ vae_test_stride: 20
16
+ vae_length: 240
17
+ vae_codebook_size: 256
18
+ vae_layer: 4
19
+ vae_grow: [1,1,2,1]
20
+ variational: False
21
+
22
+ # data config
23
+ training_speakers: [2] #[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]
24
+ additional_data: False
25
+ cache_path: datasets/beat_cache/beat_smplx_en_emage/
26
+ dataset: beat_sep_lower
27
+ new_cache: False
28
+
29
+ # motion config
30
+ ori_joints: beat_smplx_joints
31
+ tar_joints: beat_smplx_full
32
+ pose_rep: smplxflame_30
33
+ pose_norm: False
34
+ pose_fps: 30
35
+ rot6d: True
36
+ pre_frames: 4
37
+ pose_dims: 330
38
+ pose_length: 64
39
+ stride: 20
40
+ test_length: 64
41
+ motion_f: 256
42
+ m_pre_encoder: null
43
+ m_encoder: null
44
+ m_fix_pre: False
45
+
46
+ # audio config
47
+ audio_rep: onset+amplitude
48
+ audio_sr: 16000
49
+ audio_fps: 16000
50
+ audio_norm: False
51
+ audio_f: 256
52
+ # a_pre_encoder: tcn_camn
53
+ # a_encoder: none
54
+ # a_fix_pre: False
55
+
56
+ # text config
57
+ word_rep: textgrid
58
+ word_index_num: 11195
59
+ word_dims: 300
60
+ freeze_wordembed: False
61
+ word_f: 256
62
+ t_pre_encoder: fasttext
63
+ t_encoder: null
64
+ t_fix_pre: False
65
+
66
+ # facial config
67
+ facial_rep: smplxflame_30
68
+ facial_dims: 100
69
+ facial_norm: False
70
+ facial_f: 0
71
+ f_pre_encoder: null
72
+ f_encoder: null
73
+ f_fix_pre: False
74
+
75
+ # speaker config
76
+ id_rep: onehot
77
+ speaker_f: 0
78
+
79
+ # model config
80
+ batch_size: 64
81
+ # warmup_epochs: 1
82
+ # warmup_lr: 1e-6
83
+ lr_base: 5e-4
84
+ model: emage
85
+ g_name: MAGE_Transformer
86
+ trainer: emage
87
+ hidden_size: 768
88
+ n_layer: 1
89
+
90
+ rec_weight: 1
91
+ grad_norm: 0.99
92
+ epochs: 400
93
+ test_period: 20
94
+ ll: 3
95
+ lf: 3
96
+ lu: 3
97
+ lh: 3
98
+ cl: 1
99
+ cf: 0
100
+ cu: 1
101
+ ch: 1
configs/emage_test.yaml ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ root_path: ./
5
+ out_path: ./outputs/audio2pose/
6
+ project: s2g
7
+ data_path: ./EMAGE/test_sequences/
8
+ e_path: weights/AESKConv_240_100.bin
9
+ eval_model: motion_representation
10
+ e_name: VAESKConv
11
+ test_ckpt: ./EMAGE/emage_240.bin
12
+ data_path_1: ./EMAGE/
13
+ vae_test_len: 32
14
+ vae_test_dim: 330
15
+ vae_test_stride: 20
16
+ vae_length: 240
17
+ vae_codebook_size: 256
18
+ vae_layer: 4
19
+ vae_grow: [1,1,2,1]
20
+ variational: False
21
+
22
+ # data config
23
+ training_speakers: [2] #[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]
24
+ additional_data: False
25
+ cache_path: ./datasets/beat_cache/beat_smplx_en_emage_test/
26
+ dataset: beat_testonly
27
+ new_cache: True
28
+
29
+ # motion config
30
+ ori_joints: beat_smplx_joints
31
+ tar_joints: beat_smplx_full
32
+ pose_rep: smplxflame_30
33
+ pose_norm: False
34
+ pose_fps: 30
35
+ rot6d: True
36
+ pre_frames: 4
37
+ pose_dims: 330
38
+ pose_length: 64
39
+ stride: 20
40
+ test_length: 64
41
+ motion_f: 256
42
+ m_pre_encoder: null
43
+ m_encoder: null
44
+ m_fix_pre: False
45
+
46
+ # audio config
47
+ audio_rep: onset+amplitude
48
+ audio_sr: 16000
49
+ audio_fps: 16000
50
+ audio_norm: False
51
+ audio_f: 256
52
+ # a_pre_encoder: tcn_camn
53
+ # a_encoder: none
54
+ # a_fix_pre: False
55
+
56
+ # text config
57
+ word_rep: textgrid
58
+ word_index_num: 11195
59
+ word_dims: 300
60
+ freeze_wordembed: False
61
+ word_f: 256
62
+ t_pre_encoder: fasttext
63
+ t_encoder: null
64
+ t_fix_pre: False
65
+
66
+ # facial config
67
+ facial_rep: smplxflame_30
68
+ facial_dims: 100
69
+ facial_norm: False
70
+ facial_f: 0
71
+ f_pre_encoder: null
72
+ f_encoder: null
73
+ f_fix_pre: False
74
+
75
+ # speaker config
76
+ id_rep: onehot
77
+ speaker_f: 0
78
+
79
+ # model config
80
+ batch_size: 64
81
+ # warmup_epochs: 1
82
+ # warmup_lr: 1e-6
83
+ lr_base: 5e-4
84
+ model: emage
85
+ g_name: MAGE_Transformer
86
+ trainer: emage
87
+ hidden_size: 768
88
+ n_layer: 1
89
+
90
+ rec_weight: 1
91
+ grad_norm: 0.99
92
+ epochs: 400
93
+ test_period: 20
94
+ ll: 3
95
+ lf: 3
96
+ lu: 3
97
+ lh: 3
98
+ cl: 1
99
+ cf: 0
100
+ cu: 1
101
+ ch: 1
configs/emage_test_colab.yaml ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ root_path: ./
5
+ out_path: ./outputs/audio2pose/
6
+ project: s2g
7
+ data_path: ./EMAGE/test_sequences/
8
+ e_path: weights/AESKConv_240_100.bin
9
+ eval_model: motion_representation
10
+ e_name: VAESKConv
11
+ test_ckpt: ./EMAGE/emage_240.bin
12
+ data_path_1: ./EMAGE/
13
+ vae_test_len: 32
14
+ vae_test_dim: 330
15
+ vae_test_stride: 20
16
+ vae_length: 240
17
+ vae_codebook_size: 256
18
+ vae_layer: 4
19
+ vae_grow: [1,1,2,1]
20
+ variational: False
21
+
22
+ # data config
23
+ training_speakers: [2] #[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]
24
+ additional_data: False
25
+ cache_path: ./datasets/beat_cache/beat_smplx_en_emage_test/
26
+ dataset: beat_testonly_colab
27
+ new_cache: True
28
+
29
+ # motion config
30
+ ori_joints: beat_smplx_joints
31
+ tar_joints: beat_smplx_full
32
+ pose_rep: smplxflame_30
33
+ pose_norm: False
34
+ pose_fps: 30
35
+ rot6d: True
36
+ pre_frames: 4
37
+ pose_dims: 330
38
+ pose_length: 64
39
+ stride: 20
40
+ test_length: 64
41
+ motion_f: 256
42
+ m_pre_encoder: null
43
+ m_encoder: null
44
+ m_fix_pre: False
45
+
46
+ # audio config
47
+ audio_rep: onset+amplitude
48
+ audio_sr: 16000
49
+ audio_fps: 16000
50
+ audio_norm: False
51
+ audio_f: 256
52
+ # a_pre_encoder: tcn_camn
53
+ # a_encoder: none
54
+ # a_fix_pre: False
55
+
56
+ # text config
57
+ word_rep: textgrid
58
+ word_index_num: 11195
59
+ word_dims: 300
60
+ freeze_wordembed: False
61
+ word_f: 256
62
+ t_pre_encoder: fasttext
63
+ t_encoder: null
64
+ t_fix_pre: False
65
+
66
+ # facial config
67
+ facial_rep: smplxflame_30
68
+ facial_dims: 100
69
+ facial_norm: False
70
+ facial_f: 0
71
+ f_pre_encoder: null
72
+ f_encoder: null
73
+ f_fix_pre: False
74
+
75
+ # speaker config
76
+ id_rep: onehot
77
+ speaker_f: 0
78
+
79
+ # model config
80
+ batch_size: 64
81
+ # warmup_epochs: 1
82
+ # warmup_lr: 1e-6
83
+ lr_base: 5e-4
84
+ model: emage
85
+ g_name: MAGE_Transformer
86
+ trainer: emage
87
+ hidden_size: 768
88
+ n_layer: 1
89
+
90
+ rec_weight: 1
91
+ grad_norm: 0.99
92
+ epochs: 400
93
+ test_period: 20
94
+ ll: 3
95
+ lf: 3
96
+ lu: 3
97
+ lh: 3
98
+ cl: 1
99
+ cf: 0
100
+ cu: 1
101
+ ch: 1
configs/emage_test_hf.yaml ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ root_path: ./
5
+ out_path: ./outputs/audio2pose/
6
+ project: s2g
7
+ data_path: ./EMAGE/test_sequences/
8
+ e_path: weights/AESKConv_240_100.bin
9
+ eval_model: motion_representation
10
+ e_name: VAESKConv
11
+ test_ckpt: ./EMAGE/emage_audio_175.bin
12
+ data_path_1: ./EMAGE/
13
+ vae_test_len: 32
14
+ vae_test_dim: 330
15
+ vae_test_stride: 20
16
+ vae_length: 240
17
+ vae_codebook_size: 256
18
+ vae_layer: 4
19
+ vae_grow: [1,1,2,1]
20
+ variational: False
21
+
22
+ # data config
23
+ training_speakers: [2] #[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]
24
+ additional_data: False
25
+ cache_path: ./datasets/beat_cache/beat_smplx_en_emage_test/
26
+ dataset: beat_testonly_hf
27
+ new_cache: True
28
+
29
+ # motion config
30
+ ori_joints: beat_smplx_joints
31
+ tar_joints: beat_smplx_full
32
+ pose_rep: smplxflame_30
33
+ pose_norm: False
34
+ pose_fps: 30
35
+ rot6d: True
36
+ pre_frames: 4
37
+ pose_dims: 330
38
+ pose_length: 64
39
+ stride: 20
40
+ test_length: 64
41
+ motion_f: 256
42
+ m_pre_encoder: null
43
+ m_encoder: null
44
+ m_fix_pre: False
45
+
46
+ # audio config
47
+ audio_rep: wave16k
48
+ audio_sr: 16000
49
+ audio_fps: 16000
50
+ audio_norm: False
51
+ audio_f: 256
52
+ # a_pre_encoder: tcn_camn
53
+ # a_encoder: none
54
+ # a_fix_pre: False
55
+
56
+ # text config
57
+ # word_rep: textgrid
58
+ # word_index_num: 11195
59
+ # word_dims: 300
60
+ # freeze_wordembed: False
61
+ # word_f: 256
62
+ # t_pre_encoder: fasttext
63
+ # t_encoder: null
64
+ # t_fix_pre: False
65
+
66
+ # facial config
67
+ facial_rep: smplxflame_30
68
+ facial_dims: 100
69
+ facial_norm: False
70
+ facial_f: 0
71
+ f_pre_encoder: null
72
+ f_encoder: null
73
+ f_fix_pre: False
74
+
75
+ # speaker config
76
+ id_rep: onehot
77
+ speaker_f: 0
78
+
79
+ # model config
80
+ batch_size: 64
81
+ # warmup_epochs: 1
82
+ # warmup_lr: 1e-6
83
+ lr_base: 5e-4
84
+ model: emage_audio
85
+ g_name: MAGE_Transformer
86
+ trainer: emage
87
+ hidden_size: 768
88
+ n_layer: 1
89
+
90
+ rec_weight: 1
91
+ grad_norm: 0.99
92
+ epochs: 400
93
+ test_period: 20
94
+ ll: 3
95
+ lf: 3
96
+ lu: 3
97
+ lh: 3
98
+ cl: 1
99
+ cf: 0
100
+ cu: 1
101
+ ch: 1
configs/skcnn_ae.yaml ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ is_train: True
2
+ ddp: False
3
+ stat: ts
4
+ training_speakers: [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]
5
+ root_path: /home/s24273/
6
+ out_path: /home/s24273/outputs/audio2pose/
7
+ cache_path: datasets/beat_cache/beat_smplx_en/
8
+ project: mage_smplx
9
+ data_path: /home/s24273/datasets/beat_v2.0.0/beat_english_v2.0.0/
10
+ e_path: weights/AESKConv_240_100.bin
11
+ test_ckpt: weights/multi.bin
12
+ data_path_1: /home/s24273/datasets/hub/
13
+ #torch_hub_path: datasets/hub/
14
+ additional_data: False
15
+ dataset: beat_smplx2020
16
+ new_cache: False
17
+ ori_joints: beat_smplx_joints
18
+ tar_joints: beat_smplx_full
19
+ pose_rep: smplxflame_30
20
+ pose_norm: False
21
+ pose_fps: 30
22
+
23
+
24
+ vae_test_len: 64
25
+ vae_test_dim: 330
26
+ vae_test_stride: 20
27
+ vae_length: 240
28
+ vae_layer: 2
29
+ vae_grow: [1,2]
30
+ variational: False
31
+
32
+ pose_dims: 330
33
+ pose_length: 64
34
+ stride: 20
35
+ facial_dims: 100
36
+ word_index_num: 11195
37
+ word_dims: 300
38
+ batch_size: 32
39
+ lr_base: 1e-4
40
+ model: motion_representation
41
+ g_name: VAESKConv
42
+ #eval_model: motion_autoencoder
43
+ #e_name: HalfEmbeddingNet
44
+ trainer: ae
45
+ decay_epochs: 950
46
+ # audio_f: 256
47
+ # a_pre_encoder: tcn_camn
48
+ # a_encoder: lp
49
+ # a_fix_pre: False
50
+
51
+ # freeze_wordembed: False
52
+ # word_f: 128
53
+ # t_pre_encoder: fasttext
54
+ # t_encoder: lp
55
+ # t_fix_pre: False
56
+
57
+ # motion_f: 256
58
+ # m_pre_encoder: lp
59
+ # m_encoder: lp
60
+ # m_fix_pre: False
61
+
62
+ # facial_f: 128
63
+ # f_pre_encoder: lp
64
+ # f_encoder: lp
65
+ # f_fix_pre: False
66
+
67
+ #m_decoder: lstm
68
+ #decode_fusion: cat
69
+ #n_layer: 2
70
+ #hidden_size: 512
71
+ rec_weight: 1
72
+ rec_pos_weight: 10
73
+ rec_ver_weight: 0
74
+ # rec_fac_weight: 1
75
+ #ita_weight: 0
76
+ #iwa_weight: 0
77
+ #fusion_mode: sum
78
+ # grad_norm: 1
79
+ epochs: 1000
80
+ test_period: 100
dataloaders/.ipynb_checkpoints/beat_testonly_hf-checkpoint.py ADDED
@@ -0,0 +1,740 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pickle
3
+ import math
4
+ import shutil
5
+ import numpy as np
6
+ import lmdb as lmdb
7
+ import textgrid as tg
8
+ import pandas as pd
9
+ import torch
10
+ import glob
11
+ import json
12
+ from termcolor import colored
13
+ from loguru import logger
14
+ from collections import defaultdict
15
+ from torch.utils.data import Dataset
16
+ import torch.distributed as dist
17
+ import pyarrow
18
+ import librosa
19
+ import smplx
20
+
21
+ from .build_vocab import Vocab
22
+ from .utils.audio_features import Wav2Vec2Model
23
+ from .data_tools import joints_list
24
+ from .utils import rotation_conversions as rc
25
+ from .utils import other_tools_hf
26
+
27
+ class CustomDataset(Dataset):
28
+ def __init__(self, args, loader_type, smplx_path=None, audio_path=None, text_path=None, augmentation=None, kwargs=None, build_cache=True):
29
+ self.args = args
30
+ self.loader_type = loader_type
31
+ self.smplx_path = "./EMAGE/test_sequences/smplxflame_30/2_scott_0_1_1.npz"
32
+ self.audio_path = audio_path
33
+ self.text_path = "./EMAGE/test_sequences/textgrid/2_scott_0_1_1.TextGrid"
34
+ self.rank = 0 # dist.get_rank()
35
+ self.ori_stride = self.args.stride
36
+ self.ori_length = self.args.pose_length
37
+ self.alignment = [0,0] # for trinity
38
+
39
+ self.ori_joint_list = joints_list[self.args.ori_joints]
40
+ self.tar_joint_list = joints_list[self.args.tar_joints]
41
+ if 'smplx' in self.args.pose_rep:
42
+ self.joint_mask = np.zeros(len(list(self.ori_joint_list.keys()))*3)
43
+ self.joints = len(list(self.tar_joint_list.keys()))
44
+ for joint_name in self.tar_joint_list:
45
+ self.joint_mask[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
46
+ else:
47
+ self.joints = len(list(self.ori_joint_list.keys()))+1
48
+ self.joint_mask = np.zeros(self.joints*3)
49
+ for joint_name in self.tar_joint_list:
50
+ if joint_name == "Hips":
51
+ self.joint_mask[3:6] = 1
52
+ else:
53
+ self.joint_mask[self.ori_joint_list[joint_name][1] - self.ori_joint_list[joint_name][0]:self.ori_joint_list[joint_name][1]] = 1
54
+ # select trainable joints
55
+ self.smplx = smplx.create(
56
+ self.args.data_path_1+"smplx_models/",
57
+ model_type='smplx',
58
+ gender='NEUTRAL_2020',
59
+ use_face_contour=False,
60
+ num_betas=300,
61
+ num_expression_coeffs=100,
62
+ ext='npz',
63
+ use_pca=False,
64
+ ).eval()
65
+
66
+ split_rule = pd.read_csv(args.data_path+"test.csv")
67
+ self.selected_file = split_rule
68
+ self.data_dir = args.data_path
69
+
70
+ if loader_type == "test":
71
+ self.args.multi_length_training = [1.0]
72
+ self.max_length = int(args.pose_length * self.args.multi_length_training[-1])
73
+ self.max_audio_pre_len = math.floor(args.pose_length / args.pose_fps * self.args.audio_sr)
74
+ if self.max_audio_pre_len > self.args.test_length*self.args.audio_sr:
75
+ self.max_audio_pre_len = self.args.test_length*self.args.audio_sr
76
+
77
+ if args.word_rep is not None:
78
+ with open(f"{args.data_path}weights/vocab.pkl", 'rb') as f:
79
+ self.lang_model = pickle.load(f)
80
+
81
+ preloaded_dir = self.args.root_path + self.args.cache_path + loader_type + f"/{args.pose_rep}_cache"
82
+ if build_cache and self.rank == 0:
83
+ self.build_cache(preloaded_dir)
84
+ self.lmdb_env = lmdb.open(preloaded_dir, readonly=True, lock=False)
85
+ with self.lmdb_env.begin() as txn:
86
+ self.n_samples = txn.stat()["entries"]
87
+
88
+
89
+ def build_cache(self, preloaded_dir):
90
+ logger.info(f"Audio bit rate: {self.args.audio_fps}")
91
+ logger.info("Reading data '{}'...".format(self.data_dir))
92
+ logger.info("Creating the dataset cache...")
93
+ if self.args.new_cache:
94
+ if os.path.exists(preloaded_dir):
95
+ shutil.rmtree(preloaded_dir)
96
+ if os.path.exists(preloaded_dir):
97
+ logger.info("Found the cache {}".format(preloaded_dir))
98
+ elif self.loader_type == "test":
99
+ self.cache_generation(
100
+ preloaded_dir, True,
101
+ 0, 0,
102
+ is_test=True)
103
+ else:
104
+ self.cache_generation(
105
+ preloaded_dir, self.args.disable_filtering,
106
+ self.args.clean_first_seconds, self.args.clean_final_seconds,
107
+ is_test=False)
108
+
109
+
110
+ def __len__(self):
111
+ return self.n_samples
112
+
113
+
114
+ def cache_generation(self, out_lmdb_dir, disable_filtering, clean_first_seconds, clean_final_seconds, is_test=False):
115
+ self.n_out_samples = 0
116
+ # create db for samples
117
+ if not os.path.exists(out_lmdb_dir): os.makedirs(out_lmdb_dir)
118
+ if len(self.args.training_speakers) == 1:
119
+ #dst_lmdb_env = lmdb.open(out_lmdb_dir, map_size= int(1024 ** 3 * 50))# 50G
120
+ dst_lmdb_env = lmdb.open(out_lmdb_dir, map_size= int(1024 ** 3 * 0.5))# 500M
121
+ else:
122
+ dst_lmdb_env = lmdb.open(out_lmdb_dir, map_size= int(1024 ** 3 * 200))# 200G
123
+ n_filtered_out = defaultdict(int)
124
+
125
+ #for index, file_name in self.selected_file.iterrows():
126
+ #f_name = file_name["id"]
127
+ ext = ".npz" if "smplx" in self.args.pose_rep else ".bvh"
128
+ pose_file = self.smplx_path#self.data_dir + self.args.pose_rep + "/" + f_name + ext
129
+ pose_each_file = []
130
+ trans_each_file = []
131
+ shape_each_file = []
132
+ audio_each_file = []
133
+ facial_each_file = []
134
+ word_each_file = []
135
+ emo_each_file = []
136
+ sem_each_file = []
137
+ vid_each_file = []
138
+ id_pose = "dummy 2nd"#f_name
139
+
140
+ logger.info(colored(f"# ---- Building cache for Pose {id_pose} ---- #", "blue"))
141
+ if "smplx" in self.args.pose_rep:
142
+ pose_data = np.load(pose_file, allow_pickle=True)
143
+ assert 30%self.args.pose_fps == 0, 'pose_fps should be an aliquot part of 30'
144
+ stride = int(30/self.args.pose_fps)
145
+ pose_each_file = pose_data["poses"][::stride]
146
+ trans_each_file = pose_data["trans"][::stride]
147
+ shape_each_file = np.repeat(pose_data["betas"].reshape(1, 300), pose_each_file.shape[0], axis=0)
148
+
149
+ assert self.args.pose_fps == 30, "should 30"
150
+ m_data = np.load(pose_file, allow_pickle=True)
151
+ betas, poses, trans, exps = m_data["betas"], m_data["poses"], m_data["trans"], m_data["expressions"]
152
+ n, c = poses.shape[0], poses.shape[1]
153
+ betas = betas.reshape(1, 300)
154
+ betas = np.tile(betas, (n, 1))
155
+ betas = torch.from_numpy(betas).float()
156
+ poses = torch.from_numpy(poses.reshape(n, c)).float()
157
+ exps = torch.from_numpy(exps.reshape(n, 100)).float()
158
+ trans = torch.from_numpy(trans.reshape(n, 3)).float()
159
+ max_length = 128
160
+ s, r = n//max_length, n%max_length
161
+ #print(n, s, r)
162
+ all_tensor = []
163
+ for i in range(s):
164
+ with torch.no_grad():
165
+ joints = self.smplx(
166
+ betas=betas[i*max_length:(i+1)*max_length],
167
+ transl=trans[i*max_length:(i+1)*max_length],
168
+ expression=exps[i*max_length:(i+1)*max_length],
169
+ jaw_pose=poses[i*max_length:(i+1)*max_length, 66:69],
170
+ global_orient=poses[i*max_length:(i+1)*max_length,:3],
171
+ body_pose=poses[i*max_length:(i+1)*max_length,3:21*3+3],
172
+ left_hand_pose=poses[i*max_length:(i+1)*max_length,25*3:40*3],
173
+ right_hand_pose=poses[i*max_length:(i+1)*max_length,40*3:55*3],
174
+ return_verts=True,
175
+ return_joints=True,
176
+ leye_pose=poses[i*max_length:(i+1)*max_length, 69:72],
177
+ reye_pose=poses[i*max_length:(i+1)*max_length, 72:75],
178
+ )['joints'][:, (7,8,10,11), :].reshape(max_length, 4, 3).cpu()
179
+ all_tensor.append(joints)
180
+ if r != 0:
181
+ with torch.no_grad():
182
+ joints = self.smplx(
183
+ betas=betas[s*max_length:s*max_length+r],
184
+ transl=trans[s*max_length:s*max_length+r],
185
+ expression=exps[s*max_length:s*max_length+r],
186
+ jaw_pose=poses[s*max_length:s*max_length+r, 66:69],
187
+ global_orient=poses[s*max_length:s*max_length+r,:3],
188
+ body_pose=poses[s*max_length:s*max_length+r,3:21*3+3],
189
+ left_hand_pose=poses[s*max_length:s*max_length+r,25*3:40*3],
190
+ right_hand_pose=poses[s*max_length:s*max_length+r,40*3:55*3],
191
+ return_verts=True,
192
+ return_joints=True,
193
+ leye_pose=poses[s*max_length:s*max_length+r, 69:72],
194
+ reye_pose=poses[s*max_length:s*max_length+r, 72:75],
195
+ )['joints'][:, (7,8,10,11), :].reshape(r, 4, 3).cpu()
196
+ all_tensor.append(joints)
197
+ joints = torch.cat(all_tensor, axis=0) # all, 4, 3
198
+ # print(joints.shape)
199
+ feetv = torch.zeros(joints.shape[1], joints.shape[0])
200
+ joints = joints.permute(1, 0, 2)
201
+ #print(joints.shape, feetv.shape)
202
+ feetv[:, :-1] = (joints[:, 1:] - joints[:, :-1]).norm(dim=-1)
203
+ #print(feetv.shape)
204
+ contacts = (feetv < 0.01).numpy().astype(float)
205
+ # print(contacts.shape, contacts)
206
+ contacts = contacts.transpose(1, 0)
207
+ pose_each_file = pose_each_file * self.joint_mask
208
+ pose_each_file = pose_each_file[:, self.joint_mask.astype(bool)]
209
+ pose_each_file = np.concatenate([pose_each_file, contacts], axis=1)
210
+ # print(pose_each_file.shape)
211
+
212
+
213
+ if self.args.facial_rep is not None:
214
+ logger.info(f"# ---- Building cache for Facial {id_pose} and Pose {id_pose} ---- #")
215
+ facial_each_file = pose_data["expressions"][::stride]
216
+ if self.args.facial_norm:
217
+ facial_each_file = (facial_each_file - self.mean_facial) / self.std_facial
218
+
219
+ else:
220
+ assert 120%self.args.pose_fps == 0, 'pose_fps should be an aliquot part of 120'
221
+ stride = int(120/self.args.pose_fps)
222
+ with open(pose_file, "r") as pose_data:
223
+ for j, line in enumerate(pose_data.readlines()):
224
+ if j < 431: continue
225
+ if j%stride != 0:continue
226
+ data = np.fromstring(line, dtype=float, sep=" ")
227
+ rot_data = rc.euler_angles_to_matrix(torch.from_numpy(np.deg2rad(data)).reshape(-1, self.joints,3), "XYZ")
228
+ rot_data = rc.matrix_to_axis_angle(rot_data).reshape(-1, self.joints*3)
229
+ rot_data = rot_data.numpy() * self.joint_mask
230
+
231
+ pose_each_file.append(rot_data)
232
+ trans_each_file.append(data[:3])
233
+
234
+ pose_each_file = np.array(pose_each_file)
235
+ trans_each_file = np.array(trans_each_file)
236
+ shape_each_file = np.repeat(np.array(-1).reshape(1, 1), pose_each_file.shape[0], axis=0)
237
+ if self.args.facial_rep is not None:
238
+ logger.info(f"# ---- Building cache for Facial {id_pose} and Pose {id_pose} ---- #")
239
+ facial_file = pose_file.replace(self.args.pose_rep, self.args.facial_rep).replace("bvh", "json")
240
+ assert 60%self.args.pose_fps == 0, 'pose_fps should be an aliquot part of 120'
241
+ stride = int(60/self.args.pose_fps)
242
+ if not os.path.exists(facial_file):
243
+ logger.warning(f"# ---- file not found for Facial {id_pose}, skip all files with the same id ---- #")
244
+ #self.selected_file = self.selected_file.drop(self.selected_file[self.selected_file['id'] == id_pose].index)
245
+ #continue
246
+ with open(facial_file, 'r') as facial_data_file:
247
+ facial_data = json.load(facial_data_file)
248
+ for j, frame_data in enumerate(facial_data['frames']):
249
+ if j%stride != 0:continue
250
+ facial_each_file.append(frame_data['weights'])
251
+ facial_each_file = np.array(facial_each_file)
252
+ if self.args.facial_norm:
253
+ facial_each_file = (facial_each_file - self.mean_facial) / self.std_facial
254
+
255
+ if self.args.id_rep is not None:
256
+ int_value = 1
257
+ vid_each_file = np.repeat(np.array(int_value).reshape(1, 1), pose_each_file.shape[0], axis=0)
258
+
259
+ if self.args.audio_rep is not None:
260
+ logger.info(f"# ---- Building cache for Audio {id_pose} and Pose {id_pose} ---- #")
261
+ audio_file = self.audio_path[1]#pose_file.replace(self.args.pose_rep, 'wave16k').replace(ext, ".wav")
262
+ sr = self.audio_path[0]
263
+ print(sr)
264
+ #if not os.path.exists(audio_file):
265
+ # logger.warning(f"# ---- file not found for Audio {id_pose}, skip all files with the same id ---- #")
266
+ #self.selected_file = self.selected_file.drop(self.selected_file[self.selected_file['id'] == id_pose].index)
267
+ #continue
268
+ #audio_each_file, sr = librosa.load(audio_file)
269
+ audio_each_file = audio_file.astype(np.float32)
270
+ print(audio_each_file.shape)
271
+ audio_each_file = librosa.resample(audio_each_file, orig_sr=sr, target_sr=self.args.audio_sr)
272
+ print(audio_each_file.shape)
273
+ if self.args.audio_rep == "onset+amplitude":
274
+ from numpy.lib import stride_tricks
275
+ frame_length = 1024
276
+ # hop_length = 512
277
+ shape = (audio_each_file.shape[-1] - frame_length + 1, frame_length)
278
+ strides = (audio_each_file.strides[-1], audio_each_file.strides[-1])
279
+ rolling_view = stride_tricks.as_strided(audio_each_file, shape=shape, strides=strides)
280
+ amplitude_envelope = np.max(np.abs(rolling_view), axis=1)
281
+ # pad the last frame_length-1 samples
282
+ amplitude_envelope = np.pad(amplitude_envelope, (0, frame_length-1), mode='constant', constant_values=amplitude_envelope[-1])
283
+ audio_onset_f = librosa.onset.onset_detect(y=audio_each_file, sr=self.args.audio_sr, units='frames')
284
+ onset_array = np.zeros(len(audio_each_file), dtype=float)
285
+ onset_array[audio_onset_f] = 1.0
286
+ # print(amplitude_envelope.shape, audio_each_file.shape, onset_array.shape)
287
+ audio_each_file = np.concatenate([amplitude_envelope.reshape(-1, 1), onset_array.reshape(-1, 1)], axis=1)
288
+ elif self.args.audio_rep == "mfcc":
289
+ audio_each_file = librosa.feature.melspectrogram(y=audio_each_file, sr=self.args.audio_sr, n_mels=128, hop_length=int(self.args.audio_sr/self.args.audio_fps))
290
+ audio_each_file = audio_each_file.transpose(1, 0)
291
+ # print(audio_each_file.shape, pose_each_file.shape)
292
+ if self.args.audio_norm and self.args.audio_rep == "wave16k":
293
+ audio_each_file = (audio_each_file - self.mean_audio) / self.std_audio
294
+
295
+ time_offset = 0
296
+ if self.args.word_rep is not None:
297
+ logger.info(f"# ---- Building cache for Word {id_pose} and Pose {id_pose} ---- #")
298
+ word_file = self.text_path#f"{self.data_dir}{self.args.word_rep}/{id_pose}.TextGrid"
299
+ if not os.path.exists(word_file):
300
+ logger.warning(f"# ---- file not found for Word {id_pose}, skip all files with the same id ---- #")
301
+ #self.selected_file = self.selected_file.drop(self.selected_file[self.selected_file['id'] == id_pose].index)
302
+ #continue
303
+ tgrid = tg.TextGrid.fromFile(word_file)
304
+ if self.args.t_pre_encoder == "bert":
305
+ from transformers import AutoTokenizer, BertModel
306
+ tokenizer = AutoTokenizer.from_pretrained(self.args.data_path_1 + "hub/bert-base-uncased", local_files_only=True)
307
+ model = BertModel.from_pretrained(self.args.data_path_1 + "hub/bert-base-uncased", local_files_only=True).eval()
308
+ list_word = []
309
+ all_hidden = []
310
+ max_len = 400
311
+ last = 0
312
+ word_token_mapping = []
313
+ first = True
314
+ for i, word in enumerate(tgrid[0]):
315
+ last = i
316
+ if (i%max_len != 0) or (i==0):
317
+ if word.mark == "":
318
+ list_word.append(".")
319
+ else:
320
+ list_word.append(word.mark)
321
+ else:
322
+ max_counter = max_len
323
+ str_word = ' '.join(map(str, list_word))
324
+ if first:
325
+ global_len = 0
326
+ end = -1
327
+ offset_word = []
328
+ for k, wordvalue in enumerate(list_word):
329
+ start = end+1
330
+ end = start+len(wordvalue)
331
+ offset_word.append((start, end))
332
+ #print(offset_word)
333
+ token_scan = tokenizer.encode_plus(str_word, return_offsets_mapping=True)['offset_mapping']
334
+ #print(token_scan)
335
+ for start, end in offset_word:
336
+ sub_mapping = []
337
+ for i, (start_t, end_t) in enumerate(token_scan[1:-1]):
338
+ if int(start) <= int(start_t) and int(end_t) <= int(end):
339
+ #print(i+global_len)
340
+ sub_mapping.append(i+global_len)
341
+ word_token_mapping.append(sub_mapping)
342
+ #print(len(word_token_mapping))
343
+ global_len = word_token_mapping[-1][-1] + 1
344
+ list_word = []
345
+ if word.mark == "":
346
+ list_word.append(".")
347
+ else:
348
+ list_word.append(word.mark)
349
+
350
+ with torch.no_grad():
351
+ inputs = tokenizer(str_word, return_tensors="pt")
352
+ outputs = model(**inputs)
353
+ last_hidden_states = outputs.last_hidden_state.reshape(-1, 768).cpu().numpy()[1:-1, :]
354
+ all_hidden.append(last_hidden_states)
355
+
356
+ #list_word = list_word[:10]
357
+ if list_word == []:
358
+ pass
359
+ else:
360
+ if first:
361
+ global_len = 0
362
+ str_word = ' '.join(map(str, list_word))
363
+ end = -1
364
+ offset_word = []
365
+ for k, wordvalue in enumerate(list_word):
366
+ start = end+1
367
+ end = start+len(wordvalue)
368
+ offset_word.append((start, end))
369
+ #print(offset_word)
370
+ token_scan = tokenizer.encode_plus(str_word, return_offsets_mapping=True)['offset_mapping']
371
+ #print(token_scan)
372
+ for start, end in offset_word:
373
+ sub_mapping = []
374
+ for i, (start_t, end_t) in enumerate(token_scan[1:-1]):
375
+ if int(start) <= int(start_t) and int(end_t) <= int(end):
376
+ sub_mapping.append(i+global_len)
377
+ #print(sub_mapping)
378
+ word_token_mapping.append(sub_mapping)
379
+ #print(len(word_token_mapping))
380
+ with torch.no_grad():
381
+ inputs = tokenizer(str_word, return_tensors="pt")
382
+ outputs = model(**inputs)
383
+ last_hidden_states = outputs.last_hidden_state.reshape(-1, 768).cpu().numpy()[1:-1, :]
384
+ all_hidden.append(last_hidden_states)
385
+ last_hidden_states = np.concatenate(all_hidden, axis=0)
386
+
387
+ for i in range(pose_each_file.shape[0]):
388
+ found_flag = False
389
+ current_time = i/self.args.pose_fps + time_offset
390
+ j_last = 0
391
+ for j, word in enumerate(tgrid[0]):
392
+ word_n, word_s, word_e = word.mark, word.minTime, word.maxTime
393
+ if word_s<=current_time and current_time<=word_e:
394
+ if self.args.word_cache and self.args.t_pre_encoder == 'bert':
395
+ mapping_index = word_token_mapping[j]
396
+ #print(mapping_index, word_s, word_e)
397
+ s_t = np.linspace(word_s, word_e, len(mapping_index)+1)
398
+ #print(s_t)
399
+ for tt, t_sep in enumerate(s_t[1:]):
400
+ if current_time <= t_sep:
401
+ #if len(mapping_index) > 1: print(mapping_index[tt])
402
+ word_each_file.append(last_hidden_states[mapping_index[tt]])
403
+ break
404
+ else:
405
+ if word_n == " ":
406
+ word_each_file.append(self.lang_model.PAD_token)
407
+ else:
408
+ word_each_file.append(self.lang_model.get_word_index(word_n))
409
+ found_flag = True
410
+ j_last = j
411
+ break
412
+ else: continue
413
+ if not found_flag:
414
+ if self.args.word_cache and self.args.t_pre_encoder == 'bert':
415
+ word_each_file.append(last_hidden_states[j_last])
416
+ else:
417
+ word_each_file.append(self.lang_model.UNK_token)
418
+ word_each_file = np.array(word_each_file)
419
+ #print(word_each_file.shape)
420
+
421
+ if self.args.emo_rep is not None:
422
+ logger.info(f"# ---- Building cache for Emo {id_pose} and Pose {id_pose} ---- #")
423
+ rtype, start = int(id_pose.split('_')[3]), int(id_pose.split('_')[3])
424
+ if rtype == 0 or rtype == 2 or rtype == 4 or rtype == 6:
425
+ if start >= 1 and start <= 64:
426
+ score = 0
427
+ elif start >= 65 and start <= 72:
428
+ score = 1
429
+ elif start >= 73 and start <= 80:
430
+ score = 2
431
+ elif start >= 81 and start <= 86:
432
+ score = 3
433
+ elif start >= 87 and start <= 94:
434
+ score = 4
435
+ elif start >= 95 and start <= 102:
436
+ score = 5
437
+ elif start >= 103 and start <= 110:
438
+ score = 6
439
+ elif start >= 111 and start <= 118:
440
+ score = 7
441
+ else: pass
442
+ else:
443
+ # you may denote as unknown in the future
444
+ score = 0
445
+ emo_each_file = np.repeat(np.array(score).reshape(1, 1), pose_each_file.shape[0], axis=0)
446
+ #print(emo_each_file)
447
+
448
+ if self.args.sem_rep is not None:
449
+ logger.info(f"# ---- Building cache for Sem {id_pose} and Pose {id_pose} ---- #")
450
+ sem_file = f"{self.data_dir}{self.args.sem_rep}/{id_pose}.txt"
451
+ sem_all = pd.read_csv(sem_file,
452
+ sep='\t',
453
+ names=["name", "start_time", "end_time", "duration", "score", "keywords"])
454
+ # we adopt motion-level semantic score here.
455
+ for i in range(pose_each_file.shape[0]):
456
+ found_flag = False
457
+ for j, (start, end, score) in enumerate(zip(sem_all['start_time'],sem_all['end_time'], sem_all['score'])):
458
+ current_time = i/self.args.pose_fps + time_offset
459
+ if start<=current_time and current_time<=end:
460
+ sem_each_file.append(score)
461
+ found_flag=True
462
+ break
463
+ else: continue
464
+ if not found_flag: sem_each_file.append(0.)
465
+ sem_each_file = np.array(sem_each_file)
466
+ #print(sem_each_file)
467
+
468
+ filtered_result = self._sample_from_clip(
469
+ dst_lmdb_env,
470
+ audio_each_file, pose_each_file, trans_each_file, shape_each_file, facial_each_file, word_each_file,
471
+ vid_each_file, emo_each_file, sem_each_file,
472
+ disable_filtering, clean_first_seconds, clean_final_seconds, is_test,
473
+ )
474
+ for type in filtered_result.keys():
475
+ n_filtered_out[type] += filtered_result[type]
476
+
477
+ with dst_lmdb_env.begin() as txn:
478
+ logger.info(colored(f"no. of samples: {txn.stat()['entries']}", "cyan"))
479
+ n_total_filtered = 0
480
+ for type, n_filtered in n_filtered_out.items():
481
+ logger.info("{}: {}".format(type, n_filtered))
482
+ n_total_filtered += n_filtered
483
+ logger.info(colored("no. of excluded samples: {} ({:.1f}%)".format(
484
+ n_total_filtered, 100 * n_total_filtered / (txn.stat()["entries"] + n_total_filtered)), "cyan"))
485
+ dst_lmdb_env.sync()
486
+ dst_lmdb_env.close()
487
+
488
+ def _sample_from_clip(
489
+ self, dst_lmdb_env, audio_each_file, pose_each_file, trans_each_file, shape_each_file, facial_each_file, word_each_file,
490
+ vid_each_file, emo_each_file, sem_each_file,
491
+ disable_filtering, clean_first_seconds, clean_final_seconds, is_test,
492
+ ):
493
+ """
494
+ for data cleaning, we ignore the data for first and final n s
495
+ for test, we return all data
496
+ """
497
+ # audio_start = int(self.alignment[0] * self.args.audio_fps)
498
+ # pose_start = int(self.alignment[1] * self.args.pose_fps)
499
+ #logger.info(f"before: {audio_each_file.shape} {pose_each_file.shape}")
500
+ # audio_each_file = audio_each_file[audio_start:]
501
+ # pose_each_file = pose_each_file[pose_start:]
502
+ # trans_each_file =
503
+ #logger.info(f"after alignment: {audio_each_file.shape} {pose_each_file.shape}")
504
+ #print(pose_each_file.shape)
505
+ round_seconds_skeleton = pose_each_file.shape[0] // self.args.pose_fps # assume 1500 frames / 15 fps = 100 s
506
+ print(pose_each_file.shape[0])
507
+ #print(round_seconds_skeleton)
508
+ #if audio_each_file != []:
509
+ if self.args.audio_rep != "wave16k":
510
+ round_seconds_audio = len(audio_each_file) // self.args.audio_fps # assume 16,000,00 / 16,000 = 100 s
511
+ elif self.args.audio_rep == "mfcc":
512
+ round_seconds_audio = audio_each_file.shape[0] // self.args.audio_fps
513
+ else:
514
+ round_seconds_audio = audio_each_file.shape[0] // self.args.audio_sr
515
+ # if facial_each_file != []:
516
+ round_seconds_facial = facial_each_file.shape[0] // self.args.pose_fps
517
+ logger.info(f"audio: {round_seconds_audio}s, pose: {round_seconds_skeleton}s, facial: {round_seconds_facial}s")
518
+ round_seconds_skeleton = min(round_seconds_audio, round_seconds_skeleton, round_seconds_facial)
519
+ max_round = max(round_seconds_audio, round_seconds_skeleton, round_seconds_facial)
520
+ if round_seconds_skeleton != max_round:
521
+ logger.warning(f"reduce to {round_seconds_skeleton}s, ignore {max_round-round_seconds_skeleton}s")
522
+ # else:
523
+ # logger.info(f"pose: {round_seconds_skeleton}s, audio: {round_seconds_audio}s")
524
+ # round_seconds_skeleton = min(round_seconds_audio, round_seconds_skeleton)
525
+ # max_round = max(round_seconds_audio, round_seconds_skeleton)
526
+ # if round_seconds_skeleton != max_round:
527
+ # logger.warning(f"reduce to {round_seconds_skeleton}s, ignore {max_round-round_seconds_skeleton}s")
528
+
529
+ clip_s_t, clip_e_t = clean_first_seconds, round_seconds_skeleton - clean_final_seconds # assume [10, 90]s
530
+ clip_s_f_audio, clip_e_f_audio = self.args.audio_fps * clip_s_t, clip_e_t * self.args.audio_fps # [160,000,90*160,000]
531
+ clip_s_f_pose, clip_e_f_pose = clip_s_t * self.args.pose_fps, clip_e_t * self.args.pose_fps # [150,90*15]
532
+
533
+
534
+ for ratio in self.args.multi_length_training:
535
+ if is_test:# stride = length for test
536
+ cut_length = clip_e_f_pose - clip_s_f_pose
537
+ self.args.stride = cut_length
538
+ self.max_length = cut_length
539
+ else:
540
+ self.args.stride = int(ratio*self.ori_stride)
541
+ cut_length = int(self.ori_length*ratio)
542
+
543
+ num_subdivision = math.floor((clip_e_f_pose - clip_s_f_pose - cut_length) / self.args.stride) + 1
544
+ logger.info(f"pose from frame {clip_s_f_pose} to {clip_e_f_pose}, length {cut_length}")
545
+ logger.info(f"{num_subdivision} clips is expected with stride {self.args.stride}")
546
+
547
+ # if audio_each_file != []:
548
+ audio_short_length = math.floor(cut_length / self.args.pose_fps * self.args.audio_fps)
549
+ logger.info(f"audio from frame {clip_s_f_audio} to {clip_e_f_audio}, length {audio_short_length}")
550
+
551
+ n_filtered_out = defaultdict(int)
552
+ sample_pose_list = []
553
+ sample_audio_list = []
554
+ sample_facial_list = []
555
+ sample_shape_list = []
556
+ sample_word_list = []
557
+ sample_emo_list = []
558
+ sample_sem_list = []
559
+ sample_vid_list = []
560
+ sample_trans_list = []
561
+
562
+ for i in range(num_subdivision): # cut into around 2s chip, (self npose)
563
+ start_idx = clip_s_f_pose + i * self.args.stride
564
+ fin_idx = start_idx + cut_length
565
+ sample_pose = pose_each_file[start_idx:fin_idx]
566
+
567
+ sample_trans = trans_each_file[start_idx:fin_idx]
568
+ sample_shape = shape_each_file[start_idx:fin_idx]
569
+ # print(sample_pose.shape)
570
+ if self.args.audio_rep is not None:
571
+ audio_start = clip_s_f_audio + math.floor(i * self.args.stride * self.args.audio_fps / self.args.pose_fps)
572
+ audio_end = audio_start + audio_short_length
573
+ sample_audio = audio_each_file[audio_start:audio_end]
574
+ else:
575
+ sample_audio = np.array([-1])
576
+ sample_facial = facial_each_file[start_idx:fin_idx] if self.args.facial_rep is not None else np.array([-1])
577
+ sample_word = word_each_file[start_idx:fin_idx] if self.args.word_rep is not None else np.array([-1])
578
+ sample_emo = emo_each_file[start_idx:fin_idx] if self.args.emo_rep is not None else np.array([-1])
579
+ sample_sem = sem_each_file[start_idx:fin_idx] if self.args.sem_rep is not None else np.array([-1])
580
+ sample_vid = vid_each_file[start_idx:fin_idx] if self.args.id_rep is not None else np.array([-1])
581
+
582
+ if sample_pose.any() != None:
583
+ # filtering motion skeleton data
584
+ sample_pose, filtering_message = MotionPreprocessor(sample_pose).get()
585
+ is_correct_motion = True #(sample_pose != [])
586
+ if is_correct_motion or disable_filtering:
587
+ sample_pose_list.append(sample_pose)
588
+ sample_audio_list.append(sample_audio)
589
+ sample_facial_list.append(sample_facial)
590
+ sample_shape_list.append(sample_shape)
591
+ sample_word_list.append(sample_word)
592
+ sample_vid_list.append(sample_vid)
593
+ sample_emo_list.append(sample_emo)
594
+ sample_sem_list.append(sample_sem)
595
+ sample_trans_list.append(sample_trans)
596
+ else:
597
+ n_filtered_out[filtering_message] += 1
598
+
599
+ if len(sample_pose_list) > 0:
600
+ with dst_lmdb_env.begin(write=True) as txn:
601
+ for pose, audio, facial, shape, word, vid, emo, sem, trans in zip(
602
+ sample_pose_list,
603
+ sample_audio_list,
604
+ sample_facial_list,
605
+ sample_shape_list,
606
+ sample_word_list,
607
+ sample_vid_list,
608
+ sample_emo_list,
609
+ sample_sem_list,
610
+ sample_trans_list,):
611
+ k = "{:005}".format(self.n_out_samples).encode("ascii")
612
+ v = [pose, audio, facial, shape, word, emo, sem, vid, trans]
613
+ # v = pyarrow.serialize(v).to_buffer()
614
+ # txn.put(k, v)
615
+ # self.n_out_samples += 1
616
+ v = pickle.dumps(v)
617
+ txn.put(k, v)
618
+ self.n_out_samples += 1
619
+ return n_filtered_out
620
+
621
+ def __getitem__(self, idx):
622
+ with self.lmdb_env.begin(write=False) as txn:
623
+ key = "{:005}".format(idx).encode("ascii")
624
+ sample = txn.get(key)
625
+ # sample = pyarrow.deserialize(sample)
626
+ if sample is not None:
627
+ sample = pickle.loads(sample)
628
+ tar_pose, in_audio, in_facial, in_shape, in_word, emo, sem, vid, trans = sample
629
+ #print(in_shape)
630
+ #vid = torch.from_numpy(vid).int()
631
+ emo = torch.from_numpy(emo).int()
632
+ sem = torch.from_numpy(sem).float()
633
+ in_audio = torch.from_numpy(in_audio).float()
634
+ in_word = torch.from_numpy(in_word).float() if self.args.word_cache else torch.from_numpy(in_word).int()
635
+ if self.loader_type == "test":
636
+ tar_pose = torch.from_numpy(tar_pose).float()
637
+ trans = torch.from_numpy(trans).float()
638
+ in_facial = torch.from_numpy(in_facial).float()
639
+ vid = torch.from_numpy(vid).float()
640
+ in_shape = torch.from_numpy(in_shape).float()
641
+ else:
642
+ in_shape = torch.from_numpy(in_shape).reshape((in_shape.shape[0], -1)).float()
643
+ trans = torch.from_numpy(trans).reshape((trans.shape[0], -1)).float()
644
+ vid = torch.from_numpy(vid).reshape((vid.shape[0], -1)).float()
645
+ tar_pose = torch.from_numpy(tar_pose).reshape((tar_pose.shape[0], -1)).float()
646
+ in_facial = torch.from_numpy(in_facial).reshape((in_facial.shape[0], -1)).float()
647
+ return {"pose":tar_pose, "audio":in_audio, "facial":in_facial, "beta": in_shape, "word":in_word, "id":vid, "emo":emo, "sem":sem, "trans":trans}
648
+
649
+
650
+ class MotionPreprocessor:
651
+ def __init__(self, skeletons):
652
+ self.skeletons = skeletons
653
+ #self.mean_pose = mean_pose
654
+ self.filtering_message = "PASS"
655
+
656
+ def get(self):
657
+ assert (self.skeletons is not None)
658
+
659
+ # filtering
660
+ # if self.skeletons != []:
661
+ # if self.check_pose_diff():
662
+ # self.skeletons = []
663
+ # self.filtering_message = "pose"
664
+ # elif self.check_spine_angle():
665
+ # self.skeletons = []
666
+ # self.filtering_message = "spine angle"
667
+ # elif self.check_static_motion():
668
+ # self.skeletons = []
669
+ # self.filtering_message = "motion"
670
+
671
+ # if self.skeletons != []:
672
+ # self.skeletons = self.skeletons.tolist()
673
+ # for i, frame in enumerate(self.skeletons):
674
+ # assert not np.isnan(self.skeletons[i]).any() # missing joints
675
+
676
+ return self.skeletons, self.filtering_message
677
+
678
+ def check_static_motion(self, verbose=True):
679
+ def get_variance(skeleton, joint_idx):
680
+ wrist_pos = skeleton[:, joint_idx]
681
+ variance = np.sum(np.var(wrist_pos, axis=0))
682
+ return variance
683
+
684
+ left_arm_var = get_variance(self.skeletons, 6)
685
+ right_arm_var = get_variance(self.skeletons, 9)
686
+
687
+ th = 0.0014 # exclude 13110
688
+ # th = 0.002 # exclude 16905
689
+ if left_arm_var < th and right_arm_var < th:
690
+ if verbose:
691
+ print("skip - check_static_motion left var {}, right var {}".format(left_arm_var, right_arm_var))
692
+ return True
693
+ else:
694
+ if verbose:
695
+ print("pass - check_static_motion left var {}, right var {}".format(left_arm_var, right_arm_var))
696
+ return False
697
+
698
+
699
+ def check_pose_diff(self, verbose=False):
700
+ # diff = np.abs(self.skeletons - self.mean_pose) # 186*1
701
+ # diff = np.mean(diff)
702
+
703
+ # # th = 0.017
704
+ # th = 0.02 #0.02 # exclude 3594
705
+ # if diff < th:
706
+ # if verbose:
707
+ # print("skip - check_pose_diff {:.5f}".format(diff))
708
+ # return True
709
+ # # th = 3.5 #0.02 # exclude 3594
710
+ # # if 3.5 < diff < 5:
711
+ # # if verbose:
712
+ # # print("skip - check_pose_diff {:.5f}".format(diff))
713
+ # # return True
714
+ # else:
715
+ # if verbose:
716
+ # print("pass - check_pose_diff {:.5f}".format(diff))
717
+ return False
718
+
719
+
720
+ def check_spine_angle(self, verbose=True):
721
+ def angle_between(v1, v2):
722
+ v1_u = v1 / np.linalg.norm(v1)
723
+ v2_u = v2 / np.linalg.norm(v2)
724
+ return np.arccos(np.clip(np.dot(v1_u, v2_u), -1.0, 1.0))
725
+
726
+ angles = []
727
+ for i in range(self.skeletons.shape[0]):
728
+ spine_vec = self.skeletons[i, 1] - self.skeletons[i, 0]
729
+ angle = angle_between(spine_vec, [0, -1, 0])
730
+ angles.append(angle)
731
+
732
+ if np.rad2deg(max(angles)) > 30 or np.rad2deg(np.mean(angles)) > 20: # exclude 4495
733
+ # if np.rad2deg(max(angles)) > 20: # exclude 8270
734
+ if verbose:
735
+ print("skip - check_spine_angle {:.5f}, {:.5f}".format(max(angles), np.mean(angles)))
736
+ return True
737
+ else:
738
+ if verbose:
739
+ print("pass - check_spine_angle {:.5f}".format(max(angles)))
740
+ return False