renhang commited on
Commit
a7334d4
·
1 Parent(s): 054eb24

Intuitive UI

Browse files
Files changed (5) hide show
  1. app.py +104 -22
  2. examples/1442432310/lyrics.json +1 -0
  3. examples/input.json +8 -0
  4. requirements.txt +1 -0
  5. utils.py +133 -0
app.py CHANGED
@@ -1,9 +1,12 @@
1
  import spaces
2
  import gradio as gr
3
  import os
 
 
4
  from pathlib import Path
5
 
6
  from model import Jamify
 
7
 
8
  # Initialize the Jamify model once
9
  print("Initializing Jamify model...")
@@ -15,32 +18,106 @@ print("Jamify model ready.")
15
  gr.set_static_paths(paths=[Path.cwd().absolute()])
16
 
17
  @spaces.GPU(duration=100)
18
- def generate_song(reference_audio, lyrics_file, style_prompt, duration):
19
  # We need to save the uploaded files to temporary paths to pass to the model
20
  reference_audio = reference_audio not in ("", None) and reference_audio or None
21
 
 
 
 
 
 
 
 
22
 
23
- # The model expects paths, so we write the prompt to a temp file if needed
24
- # (This part of the model could be improved to accept the string directly)
 
 
 
 
 
 
 
 
 
 
25
 
26
- output_path = jamify_model.predict(
27
- reference_audio_path=reference_audio,
28
- lyrics_json_path=lyrics_file,
29
- style_prompt=style_prompt,
30
- duration_sec=duration
31
- )
32
 
33
- return output_path
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
  # Gradio interface
36
  with gr.Blocks() as demo:
37
  gr.Markdown("# Jamify: Music Generation from Lyrics and Style")
38
  gr.Markdown("Provide your lyrics, a style reference (either an audio file or a text prompt), and a desired duration to generate a song.")
39
 
 
 
 
 
 
 
 
 
 
40
  with gr.Row():
41
  with gr.Column():
42
  gr.Markdown("### Inputs")
43
- lyrics_file = gr.File(label="Lyrics File (.json)", type="filepath")
 
 
 
 
 
44
  duration_slider = gr.Slider(minimum=5, maximum=230, value=120, step=30, label="Duration (seconds)")
45
 
46
  with gr.Tab("Style from Audio"):
@@ -56,20 +133,25 @@ with gr.Blocks() as demo:
56
 
57
  generate_button.click(
58
  fn=generate_song,
59
- inputs=[reference_audio, lyrics_file, style_prompt, duration_slider],
60
  outputs=output_audio,
61
  api_name="generate_song"
62
  )
 
 
 
 
 
 
 
 
63
 
64
- gr.Markdown("### Example Usage")
65
- gr.Examples(
66
- examples=[
67
- ["", "gt0.json", "A sad, slow, acoustic country song", 260],
68
- ],
69
- inputs=[reference_audio, lyrics_file, style_prompt, duration_slider],
70
- outputs=output_audio,
71
- fn=generate_song,
72
- cache_examples=True
73
- )
74
 
75
  demo.queue().launch()
 
1
  import spaces
2
  import gradio as gr
3
  import os
4
+ import json
5
+ import tempfile
6
  from pathlib import Path
7
 
8
  from model import Jamify
9
+ from utils import json_to_text, text_to_json
10
 
11
  # Initialize the Jamify model once
12
  print("Initializing Jamify model...")
 
18
  gr.set_static_paths(paths=[Path.cwd().absolute()])
19
 
20
  @spaces.GPU(duration=100)
21
+ def generate_song(reference_audio, lyrics_text, style_prompt, duration):
22
  # We need to save the uploaded files to temporary paths to pass to the model
23
  reference_audio = reference_audio not in ("", None) and reference_audio or None
24
 
25
+ # Convert text format to JSON and save to temporary file
26
+ lyrics_json = text_to_json(lyrics_text)
27
+
28
+ # Create temporary file for lyrics JSON
29
+ with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
30
+ json.dump(lyrics_json, f, indent=2)
31
+ lyrics_file = f.name
32
 
33
+ try:
34
+ output_path = jamify_model.predict(
35
+ reference_audio_path=reference_audio,
36
+ lyrics_json_path=lyrics_file,
37
+ style_prompt=style_prompt,
38
+ duration_sec=duration
39
+ )
40
+ return output_path
41
+ finally:
42
+ # Clean up temporary file
43
+ if os.path.exists(lyrics_file):
44
+ os.unlink(lyrics_file)
45
 
