renhang commited on
Commit
68f7846
·
2 Parent(s): 896881c e20edfd

Merge branch 'working' into pr/2

Browse files
.gitattributes CHANGED
@@ -1,37 +1,39 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
36
- colbert/indexes/arxiv_colbert/collection.json filter=lfs diff=lfs merge=lfs -text
37
- colbert/indexes/arxiv_colbert/docid_metadata_map.json filter=lfs diff=lfs merge=lfs -text
 
 
 
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, lyrics_file, style_prompt, duration):
39
  # We need to save the uploaded files to temporary paths to pass to the model
40
- reference_audio = reference_audio if reference_audio else None
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
- return output_path
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- #lyrics_file = gr.JSON(label="Lyrics File (.json)")
77
- #file = gr.File(label="Upload JSON File", file_types=[".json"])
78
- file_input = gr.File(file_types=["text"], file_count="single", label="Upload your text file here")
79
- output_text = gr.Textbox(label="File Content", lines=10)
80
-
81
- file_input.upload(parse, inputs=file_input, outputs=output_text)
82
- duration_slider = gr.Slider(minimum=5, maximum=300, value=30, step=1, label="Duration (seconds)")
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, output_text, style_prompt, duration_slider],
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}