Spaces:
Running
on
Zero
Running
on
Zero
Merge branch 'working' into pr/2
Browse files- .gitattributes +39 -37
- app.py +116 -13
- examples/1442432310/lyrics.json +1 -0
- examples/1442432310/reference_audio.mp3 +3 -0
- examples/input.json +8 -0
- requirements.txt +1 -0
- utils.py +133 -0
.gitattributes
CHANGED
@@ -1,37 +1,39 @@
|
|
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 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
29 |
-
*.
|
30 |
-
*.
|
31 |
-
*.
|
32 |
-
*.
|
33 |
-
*.
|
34 |
-
*.
|
35 |
-
|
36 |
-
|
37 |
-
colbert/indexes/arxiv_colbert/
|
|
|
|
|
|
1 |
+
# LFS configuration temporarily disabled - no LFS available on this system
|
2 |
+
# *.7z filter=lfs diff=lfs merge=lfs -text
|
3 |
+
# *.arrow filter=lfs diff=lfs merge=lfs -text
|
4 |
+
# *.bin filter=lfs diff=lfs merge=lfs -text
|
5 |
+
# *.bz2 filter=lfs diff=lfs merge=lfs -text
|
6 |
+
# *.ckpt filter=lfs diff=lfs merge=lfs -text
|
7 |
+
# *.ftz filter=lfs diff=lfs merge=lfs -text
|
8 |
+
# *.gz filter=lfs diff=lfs merge=lfs -text
|
9 |
+
# *.h5 filter=lfs diff=lfs merge=lfs -text
|
10 |
+
# *.joblib filter=lfs diff=lfs merge=lfs -text
|
11 |
+
# *.lfs.* filter=lfs diff=lfs merge=lfs -text
|
12 |
+
# *.mlmodel filter=lfs diff=lfs merge=lfs -text
|
13 |
+
# *.model filter=lfs diff=lfs merge=lfs -text
|
14 |
+
# *.msgpack filter=lfs diff=lfs merge=lfs -text
|
15 |
+
# *.npy filter=lfs diff=lfs merge=lfs -text
|
16 |
+
# *.npz filter=lfs diff=lfs merge=lfs -text
|
17 |
+
# *.onnx filter=lfs diff=lfs merge=lfs -text
|
18 |
+
# *.ot filter=lfs diff=lfs merge=lfs -text
|
19 |
+
# *.parquet filter=lfs diff=lfs merge=lfs -text
|
20 |
+
# *.pb filter=lfs diff=lfs merge=lfs -text
|
21 |
+
# *.pickle filter=lfs diff=lfs merge=lfs -text
|
22 |
+
# *.pkl filter=lfs diff=lfs merge=lfs -text
|
23 |
+
# *.pt filter=lfs diff=lfs merge=lfs -text
|
24 |
+
# *.pth filter=lfs diff=lfs merge=lfs -text
|
25 |
+
# *.rar filter=lfs diff=lfs merge=lfs -text
|
26 |
+
# *.safetensors filter=lfs diff=lfs merge=lfs -text
|
27 |
+
# saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
28 |
+
# *.tar.* filter=lfs diff=lfs merge=lfs -text
|
29 |
+
# *.tar filter=lfs diff=lfs merge=lfs -text
|
30 |
+
# *.tflite filter=lfs diff=lfs merge=lfs -text
|
31 |
+
# *.tgz filter=lfs diff=lfs merge=lfs -text
|
32 |
+
# *.wasm filter=lfs diff=lfs merge=lfs -text
|
33 |
+
# *.xz filter=lfs diff=lfs merge=lfs -text
|
34 |
+
# *.zip filter=lfs diff=lfs merge=lfs -text
|
35 |
+
# *.zst filter=lfs diff=lfs merge=lfs -text
|
36 |
+
# *tfevents* filter=lfs diff=lfs merge=lfs -text
|
37 |
+
# colbert/indexes/arxiv_colbert/collection.json filter=lfs diff=lfs merge=lfs -text
|
38 |
+
# colbert/indexes/arxiv_colbert/docid_metadata_map.json filter=lfs diff=lfs merge=lfs -text
|
39 |
+
# examples/1442432310/reference_audio.mp3 filter=lfs diff=lfs merge=lfs -text
|
app.py
CHANGED
@@ -1,10 +1,17 @@
|
|
1 |
import spaces
|
2 |
import gradio as gr
|
3 |
import os
|
|
|
|
|
4 |
from pathlib import Path
|
5 |
import ast
|
6 |
from model import Jamify
|
|
|
7 |
import json
|
|
|
|
|
|
|
|
|
8 |
# Initialize the Jamify model once
|
9 |
print("Initializing Jamify model...")
|
10 |
jamify_model = Jamify()
|
@@ -35,10 +42,11 @@ def parse(file):
|
|
35 |
return content
|
36 |
|
37 |
@spaces.GPU(duration=100)
|
38 |
-
def generate_song(reference_audio,
|
39 |
# We need to save the uploaded files to temporary paths to pass to the model
|
40 |
-
reference_audio = reference_audio
|
41 |
|
|
|
42 |
|
43 |
# The model expects paths, so we write the prompt to a temp file if needed
|
44 |
# (This part of the model could be improved to accept the string directly)
|
@@ -52,8 +60,80 @@ def generate_song(reference_audio, lyrics_file, style_prompt, duration):
|
|
52 |
duration_sec=duration
|
53 |
|
54 |
)
|
|
|
|
|
|
|
|
|
55 |
|
56 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
|
58 |
# Gradio interface
|
59 |
def process_text_file(file_obj):
|
@@ -70,16 +150,25 @@ with gr.Blocks() as demo:
|
|
70 |
gr.Markdown("# Jamify: Music Generation from Lyrics and Style")
|
71 |
gr.Markdown("Provide your lyrics, a style reference (either an audio file or a text prompt), and a desired duration to generate a song.")
|
72 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
with gr.Row():
|
74 |
with gr.Column():
|
75 |
gr.Markdown("### Inputs")
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
duration_slider = gr.Slider(minimum=5, maximum=
|
83 |
|
84 |
with gr.Tab("Style from Audio"):
|
85 |
reference_audio = gr.File(label="Reference Audio (.mp3, .wav)", type="filepath")
|
@@ -94,11 +183,25 @@ with gr.Blocks() as demo:
|
|
94 |
|
95 |
generate_button.click(
|
96 |
fn=generate_song,
|
97 |
-
inputs=[reference_audio,
|
98 |
outputs=output_audio,
|
99 |
api_name="generate_song"
|
100 |
)
|
101 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
|
103 |
demo.queue().launch()
|
104 |
-
#demo.launch(server_name="0.0.0.0", server_port=7860)
|
|
|
1 |
import spaces
|
2 |
import gradio as gr
|
3 |
import os
|
4 |
+
import json
|
5 |
+
import tempfile
|
6 |
from pathlib import Path
|
7 |
import ast
|
8 |
from model import Jamify
|
9 |
+
<<<<<<< HEAD
|
10 |
import json
|
11 |
+
=======
|
12 |
+
from utils import json_to_text, text_to_json
|
13 |
+
|
14 |
+
>>>>>>> working
|
15 |
# Initialize the Jamify model once
|
16 |
print("Initializing Jamify model...")
|
17 |
jamify_model = Jamify()
|
|
|
42 |
return content
|
43 |
|
44 |
@spaces.GPU(duration=100)
|
45 |
+
def generate_song(reference_audio, lyrics_text, style_prompt, duration):
|
46 |
# We need to save the uploaded files to temporary paths to pass to the model
|
47 |
+
reference_audio = reference_audio not in ("", None) and reference_audio or None
|
48 |
|
49 |
+
<<<<<<< HEAD
|
50 |
|
51 |
# The model expects paths, so we write the prompt to a temp file if needed
|
52 |
# (This part of the model could be improved to accept the string directly)
|
|
|
60 |
duration_sec=duration
|
61 |
|
62 |
)
|
63 |
+
=======
|
64 |
+
# Convert text format to JSON and save to temporary file
|
65 |
+
lyrics_json = text_to_json(lyrics_text)
|
66 |
+
>>>>>>> working
|
67 |
|
68 |
+
# Create temporary file for lyrics JSON
|
69 |
+
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
|
70 |
+
json.dump(lyrics_json, f, indent=2)
|
71 |
+
lyrics_file = f.name
|
72 |
+
|
73 |
+
try:
|
74 |
+
output_path = jamify_model.predict(
|
75 |
+
reference_audio_path=reference_audio,
|
76 |
+
lyrics_json_path=lyrics_file,
|
77 |
+
style_prompt=style_prompt,
|
78 |
+
duration_sec=duration
|
79 |
+
)
|
80 |
+
return output_path
|
81 |
+
finally:
|
82 |
+
# Clean up temporary file
|
83 |
+
if os.path.exists(lyrics_file):
|
84 |
+
os.unlink(lyrics_file)
|
85 |
+
|
86 |
+
# Load and cache examples
|
87 |
+
def load_examples():
|
88 |
+
"""Load examples from the examples directory and pre-compute text formats"""
|
89 |
+
examples = []
|
90 |
+
examples_file = "examples/input.json"
|
91 |
+
|
92 |
+
if os.path.exists(examples_file):
|
93 |
+
print("Loading and caching examples...")
|
94 |
+
with open(examples_file, 'r') as f:
|
95 |
+
examples_data = json.load(f)
|
96 |
+
|
97 |
+
for example in examples_data:
|
98 |
+
example_id = example.get('id', '')
|
99 |
+
audio_path = example.get('audio_path', '')
|
100 |
+
lrc_path = example.get('lrc_path', '')
|
101 |
+
duration = example.get('duration', 120)
|
102 |
+
|
103 |
+
# Load lyrics and convert to text format (pre-computed/cached)
|
104 |
+
lyrics_text = ""
|
105 |
+
if os.path.exists(lrc_path):
|
106 |
+
try:
|
107 |
+
with open(lrc_path, 'r') as f:
|
108 |
+
lyrics_json = json.load(f)
|
109 |
+
lyrics_text = json_to_text(lyrics_json)
|
110 |
+
print(f"Cached example {example_id}: {len(lyrics_text)} chars")
|
111 |
+
except Exception as e:
|
112 |
+
print(f"Error loading lyrics from {lrc_path}: {e}")
|
113 |
+
|
114 |
+
examples.append({
|
115 |
+
'id': example_id,
|
116 |
+
'audio_path': audio_path if os.path.exists(audio_path) else None,
|
117 |
+
'lyrics_text': lyrics_text,
|
118 |
+
'duration': duration
|
119 |
+
})
|
120 |
+
|
121 |
+
print(f"Loaded {len(examples)} cached examples")
|
122 |
+
return examples
|
123 |
+
|
124 |
+
def load_example(example_idx, examples):
|
125 |
+
"""Load a specific example and return its data"""
|
126 |
+
if 0 <= example_idx < len(examples):
|
127 |
+
example = examples[example_idx]
|
128 |
+
return (
|
129 |
+
example['audio_path'],
|
130 |
+
example['lyrics_text'],
|
131 |
+
example['duration']
|
132 |
+
)
|
133 |
+
return None, "", 120
|
134 |
+
|
135 |
+
# Load examples at startup
|
136 |
+
examples = load_examples()
|
137 |
|
138 |
# Gradio interface
|
139 |
def process_text_file(file_obj):
|
|
|
150 |
gr.Markdown("# Jamify: Music Generation from Lyrics and Style")
|
151 |
gr.Markdown("Provide your lyrics, a style reference (either an audio file or a text prompt), and a desired duration to generate a song.")
|
152 |
|
153 |
+
# Sample buttons section
|
154 |
+
if examples:
|
155 |
+
gr.Markdown("### Sample Examples")
|
156 |
+
with gr.Row():
|
157 |
+
example_buttons = []
|
158 |
+
for i, example in enumerate(examples):
|
159 |
+
button = gr.Button(f"Example {example['id']}", variant="secondary", size="sm")
|
160 |
+
example_buttons.append(button)
|
161 |
+
|
162 |
with gr.Row():
|
163 |
with gr.Column():
|
164 |
gr.Markdown("### Inputs")
|
165 |
+
lyrics_text = gr.Textbox(
|
166 |
+
label="Lyrics",
|
167 |
+
lines=10,
|
168 |
+
placeholder="Enter lyrics in format: word[start:end] word[start:end]...\nExample: It's[4.96:5.52] a[5.52:5.84] long[5.84:6.16] way[6.16:6.48]...",
|
169 |
+
value=""
|
170 |
+
)
|
171 |
+
duration_slider = gr.Slider(minimum=5, maximum=230, value=120, step=30, label="Duration (seconds)")
|
172 |
|
173 |
with gr.Tab("Style from Audio"):
|
174 |
reference_audio = gr.File(label="Reference Audio (.mp3, .wav)", type="filepath")
|
|
|
183 |
|
184 |
generate_button.click(
|
185 |
fn=generate_song,
|
186 |
+
inputs=[reference_audio, lyrics_text, style_prompt, duration_slider],
|
187 |
outputs=output_audio,
|
188 |
api_name="generate_song"
|
189 |
)
|
190 |
+
|
191 |
+
# Connect example buttons to load data
|
192 |
+
if examples:
|
193 |
+
for i, button in enumerate(example_buttons):
|
194 |
+
button.click(
|
195 |
+
fn=lambda idx=i: load_example(idx, examples),
|
196 |
+
outputs=[reference_audio, lyrics_text, duration_slider]
|
197 |
+
)
|
198 |
+
|
199 |
+
# Create necessary temporary directories for Gradio
|
200 |
+
print("Creating temporary directories...")
|
201 |
+
try:
|
202 |
+
os.makedirs("/tmp/gradio", exist_ok=True)
|
203 |
+
print("Temporary directories created successfully.")
|
204 |
+
except Exception as e:
|
205 |
+
print(f"Warning: Could not create temporary directories: {e}")
|
206 |
|
207 |
demo.queue().launch()
|
|
examples/1442432310/lyrics.json
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"char": [{"char": ["It"], "start_offset": 62, "end_offset": 65, "start": 4.96, "end": 5.2}, {"char": ["'"], "start_offset": 65, "end_offset": 65, "start": 5.2, "end": 5.2}, {"char": ["s"], "start_offset": 69, "end_offset": 69, "start": 5.5200000000000005, "end": 5.5200000000000005}, {"char": ["a"], "start_offset": 69, "end_offset": 73, "start": 5.5200000000000005, "end": 5.84}, {"char": ["long"], "start_offset": 73, "end_offset": 77, "start": 5.84, "end": 6.16}, {"char": ["way"], "start_offset": 77, "end_offset": 81, "start": 6.16, "end": 6.48}, {"char": ["to"], "start_offset": 84, "end_offset": 88, "start": 6.72, "end": 7.04}, {"char": ["t"], "start_offset": 88, "end_offset": 90, "start": 7.04, "end": 7.2}, {"char": ["i"], "start_offset": 90, "end_offset": 92, "start": 7.2, "end": 7.36}, {"char": ["pp"], "start_offset": 92, "end_offset": 94, "start": 7.36, "end": 7.5200000000000005}, {"char": ["er"], "start_offset": 94, "end_offset": 96, "start": 7.5200000000000005, "end": 7.68}, {"char": ["y"], "start_offset": 104, "end_offset": 107, "start": 8.32, "end": 8.56}, {"char": ["."], "start_offset": 107, "end_offset": 107, "start": 8.56, "end": 8.56}, {"char": ["It"], "start_offset": 118, "end_offset": 120, "start": 9.44, "end": 9.6}, {"char": ["'"], "start_offset": 120, "end_offset": 120, "start": 9.6, "end": 9.6}, {"char": ["s"], "start_offset": 123, "end_offset": 123, "start": 9.84, "end": 9.84}, {"char": ["a"], "start_offset": 123, "end_offset": 127, "start": 9.84, "end": 10.16}, {"char": ["long"], "start_offset": 127, "end_offset": 131, "start": 10.16, "end": 10.48}, {"char": ["way"], "start_offset": 135, "end_offset": 139, "start": 10.8, "end": 11.120000000000001}, {"char": ["to"], "start_offset": 143, "end_offset": 147, "start": 11.44, "end": 11.76}, {"char": ["go"], "start_offset": 155, "end_offset": 159, "start": 12.4, "end": 12.72}, {"char": ["."], "start_offset": 159, "end_offset": 159, "start": 12.72, "end": 12.72}, {"char": ["It"], "start_offset": 174, "end_offset": 176, "start": 13.92, "end": 14.08}, {"char": ["'"], "start_offset": 176, "end_offset": 176, "start": 14.08, "end": 14.08}, {"char": ["s"], "start_offset": 179, "end_offset": 179, "start": 14.32, "end": 14.32}, {"char": ["a"], "start_offset": 179, "end_offset": 183, "start": 14.32, "end": 14.64}, {"char": ["long"], "start_offset": 183, "end_offset": 187, "start": 14.64, "end": 14.96}, {"char": ["way"], "start_offset": 187, "end_offset": 191, "start": 14.96, "end": 15.280000000000001}, {"char": ["to"], "start_offset": 195, "end_offset": 198, "start": 15.6, "end": 15.84}, {"char": ["t"], "start_offset": 198, "end_offset": 200, "start": 15.84, "end": 16.0}, {"char": ["i"], "start_offset": 200, "end_offset": 202, "start": 16.0, "end": 16.16}, {"char": ["pp"], "start_offset": 202, "end_offset": 204, "start": 16.16, "end": 16.32}, {"char": ["er"], "start_offset": 204, "end_offset": 206, "start": 16.32, "end": 16.48}, {"char": ["ary"], "start_offset": 208, "end_offset": 211, "start": 16.64, "end": 16.88}, {"char": ["to"], "start_offset": 227, "end_offset": 231, "start": 18.16, "end": 18.48}, {"char": ["the"], "start_offset": 231, "end_offset": 234, "start": 18.48, "end": 18.72}, {"char": ["s"], "start_offset": 234, "end_offset": 236, "start": 18.72, "end": 18.88}, {"char": ["we"], "start_offset": 236, "end_offset": 240, "start": 18.88, "end": 19.2}, {"char": ["et"], "start_offset": 240, "end_offset": 244, "start": 19.2, "end": 19.52}, {"char": ["est"], "start_offset": 244, "end_offset": 248, "start": 19.52, "end": 19.84}, {"char": ["g"], "start_offset": 248, "end_offset": 252, "start": 19.84, "end": 20.16}, {"char": ["ir"], "start_offset": 252, "end_offset": 256, "start": 20.16, "end": 20.48}, {"char": ["l"], "start_offset": 256, "end_offset": 256, "start": 20.48, "end": 20.48}, {"char": ["I"], "start_offset": 258, "end_offset": 262, "start": 20.64, "end": 20.96}, {"char": ["know"], "start_offset": 266, "end_offset": 270, "start": 21.28, "end": 21.6}, {"char": ["."], "start_offset": 270, "end_offset": 270, "start": 21.6, "end": 21.6}, {"char": ["G"], "start_offset": 289, "end_offset": 291, "start": 23.12, "end": 23.28}, {"char": ["ood"], "start_offset": 291, "end_offset": 295, "start": 23.28, "end": 23.6}, {"char": ["b"], "start_offset": 295, "end_offset": 298, "start": 23.6, "end": 23.84}, {"char": ["y"], "start_offset": 298, "end_offset": 301, "start": 23.84, "end": 24.080000000000002}, {"char": ["e"], "start_offset": 301, "end_offset": 305, "start": 24.080000000000002, "end": 24.400000000000002}, {"char": ["to"], "start_offset": 305, "end_offset": 308, "start": 24.400000000000002, "end": 24.64}, {"char": ["P"], "start_offset": 308, "end_offset": 310, "start": 24.64, "end": 24.8}, {"char": ["ic"], "start_offset": 310, "end_offset": 312, "start": 24.8, "end": 24.96}, {"char": ["c"], "start_offset": 312, "end_offset": 313, "start": 24.96, "end": 25.04}, {"char": ["ad"], "start_offset": 315, "end_offset": 317, "start": 25.2, "end": 25.36}, {"char": ["ill"], "start_offset": 317, "end_offset": 320, "start": 25.36, "end": 25.6}, {"char": ["y"], "start_offset": 324, "end_offset": 328, "start": 25.92, "end": 26.240000000000002}, {"char": ["."], "start_offset": 328, "end_offset": 328, "start": 26.240000000000002, "end": 26.240000000000002}, {"char": ["F"], "start_offset": 343, "end_offset": 346, "start": 27.44, "end": 27.68}, {"char": ["are"], "start_offset": 346, "end_offset": 349, "start": 27.68, "end": 27.92}, {"char": ["we"], "start_offset": 351, "end_offset": 353, "start": 28.080000000000002, "end": 28.240000000000002}, {"char": ["ll"], "start_offset": 353, "end_offset": 355, "start": 28.240000000000002, "end": 28.400000000000002}, {"char": [","], "start_offset": 355, "end_offset": 355, "start": 28.400000000000002, "end": 28.400000000000002}, {"char": ["L"], "start_offset": 357, "end_offset": 359, "start": 28.560000000000002, "end": 28.72}, {"char": ["e"], "start_offset": 359, "end_offset": 361, "start": 28.72, "end": 28.88}, {"char": ["ic"], "start_offset": 361, "end_offset": 363, "start": 28.88, "end": 29.04}, {"char": ["es"], "start_offset": 363, "end_offset": 366, "start": 29.04, "end": 29.28}, {"char": ["ter"], "start_offset": 366, "end_offset": 369, "start": 29.28, "end": 29.52}, {"char": ["S"], "start_offset": 369, "end_offset": 373, "start": 29.52, "end": 29.84}, {"char": ["qu"], "start_offset": 373, "end_offset": 377, "start": 29.84, "end": 30.16}, {"char": ["are"], "start_offset": 377, "end_offset": 381, "start": 30.16, "end": 30.48}, {"char": ["."], "start_offset": 381, "end_offset": 381, "start": 30.48, "end": 30.48}, {"char": ["It"], "start_offset": 393, "end_offset": 395, "start": 31.44, "end": 31.6}, {"char": ["'"], "start_offset": 395, "end_offset": 395, "start": 31.6, "end": 31.6}, {"char": ["s"], "start_offset": 397, "end_offset": 397, "start": 31.76, "end": 31.76}, {"char": ["a"], "start_offset": 397, "end_offset": 400, "start": 31.76, "end": 32.0}, {"char": ["long"], "start_offset": 400, "end_offset": 404, "start": 32.0, "end": 32.32}, {"char": [","], "start_offset": 404, "end_offset": 404, "start": 32.32, "end": 32.32}, {"char": ["long"], "start_offset": 406, "end_offset": 408, "start": 32.480000000000004, "end": 32.64}, {"char": ["way"], "start_offset": 412, "end_offset": 415, "start": 32.96, "end": 33.2}, {"char": ["to"], "start_offset": 415, "end_offset": 419, "start": 33.2, "end": 33.52}, {"char": ["t"], "start_offset": 419, "end_offset": 421, "start": 33.52, "end": 33.68}, {"char": ["i"], "start_offset": 421, "end_offset": 423, "start": 33.68, "end": 33.84}, {"char": ["pp"], "start_offset": 423, "end_offset": 424, "start": 33.84, "end": 33.92}, {"char": ["er"], "start_offset": 424, "end_offset": 426, "start": 33.92, "end": 34.08}, {"char": ["y"], "start_offset": 442, "end_offset": 446, "start": 35.36, "end": 35.68}, {"char": ["."], "start_offset": 446, "end_offset": 446, "start": 35.68, "end": 35.68}, {"char": ["But"], "start_offset": 450, "end_offset": 454, "start": 36.0, "end": 36.32}, {"char": ["my"], "start_offset": 454, "end_offset": 458, "start": 36.32, "end": 36.64}, {"char": ["he"], "start_offset": 462, "end_offset": 466, "start": 36.96, "end": 37.28}, {"char": ["art"], "start_offset": 466, "end_offset": 470, "start": 37.28, "end": 37.6}, {"char": ["'"], "start_offset": 470, "end_offset": 470, "start": 37.6, "end": 37.6}, {"char": ["s"], "start_offset": 473, "end_offset": 477, "start": 37.84, "end": 38.160000000000004}, {"char": ["right"], "start_offset": 477, "end_offset": 481, "start": 38.160000000000004, "end": 38.480000000000004}, {"char": ["there"], "start_offset": 484, "end_offset": 488, "start": 38.72, "end": 39.04}, {"char": ["."], "start_offset": 488, "end_offset": 488, "start": 39.04, "end": 39.04}, {"char": ["P"], "start_offset": 512, "end_offset": 514, "start": 40.96, "end": 41.12}, {"char": ["ack"], "start_offset": 514, "end_offset": 517, "start": 41.12, "end": 41.36}, {"char": ["up"], "start_offset": 517, "end_offset": 520, "start": 41.36, "end": 41.6}, {"char": ["your"], "start_offset": 520, "end_offset": 523, "start": 41.6, "end": 41.84}, {"char": ["tr"], "start_offset": 523, "end_offset": 525, "start": 41.84, "end": 42.0}, {"char": ["ou"], "start_offset": 525, "end_offset": 527, "start": 42.0, "end": 42.160000000000004}, {"char": ["b"], "start_offset": 527, "end_offset": 529, "start": 42.160000000000004, "end": 42.32}, {"char": ["les"], "start_offset": 529, "end_offset": 531, "start": 42.32, "end": 42.480000000000004}, {"char": ["in"], "start_offset": 531, "end_offset": 534, "start": 42.480000000000004, "end": 42.72}, {"char": ["your"], "start_offset": 534, "end_offset": 537, "start": 42.72, "end": 42.96}, {"char": ["o"], "start_offset": 537, "end_offset": 540, "start": 42.96, "end": 43.2}, {"char": ["ld"], "start_offset": 540, "end_offset": 542, "start": 43.2, "end": 43.36}, {"char": ["k"], "start_offset": 542, "end_offset": 545, "start": 43.36, "end": 43.6}, {"char": ["it"], "start_offset": 545, "end_offset": 547, "start": 43.6, "end": 43.76}, {"char": ["s"], "start_offset": 547, "end_offset": 549, "start": 43.76, "end": 43.92}, {"char": ["b"], "start_offset": 551, "end_offset": 555, "start": 44.08, "end": 44.4}, {"char": ["ag"], "start_offset": 555, "end_offset": 559, "start": 44.4, "end": 44.72}, {"char": ["and"], "start_offset": 559, "end_offset": 563, "start": 44.72, "end": 45.04}, {"char": ["sm"], "start_offset": 563, "end_offset": 567, "start": 45.04, "end": 45.36}, {"char": ["ile"], "start_offset": 567, "end_offset": 570, "start": 45.36, "end": 45.6}, {"char": [","], "start_offset": 570, "end_offset": 570, "start": 45.6, "end": 45.6}, {"char": ["sm"], "start_offset": 577, "end_offset": 581, "start": 46.160000000000004, "end": 46.480000000000004}, {"char": ["ile"], "start_offset": 581, "end_offset": 585, "start": 46.480000000000004, "end": 46.800000000000004}, {"char": [","], "start_offset": 585, "end_offset": 585, "start": 46.800000000000004, "end": 46.800000000000004}, {"char": ["sm"], "start_offset": 591, "end_offset": 595, "start": 47.28, "end": 47.6}, {"char": ["ile"], "start_offset": 595, "end_offset": 599, "start": 47.6, "end": 47.92}, {"char": ["."], "start_offset": 599, "end_offset": 599, "start": 47.92, "end": 47.92}, {"char": ["Wh"], "start_offset": 621, "end_offset": 623, "start": 49.68, "end": 49.84}, {"char": ["ile"], "start_offset": 623, "end_offset": 625, "start": 49.84, "end": 50.0}, {"char": ["you"], "start_offset": 625, "end_offset": 628, "start": 50.0, "end": 50.24}, {"char": ["the"], "start_offset": 630, "end_offset": 631, "start": 50.4, "end": 50.480000000000004}, {"char": ["L"], "start_offset": 633, "end_offset": 635, "start": 50.64, "end": 50.800000000000004}, {"char": ["uc"], "start_offset": 635, "end_offset": 637, "start": 50.800000000000004, "end": 50.96}, {"char": ["if"], "start_offset": 637, "end_offset": 640, "start": 50.96, "end": 51.2}, {"char": ["er"], "start_offset": 640, "end_offset": 642, "start": 51.2, "end": 51.36}, {"char": ["de"], "start_offset": 643, "end_offset": 645, "start": 51.44, "end": 51.6}, {"char": ["l"], "start_offset": 645, "end_offset": 647, "start": 51.6, "end": 51.76}, {"char": ["ight"], "start_offset": 647, "end_offset": 650, "start": 51.76, "end": 52.0}, {"char": ["your"], "start_offset": 654, "end_offset": 656, "start": 52.32, "end": 52.480000000000004}, {"char": ["f"], "start_offset": 660, "end_offset": 664, "start": 52.800000000000004, "end": 53.120000000000005}, {"char": ["ag"], "start_offset": 664, "end_offset": 667, "start": 53.120000000000005, "end": 53.36}, {"char": ["sm"], "start_offset": 674, "end_offset": 675, "start": 53.92, "end": 54.0}, {"char": ["ile"], "start_offset": 677, "end_offset": 680, "start": 54.160000000000004, "end": 54.4}, {"char": [","], "start_offset": 680, "end_offset": 680, "start": 54.4, "end": 54.4}, {"char": ["bo"], "start_offset": 681, "end_offset": 684, "start": 54.480000000000004, "end": 54.72}, {"char": ["ys"], "start_offset": 684, "end_offset": 687, "start": 54.72, "end": 54.96}, {"char": [","], "start_offset": 687, "end_offset": 687, "start": 54.96, "end": 54.96}, {"char": ["that"], "start_offset": 689, "end_offset": 692, "start": 55.120000000000005, "end": 55.36}, {"char": ["'"], "start_offset": 692, "end_offset": 692, "start": 55.36, "end": 55.36}, {"char": ["s"], "start_offset": 694, "end_offset": 698, "start": 55.52, "end": 55.84}, {"char": ["the"], "start_offset": 698, "end_offset": 702, "start": 55.84, "end": 56.160000000000004}, {"char": ["st"], "start_offset": 702, "end_offset": 706, "start": 56.160000000000004, "end": 56.480000000000004}, {"char": ["y"], "start_offset": 706, "end_offset": 710, "start": 56.480000000000004, "end": 56.800000000000004}, {"char": ["le"], "start_offset": 710, "end_offset": 714, "start": 56.800000000000004, "end": 57.120000000000005}, {"char": ["."], "start_offset": 714, "end_offset": 714, "start": 57.120000000000005, "end": 57.120000000000005}, {"char": ["What"], "start_offset": 731, "end_offset": 735, "start": 58.480000000000004, "end": 58.800000000000004}, {"char": ["'"], "start_offset": 735, "end_offset": 735, "start": 58.800000000000004, "end": 58.800000000000004}, {"char": ["s"], "start_offset": 739, "end_offset": 743, "start": 59.120000000000005, "end": 59.44}, {"char": ["the"], "start_offset": 743, "end_offset": 747, "start": 59.44, "end": 59.76}, {"char": ["use"], "start_offset": 747, "end_offset": 751, "start": 59.76, "end": 60.08}, {"char": ["of"], "start_offset": 751, "end_offset": 755, "start": 60.08, "end": 60.4}, {"char": ["wor"], "start_offset": 755, "end_offset": 759, "start": 60.4, "end": 60.72}, {"char": ["ry"], "start_offset": 763, "end_offset": 766, "start": 61.04, "end": 61.28}, {"char": ["ing"], "start_offset": 766, "end_offset": 769, "start": 61.28, "end": 61.52}, {"char": ["?"], "start_offset": 769, "end_offset": 769, "start": 61.52, "end": 61.52}, {"char": ["It"], "start_offset": 780, "end_offset": 784, "start": 62.4, "end": 62.72}, {"char": ["never"], "start_offset": 788, "end_offset": 792, "start": 63.04, "end": 63.36}, {"char": ["was"], "start_offset": 796, "end_offset": 800, "start": 63.68, "end": 64.0}, {"char": ["wor"], "start_offset": 804, "end_offset": 808, "start": 64.32000000000001, "end": 64.64}, {"char": ["th"], "start_offset": 808, "end_offset": 811, "start": 64.64, "end": 64.88}, {"char": ["w"], "start_offset": 813, "end_offset": 816, "start": 65.04, "end": 65.28}, {"char": ["h"], "start_offset": 816, "end_offset": 820, "start": 65.28, "end": 65.6}, {"char": ["ile"], "start_offset": 820, "end_offset": 820, "start": 65.6, "end": 65.6}, {"char": ["."], "start_offset": 820, "end_offset": 820, "start": 65.6, "end": 65.6}, {"char": ["So"], "start_offset": 828, "end_offset": 831, "start": 66.24, "end": 66.48}, {"char": ["p"], "start_offset": 837, "end_offset": 841, "start": 66.96000000000001, "end": 67.28}, {"char": ["ack"], "start_offset": 841, "end_offset": 845, "start": 67.28, "end": 67.6}, {"char": ["up"], "start_offset": 845, "end_offset": 849, "start": 67.6, "end": 67.92}, {"char": ["your"], "start_offset": 849, "end_offset": 852, "start": 67.92, "end": 68.16}, {"char": ["tr"], "start_offset": 852, "end_offset": 854, "start": 68.16, "end": 68.32000000000001}, {"char": ["ou"], "start_offset": 854, "end_offset": 856, "start": 68.32000000000001, "end": 68.48}, {"char": ["b"], "start_offset": 856, "end_offset": 858, "start": 68.48, "end": 68.64}, {"char": ["les"], "start_offset": 858, "end_offset": 861, "start": 68.64, "end": 68.88}, {"char": ["in"], "start_offset": 861, "end_offset": 864, "start": 68.88, "end": 69.12}, {"char": ["your"], "start_offset": 864, "end_offset": 867, "start": 69.12, "end": 69.36}, {"char": ["o"], "start_offset": 867, "end_offset": 870, "start": 69.36, "end": 69.60000000000001}, {"char": ["ld"], "start_offset": 870, "end_offset": 873, "start": 69.60000000000001, "end": 69.84}, {"char": ["k"], "start_offset": 873, "end_offset": 876, "start": 69.84, "end": 70.08}, {"char": ["it"], "start_offset": 876, "end_offset": 878, "start": 70.08, "end": 70.24}, {"char": ["'"], "start_offset": 878, "end_offset": 878, "start": 70.24, "end": 70.24}, {"char": ["s"], "start_offset": 880, "end_offset": 882, "start": 70.4, "end": 70.56}, {"char": ["b"], "start_offset": 882, "end_offset": 885, "start": 70.56, "end": 70.8}, {"char": ["ag"], "start_offset": 885, "end_offset": 888, "start": 70.8, "end": 71.04}, {"char": ["and"], "start_offset": 890, "end_offset": 894, "start": 71.2, "end": 71.52}, {"char": ["sm"], "start_offset": 894, "end_offset": 898, "start": 71.52, "end": 71.84}, {"char": ["ile"], "start_offset": 898, "end_offset": 902, "start": 71.84, "end": 72.16}, {"char": [","], "start_offset": 902, "end_offset": 902, "start": 72.16, "end": 72.16}, {"char": ["sm"], "start_offset": 907, "end_offset": 911, "start": 72.56, "end": 72.88}, {"char": ["ile"], "start_offset": 911, "end_offset": 915, "start": 72.88, "end": 73.2}, {"char": [","], "start_offset": 915, "end_offset": 915, "start": 73.2, "end": 73.2}, {"char": ["sm"], "start_offset": 921, "end_offset": 925, "start": 73.68, "end": 74.0}, {"char": ["ile"], "start_offset": 925, "end_offset": 929, "start": 74.0, "end": 74.32000000000001}, {"char": ["."], "start_offset": 929, "end_offset": 929, "start": 74.32000000000001, "end": 74.32000000000001}, {"char": ["It"], "start_offset": 945, "end_offset": 947, "start": 75.60000000000001, "end": 75.76}, {"char": ["'"], "start_offset": 947, "end_offset": 947, "start": 75.76, "end": 75.76}, {"char": ["s"], "start_offset": 951, "end_offset": 951, "start": 76.08, "end": 76.08}, {"char": ["a"], "start_offset": 951, "end_offset": 955, "start": 76.08, "end": 76.4}, {"char": ["long"], "start_offset": 955, "end_offset": 959, "start": 76.4, "end": 76.72}, {"char": ["way"], "start_offset": 959, "end_offset": 962, "start": 76.72, "end": 76.96000000000001}, {"char": ["to"], "start_offset": 965, "end_offset": 968, "start": 77.2, "end": 77.44}, {"char": ["t"], "start_offset": 968, "end_offset": 971, "start": 77.44, "end": 77.68}, {"char": ["i"], "start_offset": 971, "end_offset": 973, "start": 77.68, "end": 77.84}, {"char": ["pp"], "start_offset": 973, "end_offset": 974, "start": 77.84, "end": 77.92}, {"char": ["er"], "start_offset": 974, "end_offset": 976, "start": 77.92, "end": 78.08}, {"char": ["y"], "start_offset": 984, "end_offset": 987, "start": 78.72, "end": 78.96000000000001}, {"char": ["."], "start_offset": 987, "end_offset": 987, "start": 78.96000000000001, "end": 78.96000000000001}, {"char": ["It"], "start_offset": 999, "end_offset": 1002, "start": 79.92, "end": 80.16}, {"char": ["'"], "start_offset": 1002, "end_offset": 1002, "start": 80.16, "end": 80.16}, {"char": ["s"], "start_offset": 1006, "end_offset": 1006, "start": 80.48, "end": 80.48}, {"char": ["a"], "start_offset": 1006, "end_offset": 1010, "start": 80.48, "end": 80.8}, {"char": ["long"], "start_offset": 1010, "end_offset": 1014, "start": 80.8, "end": 81.12}, {"char": ["way"], "start_offset": 1014, "end_offset": 1018, "start": 81.12, "end": 81.44}, {"char": ["to"], "start_offset": 1026, "end_offset": 1030, "start": 82.08, "end": 82.4}, {"char": ["go"], "start_offset": 1034, "end_offset": 1038, "start": 82.72, "end": 83.04}, {"char": ["."], "start_offset": 1038, "end_offset": 1038, "start": 83.04, "end": 83.04}, {"char": ["It"], "start_offset": 1054, "end_offset": 1056, "start": 84.32000000000001, "end": 84.48}, {"char": ["'"], "start_offset": 1056, "end_offset": 1056, "start": 84.48, "end": 84.48}, {"char": ["s"], "start_offset": 1060, "end_offset": 1060, "start": 84.8, "end": 84.8}, {"char": ["a"], "start_offset": 1060, "end_offset": 1064, "start": 84.8, "end": 85.12}, {"char": ["long"], "start_offset": 1064, "end_offset": 1068, "start": 85.12, "end": 85.44}, {"char": ["way"], "start_offset": 1068, "end_offset": 1072, "start": 85.44, "end": 85.76}, {"char": ["to"], "start_offset": 1074, "end_offset": 1078, "start": 85.92, "end": 86.24}, {"char": ["t"], "start_offset": 1078, "end_offset": 1081, "start": 86.24, "end": 86.48}, {"char": ["i"], "start_offset": 1081, "end_offset": 1083, "start": 86.48, "end": 86.64}, {"char": ["pp"], "start_offset": 1083, "end_offset": 1084, "start": 86.64, "end": 86.72}, {"char": ["er"], "start_offset": 1084, "end_offset": 1086, "start": 86.72, "end": 86.88}, {"char": ["y"], "start_offset": 1094, "end_offset": 1097, "start": 87.52, "end": 87.76}, {"char": ["to"], "start_offset": 1108, "end_offset": 1111, "start": 88.64, "end": 88.88}, {"char": ["the"], "start_offset": 1111, "end_offset": 1115, "start": 88.88, "end": 89.2}, {"char": ["s"], "start_offset": 1115, "end_offset": 1117, "start": 89.2, "end": 89.36}, {"char": ["we"], "start_offset": 1117, "end_offset": 1121, "start": 89.36, "end": 89.68}, {"char": ["et"], "start_offset": 1121, "end_offset": 1125, "start": 89.68, "end": 90.0}, {"char": ["est"], "start_offset": 1125, "end_offset": 1129, "start": 90.0, "end": 90.32000000000001}, {"char": ["g"], "start_offset": 1129, "end_offset": 1132, "start": 90.32000000000001, "end": 90.56}, {"char": ["ir"], "start_offset": 1132, "end_offset": 1135, "start": 90.56, "end": 90.8}, {"char": ["l"], "start_offset": 1135, "end_offset": 1138, "start": 90.8, "end": 91.04}, {"char": ["I"], "start_offset": 1138, "end_offset": 1142, "start": 91.04, "end": 91.36}, {"char": ["know"], "start_offset": 1146, "end_offset": 1150, "start": 91.68, "end": 92.0}, {"char": ["."], "start_offset": 1150, "end_offset": 1150, "start": 92.0, "end": 92.0}, {"char": ["G"], "start_offset": 1170, "end_offset": 1172, "start": 93.60000000000001, "end": 93.76}, {"char": ["ood"], "start_offset": 1172, "end_offset": 1176, "start": 93.76, "end": 94.08}, {"char": ["b"], "start_offset": 1176, "end_offset": 1179, "start": 94.08, "end": 94.32000000000001}, {"char": ["y"], "start_offset": 1179, "end_offset": 1182, "start": 94.32000000000001, "end": 94.56}, {"char": ["e"], "start_offset": 1182, "end_offset": 1185, "start": 94.56, "end": 94.8}, {"char": ["to"], "start_offset": 1185, "end_offset": 1188, "start": 94.8, "end": 95.04}, {"char": ["P"], "start_offset": 1188, "end_offset": 1190, "start": 95.04, "end": 95.2}, {"char": ["ic"], "start_offset": 1190, "end_offset": 1192, "start": 95.2, "end": 95.36}, {"char": ["c"], "start_offset": 1193, "end_offset": 1194, "start": 95.44, "end": 95.52}, {"char": ["ad"], "start_offset": 1194, "end_offset": 1196, "start": 95.52, "end": 95.68}, {"char": ["ill"], "start_offset": 1200, "end_offset": 1203, "start": 96.0, "end": 96.24000000000001}, {"char": ["y"], "start_offset": 1203, "end_offset": 1206, "start": 96.24000000000001, "end": 96.48}, {"char": ["."], "start_offset": 1206, "end_offset": 1206, "start": 96.48, "end": 96.48}, {"char": ["F"], "start_offset": 1225, "end_offset": 1228, "start": 98.0, "end": 98.24000000000001}, {"char": ["are"], "start_offset": 1228, "end_offset": 1231, "start": 98.24000000000001, "end": 98.48}, {"char": ["we"], "start_offset": 1231, "end_offset": 1233, "start": 98.48, "end": 98.64}, {"char": ["ll"], "start_offset": 1233, "end_offset": 1235, "start": 98.64, "end": 98.8}, {"char": [","], "start_offset": 1235, "end_offset": 1235, "start": 98.8, "end": 98.8}, {"char": ["L"], "start_offset": 1238, "end_offset": 1240, "start": 99.04, "end": 99.2}, {"char": ["e"], "start_offset": 1240, "end_offset": 1242, "start": 99.2, "end": 99.36}, {"char": ["ic"], "start_offset": 1242, "end_offset": 1244, "start": 99.36, "end": 99.52}, {"char": ["es"], "start_offset": 1244, "end_offset": 1247, "start": 99.52, "end": 99.76}, {"char": ["ter"], "start_offset": 1247, "end_offset": 1250, "start": 99.76, "end": 100.0}, {"char": ["S"], "start_offset": 1250, "end_offset": 1254, "start": 100.0, "end": 100.32000000000001}, {"char": ["qu"], "start_offset": 1254, "end_offset": 1258, "start": 100.32000000000001, "end": 100.64}, {"char": ["are"], "start_offset": 1258, "end_offset": 1262, "start": 100.64, "end": 100.96000000000001}, {"char": ["."], "start_offset": 1262, "end_offset": 1262, "start": 100.96000000000001, "end": 100.96000000000001}, {"char": ["It"], "start_offset": 1274, "end_offset": 1276, "start": 101.92, "end": 102.08}, {"char": ["'"], "start_offset": 1276, "end_offset": 1276, "start": 102.08, "end": 102.08}, {"char": ["s"], "start_offset": 1279, "end_offset": 1279, "start": 102.32000000000001, "end": 102.32000000000001}, {"char": ["a"], "start_offset": 1279, "end_offset": 1281, "start": 102.32000000000001, "end": 102.48}, {"char": ["long"], "start_offset": 1281, "end_offset": 1284, "start": 102.48, "end": 102.72}, {"char": [","], "start_offset": 1284, "end_offset": 1284, "start": 102.72, "end": 102.72}, {"char": ["long"], "start_offset": 1287, "end_offset": 1289, "start": 102.96000000000001, "end": 103.12}, {"char": ["way"], "start_offset": 1293, "end_offset": 1296, "start": 103.44, "end": 103.68}, {"char": ["to"], "start_offset": 1296, "end_offset": 1299, "start": 103.68, "end": 103.92}, {"char": ["t"], "start_offset": 1299, "end_offset": 1302, "start": 103.92, "end": 104.16}, {"char": ["i"], "start_offset": 1302, "end_offset": 1304, "start": 104.16, "end": 104.32000000000001}, {"char": ["pp"], "start_offset": 1304, "end_offset": 1305, "start": 104.32000000000001, "end": 104.4}, {"char": ["er"], "start_offset": 1305, "end_offset": 1307, "start": 104.4, "end": 104.56}, {"char": ["y"], "start_offset": 1322, "end_offset": 1326, "start": 105.76, "end": 106.08}, {"char": ["."], "start_offset": 1326, "end_offset": 1326, "start": 106.08, "end": 106.08}, {"char": ["But"], "start_offset": 1330, "end_offset": 1334, "start": 106.4, "end": 106.72}, {"char": ["my"], "start_offset": 1334, "end_offset": 1338, "start": 106.72, "end": 107.04}, {"char": ["he"], "start_offset": 1342, "end_offset": 1346, "start": 107.36, "end": 107.68}, {"char": ["art"], "start_offset": 1346, "end_offset": 1350, "start": 107.68, "end": 108.0}, {"char": ["'"], "start_offset": 1350, "end_offset": 1350, "start": 108.0, "end": 108.0}, {"char": ["s"], "start_offset": 1353, "end_offset": 1357, "start": 108.24000000000001, "end": 108.56}, {"char": ["right"], "start_offset": 1357, "end_offset": 1361, "start": 108.56, "end": 108.88}, {"char": ["there"], "start_offset": 1365, "end_offset": 1369, "start": 109.2, "end": 109.52}, {"char": ["."], "start_offset": 1369, "end_offset": 1369, "start": 109.52, "end": 109.52}, {"char": ["It"], "start_offset": 1385, "end_offset": 1387, "start": 110.8, "end": 110.96000000000001}, {"char": ["'"], "start_offset": 1387, "end_offset": 1387, "start": 110.96000000000001, "end": 110.96000000000001}, {"char": ["s"], "start_offset": 1390, "end_offset": 1390, "start": 111.2, "end": 111.2}, {"char": ["a"], "start_offset": 1390, "end_offset": 1394, "start": 111.2, "end": 111.52}, {"char": ["long"], "start_offset": 1394, "end_offset": 1398, "start": 111.52, "end": 111.84}, {"char": ["way"], "start_offset": 1398, "end_offset": 1402, "start": 111.84, "end": 112.16}, {"char": ["to"], "start_offset": 1405, "end_offset": 1409, "start": 112.4, "end": 112.72}, {"char": ["t"], "start_offset": 1409, "end_offset": 1411, "start": 112.72, "end": 112.88}, {"char": ["i"], "start_offset": 1411, "end_offset": 1413, "start": 112.88, "end": 113.04}, {"char": ["pp"], "start_offset": 1413, "end_offset": 1414, "start": 113.04, "end": 113.12}, {"char": ["er"], "start_offset": 1416, "end_offset": 1418, "start": 113.28, "end": 113.44}, {"char": ["ary"], "start_offset": 1420, "end_offset": 1423, "start": 113.60000000000001, "end": 113.84}, {"char": ["."], "start_offset": 1423, "end_offset": 1423, "start": 113.84, "end": 113.84}, {"char": ["It"], "start_offset": 1439, "end_offset": 1441, "start": 115.12, "end": 115.28}, {"char": ["'"], "start_offset": 1441, "end_offset": 1441, "start": 115.28, "end": 115.28}, {"char": ["s"], "start_offset": 1444, "end_offset": 1444, "start": 115.52, "end": 115.52}, {"char": ["a"], "start_offset": 1444, "end_offset": 1448, "start": 115.52, "end": 115.84}, {"char": ["long"], "start_offset": 1448, "end_offset": 1452, "start": 115.84, "end": 116.16}, {"char": ["way"], "start_offset": 1456, "end_offset": 1460, "start": 116.48, "end": 116.8}, {"char": ["to"], "start_offset": 1464, "end_offset": 1467, "start": 117.12, "end": 117.36}, {"char": ["go"], "start_offset": 1475, "end_offset": 1479, "start": 118.0, "end": 118.32000000000001}, {"char": ["."], "start_offset": 1479, "end_offset": 1479, "start": 118.32000000000001, "end": 118.32000000000001}, {"char": ["It"], "start_offset": 1494, "end_offset": 1496, "start": 119.52, "end": 119.68}, {"char": ["'"], "start_offset": 1496, "end_offset": 1496, "start": 119.68, "end": 119.68}, {"char": ["s"], "start_offset": 1500, "end_offset": 1500, "start": 120.0, "end": 120.0}, {"char": ["a"], "start_offset": 1500, "end_offset": 1504, "start": 120.0, "end": 120.32000000000001}, {"char": ["long"], "start_offset": 1504, "end_offset": 1508, "start": 120.32000000000001, "end": 120.64}, {"char": ["way"], "start_offset": 1508, "end_offset": 1512, "start": 120.64, "end": 120.96000000000001}, {"char": ["to"], "start_offset": 1515, "end_offset": 1519, "start": 121.2, "end": 121.52}, {"char": ["t"], "start_offset": 1519, "end_offset": 1521, "start": 121.52, "end": 121.68}, {"char": ["i"], "start_offset": 1521, "end_offset": 1523, "start": 121.68, "end": 121.84}, {"char": ["pp"], "start_offset": 1523, "end_offset": 1524, "start": 121.84, "end": 121.92}, {"char": ["er"], "start_offset": 1524, "end_offset": 1526, "start": 121.92, "end": 122.08}, {"char": ["y"], "start_offset": 1537, "end_offset": 1540, "start": 122.96000000000001, "end": 123.2}, {"char": ["to"], "start_offset": 1548, "end_offset": 1552, "start": 123.84, "end": 124.16}, {"char": ["the"], "start_offset": 1552, "end_offset": 1555, "start": 124.16, "end": 124.4}, {"char": ["s"], "start_offset": 1555, "end_offset": 1558, "start": 124.4, "end": 124.64}, {"char": ["we"], "start_offset": 1558, "end_offset": 1562, "start": 124.64, "end": 124.96000000000001}, {"char": ["et"], "start_offset": 1562, "end_offset": 1565, "start": 124.96000000000001, "end": 125.2}, {"char": ["est"], "start_offset": 1565, "end_offset": 1569, "start": 125.2, "end": 125.52}, {"char": ["g"], "start_offset": 1572, "end_offset": 1575, "start": 125.76, "end": 126.0}, {"char": ["ir"], "start_offset": 1575, "end_offset": 1578, "start": 126.0, "end": 126.24000000000001}, {"char": ["l"], "start_offset": 1578, "end_offset": 1582, "start": 126.24000000000001, "end": 126.56}, {"char": ["I"], "start_offset": 1582, "end_offset": 1586, "start": 126.56, "end": 126.88000000000001}, {"char": ["know"], "start_offset": 1586, "end_offset": 1590, "start": 126.88000000000001, "end": 127.2}, {"char": ["."], "start_offset": 1590, "end_offset": 1590, "start": 127.2, "end": 127.2}, {"char": ["G"], "start_offset": 1610, "end_offset": 1612, "start": 128.8, "end": 128.96}, {"char": ["ood"], "start_offset": 1612, "end_offset": 1616, "start": 128.96, "end": 129.28}, {"char": ["b"], "start_offset": 1616, "end_offset": 1619, "start": 129.28, "end": 129.52}, {"char": ["y"], "start_offset": 1619, "end_offset": 1623, "start": 129.52, "end": 129.84}, {"char": ["e"], "start_offset": 1623, "end_offset": 1626, "start": 129.84, "end": 130.08}, {"char": [","], "start_offset": 1626, "end_offset": 1626, "start": 130.08, "end": 130.08}, {"char": ["P"], "start_offset": 1629, "end_offset": 1631, "start": 130.32, "end": 130.48}, {"char": ["ic"], "start_offset": 1631, "end_offset": 1634, "start": 130.48, "end": 130.72}, {"char": ["c"], "start_offset": 1634, "end_offset": 1635, "start": 130.72, "end": 130.8}, {"char": ["ad"], "start_offset": 1635, "end_offset": 1637, "start": 130.8, "end": 130.96}, {"char": ["ill"], "start_offset": 1639, "end_offset": 1642, "start": 131.12, "end": 131.36}, {"char": ["y"], "start_offset": 1642, "end_offset": 1646, "start": 131.36, "end": 131.68}, {"char": ["."], "start_offset": 1646, "end_offset": 1646, "start": 131.68, "end": 131.68}, {"char": ["F"], "start_offset": 1665, "end_offset": 1668, "start": 133.2, "end": 133.44}, {"char": ["are"], "start_offset": 1668, "end_offset": 1672, "start": 133.44, "end": 133.76}, {"char": ["we"], "start_offset": 1672, "end_offset": 1675, "start": 133.76, "end": 134.0}, {"char": ["ll"], "start_offset": 1675, "end_offset": 1678, "start": 134.0, "end": 134.24}, {"char": [","], "start_offset": 1678, "end_offset": 1678, "start": 134.24, "end": 134.24}, {"char": ["L"], "start_offset": 1681, "end_offset": 1683, "start": 134.48, "end": 134.64000000000001}, {"char": ["e"], "start_offset": 1683, "end_offset": 1685, "start": 134.64000000000001, "end": 134.8}, {"char": ["ic"], "start_offset": 1685, "end_offset": 1687, "start": 134.8, "end": 134.96}, {"char": ["es"], "start_offset": 1687, "end_offset": 1689, "start": 134.96, "end": 135.12}, {"char": ["ter"], "start_offset": 1689, "end_offset": 1691, "start": 135.12, "end": 135.28}, {"char": ["S"], "start_offset": 1693, "end_offset": 1696, "start": 135.44, "end": 135.68}, {"char": ["qu"], "start_offset": 1696, "end_offset": 1700, "start": 135.68, "end": 136.0}, {"char": ["are"], "start_offset": 1700, "end_offset": 1704, "start": 136.0, "end": 136.32}, {"char": ["."], "start_offset": 1704, "end_offset": 1704, "start": 136.32, "end": 136.32}, {"char": ["It"], "start_offset": 1714, "end_offset": 1716, "start": 137.12, "end": 137.28}, {"char": ["'"], "start_offset": 1716, "end_offset": 1716, "start": 137.28, "end": 137.28}, {"char": ["s"], "start_offset": 1718, "end_offset": 1718, "start": 137.44, "end": 137.44}, {"char": ["a"], "start_offset": 1718, "end_offset": 1721, "start": 137.44, "end": 137.68}, {"char": ["long"], "start_offset": 1721, "end_offset": 1724, "start": 137.68, "end": 137.92000000000002}, {"char": [","], "start_offset": 1724, "end_offset": 1724, "start": 137.92000000000002, "end": 137.92000000000002}, {"char": ["long"], "start_offset": 1728, "end_offset": 1732, "start": 138.24, "end": 138.56}, {"char": ["way"], "start_offset": 1732, "end_offset": 1736, "start": 138.56, "end": 138.88}, {"char": ["to"], "start_offset": 1736, "end_offset": 1739, "start": 138.88, "end": 139.12}, {"char": ["T"], "start_offset": 1739, "end_offset": 1741, "start": 139.12, "end": 139.28}, {"char": ["i"], "start_offset": 1741, "end_offset": 1743, "start": 139.28, "end": 139.44}, {"char": ["pp"], "start_offset": 1743, "end_offset": 1744, "start": 139.44, "end": 139.52}, {"char": ["er"], "start_offset": 1746, "end_offset": 1748, "start": 139.68, "end": 139.84}, {"char": ["ary"], "start_offset": 1750, "end_offset": 1753, "start": 140.0, "end": 140.24}, {"char": ["."], "start_offset": 1753, "end_offset": 1753, "start": 140.24, "end": 140.24}, {"char": ["But"], "start_offset": 1770, "end_offset": 1773, "start": 141.6, "end": 141.84}, {"char": ["my"], "start_offset": 1776, "end_offset": 1780, "start": 142.08, "end": 142.4}, {"char": ["he"], "start_offset": 1784, "end_offset": 1788, "start": 142.72, "end": 143.04}, {"char": ["art"], "start_offset": 1788, "end_offset": 1792, "start": 143.04, "end": 143.36}, {"char": ["'"], "start_offset": 1792, "end_offset": 1792, "start": 143.36, "end": 143.36}, {"char": ["s"], "start_offset": 1796, "end_offset": 1800, "start": 143.68, "end": 144.0}, {"char": ["right"], "start_offset": 1800, "end_offset": 1804, "start": 144.0, "end": 144.32}, {"char": ["there"], "start_offset": 1804, "end_offset": 1808, "start": 144.32, "end": 144.64000000000001}, {"char": ["."], "start_offset": 1808, "end_offset": 1808, "start": 144.64000000000001, "end": 144.64000000000001}], "word": [{"word": "It's", "start_offset": 62, "end_offset": 69, "start": 4.96, "end": 5.5200000000000005, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 69, "end_offset": 73, "start": 5.5200000000000005, "end": 5.84, "phoneme": "\u0259|_"}, {"word": "long", "start_offset": 73, "end_offset": 77, "start": 5.84, "end": 6.16, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 77, "end_offset": 81, "start": 6.16, "end": 6.48, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 84, "end_offset": 88, "start": 6.72, "end": 7.04, "phoneme": "tu\u02d0|_"}, {"word": "tippery.", "start_offset": 88, "end_offset": 107, "start": 7.04, "end": 8.56, "phoneme": "t\u026ap\u025di."}, {"word": "It's", "start_offset": 118, "end_offset": 123, "start": 9.44, "end": 9.84, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 123, "end_offset": 127, "start": 9.84, "end": 10.16, "phoneme": "\u0259|_"}, {"word": "long", "start_offset": 127, "end_offset": 131, "start": 10.16, "end": 10.48, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 135, "end_offset": 139, "start": 10.8, "end": 11.120000000000001, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 143, "end_offset": 147, "start": 11.44, "end": 11.76, "phoneme": "tu\u02d0|_"}, {"word": "go.", "start_offset": 155, "end_offset": 159, "start": 12.4, "end": 12.72, "phoneme": "go\u028a."}, {"word": "It's", "start_offset": 174, "end_offset": 179, "start": 13.92, "end": 14.32, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 179, "end_offset": 183, "start": 14.32, "end": 14.64, "phoneme": "\u0259|_"}, {"word": "long", "start_offset": 183, "end_offset": 187, "start": 14.64, "end": 14.96, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 187, "end_offset": 191, "start": 14.96, "end": 15.280000000000001, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 195, "end_offset": 198, "start": 15.6, "end": 15.84, "phoneme": "tu\u02d0|_"}, {"word": "tipperary", "start_offset": 198, "end_offset": 211, "start": 15.84, "end": 16.88, "phoneme": "t\u026ap\u025d\u025bri|_"}, {"word": "to", "start_offset": 227, "end_offset": 231, "start": 18.16, "end": 18.48, "phoneme": "tu\u02d0|_"}, {"word": "the", "start_offset": 231, "end_offset": 234, "start": 18.48, "end": 18.72, "phoneme": "\u00f0\u0259|_"}, {"word": "sweetest", "start_offset": 234, "end_offset": 248, "start": 18.72, "end": 19.84, "phoneme": "swi\u02d0t\u0259st|_"}, {"word": "girl", "start_offset": 248, "end_offset": 256, "start": 19.84, "end": 20.48, "phoneme": "g\u025d\u02d0l|_"}, {"word": "I", "start_offset": 258, "end_offset": 262, "start": 20.64, "end": 20.96, "phoneme": "a\u026a|_"}, {"word": "know.", "start_offset": 266, "end_offset": 270, "start": 21.28, "end": 21.6, "phoneme": "no\u028a."}, {"word": "Goodbye", "start_offset": 289, "end_offset": 305, "start": 23.12, "end": 24.400000000000002, "phoneme": "g\u028adba\u026a|_"}, {"word": "to", "start_offset": 305, "end_offset": 308, "start": 24.400000000000002, "end": 24.64, "phoneme": "tu\u02d0|_"}, {"word": "Piccadilly.", "start_offset": 308, "end_offset": 328, "start": 24.64, "end": 26.240000000000002, "phoneme": "p\u026ak\u0259d\u026ali."}, {"word": "Farewell,", "start_offset": 343, "end_offset": 355, "start": 27.44, "end": 28.400000000000002, "phoneme": "f\u025brw\u025bl,"}, {"word": "Leicester", "start_offset": 357, "end_offset": 369, "start": 28.560000000000002, "end": 29.52, "phoneme": "l\u025bst\u025d"}, {"word": "Square.", "start_offset": 369, "end_offset": 381, "start": 29.52, "end": 30.48, "phoneme": "skw\u025br."}, {"word": "It's", "start_offset": 393, "end_offset": 397, "start": 31.44, "end": 31.76, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 397, "end_offset": 400, "start": 31.76, "end": 32.0, "phoneme": "\u0259|_"}, {"word": "long,", "start_offset": 400, "end_offset": 404, "start": 32.0, "end": 32.32, "phoneme": "l\u0254\u014b,"}, {"word": "long", "start_offset": 406, "end_offset": 408, "start": 32.480000000000004, "end": 32.64, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 412, "end_offset": 415, "start": 32.96, "end": 33.2, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 415, "end_offset": 419, "start": 33.2, "end": 33.52, "phoneme": "tu\u02d0|_"}, {"word": "tippery.", "start_offset": 419, "end_offset": 446, "start": 33.52, "end": 35.68, "phoneme": "t\u026ap\u025di."}, {"word": "But", "start_offset": 450, "end_offset": 454, "start": 36.0, "end": 36.32, "phoneme": "b\u028ct|_"}, {"word": "my", "start_offset": 454, "end_offset": 458, "start": 36.32, "end": 36.64, "phoneme": "ma\u026a|_"}, {"word": "heart's", "start_offset": 462, "end_offset": 477, "start": 36.96, "end": 38.160000000000004, "phoneme": "h\u0251\u02d0rts|_"}, {"word": "right", "start_offset": 477, "end_offset": 481, "start": 38.160000000000004, "end": 38.480000000000004, "phoneme": "ra\u026at|_"}, {"word": "there.", "start_offset": 484, "end_offset": 488, "start": 38.72, "end": 39.04, "phoneme": "\u00f0\u025br."}, {"word": "Pack", "start_offset": 512, "end_offset": 517, "start": 40.96, "end": 41.36, "phoneme": "p\u00e6k|_"}, {"word": "up", "start_offset": 517, "end_offset": 520, "start": 41.36, "end": 41.6, "phoneme": "\u028cp|_"}, {"word": "your", "start_offset": 520, "end_offset": 523, "start": 41.6, "end": 41.84, "phoneme": "j\u0254r"}, {"word": "troubles", "start_offset": 523, "end_offset": 531, "start": 41.84, "end": 42.480000000000004, "phoneme": "tr\u028cb\u0259lz"}, {"word": "in", "start_offset": 531, "end_offset": 534, "start": 42.480000000000004, "end": 42.72, "phoneme": "\u026an|_"}, {"word": "your", "start_offset": 534, "end_offset": 537, "start": 42.72, "end": 42.96, "phoneme": "j\u0254r"}, {"word": "old", "start_offset": 537, "end_offset": 542, "start": 42.96, "end": 43.36, "phoneme": "o\u028ald"}, {"word": "kits", "start_offset": 542, "end_offset": 549, "start": 43.36, "end": 43.92, "phoneme": "k\u026ats|_"}, {"word": "bag", "start_offset": 551, "end_offset": 559, "start": 44.08, "end": 44.72, "phoneme": "b\u00e6g"}, {"word": "and", "start_offset": 559, "end_offset": 563, "start": 44.72, "end": 45.04, "phoneme": "\u0259nd"}, {"word": "smile,", "start_offset": 563, "end_offset": 570, "start": 45.04, "end": 45.6, "phoneme": "sma\u026al,"}, {"word": "smile,", "start_offset": 577, "end_offset": 585, "start": 46.160000000000004, "end": 46.800000000000004, "phoneme": "sma\u026al,"}, {"word": "smile.", "start_offset": 591, "end_offset": 599, "start": 47.28, "end": 47.92, "phoneme": "sma\u026al."}, {"word": "While", "start_offset": 621, "end_offset": 625, "start": 49.68, "end": 50.0, "phoneme": "wa\u026al|_"}, {"word": "you", "start_offset": 625, "end_offset": 628, "start": 50.0, "end": 50.24, "phoneme": "ju\u02d0|_"}, {"word": "the", "start_offset": 630, "end_offset": 631, "start": 50.4, "end": 50.480000000000004, "phoneme": "\u00f0\u0259|_"}, {"word": "Lucifer", "start_offset": 633, "end_offset": 642, "start": 50.64, "end": 51.36, "phoneme": "lu\u02d0s\u0259f\u025d"}, {"word": "delight", "start_offset": 643, "end_offset": 650, "start": 51.44, "end": 52.0, "phoneme": "d\u026ala\u026at|_"}, {"word": "your", "start_offset": 654, "end_offset": 656, "start": 52.32, "end": 52.480000000000004, "phoneme": "j\u0254r"}, {"word": "fag", "start_offset": 660, "end_offset": 667, "start": 52.800000000000004, "end": 53.36, "phoneme": "f\u00e6g"}, {"word": "smile,", "start_offset": 674, "end_offset": 680, "start": 53.92, "end": 54.4, "phoneme": "sma\u026al,"}, {"word": "boys,", "start_offset": 681, "end_offset": 687, "start": 54.480000000000004, "end": 54.96, "phoneme": "b\u0254\u026az,"}, {"word": "that's", "start_offset": 689, "end_offset": 698, "start": 55.120000000000005, "end": 55.84, "phoneme": "\u03b8\u00e6ts|_"}, {"word": "the", "start_offset": 698, "end_offset": 702, "start": 55.84, "end": 56.160000000000004, "phoneme": "\u00f0\u0259|_"}, {"word": "style.", "start_offset": 702, "end_offset": 714, "start": 56.160000000000004, "end": 57.120000000000005, "phoneme": "sta\u026al."}, {"word": "What's", "start_offset": 731, "end_offset": 743, "start": 58.480000000000004, "end": 59.44, "phoneme": "w\u0259ts|_"}, {"word": "the", "start_offset": 743, "end_offset": 747, "start": 59.44, "end": 59.76, "phoneme": "\u00f0\u0259|_"}, {"word": "use", "start_offset": 747, "end_offset": 751, "start": 59.76, "end": 60.08, "phoneme": "ju\u02d0s|_"}, {"word": "of", "start_offset": 751, "end_offset": 755, "start": 60.08, "end": 60.4, "phoneme": "\u028cv"}, {"word": "worrying?", "start_offset": 755, "end_offset": 769, "start": 60.4, "end": 61.52, "phoneme": "w\u025d\u02d0i\u02d0\u026a\u014b?"}, {"word": "It", "start_offset": 780, "end_offset": 784, "start": 62.4, "end": 62.72, "phoneme": "\u026at|_"}, {"word": "never", "start_offset": 788, "end_offset": 792, "start": 63.04, "end": 63.36, "phoneme": "n\u025bv\u025d"}, {"word": "was", "start_offset": 796, "end_offset": 800, "start": 63.68, "end": 64.0, "phoneme": "w\u0251\u02d0z"}, {"word": "worthwhile.", "start_offset": 804, "end_offset": 820, "start": 64.32000000000001, "end": 65.6, "phoneme": "w\u025d\u02d0\u03b8wa\u026al."}, {"word": "So", "start_offset": 828, "end_offset": 831, "start": 66.24, "end": 66.48, "phoneme": "so\u028a|_"}, {"word": "pack", "start_offset": 837, "end_offset": 845, "start": 66.96000000000001, "end": 67.6, "phoneme": "p\u00e6k|_"}, {"word": "up", "start_offset": 845, "end_offset": 849, "start": 67.6, "end": 67.92, "phoneme": "\u028cp|_"}, {"word": "your", "start_offset": 849, "end_offset": 852, "start": 67.92, "end": 68.16, "phoneme": "j\u0254r"}, {"word": "troubles", "start_offset": 852, "end_offset": 861, "start": 68.16, "end": 68.88, "phoneme": "tr\u028cb\u0259lz"}, {"word": "in", "start_offset": 861, "end_offset": 864, "start": 68.88, "end": 69.12, "phoneme": "\u026an|_"}, {"word": "your", "start_offset": 864, "end_offset": 867, "start": 69.12, "end": 69.36, "phoneme": "j\u0254r"}, {"word": "old", "start_offset": 867, "end_offset": 873, "start": 69.36, "end": 69.84, "phoneme": "o\u028ald"}, {"word": "kit's", "start_offset": 873, "end_offset": 882, "start": 69.84, "end": 70.56, "phoneme": "k\u026ats|_"}, {"word": "bag", "start_offset": 882, "end_offset": 888, "start": 70.56, "end": 71.04, "phoneme": "b\u00e6g"}, {"word": "and", "start_offset": 890, "end_offset": 894, "start": 71.2, "end": 71.52, "phoneme": "\u0259nd"}, {"word": "smile,", "start_offset": 894, "end_offset": 902, "start": 71.52, "end": 72.16, "phoneme": "sma\u026al,"}, {"word": "smile,", "start_offset": 907, "end_offset": 915, "start": 72.56, "end": 73.2, "phoneme": "sma\u026al,"}, {"word": "smile.", "start_offset": 921, "end_offset": 929, "start": 73.68, "end": 74.32000000000001, "phoneme": "sma\u026al."}, {"word": "It's", "start_offset": 945, "end_offset": 951, "start": 75.60000000000001, "end": 76.08, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 951, "end_offset": 955, "start": 76.08, "end": 76.4, "phoneme": "\u0259|_"}, {"word": "long", "start_offset": 955, "end_offset": 959, "start": 76.4, "end": 76.72, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 959, "end_offset": 962, "start": 76.72, "end": 76.96000000000001, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 965, "end_offset": 968, "start": 77.2, "end": 77.44, "phoneme": "tu\u02d0|_"}, {"word": "tippery.", "start_offset": 968, "end_offset": 987, "start": 77.44, "end": 78.96000000000001, "phoneme": "t\u026ap\u025di."}, {"word": "It's", "start_offset": 999, "end_offset": 1006, "start": 79.92, "end": 80.48, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 1006, "end_offset": 1010, "start": 80.48, "end": 80.8, "phoneme": "\u0259|_"}, {"word": "long", "start_offset": 1010, "end_offset": 1014, "start": 80.8, "end": 81.12, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 1014, "end_offset": 1018, "start": 81.12, "end": 81.44, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 1026, "end_offset": 1030, "start": 82.08, "end": 82.4, "phoneme": "tu\u02d0|_"}, {"word": "go.", "start_offset": 1034, "end_offset": 1038, "start": 82.72, "end": 83.04, "phoneme": "go\u028a."}, {"word": "It's", "start_offset": 1054, "end_offset": 1060, "start": 84.32000000000001, "end": 84.8, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 1060, "end_offset": 1064, "start": 84.8, "end": 85.12, "phoneme": "\u0259|_"}, {"word": "long", "start_offset": 1064, "end_offset": 1068, "start": 85.12, "end": 85.44, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 1068, "end_offset": 1072, "start": 85.44, "end": 85.76, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 1074, "end_offset": 1078, "start": 85.92, "end": 86.24, "phoneme": "tu\u02d0|_"}, {"word": "tippery", "start_offset": 1078, "end_offset": 1097, "start": 86.24, "end": 87.76, "phoneme": "t\u026ap\u025di|_"}, {"word": "to", "start_offset": 1108, "end_offset": 1111, "start": 88.64, "end": 88.88, "phoneme": "tu\u02d0|_"}, {"word": "the", "start_offset": 1111, "end_offset": 1115, "start": 88.88, "end": 89.2, "phoneme": "\u00f0\u0259|_"}, {"word": "sweetest", "start_offset": 1115, "end_offset": 1129, "start": 89.2, "end": 90.32000000000001, "phoneme": "swi\u02d0t\u0259st|_"}, {"word": "girl", "start_offset": 1129, "end_offset": 1138, "start": 90.32000000000001, "end": 91.04, "phoneme": "g\u025d\u02d0l|_"}, {"word": "I", "start_offset": 1138, "end_offset": 1142, "start": 91.04, "end": 91.36, "phoneme": "a\u026a|_"}, {"word": "know.", "start_offset": 1146, "end_offset": 1150, "start": 91.68, "end": 92.0, "phoneme": "no\u028a."}, {"word": "Goodbye", "start_offset": 1170, "end_offset": 1185, "start": 93.60000000000001, "end": 94.8, "phoneme": "g\u028adba\u026a|_"}, {"word": "to", "start_offset": 1185, "end_offset": 1188, "start": 94.8, "end": 95.04, "phoneme": "tu\u02d0|_"}, {"word": "Piccadilly.", "start_offset": 1188, "end_offset": 1206, "start": 95.04, "end": 96.48, "phoneme": "p\u026ak\u0259d\u026ali."}, {"word": "Farewell,", "start_offset": 1225, "end_offset": 1235, "start": 98.0, "end": 98.8, "phoneme": "f\u025brw\u025bl,"}, {"word": "Leicester", "start_offset": 1238, "end_offset": 1250, "start": 99.04, "end": 100.0, "phoneme": "l\u025bst\u025d"}, {"word": "Square.", "start_offset": 1250, "end_offset": 1262, "start": 100.0, "end": 100.96000000000001, "phoneme": "skw\u025br."}, {"word": "It's", "start_offset": 1274, "end_offset": 1279, "start": 101.92, "end": 102.32000000000001, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 1279, "end_offset": 1281, "start": 102.32000000000001, "end": 102.48, "phoneme": "\u0259|_"}, {"word": "long,", "start_offset": 1281, "end_offset": 1284, "start": 102.48, "end": 102.72, "phoneme": "l\u0254\u014b,"}, {"word": "long", "start_offset": 1287, "end_offset": 1289, "start": 102.96000000000001, "end": 103.12, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 1293, "end_offset": 1296, "start": 103.44, "end": 103.68, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 1296, "end_offset": 1299, "start": 103.68, "end": 103.92, "phoneme": "tu\u02d0|_"}, {"word": "tippery.", "start_offset": 1299, "end_offset": 1326, "start": 103.92, "end": 106.08, "phoneme": "t\u026ap\u025di."}, {"word": "But", "start_offset": 1330, "end_offset": 1334, "start": 106.4, "end": 106.72, "phoneme": "b\u028ct|_"}, {"word": "my", "start_offset": 1334, "end_offset": 1338, "start": 106.72, "end": 107.04, "phoneme": "ma\u026a|_"}, {"word": "heart's", "start_offset": 1342, "end_offset": 1357, "start": 107.36, "end": 108.56, "phoneme": "h\u0251\u02d0rts|_"}, {"word": "right", "start_offset": 1357, "end_offset": 1361, "start": 108.56, "end": 108.88, "phoneme": "ra\u026at|_"}, {"word": "there.", "start_offset": 1365, "end_offset": 1369, "start": 109.2, "end": 109.52, "phoneme": "\u00f0\u025br."}, {"word": "It's", "start_offset": 1385, "end_offset": 1390, "start": 110.8, "end": 111.2, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 1390, "end_offset": 1394, "start": 111.2, "end": 111.52, "phoneme": "\u0259|_"}, {"word": "long", "start_offset": 1394, "end_offset": 1398, "start": 111.52, "end": 111.84, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 1398, "end_offset": 1402, "start": 111.84, "end": 112.16, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 1405, "end_offset": 1409, "start": 112.4, "end": 112.72, "phoneme": "tu\u02d0|_"}, {"word": "tipperary.", "start_offset": 1409, "end_offset": 1423, "start": 112.72, "end": 113.84, "phoneme": "t\u026ap\u025d\u025bri."}, {"word": "It's", "start_offset": 1439, "end_offset": 1444, "start": 115.12, "end": 115.52, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 1444, "end_offset": 1448, "start": 115.52, "end": 115.84, "phoneme": "\u0259|_"}, {"word": "long", "start_offset": 1448, "end_offset": 1452, "start": 115.84, "end": 116.16, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 1456, "end_offset": 1460, "start": 116.48, "end": 116.8, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 1464, "end_offset": 1467, "start": 117.12, "end": 117.36, "phoneme": "tu\u02d0|_"}, {"word": "go.", "start_offset": 1475, "end_offset": 1479, "start": 118.0, "end": 118.32000000000001, "phoneme": "go\u028a."}, {"word": "It's", "start_offset": 1494, "end_offset": 1500, "start": 119.52, "end": 120.0, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 1500, "end_offset": 1504, "start": 120.0, "end": 120.32000000000001, "phoneme": "\u0259|_"}, {"word": "long", "start_offset": 1504, "end_offset": 1508, "start": 120.32000000000001, "end": 120.64, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 1508, "end_offset": 1512, "start": 120.64, "end": 120.96000000000001, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 1515, "end_offset": 1519, "start": 121.2, "end": 121.52, "phoneme": "tu\u02d0|_"}, {"word": "tippery", "start_offset": 1519, "end_offset": 1540, "start": 121.52, "end": 123.2, "phoneme": "t\u026ap\u025di|_"}, {"word": "to", "start_offset": 1548, "end_offset": 1552, "start": 123.84, "end": 124.16, "phoneme": "tu\u02d0|_"}, {"word": "the", "start_offset": 1552, "end_offset": 1555, "start": 124.16, "end": 124.4, "phoneme": "\u00f0\u0259|_"}, {"word": "sweetest", "start_offset": 1555, "end_offset": 1569, "start": 124.4, "end": 125.52, "phoneme": "swi\u02d0t\u0259st|_"}, {"word": "girl", "start_offset": 1572, "end_offset": 1582, "start": 125.76, "end": 126.56, "phoneme": "g\u025d\u02d0l|_"}, {"word": "I", "start_offset": 1582, "end_offset": 1586, "start": 126.56, "end": 126.88000000000001, "phoneme": "a\u026a|_"}, {"word": "know.", "start_offset": 1586, "end_offset": 1590, "start": 126.88000000000001, "end": 127.2, "phoneme": "no\u028a."}, {"word": "Goodbye,", "start_offset": 1610, "end_offset": 1626, "start": 128.8, "end": 130.08, "phoneme": "g\u028adba\u026a,"}, {"word": "Piccadilly.", "start_offset": 1629, "end_offset": 1646, "start": 130.32, "end": 131.68, "phoneme": "p\u026ak\u0259d\u026ali."}, {"word": "Farewell,", "start_offset": 1665, "end_offset": 1678, "start": 133.2, "end": 134.24, "phoneme": "f\u025brw\u025bl,"}, {"word": "Leicester", "start_offset": 1681, "end_offset": 1691, "start": 134.48, "end": 135.28, "phoneme": "l\u025bst\u025d"}, {"word": "Square.", "start_offset": 1693, "end_offset": 1704, "start": 135.44, "end": 136.32, "phoneme": "skw\u025br."}, {"word": "It's", "start_offset": 1714, "end_offset": 1718, "start": 137.12, "end": 137.44, "phoneme": "\u026ats|_"}, {"word": "a", "start_offset": 1718, "end_offset": 1721, "start": 137.44, "end": 137.68, "phoneme": "\u0259|_"}, {"word": "long,", "start_offset": 1721, "end_offset": 1724, "start": 137.68, "end": 137.92000000000002, "phoneme": "l\u0254\u014b,"}, {"word": "long", "start_offset": 1728, "end_offset": 1732, "start": 138.24, "end": 138.56, "phoneme": "l\u0254\u014b|_"}, {"word": "way", "start_offset": 1732, "end_offset": 1736, "start": 138.56, "end": 138.88, "phoneme": "we\u026a|_"}, {"word": "to", "start_offset": 1736, "end_offset": 1739, "start": 138.88, "end": 139.12, "phoneme": "tu\u02d0|_"}, {"word": "Tipperary.", "start_offset": 1739, "end_offset": 1753, "start": 139.12, "end": 140.24, "phoneme": "t\u026ap\u025d\u025bri."}, {"word": "But", "start_offset": 1770, "end_offset": 1773, "start": 141.6, "end": 141.84, "phoneme": "b\u028ct|_"}, {"word": "my", "start_offset": 1776, "end_offset": 1780, "start": 142.08, "end": 142.4, "phoneme": "ma\u026a|_"}, {"word": "heart's", "start_offset": 1784, "end_offset": 1800, "start": 142.72, "end": 144.0, "phoneme": "h\u0251\u02d0rts|_"}, {"word": "right", "start_offset": 1800, "end_offset": 1804, "start": 144.0, "end": 144.32, "phoneme": "ra\u026at|_"}, {"word": "there.", "start_offset": 1804, "end_offset": 1808, "start": 144.32, "end": 144.64000000000001, "phoneme": "\u00f0\u025br."}], "segment": [{"segment": "It's a long way to tippery.", "start_offset": 62, "end_offset": 107, "start": 4.96, "end": 8.56}, {"segment": "It's a long way to go.", "start_offset": 118, "end_offset": 159, "start": 9.44, "end": 12.72}, {"segment": "It's a long way to tipperary to the sweetest girl I know.", "start_offset": 174, "end_offset": 270, "start": 13.92, "end": 21.6}, {"segment": "Goodbye to Piccadilly.", "start_offset": 289, "end_offset": 328, "start": 23.12, "end": 26.240000000000002}, {"segment": "Farewell, Leicester Square.", "start_offset": 343, "end_offset": 381, "start": 27.44, "end": 30.48}, {"segment": "It's a long, long way to tippery.", "start_offset": 393, "end_offset": 446, "start": 31.44, "end": 35.68}, {"segment": "But my heart's right there.", "start_offset": 450, "end_offset": 488, "start": 36.0, "end": 39.04}, {"segment": "Pack up your troubles in your old kits bag and smile, smile, smile.", "start_offset": 512, "end_offset": 599, "start": 40.96, "end": 47.92}, {"segment": "While you the Lucifer delight your fag smile, boys, that's the style.", "start_offset": 621, "end_offset": 714, "start": 49.68, "end": 57.120000000000005}, {"segment": "What's the use of worrying?", "start_offset": 731, "end_offset": 769, "start": 58.480000000000004, "end": 61.52}, {"segment": "It never was worthwhile.", "start_offset": 780, "end_offset": 820, "start": 62.4, "end": 65.6}, {"segment": "So pack up your troubles in your old kit's bag and smile, smile, smile.", "start_offset": 828, "end_offset": 929, "start": 66.24, "end": 74.32000000000001}, {"segment": "It's a long way to tippery.", "start_offset": 945, "end_offset": 987, "start": 75.60000000000001, "end": 78.96000000000001}, {"segment": "It's a long way to go.", "start_offset": 999, "end_offset": 1038, "start": 79.92, "end": 83.04}, {"segment": "It's a long way to tippery to the sweetest girl I know.", "start_offset": 1054, "end_offset": 1150, "start": 84.32000000000001, "end": 92.0}, {"segment": "Goodbye to Piccadilly.", "start_offset": 1170, "end_offset": 1206, "start": 93.60000000000001, "end": 96.48}, {"segment": "Farewell, Leicester Square.", "start_offset": 1225, "end_offset": 1262, "start": 98.0, "end": 100.96000000000001}, {"segment": "It's a long, long way to tippery.", "start_offset": 1274, "end_offset": 1326, "start": 101.92, "end": 106.08}, {"segment": "But my heart's right there.", "start_offset": 1330, "end_offset": 1369, "start": 106.4, "end": 109.52}, {"segment": "It's a long way to tipperary.", "start_offset": 1385, "end_offset": 1423, "start": 110.8, "end": 113.84}, {"segment": "It's a long way to go.", "start_offset": 1439, "end_offset": 1479, "start": 115.12, "end": 118.32000000000001}, {"segment": "It's a long way to tippery to the sweetest girl I know.", "start_offset": 1494, "end_offset": 1590, "start": 119.52, "end": 127.2}, {"segment": "Goodbye, Piccadilly.", "start_offset": 1610, "end_offset": 1646, "start": 128.8, "end": 131.68}, {"segment": "Farewell, Leicester Square.", "start_offset": 1665, "end_offset": 1704, "start": 133.2, "end": 136.32}, {"segment": "It's a long, long way to Tipperary.", "start_offset": 1714, "end_offset": 1753, "start": 137.12, "end": 140.24}, {"segment": "But my heart's right there.", "start_offset": 1770, "end_offset": 1808, "start": 141.6, "end": 144.64000000000001}]}
|
examples/1442432310/reference_audio.mp3
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d81e66e3dfde567978fcc759d634d48afc29c533a637c4e2fbbffddf780d34fa
|
3 |
+
size 5991489
|
examples/input.json
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"id": "1442432310",
|
4 |
+
"audio_path": "examples/1442432310/reference_audio.mp3",
|
5 |
+
"lrc_path": "examples/1442432310/lyrics.json",
|
6 |
+
"duration": 150
|
7 |
+
}
|
8 |
+
]
|
requirements.txt
CHANGED
@@ -16,6 +16,7 @@ librosa
|
|
16 |
jiwer
|
17 |
demucs
|
18 |
audiobox-aesthetics
|
|
|
19 |
|
20 |
# WebDataset
|
21 |
webdataset
|
|
|
16 |
jiwer
|
17 |
demucs
|
18 |
audiobox-aesthetics
|
19 |
+
transformers==4.53.0
|
20 |
|
21 |
# WebDataset
|
22 |
webdataset
|
utils.py
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
def regroup_words(
|
3 |
+
words: list[dict],
|
4 |
+
max_len: float = 15.0,
|
5 |
+
gap: float = 0.50,
|
6 |
+
) -> list[dict]:
|
7 |
+
"""
|
8 |
+
Returns a list of segments with keys:
|
9 |
+
'start', 'end', 'text', 'words'
|
10 |
+
"""
|
11 |
+
|
12 |
+
if not words:
|
13 |
+
return []
|
14 |
+
|
15 |
+
segs, seg_words = [], []
|
16 |
+
seg_start = words[0]["start"]
|
17 |
+
last_end = seg_start
|
18 |
+
|
19 |
+
for w in words:
|
20 |
+
over_max = (w["end"] - seg_start) > max_len
|
21 |
+
long_gap = (w["start"] - last_end) > gap
|
22 |
+
|
23 |
+
if (seg_words and (over_max or long_gap)):
|
24 |
+
segs.append({
|
25 |
+
"start": seg_start,
|
26 |
+
"end": last_end,
|
27 |
+
"segment": " ".join(x["word"] for x in seg_words),
|
28 |
+
})
|
29 |
+
seg_words = []
|
30 |
+
seg_start = w["start"]
|
31 |
+
|
32 |
+
seg_words.append(w)
|
33 |
+
last_end = w["end"]
|
34 |
+
|
35 |
+
# flush final segment
|
36 |
+
segs.append({
|
37 |
+
"start": seg_start,
|
38 |
+
"end": last_end,
|
39 |
+
"segment": " ".join(x["word"] for x in seg_words),
|
40 |
+
})
|
41 |
+
return segs
|
42 |
+
|
43 |
+
|
44 |
+
def text_to_words(text: str) -> list[dict]:
|
45 |
+
"""
|
46 |
+
Convert text format like "word[start:end] word[start:end]..." to word list.
|
47 |
+
|
48 |
+
Args:
|
49 |
+
text: String in format "It's[4.96:5.52] a[5.52:5.84] long[5.84:6.16]..."
|
50 |
+
|
51 |
+
Returns:
|
52 |
+
List of word dictionaries with keys: 'word', 'start', 'end'
|
53 |
+
"""
|
54 |
+
import re
|
55 |
+
|
56 |
+
if not text.strip():
|
57 |
+
return []
|
58 |
+
|
59 |
+
# Pattern to match word[start:end] format
|
60 |
+
pattern = r'(\S+?)\[([^:]+):([^\]]+)\]'
|
61 |
+
matches = re.findall(pattern, text)
|
62 |
+
|
63 |
+
words = []
|
64 |
+
for word, start_str, end_str in matches:
|
65 |
+
try:
|
66 |
+
start = float(start_str) if start_str != 'xxx' else 0.0
|
67 |
+
end = float(end_str) if end_str != 'xxx' else 0.0
|
68 |
+
words.append({
|
69 |
+
'word': word,
|
70 |
+
'start': start,
|
71 |
+
'end': end
|
72 |
+
})
|
73 |
+
except ValueError:
|
74 |
+
# Skip invalid entries
|
75 |
+
continue
|
76 |
+
|
77 |
+
return words
|
78 |
+
|
79 |
+
|
80 |
+
def words_to_text(words: list[dict]) -> str:
|
81 |
+
"""
|
82 |
+
Convert word list to text format "word[start:end] word[start:end]...".
|
83 |
+
|
84 |
+
Args:
|
85 |
+
words: List of word dictionaries with keys: 'word', 'start', 'end'
|
86 |
+
|
87 |
+
Returns:
|
88 |
+
String in format "It's[4.96:5.52] a[5.52:5.84] long[5.84:6.16]..."
|
89 |
+
"""
|
90 |
+
if not words:
|
91 |
+
return ""
|
92 |
+
|
93 |
+
text_parts = []
|
94 |
+
for word in words:
|
95 |
+
word_text = word.get('word', '')
|
96 |
+
start = word.get('start', 0.0)
|
97 |
+
end = word.get('end', 0.0)
|
98 |
+
text_parts.append(f"{word_text}[{start}:{end}]")
|
99 |
+
|
100 |
+
return " ".join(text_parts)
|
101 |
+
|
102 |
+
|
103 |
+
def json_to_text(json_data: dict) -> str:
|
104 |
+
"""
|
105 |
+
Convert JSON lyrics data to text format for display.
|
106 |
+
Only uses the 'word' layer from the JSON structure.
|
107 |
+
|
108 |
+
Args:
|
109 |
+
json_data: Dictionary with 'word' key containing list of word objects
|
110 |
+
|
111 |
+
Returns:
|
112 |
+
String in format "word[start:end] word[start:end]..."
|
113 |
+
"""
|
114 |
+
if not isinstance(json_data, dict) or 'word' not in json_data:
|
115 |
+
return ""
|
116 |
+
|
117 |
+
words = json_data['word']
|
118 |
+
return words_to_text(words)
|
119 |
+
|
120 |
+
|
121 |
+
def text_to_json(text: str) -> dict:
|
122 |
+
"""
|
123 |
+
Convert text format to JSON structure expected by the model.
|
124 |
+
Creates the 'word' layer that the model needs.
|
125 |
+
|
126 |
+
Args:
|
127 |
+
text: String in format "word[start:end] word[start:end]..."
|
128 |
+
|
129 |
+
Returns:
|
130 |
+
Dictionary with 'word' key containing list of word objects
|
131 |
+
"""
|
132 |
+
words = text_to_words(text)
|
133 |
+
return {"word": words}
|