46
+ # Load and cache examples
47
+ def load_examples():
48
+ """Load examples from the examples directory and pre-compute text formats"""
49
+ examples = []
50
+ examples_file = "examples/input.json"
 
51
 
52
+ if os.path.exists(examples_file):
53
+ print("Loading and caching examples...")
54
+ with open(examples_file, 'r') as f:
55
+ examples_data = json.load(f)
56
+
57
+ for example in examples_data:
58
+ example_id = example.get('id', '')
59
+ audio_path = example.get('audio_path', '')
60
+ lrc_path = example.get('lrc_path', '')
61
+ duration = example.get('duration', 120)
62
+
63
+ # Load lyrics and convert to text format (pre-computed/cached)
64
+ lyrics_text = ""
65
+ if os.path.exists(lrc_path):
66
+ try:
67
+ with open(lrc_path, 'r') as f:
68
+ lyrics_json = json.load(f)
69
+ lyrics_text = json_to_text(lyrics_json)
70
+ print(f"Cached example {example_id}: {len(lyrics_text)} chars")
71
+ except Exception as e:
72
+ print(f"Error loading lyrics from {lrc_path}: {e}")
73
+
74
+ examples.append({
75
+ 'id': example_id,
76
+ 'audio_path': audio_path if os.path.exists(audio_path) else None,
77
+ 'lyrics_text': lyrics_text,
78
+ 'duration': duration
79
+ })
80
+
81
+ print(f"Loaded {len(examples)} cached examples")
82
+ return examples
83
+
84
+ def load_example(example_idx, examples):
85
+ """Load a specific example and return its data"""
86
+ if 0 <= example_idx < len(examples):
87
+ example = examples[example_idx]
88
+ return (
89
+ example['audio_path'],
90
+ example['lyrics_text'],
91
+ example['duration']
92
+ )
93
+ return None, "", 120
94
+
95
+ # Load examples at startup
96
+ examples = load_examples()
97
 
98
  # Gradio interface
99
  with gr.Blocks() as demo:
100
  gr.Markdown("# Jamify: Music Generation from Lyrics and Style")
101
  gr.Markdown("Provide your lyrics, a style reference (either an audio file or a text prompt), and a desired duration to generate a song.")
102
 
103
+ # Sample buttons section
104
+ if examples:
105
+ gr.Markdown("### Sample Examples")
106
+ with gr.Row():
107
+ example_buttons = []
108
+ for i, example in enumerate(examples):
109
+ button = gr.Button(f"Example {example['id']}", variant="secondary", size="sm")
110
+ example_buttons.append(button)
111
+
112
  with gr.Row():
113
  with gr.Column():
114
  gr.Markdown("### Inputs")
115
+ lyrics_text = gr.Textbox(
116
+ label="Lyrics",
117
+ lines=10,
118
+ 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]...",
119
+ value=""
120
+ )
121
  duration_slider = gr.Slider(minimum=5, maximum=230, value=120, step=30, label="Duration (seconds)")
122
 
123
  with gr.Tab("Style from Audio"):
 
133
 
134
  generate_button.click(
135
  fn=generate_song,
136
+ inputs=[reference_audio, lyrics_text, style_prompt, duration_slider],
137
  outputs=output_audio,
138
  api_name="generate_song"
139
  )
140
+
141
+ # Connect example buttons to load data
142
+ if examples:
143
+ for i, button in enumerate(example_buttons):
144
+ button.click(
145
+ fn=lambda idx=i: load_example(idx, examples),
146
+ outputs=[reference_audio, lyrics_text, duration_slider]
147
+ )
148
 
149
+ # Create necessary temporary directories for Gradio
150
+ print("Creating temporary directories...")
151
+ try:
152
+ os.makedirs("/tmp/gradio", exist_ok=True)
153
+ print("Temporary directories created successfully.")
154
+ except Exception as e:
155
+ print(f"Warning: Could not create temporary directories: {e}")
 
 
 
156
 
157
  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/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
@@ -15,6 +15,7 @@ librosa
15
  jiwer
16
  demucs
17
  audiobox-aesthetics
 
18
 
19
  # WebDataset
20
  webdataset
 
15
  jiwer
16
  demucs
17
  audiobox-aesthetics
18
+ transformers==4.53.0
19
 
20
  # WebDataset
21
  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}