post: generating subtitles for songs that ship without timestamps
Deploy / build (push) Successful in 30s
Deploy / build (push) Successful in 30s
Tutorial on turning untimed AI-generated audio into LRC + SRT: align ASR word timestamps against the KNOWN lyrics (SequenceMatcher) instead of trusting a transcript, then a governor that rejects impossible anchors, refills runs by unit-proportional duration, and enforces a 1.2 s minimum line gap. Ships 18 English songs (342 subtitle lines, mean anchor coverage 0.96, 9/18 fully anchored) with synced lyrics plus downloadable .srt per track. Documents both player bugs and the headless-Chrome numeric probe that finally caught them.
This commit is contained in:
1 parent
cf327211df
commit
92f38184fb
20 files changed
+2737
No files matched your search
@@ -0,0 +1,71 @@
|
||||
1
|
||||
00:00:08,499 --> 00:00:14,380
|
||||
Ding-dong, ding-dong, ring out the bells...
|
||||
|
||||
2
|
||||
00:00:18,199 --> 00:00:25,440
|
||||
Snowflakes falling from the sky in silence pure and white
|
||||
|
||||
3
|
||||
00:00:25,440 --> 00:00:34,560
|
||||
Dressing every cedar bough in robes of silver light
|
||||
|
||||
4
|
||||
00:00:34,560 --> 00:00:43,420
|
||||
Listen to the steeple bells across the frozen square
|
||||
|
||||
5
|
||||
00:00:43,420 --> 00:00:52,920
|
||||
Sending out a melody upon the midnight air
|
||||
|
||||
6
|
||||
00:00:52,920 --> 00:01:01,299
|
||||
Ring, silver bells, across the winter snow
|
||||
|
||||
7
|
||||
00:01:01,299 --> 00:01:10,200
|
||||
Tell all the world the star has begun to glow
|
||||
|
||||
8
|
||||
00:01:11,759 --> 00:01:19,280
|
||||
Gloria, gloria, hear the angels sing
|
||||
|
||||
9
|
||||
00:01:19,280 --> 00:01:28,260
|
||||
Peace on the earth this holy night will bring
|
||||
|
||||
10
|
||||
00:01:32,119 --> 00:01:39,340
|
||||
Candles in the frosted glass are shining warm and clear
|
||||
|
||||
11
|
||||
00:01:40,420 --> 00:01:48,260
|
||||
Guiding every traveler home at the end of year
|
||||
|
||||
12
|
||||
00:01:49,680 --> 00:01:57,400
|
||||
Every chime is like a prayer ascending to the sky
|
||||
|
||||
13
|
||||
00:01:58,260 --> 00:02:07,219
|
||||
Watched by all the quiet stars that never pass us by
|
||||
|
||||
14
|
||||
00:02:09,620 --> 00:02:17,439
|
||||
Ring, silver bells, across the winter snow
|
||||
|
||||
15
|
||||
00:02:18,219 --> 00:02:26,500
|
||||
Tell all the world the star has begun to glow
|
||||
|
||||
16
|
||||
00:02:28,000 --> 00:02:35,680
|
||||
Gloria, gloria, hear the angels sing
|
||||
|
||||
17
|
||||
00:02:37,139 --> 00:02:44,620
|
||||
Peace on the earth this holy night will bring
|
||||
|
||||
18
|
||||
00:02:49,300 --> 00:02:54,020
|
||||
Gloria... peace on the earth.
|
||||
@@ -0,0 +1,87 @@
|
||||
1
|
||||
00:00:08,059 --> 00:00:10,640
|
||||
Attention please! Captain on the deck!
|
||||
|
||||
2
|
||||
00:00:10,640 --> 00:00:13,919
|
||||
Sofa is my pirate ship, the carpet is the sea
|
||||
|
||||
3
|
||||
00:00:13,919 --> 00:00:17,519
|
||||
Pillow fort is waiting there for teddy bear and me
|
||||
|
||||
4
|
||||
00:00:17,519 --> 00:00:20,960
|
||||
Put a paper triangle upon my curly head
|
||||
|
||||
5
|
||||
00:00:20,960 --> 00:00:25,339
|
||||
No one has to take a nap or go to sleep in bed!
|
||||
|
||||
6
|
||||
00:00:25,679 --> 00:00:31,079
|
||||
Left turn! Right turn! Watch out for the shark!
|
||||
|
||||
7
|
||||
00:00:31,079 --> 00:00:35,880
|
||||
Wait—that's just the fluffy dog barking in the dark!
|
||||
|
||||
8
|
||||
00:00:36,780 --> 00:00:38,420
|
||||
Aye, aye, Captain Marshmallow!
|
||||
|
||||
9
|
||||
00:00:38,420 --> 00:00:42,039
|
||||
Sailing where the candy breezes blow!
|
||||
|
||||
10
|
||||
00:00:42,039 --> 00:00:45,560
|
||||
Cookies in the treasure chest, chocolate on the map
|
||||
|
||||
11
|
||||
00:00:45,560 --> 00:00:50,740
|
||||
Give a little salute and a double-double clap! (Clap-clap!)
|
||||
|
||||
12
|
||||
00:00:50,740 --> 00:00:53,380
|
||||
We rule the living room today!
|
||||
|
||||
13
|
||||
00:00:56,340 --> 00:00:59,600
|
||||
Homework is forbidden by the royal pirate law
|
||||
|
||||
14
|
||||
00:00:59,600 --> 00:01:03,119
|
||||
Every single citizen must draw a dinosaur!
|
||||
|
||||
15
|
||||
00:01:03,119 --> 00:01:07,280
|
||||
More pudding for the afternoon, and juice inside the cup
|
||||
|
||||
16
|
||||
00:01:07,280 --> 00:01:12,780
|
||||
When the clock strikes dinner time, we'll eat the treasure up!
|
||||
|
||||
17
|
||||
00:01:13,799 --> 00:01:15,280
|
||||
Aye, aye, Captain Marshmallow!
|
||||
|
||||
18
|
||||
00:01:15,280 --> 00:01:19,000
|
||||
Sailing where the candy breezes blow!
|
||||
|
||||
19
|
||||
00:01:19,000 --> 00:01:22,459
|
||||
Cookies in the treasure chest, chocolate on the map
|
||||
|
||||
20
|
||||
00:01:22,459 --> 00:01:26,819
|
||||
Give a little salute and a double-double clap! (Clap-clap!)
|
||||
|
||||
21
|
||||
00:01:26,819 --> 00:01:30,260
|
||||
We rule the living room today!
|
||||
|
||||
22
|
||||
00:01:33,000 --> 00:01:34,859
|
||||
Mission accomplished! Yay!
|
||||
@@ -0,0 +1,83 @@
|
||||
1
|
||||
00:00:19,300 --> 00:00:23,440
|
||||
Ticking in the quiet tower made of porcelain and glass
|
||||
|
||||
2
|
||||
00:00:23,440 --> 00:00:28,600
|
||||
I can see the painted clouds and paper swallows pass
|
||||
|
||||
3
|
||||
00:00:32,359 --> 00:00:36,719
|
||||
Every gear is turning slow beneath the velvet sky
|
||||
|
||||
4
|
||||
00:00:36,719 --> 00:00:42,200
|
||||
Counting all the shooting stars that never say goodbye
|
||||
|
||||
5
|
||||
00:00:46,119 --> 00:00:49,579
|
||||
Someone left a silver key beside the windowpane
|
||||
|
||||
6
|
||||
00:00:50,520 --> 00:00:56,719
|
||||
Unlocking all the memories hidden in the rain
|
||||
|
||||
7
|
||||
00:00:59,859 --> 00:01:04,659
|
||||
Sing for the dawn across the endless night
|
||||
|
||||
8
|
||||
00:01:04,659 --> 00:01:09,200
|
||||
Spinning the threads of shadow into light
|
||||
|
||||
9
|
||||
00:01:09,200 --> 00:01:13,700
|
||||
Even if the clock should stop and time fades away
|
||||
|
||||
10
|
||||
00:01:13,700 --> 00:01:20,459
|
||||
I will keep this little wish until the break of day
|
||||
|
||||
11
|
||||
00:01:22,280 --> 00:01:30,000
|
||||
La-la-lu-la, hear the distant bell
|
||||
|
||||
12
|
||||
00:01:31,340 --> 00:01:34,540
|
||||
Breaking the silent spell
|
||||
|
||||
13
|
||||
00:01:38,140 --> 00:01:42,500
|
||||
Pages of an ancient book are fluttering like wings
|
||||
|
||||
14
|
||||
00:01:42,500 --> 00:01:48,400
|
||||
Telling me of emerald seas and forgotten kings
|
||||
|
||||
15
|
||||
00:01:52,160 --> 00:01:56,379
|
||||
With my small and trembling hands I open up the door
|
||||
|
||||
16
|
||||
00:01:56,379 --> 00:02:01,980
|
||||
Stepping out into a world I've never seen before
|
||||
|
||||
17
|
||||
00:02:05,700 --> 00:02:09,360
|
||||
Sing for the dawn across the endless night
|
||||
|
||||
18
|
||||
00:02:10,560 --> 00:02:15,020
|
||||
Spinning the threads of shadow into light
|
||||
|
||||
19
|
||||
00:02:15,020 --> 00:02:19,560
|
||||
Even if the clock should stop and time fades away
|
||||
|
||||
20
|
||||
00:02:21,120 --> 00:02:27,360
|
||||
I will keep this little wish until the break of day
|
||||
|
||||
21
|
||||
00:02:33,639 --> 00:02:36,740
|
||||
Until the break of day...
|
||||
@@ -0,0 +1,67 @@
|
||||
1
|
||||
00:00:28,220 --> 00:00:29,980
|
||||
Clickety-clack upon the track, the green train starts to roll
|
||||
|
||||
2
|
||||
00:00:29,420 --> 00:00:30,620
|
||||
Leaving all the city gray behind the tunnel hole
|
||||
|
||||
3
|
||||
00:00:30,620 --> 00:00:31,820
|
||||
Forehead pressed against the glass, I watch the fields go by
|
||||
|
||||
4
|
||||
00:00:31,820 --> 00:00:33,020
|
||||
Golden wheat and windmills waving underneath the sky
|
||||
|
||||
5
|
||||
00:00:33,020 --> 00:00:34,220
|
||||
Take me where the spring wind blows across the open blue
|
||||
|
||||
6
|
||||
00:00:34,220 --> 00:00:38,359
|
||||
Ten miles of wildflowers blooming just for me and you
|
||||
|
||||
7
|
||||
00:00:38,359 --> 00:00:42,679
|
||||
Every station has a name I've never heard before
|
||||
|
||||
8
|
||||
00:00:42,679 --> 00:00:47,600
|
||||
Soon the scent of salty air will meet us at the shore
|
||||
|
||||
9
|
||||
00:00:57,620 --> 00:01:01,479
|
||||
Strangers sharing oranges and stories in the seat
|
||||
|
||||
10
|
||||
00:01:01,920 --> 00:01:06,680
|
||||
Sunlight dancing in the aisle around my dangling feet
|
||||
|
||||
11
|
||||
00:01:06,680 --> 00:01:11,500
|
||||
Postcards in my backpack waiting for a stamp and pen
|
||||
|
||||
12
|
||||
00:01:11,500 --> 00:01:16,239
|
||||
To tell the people back at home I'm coming back again
|
||||
|
||||
13
|
||||
00:01:16,239 --> 00:01:21,140
|
||||
Take me where the spring wind blows across the open blue
|
||||
|
||||
14
|
||||
00:01:21,140 --> 00:01:26,340
|
||||
Ten miles of wildflowers blooming just for me and you
|
||||
|
||||
15
|
||||
00:01:26,340 --> 00:01:30,659
|
||||
Every station has a name I've never heard before
|
||||
|
||||
16
|
||||
00:01:30,659 --> 00:01:35,599
|
||||
Soon the scent of salty air will meet us at the shore
|
||||
|
||||
17
|
||||
00:01:46,820 --> 00:01:48,359
|
||||
Look, there is the sea...
|
||||
@@ -0,0 +1,75 @@
|
||||
1
|
||||
00:00:10,691 --> 00:00:15,291
|
||||
Patter goes the summer rain upon the lotus leaf
|
||||
|
||||
2
|
||||
00:00:15,291 --> 00:00:19,891
|
||||
Washing all the dusty world and bringing cool relief
|
||||
|
||||
3
|
||||
00:00:19,891 --> 00:00:24,491
|
||||
Stepping on the wet bluestone beside the willow bridge
|
||||
|
||||
4
|
||||
00:00:24,491 --> 00:00:28,579
|
||||
Dragonflies are resting on the painted wooden ridge
|
||||
|
||||
5
|
||||
00:00:28,579 --> 00:00:31,899
|
||||
Fold a little paper boat and light a candlewick
|
||||
|
||||
6
|
||||
00:00:33,159 --> 00:00:37,840
|
||||
Make a wish before the current carries it so quick
|
||||
|
||||
7
|
||||
00:00:40,460 --> 00:00:44,840
|
||||
Floating down the lotus pond, a hundred lanterns glow
|
||||
|
||||
8
|
||||
00:00:46,380 --> 00:00:49,619
|
||||
Mirrored in the ripples where the silver fishes go
|
||||
|
||||
9
|
||||
00:00:49,619 --> 00:00:54,219
|
||||
Listen to the bamboo flute across the misty stream
|
||||
|
||||
10
|
||||
00:00:54,219 --> 00:01:00,460
|
||||
In the courtyard of the moon, we share a summer dream
|
||||
|
||||
11
|
||||
00:01:03,960 --> 00:01:08,719
|
||||
Silk fan in my little hand to chase the fireflies
|
||||
|
||||
12
|
||||
00:01:08,719 --> 00:01:13,359
|
||||
Red string braided in my hair beneath the lantern skies
|
||||
|
||||
13
|
||||
00:01:13,359 --> 00:01:18,219
|
||||
Grandma tells a fairy tale of rabbits in the moon
|
||||
|
||||
14
|
||||
00:01:18,219 --> 00:01:22,959
|
||||
While the sweet osmanthus flowers blossom in the June
|
||||
|
||||
15
|
||||
00:01:25,539 --> 00:01:30,019
|
||||
Floating down the lotus pond, a hundred lanterns glow
|
||||
|
||||
16
|
||||
00:01:30,019 --> 00:01:34,620
|
||||
Mirrored in the ripples where the silver fishes go
|
||||
|
||||
17
|
||||
00:01:34,620 --> 00:01:39,359
|
||||
Listen to the bamboo flute across the misty stream
|
||||
|
||||
18
|
||||
00:01:39,359 --> 00:01:45,359
|
||||
In the courtyard of the moon, we share a summer dream
|
||||
|
||||
19
|
||||
00:02:06,760 --> 00:02:09,360
|
||||
Red lanterns drifting far away...
|
||||
@@ -0,0 +1,67 @@
|
||||
1
|
||||
00:00:09,640 --> 00:00:14,640
|
||||
Look upon the winding path where fallen leaves are blown
|
||||
|
||||
2
|
||||
00:00:14,640 --> 00:00:19,640
|
||||
Children walking hand in hand so no one is alone
|
||||
|
||||
3
|
||||
00:00:19,640 --> 00:00:25,039
|
||||
Even when the winter wind is cold against your face
|
||||
|
||||
4
|
||||
00:00:25,039 --> 00:00:30,660
|
||||
Every step you take today is leading to a place
|
||||
|
||||
5
|
||||
00:00:31,520 --> 00:00:36,600
|
||||
Shine your light into the dark, let your voice be heard
|
||||
|
||||
6
|
||||
00:00:36,600 --> 00:00:41,600
|
||||
Rising like the morning lark, a brave and little bird
|
||||
|
||||
7
|
||||
00:00:41,600 --> 00:00:46,679
|
||||
Though the night is long and deep, the stars are watching still
|
||||
|
||||
8
|
||||
00:00:46,679 --> 00:00:53,000
|
||||
Spring will wake the seeds asleep upon the quiet hill
|
||||
|
||||
9
|
||||
00:00:57,000 --> 00:01:02,159
|
||||
Write a song upon the wind for everyone who strays
|
||||
|
||||
10
|
||||
00:01:02,159 --> 00:01:07,480
|
||||
Hope is like a tiny spark that sets the sky ablaze
|
||||
|
||||
11
|
||||
00:01:07,480 --> 00:01:11,879
|
||||
Hold the hand beside you tight and never look below
|
||||
|
||||
12
|
||||
00:01:11,879 --> 00:01:17,159
|
||||
There are gardens waiting where the wildest rivers flow
|
||||
|
||||
13
|
||||
00:01:21,299 --> 00:01:26,359
|
||||
Shine your light into the dark, let your voice be heard
|
||||
|
||||
14
|
||||
00:01:26,359 --> 00:01:31,340
|
||||
Rising like the morning lark, a brave and little bird
|
||||
|
||||
15
|
||||
00:01:31,340 --> 00:01:36,439
|
||||
Though the night is long and deep, the stars are watching still
|
||||
|
||||
16
|
||||
00:01:36,439 --> 00:01:45,980
|
||||
Spring will wake the seeds asleep upon the quiet hill
|
||||
|
||||
17
|
||||
00:01:45,980 --> 00:01:49,980
|
||||
Look upon your path... the dawn is near.
|
||||
@@ -0,0 +1,71 @@
|
||||
1
|
||||
00:00:21,729 --> 00:00:28,559
|
||||
Where the gray Atlantic meets the abbey stone
|
||||
|
||||
2
|
||||
00:00:28,559 --> 00:00:29,960
|
||||
White birds circle high above the cliff alone
|
||||
|
||||
3
|
||||
00:00:33,560 --> 00:00:40,479
|
||||
Carved into the stairway of a thousand years
|
||||
|
||||
4
|
||||
00:00:42,160 --> 00:00:49,159
|
||||
Every drop of ocean rain whispers in my ears
|
||||
|
||||
5
|
||||
00:00:49,159 --> 00:00:57,960
|
||||
Sail into the silver mist, beyond the western sea
|
||||
|
||||
6
|
||||
00:00:57,960 --> 00:01:06,319
|
||||
Where the ancient lanterns glow for you and me
|
||||
|
||||
7
|
||||
00:01:06,319 --> 00:01:14,739
|
||||
Hush now, hear the harp strings ring across the foam
|
||||
|
||||
8
|
||||
00:01:14,739 --> 00:01:25,359
|
||||
Through the fog and falling stars, the tide will bring us home
|
||||
|
||||
9
|
||||
00:01:25,359 --> 00:01:33,043
|
||||
Candles in the chapel window flicker in the gale
|
||||
|
||||
10
|
||||
00:01:33,043 --> 00:01:39,874
|
||||
Ink upon the parchment tells a forgotten tale
|
||||
|
||||
11
|
||||
00:01:57,479 --> 00:02:05,180
|
||||
Little hands upon the rock, looking at the sky
|
||||
|
||||
12
|
||||
00:02:05,180 --> 00:02:12,939
|
||||
Watching all the centuries gently passing by
|
||||
|
||||
13
|
||||
00:02:16,979 --> 00:02:22,180
|
||||
Sail into the silver mist, beyond the western sea
|
||||
|
||||
14
|
||||
00:02:22,939 --> 00:02:30,460
|
||||
Where the ancient lanterns glow for you and me
|
||||
|
||||
15
|
||||
00:02:30,460 --> 00:02:37,780
|
||||
Hush now, hear the harp strings ring across the foam
|
||||
|
||||
16
|
||||
00:02:38,979 --> 00:02:49,479
|
||||
Through the fog and falling stars, the tide will bring us home
|
||||
|
||||
17
|
||||
00:02:57,019 --> 00:03:00,819
|
||||
Oceans rise and oceans fall...
|
||||
|
||||
18
|
||||
00:03:04,340 --> 00:03:08,539
|
||||
The tide will bring us home.
|
||||
@@ -0,0 +1,71 @@
|
||||
1
|
||||
00:00:10,420 --> 00:00:15,099
|
||||
Sunlight on the wooden desk is moving inch by inch
|
||||
|
||||
2
|
||||
00:00:15,099 --> 00:00:20,399
|
||||
Sparrows on the telegraph wire never seem to flinch
|
||||
|
||||
3
|
||||
00:00:20,880 --> 00:00:25,600
|
||||
I fold a page of notebook paper creases nice and neat
|
||||
|
||||
4
|
||||
00:00:25,600 --> 00:00:30,879
|
||||
And throw it out the window to the quiet autumn street
|
||||
|
||||
5
|
||||
00:00:30,879 --> 00:00:36,359
|
||||
Fly away, paper plane, into the golden air
|
||||
|
||||
6
|
||||
00:00:36,359 --> 00:00:41,640
|
||||
Carry all the little words I didn't dare to share
|
||||
|
||||
7
|
||||
00:00:41,640 --> 00:00:48,719
|
||||
Goodbye to the summer clouds, hello to the breeze
|
||||
|
||||
8
|
||||
00:00:48,719 --> 00:00:53,600
|
||||
Floating past the bicycles and underneath the trees
|
||||
|
||||
9
|
||||
00:01:03,299 --> 00:01:08,379
|
||||
Chalk dust on the blackboard fades as afternoon goes by
|
||||
|
||||
10
|
||||
00:01:08,379 --> 00:01:13,760
|
||||
Clouds like cotton candy drift across the September sky
|
||||
|
||||
11
|
||||
00:01:13,760 --> 00:01:18,900
|
||||
Every simple little thing we took for granted then
|
||||
|
||||
12
|
||||
00:01:18,900 --> 00:01:24,299
|
||||
Stays inside a photograph we'll look at once again
|
||||
|
||||
13
|
||||
00:01:24,299 --> 00:01:29,659
|
||||
Fly away, paper plane, into the golden air
|
||||
|
||||
14
|
||||
00:01:29,659 --> 00:01:34,900
|
||||
Carry all the little words I didn't dare to share
|
||||
|
||||
15
|
||||
00:01:34,900 --> 00:01:41,680
|
||||
Goodbye to the summer clouds, hello to the breeze
|
||||
|
||||
16
|
||||
00:01:41,680 --> 00:01:46,939
|
||||
Floating past the bicycles and underneath the trees
|
||||
|
||||
17
|
||||
00:01:57,780 --> 00:02:02,000
|
||||
Underneath the autumn trees...
|
||||
|
||||
18
|
||||
00:02:02,180 --> 00:02:06,219
|
||||
Goodbye, summer days.
|
||||
@@ -0,0 +1,67 @@
|
||||
1
|
||||
00:00:11,539 --> 00:00:17,039
|
||||
Smoke is rising from the roof into the purple sky
|
||||
|
||||
2
|
||||
00:00:17,039 --> 00:00:22,839
|
||||
While the evening swallows call and hurry on up high
|
||||
|
||||
3
|
||||
00:00:22,839 --> 00:00:28,480
|
||||
Steam upon the kitchen glass is blurring out the view
|
||||
|
||||
4
|
||||
00:00:28,480 --> 00:00:34,020
|
||||
Sitting on a wooden stool, I wait for dinner too
|
||||
|
||||
5
|
||||
00:00:34,020 --> 00:00:39,520
|
||||
One bowl of warm white rice, a dish of tender greens
|
||||
|
||||
6
|
||||
00:00:39,520 --> 00:00:45,420
|
||||
The simplest kind of happiness is what the evening means
|
||||
|
||||
7
|
||||
00:00:45,420 --> 00:00:50,439
|
||||
No matter how the outside world is noisy, cold, and wide
|
||||
|
||||
8
|
||||
00:00:50,979 --> 00:00:58,100
|
||||
The lamp upon the dining table keeps us warm inside
|
||||
|
||||
9
|
||||
00:01:09,840 --> 00:01:14,879
|
||||
Wrinkles on a gentle hand that smooths my messy hair
|
||||
|
||||
10
|
||||
00:01:14,879 --> 00:01:20,480
|
||||
Telling me to eat it all and sit up in my chair
|
||||
|
||||
11
|
||||
00:01:20,480 --> 00:01:26,260
|
||||
Years will pass like river water flowing to the sea
|
||||
|
||||
12
|
||||
00:01:26,260 --> 00:01:33,040
|
||||
But this quiet kitchen light will always stay with me
|
||||
|
||||
13
|
||||
00:01:33,040 --> 00:01:38,760
|
||||
One bowl of warm white rice, a dish of tender greens
|
||||
|
||||
14
|
||||
00:01:38,760 --> 00:01:43,780
|
||||
The simplest kind of happiness is what the evening means
|
||||
|
||||
15
|
||||
00:01:44,599 --> 00:01:49,680
|
||||
No matter how the outside world is noisy, cold, and wide
|
||||
|
||||
16
|
||||
00:01:50,140 --> 00:01:57,400
|
||||
The lamp upon the dining table keeps us warm inside
|
||||
|
||||
17
|
||||
00:01:57,400 --> 00:02:14,439
|
||||
The lamp is always on for you...
|
||||
@@ -0,0 +1,83 @@
|
||||
1
|
||||
00:00:06,760 --> 00:00:08,680
|
||||
One, two! Ready, go!
|
||||
|
||||
2
|
||||
00:00:08,680 --> 00:00:12,300
|
||||
Put on my yellow boots and grab my red umbrella too
|
||||
|
||||
3
|
||||
00:00:12,300 --> 00:00:16,079
|
||||
The rain has stopped and left the sky a shiny, happy blue!
|
||||
|
||||
4
|
||||
00:00:16,079 --> 00:00:20,079
|
||||
A giant puddle in the street is looking back at me
|
||||
|
||||
5
|
||||
00:00:20,079 --> 00:00:23,859
|
||||
I take a giant running leap—one, two, and three!
|
||||
|
||||
6
|
||||
00:00:23,859 --> 00:00:27,660
|
||||
Splash! Goes the water, jumping to the sky
|
||||
|
||||
7
|
||||
00:00:27,660 --> 00:00:32,140
|
||||
Even little sparrows stop to watch us marching by!
|
||||
|
||||
8
|
||||
00:00:32,659 --> 00:00:36,200
|
||||
Hooray, hooray! Join the happy parade!
|
||||
|
||||
9
|
||||
00:00:36,200 --> 00:00:40,159
|
||||
Dancing in the sunshine that the morning made!
|
||||
|
||||
10
|
||||
00:00:40,159 --> 00:00:43,859
|
||||
Clap your hands together, stomp your little feet
|
||||
|
||||
11
|
||||
00:00:44,439 --> 00:00:49,299
|
||||
Every single puddle makes the melody complete!
|
||||
|
||||
12
|
||||
00:00:49,299 --> 00:00:54,099
|
||||
La-la-la, step in time, smiling ear to ear!
|
||||
|
||||
13
|
||||
00:00:56,420 --> 00:01:00,100
|
||||
A snail upon the garden wall is waving with its horn
|
||||
|
||||
14
|
||||
00:01:00,100 --> 00:01:03,899
|
||||
The brightest, biggest rainbow in the neighborhood is born!
|
||||
|
||||
15
|
||||
00:01:03,899 --> 00:01:07,719
|
||||
We'll share a pocketful of sweets and sing a silly tune
|
||||
|
||||
16
|
||||
00:01:07,719 --> 00:01:11,439
|
||||
And march around the playground till we reach the afternoon!
|
||||
|
||||
17
|
||||
00:01:13,060 --> 00:01:16,239
|
||||
Hooray, hooray! Join the happy parade!
|
||||
|
||||
18
|
||||
00:01:16,239 --> 00:01:20,120
|
||||
Dancing in the sunshine that the morning made!
|
||||
|
||||
19
|
||||
00:01:20,120 --> 00:01:23,900
|
||||
Clap your hands together, stomp your little feet
|
||||
|
||||
20
|
||||
00:01:23,900 --> 00:01:29,200
|
||||
Every single puddle makes the melody complete!
|
||||
|
||||
21
|
||||
00:01:29,200 --> 00:01:31,280
|
||||
Jump! Splash! Hooray!
|
||||
@@ -0,0 +1,75 @@
|
||||
1
|
||||
00:00:22,822 --> 00:00:25,640
|
||||
Ahh-ahh, sanctus, ahh...
|
||||
|
||||
2
|
||||
00:00:25,640 --> 00:00:31,739
|
||||
Shadows fade before the light that rises in the east
|
||||
|
||||
3
|
||||
00:00:31,739 --> 00:00:37,759
|
||||
Every troubled storm is stilled and every sorrow ceased
|
||||
|
||||
4
|
||||
00:00:37,759 --> 00:00:44,119
|
||||
Through the tall stained-glass windows morning beams descend
|
||||
|
||||
5
|
||||
00:00:44,119 --> 00:00:50,560
|
||||
Shining on a quiet road where broken hearts can mend
|
||||
|
||||
6
|
||||
00:00:50,560 --> 00:00:58,740
|
||||
Peace be with you, weary soul, lay your burden down
|
||||
|
||||
7
|
||||
00:00:58,740 --> 00:01:05,079
|
||||
Where the silver rivers flow beyond the sleeping town
|
||||
|
||||
8
|
||||
00:01:05,079 --> 00:01:11,459
|
||||
Lift your eyes unto the hills where golden angels sing
|
||||
|
||||
9
|
||||
00:01:11,459 --> 00:01:18,579
|
||||
Rest beneath the gentle shelter of a shining wing
|
||||
|
||||
10
|
||||
00:01:21,159 --> 00:01:27,180
|
||||
Like a bell across the valley ringing clear and true
|
||||
|
||||
11
|
||||
00:01:27,180 --> 00:01:33,439
|
||||
Every dawn is bringing back a promise made anew
|
||||
|
||||
12
|
||||
00:01:34,180 --> 00:01:40,060
|
||||
Walk into the quiet light and leave the dark behind
|
||||
|
||||
13
|
||||
00:01:40,060 --> 00:01:46,439
|
||||
There is grace in every breath for all of humankind
|
||||
|
||||
14
|
||||
00:01:48,400 --> 00:01:54,640
|
||||
Peace be with you, weary soul, lay your burden down
|
||||
|
||||
15
|
||||
00:01:54,640 --> 00:02:01,019
|
||||
Where the silver rivers flow beyond the sleeping town
|
||||
|
||||
16
|
||||
00:02:01,019 --> 00:02:07,480
|
||||
Lift your eyes unto the hills where golden angels sing
|
||||
|
||||
17
|
||||
00:02:07,480 --> 00:02:15,300
|
||||
Rest beneath the gentle shelter of a shining wing
|
||||
|
||||
18
|
||||
00:02:15,300 --> 00:02:25,520
|
||||
Peace be with you... forevermore.
|
||||
|
||||
19
|
||||
00:02:26,479 --> 00:02:27,879
|
||||
Amen, ahh...
|
||||
@@ -0,0 +1,75 @@
|
||||
1
|
||||
00:00:08,320 --> 00:00:12,740
|
||||
Ding-dong rings the little bell above the bakery door
|
||||
|
||||
2
|
||||
00:00:13,480 --> 00:00:16,539
|
||||
Flour on the apron and confetti on the floor
|
||||
|
||||
3
|
||||
00:00:16,539 --> 00:00:20,339
|
||||
Butter in the mixing bowl and sugar in the pan
|
||||
|
||||
4
|
||||
00:00:20,339 --> 00:00:24,199
|
||||
Baking up the fluffiest creations that I can!
|
||||
|
||||
5
|
||||
00:00:24,199 --> 00:00:29,120
|
||||
Wait a little minute as the oven starts to glow
|
||||
|
||||
6
|
||||
00:00:29,120 --> 00:00:33,100
|
||||
Watch the little loaves of bread begin to rise and grow!
|
||||
|
||||
7
|
||||
00:00:34,039 --> 00:00:38,640
|
||||
Welcome to the bakery upon the strawberry cloud!
|
||||
|
||||
8
|
||||
00:00:39,240 --> 00:00:42,460
|
||||
Where singing in the kitchen is definitely allowed!
|
||||
|
||||
9
|
||||
00:00:42,759 --> 00:00:46,200
|
||||
A croissant for the puppy and a muffin for the cat
|
||||
|
||||
10
|
||||
00:00:46,200 --> 00:00:51,159
|
||||
With a dollop of vanilla cream upon a beret hat!
|
||||
|
||||
11
|
||||
00:00:57,820 --> 00:01:01,679
|
||||
Pour a cup of warm milk tea and sit beside the window
|
||||
|
||||
12
|
||||
00:01:01,679 --> 00:01:05,980
|
||||
Wave hello to everyone walking down below
|
||||
|
||||
13
|
||||
00:01:05,980 --> 00:01:09,780
|
||||
If your day is sour like a lemon on a tree
|
||||
|
||||
14
|
||||
00:01:09,780 --> 00:01:13,900
|
||||
Take a bite of honey toast and share a smile with me!
|
||||
|
||||
15
|
||||
00:01:13,900 --> 00:01:18,579
|
||||
Welcome to the bakery upon the strawberry cloud!
|
||||
|
||||
16
|
||||
00:01:19,260 --> 00:01:22,480
|
||||
Where singing in the kitchen is definitely allowed!
|
||||
|
||||
17
|
||||
00:01:22,480 --> 00:01:26,200
|
||||
A croissant for the puppy and a muffin for the cat
|
||||
|
||||
18
|
||||
00:01:26,200 --> 00:01:31,099
|
||||
With a dollop of vanilla cream upon a beret hat!
|
||||
|
||||
19
|
||||
00:01:33,579 --> 00:01:37,599
|
||||
Fresh out of the oven! Yum, yum!
|
||||
@@ -0,0 +1,75 @@
|
||||
1
|
||||
00:00:24,120 --> 00:00:31,039
|
||||
Carved from a willow branch, painted with a smile
|
||||
|
||||
2
|
||||
00:00:34,160 --> 00:00:42,439
|
||||
Dressed in tiny embroidered silk, traveling mile by mile
|
||||
|
||||
3
|
||||
00:00:46,000 --> 00:00:51,719
|
||||
Ten thin threads of crimson silk tied upon my hands
|
||||
|
||||
4
|
||||
00:00:55,500 --> 00:01:02,259
|
||||
Dancing in the market square across the distant lands
|
||||
|
||||
5
|
||||
00:01:07,799 --> 00:01:13,120
|
||||
Crowds will gather when the gong begins to softly ring
|
||||
|
||||
6
|
||||
00:01:13,120 --> 00:01:18,760
|
||||
Laughing at the little doll that cannot speak or sing
|
||||
|
||||
7
|
||||
00:01:21,659 --> 00:01:26,700
|
||||
Dance in the lantern light, spin around the stage
|
||||
|
||||
8
|
||||
00:01:26,700 --> 00:01:32,420
|
||||
Telling all the legends of a long-forgotten age
|
||||
|
||||
9
|
||||
00:01:32,420 --> 00:01:37,659
|
||||
Though my heart is made of wood and cannot feel the rain
|
||||
|
||||
10
|
||||
00:01:37,659 --> 00:01:44,420
|
||||
Every pull upon the thread remembers joy and pain
|
||||
|
||||
11
|
||||
00:02:10,679 --> 00:02:15,819
|
||||
Autumn leaves are falling down upon the empty street
|
||||
|
||||
12
|
||||
00:02:15,819 --> 00:02:21,360
|
||||
Only echoes remain of the applause so sweet
|
||||
|
||||
13
|
||||
00:02:21,360 --> 00:02:26,979
|
||||
Keep me in the wooden box beside your warm fireplace
|
||||
|
||||
14
|
||||
00:02:26,979 --> 00:02:35,219
|
||||
Even when the paint fades off my little smiling face
|
||||
|
||||
15
|
||||
00:02:36,740 --> 00:02:42,860
|
||||
Dance in the lantern light, spin around the stage
|
||||
|
||||
16
|
||||
00:02:42,860 --> 00:02:48,560
|
||||
Telling all the legends of a long-forgotten age
|
||||
|
||||
17
|
||||
00:02:48,560 --> 00:02:54,020
|
||||
Though my heart is made of wood and cannot feel the rain
|
||||
|
||||
18
|
||||
00:02:54,020 --> 00:03:01,060
|
||||
Every pull upon the thread remembers joy and pain
|
||||
|
||||
19
|
||||
00:03:05,039 --> 00:03:07,719
|
||||
Ten thin threads of crimson silk...
|
||||
@@ -0,0 +1,83 @@
|
||||
1
|
||||
00:00:11,560 --> 00:00:14,599
|
||||
Underneath the floorboards where the shadows play
|
||||
|
||||
2
|
||||
00:00:14,599 --> 00:00:18,320
|
||||
I tied a little ribbon at the break of day
|
||||
|
||||
3
|
||||
00:00:18,320 --> 00:00:22,019
|
||||
A button for a table, a thimble for a cup
|
||||
|
||||
4
|
||||
00:00:22,019 --> 00:00:26,140
|
||||
I climbs the ivy ladder when the sun comes up
|
||||
|
||||
5
|
||||
00:00:27,760 --> 00:00:31,420
|
||||
Sugar on the windowsill, a feather in my hand
|
||||
|
||||
6
|
||||
00:00:31,420 --> 00:00:35,219
|
||||
The garden is a jungle and a wonderland
|
||||
|
||||
7
|
||||
00:00:35,219 --> 00:00:38,840
|
||||
Careful not to wake the cat sleeping by the door
|
||||
|
||||
8
|
||||
00:00:40,000 --> 00:00:43,020
|
||||
Tip-toe in my borrowed shoes across the wooden floor
|
||||
|
||||
9
|
||||
00:00:44,460 --> 00:00:48,100
|
||||
Fly away, little breeze, carry me along
|
||||
|
||||
10
|
||||
00:00:48,100 --> 00:00:51,899
|
||||
Through the clover and the leaves, singing my own song
|
||||
|
||||
11
|
||||
00:00:51,899 --> 00:00:56,100
|
||||
Though the world is wide and tall, and I am very small
|
||||
|
||||
12
|
||||
00:00:57,579 --> 00:01:02,520
|
||||
In the secret morning light, I can have it all
|
||||
|
||||
13
|
||||
00:01:09,620 --> 00:01:12,239
|
||||
Dewdrops on the dandelion shining like a crown
|
||||
|
||||
14
|
||||
00:01:12,239 --> 00:01:15,980
|
||||
I catch a floating parachute and spin around and down
|
||||
|
||||
15
|
||||
00:01:15,980 --> 00:01:19,620
|
||||
If you hear a tiny laugh hiding in the wall
|
||||
|
||||
16
|
||||
00:01:19,620 --> 00:01:25,159
|
||||
That is just my secret song, answering your call
|
||||
|
||||
17
|
||||
00:01:27,260 --> 00:01:30,719
|
||||
Fly away, little breeze, carry me along
|
||||
|
||||
18
|
||||
00:01:30,719 --> 00:01:34,579
|
||||
Through the clover and the leaves, singing my own song
|
||||
|
||||
19
|
||||
00:01:34,579 --> 00:01:38,420
|
||||
Though the world is wide and tall, and I am very small
|
||||
|
||||
20
|
||||
00:01:40,319 --> 00:01:44,980
|
||||
In the secret morning light, I can have it all
|
||||
|
||||
21
|
||||
00:01:51,980 --> 00:01:55,159
|
||||
La-la-la, in the morning light...
|
||||
@@ -0,0 +1,71 @@
|
||||
1
|
||||
00:00:17,620 --> 00:00:22,559
|
||||
One, two, three, the summer breeze is knocking at my door
|
||||
|
||||
2
|
||||
00:00:22,559 --> 00:00:30,620
|
||||
Dancing with the sunlit dust upon the wooden floor
|
||||
|
||||
3
|
||||
00:00:30,620 --> 00:00:38,399
|
||||
Out across the grassy hill the dandelions grow
|
||||
|
||||
4
|
||||
00:00:38,399 --> 00:00:46,520
|
||||
Waiting for a little breath to tell them where to go
|
||||
|
||||
5
|
||||
00:00:48,079 --> 00:00:53,280
|
||||
La-la-la, wherever you may fly
|
||||
|
||||
6
|
||||
00:00:53,280 --> 00:00:57,280
|
||||
Underneath the big and gentle sky
|
||||
|
||||
7
|
||||
00:00:57,280 --> 00:01:04,379
|
||||
Even when the seasons change and winter turns to spring
|
||||
|
||||
8
|
||||
00:01:06,060 --> 00:01:12,480
|
||||
I will still remember every little song we sing
|
||||
|
||||
9
|
||||
00:01:27,359 --> 00:01:34,620
|
||||
Drops of rain upon a leaf are rolling into one
|
||||
|
||||
10
|
||||
00:01:34,620 --> 00:01:42,459
|
||||
Shining like a diamond in the afternoon sun
|
||||
|
||||
11
|
||||
00:01:42,459 --> 00:01:50,260
|
||||
If you ever lose your way or feel a little sad
|
||||
|
||||
12
|
||||
00:01:50,260 --> 00:01:58,540
|
||||
Think about the quiet days and all the smiles we had
|
||||
|
||||
13
|
||||
00:02:00,179 --> 00:02:05,280
|
||||
La-la-la, wherever you may fly
|
||||
|
||||
14
|
||||
00:02:05,280 --> 00:02:09,139
|
||||
Underneath the big and gentle sky
|
||||
|
||||
15
|
||||
00:02:09,139 --> 00:02:16,340
|
||||
Even when the seasons change and winter turns to spring
|
||||
|
||||
16
|
||||
00:02:17,899 --> 00:02:24,479
|
||||
I will still remember every little song we sing
|
||||
|
||||
17
|
||||
00:02:25,959 --> 00:02:28,080
|
||||
La-la-la, la-la-la...
|
||||
|
||||
18
|
||||
00:02:29,460 --> 00:02:34,439
|
||||
See you again someday.
|
||||
@@ -0,0 +1,79 @@
|
||||
1
|
||||
00:00:12,099 --> 00:00:15,700
|
||||
Ah-ah-ah, ooh-ooh...
|
||||
|
||||
2
|
||||
00:00:15,700 --> 00:00:21,859
|
||||
Up above the sleeping town where all the rooftops end
|
||||
|
||||
3
|
||||
00:00:21,859 --> 00:00:27,940
|
||||
Swims a giant silver whale that wants to be my friend
|
||||
|
||||
4
|
||||
00:00:27,940 --> 00:00:34,340
|
||||
Ripples in the Milky Way are washing on the shore
|
||||
|
||||
5
|
||||
00:00:34,340 --> 00:00:40,979
|
||||
Leaving little seashells by my bedroom door
|
||||
|
||||
6
|
||||
00:00:40,979 --> 00:00:47,280
|
||||
Can you hear the quiet song echoing in space?
|
||||
|
||||
7
|
||||
00:00:47,280 --> 00:00:58,439
|
||||
Every lonely little star has found a hiding place
|
||||
|
||||
8
|
||||
00:00:59,600 --> 00:01:06,260
|
||||
Float away, float away, into the velvet blue
|
||||
|
||||
9
|
||||
00:01:06,260 --> 00:01:12,739
|
||||
I am sending all my gentle lullabies to you
|
||||
|
||||
10
|
||||
00:01:12,739 --> 00:01:19,099
|
||||
Through the clouds of stardust and the galaxies afar
|
||||
|
||||
11
|
||||
00:01:19,589 --> 00:01:26,079
|
||||
You are never lost because I see how bright you are
|
||||
|
||||
12
|
||||
00:01:38,820 --> 00:01:44,560
|
||||
Paper boats upon the sea of infinite delight
|
||||
|
||||
13
|
||||
00:01:44,560 --> 00:01:51,079
|
||||
Carrying our tiny dreams across the quiet night
|
||||
|
||||
14
|
||||
00:01:51,079 --> 00:01:57,420
|
||||
Hold my hand and do not fear the deep and silent sky
|
||||
|
||||
15
|
||||
00:01:57,420 --> 00:02:04,140
|
||||
We can ride the silver whale and watch the world go by
|
||||
|
||||
16
|
||||
00:02:04,140 --> 00:02:10,259
|
||||
Float away, float away, into the velvet blue
|
||||
|
||||
17
|
||||
00:02:10,259 --> 00:02:16,740
|
||||
I am sending all my gentle lullabies to you
|
||||
|
||||
18
|
||||
00:02:16,740 --> 00:02:23,020
|
||||
Through the clouds of stardust and the galaxies afar
|
||||
|
||||
19
|
||||
00:02:23,520 --> 00:02:30,060
|
||||
You are never lost because I see how bright you are
|
||||
|
||||
20
|
||||
00:02:32,739 --> 00:02:38,099
|
||||
Goodnight, little star...
|
||||
@@ -0,0 +1,75 @@
|
||||
1
|
||||
00:00:23,828 --> 00:00:26,699
|
||||
Mmm-mmm, ahh-ahh...
|
||||
|
||||
2
|
||||
00:00:26,699 --> 00:00:32,859
|
||||
Silver runs the quiet stream beneath the willow tree
|
||||
|
||||
3
|
||||
00:00:33,640 --> 00:00:39,700
|
||||
Golden is the evening star shining down on me
|
||||
|
||||
4
|
||||
00:00:40,540 --> 00:00:46,359
|
||||
All the little meadow flowers fold their petals tight
|
||||
|
||||
5
|
||||
00:00:46,359 --> 00:00:53,020
|
||||
Waiting for the moon to weave a blanket of the night
|
||||
|
||||
6
|
||||
00:00:53,020 --> 00:00:59,759
|
||||
May the wind be gentle on your weary wings
|
||||
|
||||
7
|
||||
00:00:59,759 --> 00:01:06,280
|
||||
May you hear the lullaby the river softly sings
|
||||
|
||||
8
|
||||
00:01:06,280 --> 00:01:13,519
|
||||
Close your eyes and drift away where the shadows gleam
|
||||
|
||||
9
|
||||
00:01:13,519 --> 00:01:21,120
|
||||
Peace will walk beside you in the valley of a dream
|
||||
|
||||
10
|
||||
00:01:27,319 --> 00:01:31,439
|
||||
Fireflies are dancing slow among the reeds and moss
|
||||
|
||||
11
|
||||
00:01:33,140 --> 00:01:39,459
|
||||
Showing every wandering heart the stepping stones to cross
|
||||
|
||||
12
|
||||
00:01:39,459 --> 00:01:46,659
|
||||
Nothing in the dark can harm the light inside your chest
|
||||
|
||||
13
|
||||
00:01:46,659 --> 00:01:53,620
|
||||
Lay your head upon the grass and let the world rest
|
||||
|
||||
14
|
||||
00:01:53,620 --> 00:01:59,760
|
||||
May the wind be gentle on your weary wings
|
||||
|
||||
15
|
||||
00:01:59,760 --> 00:02:06,299
|
||||
May you hear the lullaby the river softly sings
|
||||
|
||||
16
|
||||
00:02:06,299 --> 00:02:13,419
|
||||
Close your eyes and drift away where the shadows gleam
|
||||
|
||||
17
|
||||
00:02:13,419 --> 00:02:21,259
|
||||
Peace will walk beside you in the valley of a dream
|
||||
|
||||
18
|
||||
00:02:50,859 --> 00:02:54,719
|
||||
In the valley of a dream...
|
||||
|
||||
19
|
||||
00:02:56,539 --> 00:03:00,680
|
||||
Sleep in peace tonight.
|
||||
@@ -0,0 +1,75 @@
|
||||
1
|
||||
00:00:25,179 --> 00:00:31,600
|
||||
Deep beneath the silent waves where no one ever sees
|
||||
|
||||
2
|
||||
00:00:31,600 --> 00:00:38,159
|
||||
Sleeps a tiny silver fish dreaming of the breeze
|
||||
|
||||
3
|
||||
00:00:38,159 --> 00:00:44,500
|
||||
Counting every falling tear that drops into the tide
|
||||
|
||||
4
|
||||
00:00:44,500 --> 00:00:49,859
|
||||
Waiting for the heavy gates of heaven to divide
|
||||
|
||||
5
|
||||
00:00:51,159 --> 00:00:57,240
|
||||
Do not fear the rising storm or shadows in the deep
|
||||
|
||||
6
|
||||
00:00:57,240 --> 00:01:04,340
|
||||
There is still a ancient promise that the ocean keeps
|
||||
|
||||
7
|
||||
00:01:06,339 --> 00:01:13,180
|
||||
Spread your wings and rise above the sea of clouds and rain
|
||||
|
||||
8
|
||||
00:01:13,180 --> 00:01:19,739
|
||||
Never let the mortal world bind you with a chain
|
||||
|
||||
9
|
||||
00:01:19,739 --> 00:01:25,959
|
||||
Fly across the mountain peaks where immortal rivers flow
|
||||
|
||||
10
|
||||
00:01:25,959 --> 00:01:34,140
|
||||
I will watch you turn to wind and let your spirit go
|
||||
|
||||
11
|
||||
00:01:49,099 --> 00:01:54,959
|
||||
Cycles of a thousand years are written in the stars
|
||||
|
||||
12
|
||||
00:01:54,959 --> 00:02:01,319
|
||||
Time will heal the broken shells and wash away the scars
|
||||
|
||||
13
|
||||
00:02:01,319 --> 00:02:07,579
|
||||
When the red camellia blooms upon the snowy shore
|
||||
|
||||
14
|
||||
00:02:07,579 --> 00:02:14,319
|
||||
We will meet beyond the sky and part ways nevermore
|
||||
|
||||
15
|
||||
00:02:16,860 --> 00:02:23,520
|
||||
Spread your wings and rise above the sea of clouds and rain
|
||||
|
||||
16
|
||||
00:02:23,520 --> 00:02:30,180
|
||||
Never let the mortal world bind you with a chain
|
||||
|
||||
17
|
||||
00:02:30,180 --> 00:02:36,259
|
||||
Fly across the mountain peaks where immortal rivers flow
|
||||
|
||||
18
|
||||
00:02:36,259 --> 00:02:44,300
|
||||
I will watch you turn to wind and let your spirit go
|
||||
|
||||
19
|
||||
00:02:48,839 --> 00:03:26,300
|
||||
Ah-ah-ah, fly into the wind...
|
||||
@@ -0,0 +1,723 @@
|
||||
---
|
||||
title: "Generating Subtitles for Songs That Ship Without Timestamps"
|
||||
description: "AI music tools give you audio and nothing else — no line timings, no karaoke. Here is the pipeline I use to produce LRC and SRT subtitles for 18 songs, why plain transcription fails, and the two bugs that made the lyrics box scroll to the bottom."
|
||||
pubDate: 2026-10-20
|
||||
category: tutorials
|
||||
tags: ["subtitles", "lrc", "srt", "whisper", "forced-alignment", "ai-music", "python"]
|
||||
draft: false
|
||||
---
|
||||
Every AI music tool I have tried returns the same shape of output: an audio
|
||||
file. Not one of them tells you *when* each line is sung. That is fine if you
|
||||
only want to listen, and useless the moment you want lyrics on screen — a
|
||||
karaoke line, a video caption, a scrolling block under a player.
|
||||
|
||||
Timing is the whole problem. The audio is the easy part.
|
||||
|
||||
This is the pipeline I ended up with, running on 18 English songs generated
|
||||
locally, plus the two places it broke in the browser. Everything below is
|
||||
reproducible: the only thing it needs from you is the **lyrics you already
|
||||
wrote**.
|
||||
|
||||
## What you actually need
|
||||
|
||||
Two subtitle formats, one shared data structure:
|
||||
|
||||
| Format | Used by | Shape |
|
||||
|---|---|---|
|
||||
| **LRC** | music players, karaoke blocks, `<audio>` overlays | `[mm:ss.xx]lyric line` |
|
||||
| **SRT** | VLC, YouTube, Premiere, ffmpeg burn-in | index / `hh:mm:ss,mmm --> hh:mm:ss,mmm` / text |
|
||||
|
||||
Both are just *line → start time* (+ end time for SRT). So the real task is:
|
||||
**given a list of lyric lines and an audio file, find where each line starts.**
|
||||
|
||||
## Why "just transcribe it" fails
|
||||
|
||||
The obvious approach: run speech recognition, take its segments, write them
|
||||
out. It fails for two reasons.
|
||||
|
||||
**1. Recognition of singing is much worse than recognition of speech.** The
|
||||
model is fighting instruments, reverb, and vowel stretching. On my batch the
|
||||
word error rate on sung Mandarin hovered around 25–35%; dense electronic
|
||||
mixes were worse.
|
||||
|
||||
**2. It drops whole sections.** On a 140 BPM remix, one song's entire first
|
||||
verse simply never appeared in the transcript — the vocal is buried and the
|
||||
model moved on. Two other songs lost their outros.
|
||||
|
||||
A transcript with holes cannot become subtitles with no holes. But here is the
|
||||
reframe that fixes everything:
|
||||
|
||||
> You are not transcribing. You are **aligning**. You already know the exact
|
||||
> words — they are your lyrics. You only need the audio for *anchors*.
|
||||
|
||||
## The inversion that makes it work
|
||||
|
||||
Feed the recogniser to get word-level timestamps, then align its output
|
||||
against your known lyrics with a longest-common-subsequence diff. You do not
|
||||
care whether the recogniser got the words right — you care that the words it
|
||||
*did* get are in the right order, because each match is a timestamp anchor.
|
||||
|
||||
```python
|
||||
import difflib
|
||||
|
||||
ref = [u for line in lines for u in units(line)] # your lyrics
|
||||
hyp = [w[0] for w in asr_words] # what it heard
|
||||
sm = difflib.SequenceMatcher(a=ref, b=hyp, autojunk=False)
|
||||
|
||||
for tag, i1, i2, j1, j2 in sm.get_opcodes():
|
||||
if tag != "equal":
|
||||
continue # mismatches are just gaps, not errors
|
||||
for k in range(i2 - i1):
|
||||
matched[ref_index[i1 + k]] = asr_words[j1 + k][1:] # (start, end)
|
||||
```
|
||||
|
||||
Each lyric line then takes the timestamp of its **first matched unit**. This
|
||||
is robust in a way transcription is not: 60–70% word accuracy is plenty,
|
||||
because every correctly-placed word pins the line it belongs to.
|
||||
|
||||
Measured coverage on this batch — the share of lines that got at least one
|
||||
real anchor:
|
||||
|
||||
| Language | Unit | Mean anchor coverage | Lines fully anchored |
|
||||
|---|---|---:|---|
|
||||
| English | word | **0.96** | 9/18 songs |
|
||||
| Mandarin | character | 0.70 | 11/11 songs |
|
||||
|
||||
English aligns better for a boring reason: words are delimited by spaces, so
|
||||
each ASR token maps cleanly onto one lyric token. Mandarin needs each
|
||||
character spread across the token's time span:
|
||||
|
||||
```python
|
||||
span = w.end - w.start
|
||||
for i, ch in enumerate(hanzi_in_word):
|
||||
chars.append((ch, w.start + span * i / n, w.start + span * (i + 1) / n))
|
||||
```
|
||||
|
||||
## The governor: three rules that stop nonsense timings
|
||||
|
||||
Anchors get you most of the way. Left alone, the gaps between them produce
|
||||
timings that are physically impossible, and two of those bit me for real:
|
||||
|
||||
**Failure A — a line at 0.0 s.** One song's first lyric landed at exactly
|
||||
zero, before the intro had even finished, because the anchor search matched
|
||||
a stray word in the opening shout.
|
||||
|
||||
**Failure B — four lines in 0.6 s.** A song whose outro the recogniser missed
|
||||
entirely had its remaining lines compressed to 0.18 s apart. Twelve
|
||||
characters cannot be sung in 0.18 s.
|
||||
|
||||
So after alignment, run three rules:
|
||||
|
||||
1. **Estimate the song's own rate** from neighbouring anchored pairs
|
||||
(units ÷ seconds, take the median). Every line's expected duration is
|
||||
`units / rate`, floored at ~1.8 s. Rates across one batch ranged from
|
||||
0.96 to 2.33 words/s in English, and 2.3 to 4.1 characters/s in Mandarin —
|
||||
you cannot use a global constant.
|
||||
2. **Refill unanchored runs proportionally**, not with a fixed spacing. If a
|
||||
run sits between two anchors, distribute it by expected duration; if there
|
||||
is not enough room, compress proportionally.
|
||||
3. **Reject impossible anchors and enforce a minimum gap.** An anchor whose
|
||||
start is earlier than `5 s + everything before it could possibly take` is
|
||||
a false match — demote it and re-interpolate. Then sweep forward so no two
|
||||
lines start less than 1.2 s apart, and pull back from the end if the tail
|
||||
overruns the audio.
|
||||
|
||||
That last sweep is what turns "looks plausible" into "cannot flicker".
|
||||
|
||||
## Emitting both formats
|
||||
|
||||
Same timing array, two writers:
|
||||
|
||||
```python
|
||||
def lrc(ts, lines): # [mm:ss.xx]
|
||||
return "\n".join(f"[{m:02d}:{s:05.2f}]{l}" for (m, s), l in zip(ts, lines))
|
||||
|
||||
def srt(spans, lines): # hh:mm:ss,mmm
|
||||
out = []
|
||||
for i, (line, (a, b)) in enumerate(zip(lines, spans), 1):
|
||||
out.append(f"{i}\n{stamp(a)} --> {stamp(b)}\n{line}\n")
|
||||
return "\n".join(out)
|
||||
```
|
||||
|
||||
LRC needs only the start; SRT needs start **and** end, so use the *next*
|
||||
line's start as the current line's end (this is why the governor's minimum gap
|
||||
matters — without it, SRT blocks get zero duration and some players skip
|
||||
them entirely).
|
||||
|
||||
## Verification: the part I got wrong twice
|
||||
|
||||
The subtitles were correct long before the display was. Two bugs, both in the
|
||||
20-line player script, both invisible to a code read:
|
||||
|
||||
**Bug 1 — the box started at the bottom.** To find the current line I wrote
|
||||
`lines.findIndex(l => l.t > now) - 1`. Before the first line, `findIndex`
|
||||
returns `0`, so `i` became `-1`, and the guard `if (i < 0) i = lines.length - 1`
|
||||
turned "nothing yet" into "the last line". Playback opened scrolled to the
|
||||
outro.
|
||||
|
||||
**Bug 2 — it then scrolled to the bottom on the first chord.** Fixing bug 1, I
|
||||
centred the active line with `p.offsetTop`. `offsetTop` is measured from the
|
||||
nearest **positioned** ancestor — and the lyric box had no `position: relative`,
|
||||
so it returned the line's distance from the top of the *page*, thousands of
|
||||
pixels. `scrollTop` clamped to `maxScroll`: straight to the bottom.
|
||||
|
||||
The correct form does not care about positioning contexts:
|
||||
|
||||
```js
|
||||
const br = box.getBoundingClientRect(), pr = p.getBoundingClientRect();
|
||||
box.scrollTop += (pr.top - br.top) - (box.clientHeight - pr.height) / 2;
|
||||
```
|
||||
|
||||
And the lesson about *testing* matters more than the fix. I verified the index
|
||||
logic in Node — it passed. I looked at a screenshot — I misread which line was
|
||||
highlighted. Neither could see a layout bug. What worked was a numeric probe
|
||||
in headless Chrome: stub `currentTime`, dispatch `timeupdate`, then read the
|
||||
real DOM back out.
|
||||
|
||||
```bash
|
||||
chrome --headless=new --dump-dom --virtual-time-budget=8000 \
|
||||
--window-size=760,520 "file:///probe.html"
|
||||
```
|
||||
|
||||
```js
|
||||
Object.defineProperty(a, 'currentTime', { get: () => 100, configurable: true });
|
||||
a.dispatchEvent(new Event('timeupdate'));
|
||||
// then report: active line index, its offset inside the box, scrollTop, maxScroll
|
||||
```
|
||||
|
||||
The pass condition is a number, not an opinion: the active line's offset
|
||||
inside the box should be about half the box height (I got 124 px in a 274 px
|
||||
box), `scrollTop = 0` with nothing highlighted at t = 0, and `scrollTop =
|
||||
maxScroll` only for the final lines.
|
||||
|
||||
## Results
|
||||
|
||||
Eighteen songs, none of which shipped a timestamp. Every one now has line-level
|
||||
LRC and SRT, generated from lyrics plus audio alone.
|
||||
|
||||
| | |
|
||||
|---|---:|
|
||||
| Songs | 18 |
|
||||
| Subtitle lines | 342 |
|
||||
| Mean anchor coverage | 0.96 |
|
||||
| Songs with every line anchored | 9 / 18 (every line got a time) |
|
||||
| Processing time | 63–90 s per song, CPU only |
|
||||
| GPU used | none |
|
||||
|
||||
Each player below scrolls its lyrics, keeps the current line centred, and has
|
||||
a **.srt download** next to it if you want to burn the subtitles into a video
|
||||
or open them in VLC.
|
||||
|
||||
<style>
|
||||
.subs-track{margin:2.4rem 0}
|
||||
.subs-track figcaption{font-weight:600;margin-bottom:.35rem}
|
||||
.subs-meta{font-weight:400;opacity:.6;font-size:.9em}
|
||||
.subs-dl{float:right;font-size:.8em;font-weight:600;text-decoration:none;border:1px solid var(--accent,#22c55e);border-radius:6px;padding:.16rem .55rem;color:var(--accent,#22c55e);background:transparent}
|
||||
.subs-dl:hover{background:rgba(34,197,94,.14)}
|
||||
.subs-dl::before{content:"930"}
|
||||
.subs-track audio{width:100%;max-width:560px}
|
||||
.subs-box{position:relative;max-height:250px;overflow-y:auto;border:1px solid var(--border,#3a3f47);border-radius:8px;padding:.7rem 1rem;margin-top:.6rem;font-size:.95em;line-height:1.6}
|
||||
.subs-box p{margin:.18rem 0;opacity:.55}
|
||||
.subs-box p.on{opacity:1;font-weight:600;color:var(--accent,#22c55e)}
|
||||
</style>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Tiny Borrowed Shoes <span class="subs-meta">· Celtic folk · 21 lines · 139 s</span><a class="subs-dl" href="/subs/tiny-borrowed-shoes.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-1" src="https://content.hoelee.com/file/hoelee/music/Tiny-Borrowed-Shoes-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-1" hidden>[ti:Tiny Borrowed Shoes]
|
||||
[ar:Mr Hoelee]
|
||||
[00:11.56]Underneath the floorboards where the shadows play
|
||||
[00:14.60]I tied a little ribbon at the break of day
|
||||
[00:18.32]A button for a table, a thimble for a cup
|
||||
[00:22.02]I climbs the ivy ladder when the sun comes up
|
||||
[00:27.76]Sugar on the windowsill, a feather in my hand
|
||||
[00:31.42]The garden is a jungle and a wonderland
|
||||
[00:35.22]Careful not to wake the cat sleeping by the door
|
||||
[00:40.00]Tip-toe in my borrowed shoes across the wooden floor
|
||||
[00:44.46]Fly away, little breeze, carry me along
|
||||
[00:48.10]Through the clover and the leaves, singing my own song
|
||||
[00:51.90]Though the world is wide and tall, and I am very small
|
||||
[00:57.58]In the secret morning light, I can have it all
|
||||
[01:09.62]Dewdrops on the dandelion shining like a crown
|
||||
[01:12.24]I catch a floating parachute and spin around and down
|
||||
[01:15.98]If you hear a tiny laugh hiding in the wall
|
||||
[01:19.62]That is just my secret song, answering your call
|
||||
[01:27.26]Fly away, little breeze, carry me along
|
||||
[01:30.72]Through the clover and the leaves, singing my own song
|
||||
[01:34.58]Though the world is wide and tall, and I am very small
|
||||
[01:40.32]In the secret morning light, I can have it all
|
||||
[01:51.98]La-la-la, in the morning light...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Mist Over Skellig <span class="subs-meta">· Celtic folk · 18 lines · 194 s</span><a class="subs-dl" href="/subs/mist-over-skellig.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-2" src="https://content.hoelee.com/file/hoelee/music/Mist-Over-Skellig-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-2" hidden>[ti:Mist Over Skellig]
|
||||
[ar:Mr Hoelee]
|
||||
[00:21.73]Where the gray Atlantic meets the abbey stone
|
||||
[00:28.56]White birds circle high above the cliff alone
|
||||
[00:33.56]Carved into the stairway of a thousand years
|
||||
[00:42.16]Every drop of ocean rain whispers in my ears
|
||||
[00:49.16]Sail into the silver mist, beyond the western sea
|
||||
[00:57.96]Where the ancient lanterns glow for you and me
|
||||
[01:06.32]Hush now, hear the harp strings ring across the foam
|
||||
[01:14.74]Through the fog and falling stars, the tide will bring us home
|
||||
[01:25.36]Candles in the chapel window flicker in the gale
|
||||
[01:33.04]Ink upon the parchment tells a forgotten tale
|
||||
[01:57.48]Little hands upon the rock, looking at the sky
|
||||
[02:05.18]Watching all the centuries gently passing by
|
||||
[02:16.98]Sail into the silver mist, beyond the western sea
|
||||
[02:22.94]Where the ancient lanterns glow for you and me
|
||||
[02:30.46]Hush now, hear the harp strings ring across the foam
|
||||
[02:38.98]Through the fog and falling stars, the tide will bring us home
|
||||
[02:57.02]Oceans rise and oceans fall...
|
||||
[03:04.34]The tide will bring us home.</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Willow by the Silver Stream <span class="subs-meta">· Celtic folk · 19 lines · 198 s</span><a class="subs-dl" href="/subs/willow-by-the-silver-stream.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-3" src="https://content.hoelee.com/file/hoelee/music/Willow-by-the-Silver-Stream-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-3" hidden>[ti:Willow by the Silver Stream]
|
||||
[ar:Mr Hoelee]
|
||||
[00:23.83]Mmm-mmm, ahh-ahh...
|
||||
[00:26.70]Silver runs the quiet stream beneath the willow tree
|
||||
[00:33.64]Golden is the evening star shining down on me
|
||||
[00:40.54]All the little meadow flowers fold their petals tight
|
||||
[00:46.36]Waiting for the moon to weave a blanket of the night
|
||||
[00:53.02]May the wind be gentle on your weary wings
|
||||
[00:59.76]May you hear the lullaby the river softly sings
|
||||
[01:06.28]Close your eyes and drift away where the shadows gleam
|
||||
[01:13.52]Peace will walk beside you in the valley of a dream
|
||||
[01:27.32]Fireflies are dancing slow among the reeds and moss
|
||||
[01:33.14]Showing every wandering heart the stepping stones to cross
|
||||
[01:39.46]Nothing in the dark can harm the light inside your chest
|
||||
[01:46.66]Lay your head upon the grass and let the world rest
|
||||
[01:53.62]May the wind be gentle on your weary wings
|
||||
[01:59.76]May you hear the lullaby the river softly sings
|
||||
[02:06.30]Close your eyes and drift away where the shadows gleam
|
||||
[02:13.42]Peace will walk beside you in the valley of a dream
|
||||
[02:50.86]In the valley of a dream...
|
||||
[02:56.54]Sleep in peace tonight.</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Clockwork Starlight <span class="subs-meta">· Japanese healing · 21 lines · 161 s</span><a class="subs-dl" href="/subs/clockwork-starlight.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-4" src="https://content.hoelee.com/file/hoelee/music/Clockwork-Starlight-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-4" hidden>[ti:Clockwork Starlight]
|
||||
[ar:Mr Hoelee]
|
||||
[00:19.30]Ticking in the quiet tower made of porcelain and glass
|
||||
[00:23.44]I can see the painted clouds and paper swallows pass
|
||||
[00:32.36]Every gear is turning slow beneath the velvet sky
|
||||
[00:36.72]Counting all the shooting stars that never say goodbye
|
||||
[00:46.12]Someone left a silver key beside the windowpane
|
||||
[00:50.52]Unlocking all the memories hidden in the rain
|
||||
[00:59.86]Sing for the dawn across the endless night
|
||||
[01:04.66]Spinning the threads of shadow into light
|
||||
[01:09.20]Even if the clock should stop and time fades away
|
||||
[01:13.70]I will keep this little wish until the break of day
|
||||
[01:22.28]La-la-lu-la, hear the distant bell
|
||||
[01:31.34]Breaking the silent spell
|
||||
[01:38.14]Pages of an ancient book are fluttering like wings
|
||||
[01:42.50]Telling me of emerald seas and forgotten kings
|
||||
[01:52.16]With my small and trembling hands I open up the door
|
||||
[01:56.38]Stepping out into a world I've never seen before
|
||||
[02:05.70]Sing for the dawn across the endless night
|
||||
[02:10.56]Spinning the threads of shadow into light
|
||||
[02:15.02]Even if the clock should stop and time fades away
|
||||
[02:21.12]I will keep this little wish until the break of day
|
||||
[02:33.64]Until the break of day...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Waltz of the Dandelion <span class="subs-meta">· Japanese healing · 18 lines · 180 s</span><a class="subs-dl" href="/subs/waltz-of-the-dandelion.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-5" src="https://content.hoelee.com/file/hoelee/music/Waltz-of-the-Dandelion-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-5" hidden>[ti:Waltz of the Dandelion]
|
||||
[ar:Mr Hoelee]
|
||||
[00:17.62]One, two, three, the summer breeze is knocking at my door
|
||||
[00:22.56]Dancing with the sunlit dust upon the wooden floor
|
||||
[00:30.62]Out across the grassy hill the dandelions grow
|
||||
[00:38.40]Waiting for a little breath to tell them where to go
|
||||
[00:48.08]La-la-la, wherever you may fly
|
||||
[00:53.28]Underneath the big and gentle sky
|
||||
[00:57.28]Even when the seasons change and winter turns to spring
|
||||
[01:06.06]I will still remember every little song we sing
|
||||
[01:27.36]Drops of rain upon a leaf are rolling into one
|
||||
[01:34.62]Shining like a diamond in the afternoon sun
|
||||
[01:42.46]If you ever lose your way or feel a little sad
|
||||
[01:50.26]Think about the quiet days and all the smiles we had
|
||||
[02:00.18]La-la-la, wherever you may fly
|
||||
[02:05.28]Underneath the big and gentle sky
|
||||
[02:09.14]Even when the seasons change and winter turns to spring
|
||||
[02:17.90]I will still remember every little song we sing
|
||||
[02:25.96]La-la-la, la-la-la...
|
||||
[02:29.46]See you again someday.</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Whale in the Milky Way <span class="subs-meta">· Japanese healing · 20 lines · 165 s</span><a class="subs-dl" href="/subs/whale-in-the-milky-way.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-6" src="https://content.hoelee.com/file/hoelee/music/Whale-in-the-Milky-Way-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-6" hidden>[ti:Whale in the Milky Way]
|
||||
[ar:Mr Hoelee]
|
||||
[00:12.10]Ah-ah-ah, ooh-ooh...
|
||||
[00:15.70]Up above the sleeping town where all the rooftops end
|
||||
[00:21.86]Swims a giant silver whale that wants to be my friend
|
||||
[00:27.94]Ripples in the Milky Way are washing on the shore
|
||||
[00:34.34]Leaving little seashells by my bedroom door
|
||||
[00:40.98]Can you hear the quiet song echoing in space?
|
||||
[00:47.28]Every lonely little star has found a hiding place
|
||||
[00:59.60]Float away, float away, into the velvet blue
|
||||
[01:06.26]I am sending all my gentle lullabies to you
|
||||
[01:12.74]Through the clouds of stardust and the galaxies afar
|
||||
[01:19.59]You are never lost because I see how bright you are
|
||||
[01:38.82]Paper boats upon the sea of infinite delight
|
||||
[01:44.56]Carrying our tiny dreams across the quiet night
|
||||
[01:51.08]Hold my hand and do not fear the deep and silent sky
|
||||
[01:57.42]We can ride the silver whale and watch the world go by
|
||||
[02:04.14]Float away, float away, into the velvet blue
|
||||
[02:10.26]I am sending all my gentle lullabies to you
|
||||
[02:16.74]Through the clouds of stardust and the galaxies afar
|
||||
[02:23.52]You are never lost because I see how bright you are
|
||||
[02:32.74]Goodnight, little star...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Puddle Jumping Parade <span class="subs-meta">· Japanese cute · 21 lines · 106 s</span><a class="subs-dl" href="/subs/puddle-jumping-parade.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-7" src="https://content.hoelee.com/file/hoelee/music/Puddle-Jumping-Parade-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-7" hidden>[ti:Puddle Jumping Parade]
|
||||
[ar:Mr Hoelee]
|
||||
[00:06.76]One, two! Ready, go!
|
||||
[00:08.68]Put on my yellow boots and grab my red umbrella too
|
||||
[00:12.30]The rain has stopped and left the sky a shiny, happy blue!
|
||||
[00:16.08]A giant puddle in the street is looking back at me
|
||||
[00:20.08]I take a giant running leap—one, two, and three!
|
||||
[00:23.86]Splash! Goes the water, jumping to the sky
|
||||
[00:27.66]Even little sparrows stop to watch us marching by!
|
||||
[00:32.66]Hooray, hooray! Join the happy parade!
|
||||
[00:36.20]Dancing in the sunshine that the morning made!
|
||||
[00:40.16]Clap your hands together, stomp your little feet
|
||||
[00:44.44]Every single puddle makes the melody complete!
|
||||
[00:49.30]La-la-la, step in time, smiling ear to ear!
|
||||
[00:56.42]A snail upon the garden wall is waving with its horn
|
||||
[01:00.10]The brightest, biggest rainbow in the neighborhood is born!
|
||||
[01:03.90]We'll share a pocketful of sweets and sing a silly tune
|
||||
[01:07.72]And march around the playground till we reach the afternoon!
|
||||
[01:13.06]Hooray, hooray! Join the happy parade!
|
||||
[01:16.24]Dancing in the sunshine that the morning made!
|
||||
[01:20.12]Clap your hands together, stomp your little feet
|
||||
[01:23.90]Every single puddle makes the melody complete!
|
||||
[01:29.20]Jump! Splash! Hooray!</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Strawberry Cloud Bakery <span class="subs-meta">· Japanese cute · 19 lines · 101 s</span><a class="subs-dl" href="/subs/strawberry-cloud-bakery.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-8" src="https://content.hoelee.com/file/hoelee/music/Strawberry-Cloud-Bakery-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-8" hidden>[ti:Strawberry Cloud Bakery]
|
||||
[ar:Mr Hoelee]
|
||||
[00:08.32]Ding-dong rings the little bell above the bakery door
|
||||
[00:13.48]Flour on the apron and confetti on the floor
|
||||
[00:16.54]Butter in the mixing bowl and sugar in the pan
|
||||
[00:20.34]Baking up the fluffiest creations that I can!
|
||||
[00:24.20]Wait a little minute as the oven starts to glow
|
||||
[00:29.12]Watch the little loaves of bread begin to rise and grow!
|
||||
[00:34.04]Welcome to the bakery upon the strawberry cloud!
|
||||
[00:39.24]Where singing in the kitchen is definitely allowed!
|
||||
[00:42.76]A croissant for the puppy and a muffin for the cat
|
||||
[00:46.20]With a dollop of vanilla cream upon a beret hat!
|
||||
[00:57.82]Pour a cup of warm milk tea and sit beside the window
|
||||
[01:01.68]Wave hello to everyone walking down below
|
||||
[01:05.98]If your day is sour like a lemon on a tree
|
||||
[01:09.78]Take a bite of honey toast and share a smile with me!
|
||||
[01:13.90]Welcome to the bakery upon the strawberry cloud!
|
||||
[01:19.26]Where singing in the kitchen is definitely allowed!
|
||||
[01:22.48]A croissant for the puppy and a muffin for the cat
|
||||
[01:26.20]With a dollop of vanilla cream upon a beret hat!
|
||||
[01:33.58]Fresh out of the oven! Yum, yum!</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Captain Marshmallow <span class="subs-meta">· Japanese cute · 22 lines · 95 s</span><a class="subs-dl" href="/subs/captain-marshmallow.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-9" src="https://content.hoelee.com/file/hoelee/music/Captain-Marshmallow-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-9" hidden>[ti:Captain Marshmallow]
|
||||
[ar:Mr Hoelee]
|
||||
[00:08.06]Attention please! Captain on the deck!
|
||||
[00:10.64]Sofa is my pirate ship, the carpet is the sea
|
||||
[00:13.92]Pillow fort is waiting there for teddy bear and me
|
||||
[00:17.52]Put a paper triangle upon my curly head
|
||||
[00:20.96]No one has to take a nap or go to sleep in bed!
|
||||
[00:25.68]Left turn! Right turn! Watch out for the shark!
|
||||
[00:31.08]Wait—that's just the fluffy dog barking in the dark!
|
||||
[00:36.78]Aye, aye, Captain Marshmallow!
|
||||
[00:38.42]Sailing where the candy breezes blow!
|
||||
[00:42.04]Cookies in the treasure chest, chocolate on the map
|
||||
[00:45.56]Give a little salute and a double-double clap! (Clap-clap!)
|
||||
[00:50.74]We rule the living room today!
|
||||
[00:56.34]Homework is forbidden by the royal pirate law
|
||||
[00:59.60]Every single citizen must draw a dinosaur!
|
||||
[01:03.12]More pudding for the afternoon, and juice inside the cup
|
||||
[01:07.28]When the clock strikes dinner time, we'll eat the treasure up!
|
||||
[01:13.80]Aye, aye, Captain Marshmallow!
|
||||
[01:15.28]Sailing where the candy breezes blow!
|
||||
[01:19.00]Cookies in the treasure chest, chocolate on the map
|
||||
[01:22.46]Give a little salute and a double-double clap! (Clap-clap!)
|
||||
[01:26.82]We rule the living room today!
|
||||
[01:33.00]Mission accomplished! Yay!</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Lanterns on the Lotus Pond <span class="subs-meta">· Guofeng fusion · 19 lines · 132 s</span><a class="subs-dl" href="/subs/lanterns-on-the-lotus-pond.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-10" src="https://content.hoelee.com/file/hoelee/music/Lanterns-on-the-Lotus-Pond-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-10" hidden>[ti:Lanterns on the Lotus Pond]
|
||||
[ar:Mr Hoelee]
|
||||
[00:10.69]Patter goes the summer rain upon the lotus leaf
|
||||
[00:15.29]Washing all the dusty world and bringing cool relief
|
||||
[00:19.89]Stepping on the wet bluestone beside the willow bridge
|
||||
[00:24.49]Dragonflies are resting on the painted wooden ridge
|
||||
[00:28.58]Fold a little paper boat and light a candlewick
|
||||
[00:33.16]Make a wish before the current carries it so quick
|
||||
[00:40.46]Floating down the lotus pond, a hundred lanterns glow
|
||||
[00:46.38]Mirrored in the ripples where the silver fishes go
|
||||
[00:49.62]Listen to the bamboo flute across the misty stream
|
||||
[00:54.22]In the courtyard of the moon, we share a summer dream
|
||||
[01:03.96]Silk fan in my little hand to chase the fireflies
|
||||
[01:08.72]Red string braided in my hair beneath the lantern skies
|
||||
[01:13.36]Grandma tells a fairy tale of rabbits in the moon
|
||||
[01:18.22]While the sweet osmanthus flowers blossom in the June
|
||||
[01:25.54]Floating down the lotus pond, a hundred lanterns glow
|
||||
[01:30.02]Mirrored in the ripples where the silver fishes go
|
||||
[01:34.62]Listen to the bamboo flute across the misty stream
|
||||
[01:39.36]In the courtyard of the moon, we share a summer dream
|
||||
[02:06.76]Red lanterns drifting far away...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Wings of the Kunpeng <span class="subs-meta">· Guofeng fusion · 19 lines · 214 s</span><a class="subs-dl" href="/subs/wings-of-the-kunpeng.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-11" src="https://content.hoelee.com/file/hoelee/music/Wings-of-the-Kunpeng-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-11" hidden>[ti:Wings of the Kunpeng]
|
||||
[ar:Mr Hoelee]
|
||||
[00:25.18]Deep beneath the silent waves where no one ever sees
|
||||
[00:31.60]Sleeps a tiny silver fish dreaming of the breeze
|
||||
[00:38.16]Counting every falling tear that drops into the tide
|
||||
[00:44.50]Waiting for the heavy gates of heaven to divide
|
||||
[00:51.16]Do not fear the rising storm or shadows in the deep
|
||||
[00:57.24]There is still a ancient promise that the ocean keeps
|
||||
[01:06.34]Spread your wings and rise above the sea of clouds and rain
|
||||
[01:13.18]Never let the mortal world bind you with a chain
|
||||
[01:19.74]Fly across the mountain peaks where immortal rivers flow
|
||||
[01:25.96]I will watch you turn to wind and let your spirit go
|
||||
[01:49.10]Cycles of a thousand years are written in the stars
|
||||
[01:54.96]Time will heal the broken shells and wash away the scars
|
||||
[02:01.32]When the red camellia blooms upon the snowy shore
|
||||
[02:07.58]We will meet beyond the sky and part ways nevermore
|
||||
[02:16.86]Spread your wings and rise above the sea of clouds and rain
|
||||
[02:23.52]Never let the mortal world bind you with a chain
|
||||
[02:30.18]Fly across the mountain peaks where immortal rivers flow
|
||||
[02:36.26]I will watch you turn to wind and let your spirit go
|
||||
[02:48.84]Ah-ah-ah, fly into the wind...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>The Puppeteer's Thread <span class="subs-meta">· Guofeng fusion · 19 lines · 222 s</span><a class="subs-dl" href="/subs/the-puppeteer-s-thread.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-12" src="https://content.hoelee.com/file/hoelee/music/The-Puppeteers-Thread-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-12" hidden>[ti:The Puppeteer's Thread]
|
||||
[ar:Mr Hoelee]
|
||||
[00:24.12]Carved from a willow branch, painted with a smile
|
||||
[00:34.16]Dressed in tiny embroidered silk, traveling mile by mile
|
||||
[00:46.00]Ten thin threads of crimson silk tied upon my hands
|
||||
[00:55.50]Dancing in the market square across the distant lands
|
||||
[01:07.80]Crowds will gather when the gong begins to softly ring
|
||||
[01:13.12]Laughing at the little doll that cannot speak or sing
|
||||
[01:21.66]Dance in the lantern light, spin around the stage
|
||||
[01:26.70]Telling all the legends of a long-forgotten age
|
||||
[01:32.42]Though my heart is made of wood and cannot feel the rain
|
||||
[01:37.66]Every pull upon the thread remembers joy and pain
|
||||
[02:10.68]Autumn leaves are falling down upon the empty street
|
||||
[02:15.82]Only echoes remain of the applause so sweet
|
||||
[02:21.36]Keep me in the wooden box beside your warm fireplace
|
||||
[02:26.98]Even when the paint fades off my little smiling face
|
||||
[02:36.74]Dance in the lantern light, spin around the stage
|
||||
[02:42.86]Telling all the legends of a long-forgotten age
|
||||
[02:48.56]Though my heart is made of wood and cannot feel the rain
|
||||
[02:54.02]Every pull upon the thread remembers joy and pain
|
||||
[03:05.04]Ten thin threads of crimson silk...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Paper Airplane in September <span class="subs-meta">· Acoustic folk · 18 lines · 129 s</span><a class="subs-dl" href="/subs/paper-airplane-in-september.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-13" src="https://content.hoelee.com/file/hoelee/music/Paper-Airplane-in-September-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-13" hidden>[ti:Paper Airplane in September]
|
||||
[ar:Mr Hoelee]
|
||||
[00:10.42]Sunlight on the wooden desk is moving inch by inch
|
||||
[00:15.10]Sparrows on the telegraph wire never seem to flinch
|
||||
[00:20.88]I fold a page of notebook paper creases nice and neat
|
||||
[00:25.60]And throw it out the window to the quiet autumn street
|
||||
[00:30.88]Fly away, paper plane, into the golden air
|
||||
[00:36.36]Carry all the little words I didn't dare to share
|
||||
[00:41.64]Goodbye to the summer clouds, hello to the breeze
|
||||
[00:48.72]Floating past the bicycles and underneath the trees
|
||||
[01:03.30]Chalk dust on the blackboard fades as afternoon goes by
|
||||
[01:08.38]Clouds like cotton candy drift across the September sky
|
||||
[01:13.76]Every simple little thing we took for granted then
|
||||
[01:18.90]Stays inside a photograph we'll look at once again
|
||||
[01:24.30]Fly away, paper plane, into the golden air
|
||||
[01:29.66]Carry all the little words I didn't dare to share
|
||||
[01:34.90]Goodbye to the summer clouds, hello to the breeze
|
||||
[01:41.68]Floating past the bicycles and underneath the trees
|
||||
[01:57.78]Underneath the autumn trees...
|
||||
[02:02.18]Goodbye, summer days.</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Porridge and Evening Smoke <span class="subs-meta">· Acoustic folk · 17 lines · 144 s</span><a class="subs-dl" href="/subs/porridge-and-evening-smoke.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-14" src="https://content.hoelee.com/file/hoelee/music/Porridge-and-Evening-Smoke-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-14" hidden>[ti:Porridge and Evening Smoke]
|
||||
[ar:Mr Hoelee]
|
||||
[00:11.54]Smoke is rising from the roof into the purple sky
|
||||
[00:17.04]While the evening swallows call and hurry on up high
|
||||
[00:22.84]Steam upon the kitchen glass is blurring out the view
|
||||
[00:28.48]Sitting on a wooden stool, I wait for dinner too
|
||||
[00:34.02]One bowl of warm white rice, a dish of tender greens
|
||||
[00:39.52]The simplest kind of happiness is what the evening means
|
||||
[00:45.42]No matter how the outside world is noisy, cold, and wide
|
||||
[00:50.98]The lamp upon the dining table keeps us warm inside
|
||||
[01:09.84]Wrinkles on a gentle hand that smooths my messy hair
|
||||
[01:14.88]Telling me to eat it all and sit up in my chair
|
||||
[01:20.48]Years will pass like river water flowing to the sea
|
||||
[01:26.26]But this quiet kitchen light will always stay with me
|
||||
[01:33.04]One bowl of warm white rice, a dish of tender greens
|
||||
[01:38.76]The simplest kind of happiness is what the evening means
|
||||
[01:44.60]No matter how the outside world is noisy, cold, and wide
|
||||
[01:50.14]The lamp upon the dining table keeps us warm inside
|
||||
[01:57.40]The lamp is always on for you...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Green Train to the Sea <span class="subs-meta">· Acoustic folk · 17 lines · 109 s</span><a class="subs-dl" href="/subs/green-train-to-the-sea.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-15" src="https://content.hoelee.com/file/hoelee/music/Green-Train-to-the-Sea-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-15" hidden>[ti:Green Train to the Sea]
|
||||
[ar:Mr Hoelee]
|
||||
[00:28.22]Clickety-clack upon the track, the green train starts to roll
|
||||
[00:29.42]Leaving all the city gray behind the tunnel hole
|
||||
[00:30.62]Forehead pressed against the glass, I watch the fields go by
|
||||
[00:31.82]Golden wheat and windmills waving underneath the sky
|
||||
[00:33.02]Take me where the spring wind blows across the open blue
|
||||
[00:34.22]Ten miles of wildflowers blooming just for me and you
|
||||
[00:38.36]Every station has a name I've never heard before
|
||||
[00:42.68]Soon the scent of salty air will meet us at the shore
|
||||
[00:57.62]Strangers sharing oranges and stories in the seat
|
||||
[01:01.92]Sunlight dancing in the aisle around my dangling feet
|
||||
[01:06.68]Postcards in my backpack waiting for a stamp and pen
|
||||
[01:11.50]To tell the people back at home I'm coming back again
|
||||
[01:16.24]Take me where the spring wind blows across the open blue
|
||||
[01:21.14]Ten miles of wildflowers blooming just for me and you
|
||||
[01:26.34]Every station has a name I've never heard before
|
||||
[01:30.66]Soon the scent of salty air will meet us at the shore
|
||||
[01:46.82]Look, there is the sea...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Sanctuary of the Dawn <span class="subs-meta">· Choral · 19 lines · 183 s</span><a class="subs-dl" href="/subs/sanctuary-of-the-dawn.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-16" src="https://content.hoelee.com/file/hoelee/music/Sanctuary-of-the-Dawn-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-16" hidden>[ti:Sanctuary of the Dawn]
|
||||
[ar:Mr Hoelee]
|
||||
[00:22.82]Ahh-ahh, sanctus, ahh...
|
||||
[00:25.64]Shadows fade before the light that rises in the east
|
||||
[00:31.74]Every troubled storm is stilled and every sorrow ceased
|
||||
[00:37.76]Through the tall stained-glass windows morning beams descend
|
||||
[00:44.12]Shining on a quiet road where broken hearts can mend
|
||||
[00:50.56]Peace be with you, weary soul, lay your burden down
|
||||
[00:58.74]Where the silver rivers flow beyond the sleeping town
|
||||
[01:05.08]Lift your eyes unto the hills where golden angels sing
|
||||
[01:11.46]Rest beneath the gentle shelter of a shining wing
|
||||
[01:21.16]Like a bell across the valley ringing clear and true
|
||||
[01:27.18]Every dawn is bringing back a promise made anew
|
||||
[01:34.18]Walk into the quiet light and leave the dark behind
|
||||
[01:40.06]There is grace in every breath for all of humankind
|
||||
[01:48.40]Peace be with you, weary soul, lay your burden down
|
||||
[01:54.64]Where the silver rivers flow beyond the sleeping town
|
||||
[02:01.02]Lift your eyes unto the hills where golden angels sing
|
||||
[02:07.48]Rest beneath the gentle shelter of a shining wing
|
||||
[02:15.30]Peace be with you... forevermore.
|
||||
[02:26.48]Amen, ahh...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Look Upon Your Path <span class="subs-meta">· Choral · 17 lines · 122 s</span><a class="subs-dl" href="/subs/look-upon-your-path.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-17" src="https://content.hoelee.com/file/hoelee/music/Look-Upon-Your-Path-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-17" hidden>[ti:Look Upon Your Path]
|
||||
[ar:Mr Hoelee]
|
||||
[00:09.64]Look upon the winding path where fallen leaves are blown
|
||||
[00:14.64]Children walking hand in hand so no one is alone
|
||||
[00:19.64]Even when the winter wind is cold against your face
|
||||
[00:25.04]Every step you take today is leading to a place
|
||||
[00:31.52]Shine your light into the dark, let your voice be heard
|
||||
[00:36.60]Rising like the morning lark, a brave and little bird
|
||||
[00:41.60]Though the night is long and deep, the stars are watching still
|
||||
[00:46.68]Spring will wake the seeds asleep upon the quiet hill
|
||||
[00:57.00]Write a song upon the wind for everyone who strays
|
||||
[01:02.16]Hope is like a tiny spark that sets the sky ablaze
|
||||
[01:07.48]Hold the hand beside you tight and never look below
|
||||
[01:11.88]There are gardens waiting where the wildest rivers flow
|
||||
[01:21.30]Shine your light into the dark, let your voice be heard
|
||||
[01:26.36]Rising like the morning lark, a brave and little bird
|
||||
[01:31.34]Though the night is long and deep, the stars are watching still
|
||||
[01:36.44]Spring will wake the seeds asleep upon the quiet hill
|
||||
[01:45.98]Look upon your path... the dawn is near.</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Bells of the Winter Star <span class="subs-meta">· Choral · 18 lines · 178 s</span><a class="subs-dl" href="/subs/bells-of-the-winter-star.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-18" src="https://content.hoelee.com/file/hoelee/music/Bells-of-the-Winter-Star-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-18" hidden>[ti:Bells of the Winter Star]
|
||||
[ar:Mr Hoelee]
|
||||
[00:08.50]Ding-dong, ding-dong, ring out the bells...
|
||||
[00:18.20]Snowflakes falling from the sky in silence pure and white
|
||||
[00:25.44]Dressing every cedar bough in robes of silver light
|
||||
[00:34.56]Listen to the steeple bells across the frozen square
|
||||
[00:43.42]Sending out a melody upon the midnight air
|
||||
[00:52.92]Ring, silver bells, across the winter snow
|
||||
[01:01.30]Tell all the world the star has begun to glow
|
||||
[01:11.76]Gloria, gloria, hear the angels sing
|
||||
[01:19.28]Peace on the earth this holy night will bring
|
||||
[01:32.12]Candles in the frosted glass are shining warm and clear
|
||||
[01:40.42]Guiding every traveler home at the end of year
|
||||
[01:49.68]Every chime is like a prayer ascending to the sky
|
||||
[01:58.26]Watched by all the quiet stars that never pass us by
|
||||
[02:09.62]Ring, silver bells, across the winter snow
|
||||
[02:18.22]Tell all the world the star has begun to glow
|
||||
[02:28.00]Gloria, gloria, hear the angels sing
|
||||
[02:37.14]Peace on the earth this holy night will bring
|
||||
[02:49.30]Gloria... peace on the earth.</pre>
|
||||
</figure>
|
||||
<script>
|
||||
// subs-track: scroll LRC in step with <audio>; current line stays centred
|
||||
document.querySelectorAll('audio[data-lrc]').forEach((audio) => {
|
||||
const raw = document.getElementById(audio.dataset.lrc).textContent;
|
||||
const lines = raw.split('\n').map((l) => {
|
||||
const m = l.match(/\[(\d+):(\d+)(?:\.(\d+))?\](.*)/);
|
||||
return m ? { t: +m[1] * 60 + +m[2] + (+(m[3] || '0')) / 100, txt: m[4] } : null;
|
||||
}).filter(Boolean);
|
||||
const box = document.createElement('div');
|
||||
box.className = 'subs-box';
|
||||
lines.forEach((l) => { const p = document.createElement('p'); p.textContent = l.txt; box.appendChild(p); });
|
||||
audio.parentNode.insertBefore(box, audio.nextSibling);
|
||||
let cur = -1;
|
||||
audio.addEventListener('timeupdate', () => {
|
||||
const now = audio.currentTime;
|
||||
// last line whose timestamp has passed; -1 before the first line starts
|
||||
let i = -1;
|
||||
for (let k = 0; k < lines.length; k++) { if (lines[k].t <= now) i = k; else break; }
|
||||
if (i !== cur) {
|
||||
if (cur >= 0) box.children[cur].classList.remove('on');
|
||||
cur = i;
|
||||
if (cur >= 0) {
|
||||
const p = box.children[cur];
|
||||
p.classList.add('on');
|
||||
const br = box.getBoundingClientRect(), pr = p.getBoundingClientRect();
|
||||
box.scrollTop += (pr.top - br.top) - (box.clientHeight - pr.height) / 2;
|
||||
} else {
|
||||
box.scrollTop = 0;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,664 @@
|
||||
---
|
||||
title: "给没有时间戳的歌曲自动生成字幕"
|
||||
description: "AI 音乐工具只给你音频 —— 没有逐行时间,没有卡拉 OK。这是我给 18 首歌生成 LRC 与 SRT 字幕的完整流程,为什么单纯转写不行,以及让歌词框滚到底的两个 bug。"
|
||||
pubDate: 2026-10-20
|
||||
category: tutorials
|
||||
tags: ["subtitles", "lrc", "srt", "whisper", "forced-alignment", "ai-music", "python"]
|
||||
draft: false
|
||||
---
|
||||
我试过的每一个 AI 音乐工具,交出来的东西形状都一样:一个音频文件。没有一个会告诉你**每一句是什么时候唱的**。只想听的话没问题,但只要你想把歌词放到屏幕上 —— 卡拉 OK 的那一行、视频字幕、播放器下面的滚动框 —— 就完全不够用。
|
||||
|
||||
时间轴才是全部难点。音频反而是简单的部分。
|
||||
|
||||
这是我最后跑通的一套流程,用在本地生成的 18 首英文歌上,外加它在浏览器里崩掉的两个地方。下面全部可复现:它唯一需要你提供的东西,是**你已经写好的歌词**。
|
||||
|
||||
## 你真正需要的两样东西
|
||||
|
||||
两种字幕格式,共用同一份数据结构:
|
||||
|
||||
| 格式 | 用在哪 | 长什么样 |
|
||||
|---|---|---|
|
||||
| **LRC** | 音乐播放器、卡拉 OK 块、`<audio>` 歌词层 | `[mm:ss.xx]歌词行` |
|
||||
| **SRT** | VLC、YouTube、Premiere、ffmpeg 烧字 | 序号 / `hh:mm:ss,mmm --> hh:mm:ss,mmm` / 文本 |
|
||||
|
||||
两者本质都是「**行 → 起始时间**」(SRT 多一个结束时间)。所以真正的任务是:
|
||||
**给定一串歌词行和一个音频文件,找出每一行从哪儿开始。**
|
||||
|
||||
## 为什么「直接转写」行不通
|
||||
|
||||
最直觉的做法:跑一次语音识别,把它的分段结果写出去。它会因为两个原因失败。
|
||||
|
||||
**1. 唱腔的识别率远低于说话。** 模型要同时对付乐器、混响和拉长的元音。我这一批里,中文唱词的词错率大约 25–35%,电子混音密集的更差。
|
||||
|
||||
**2. 它会整段丢掉。** 有一首 140 BPM 的燃曲,整段第一段主歌压根没出现在转写结果里 —— 人声被埋住了,模型直接跳过去。另外两首丢了尾奏。
|
||||
|
||||
有洞的转写,变不出没洞的字幕。但换个框法就全通了:
|
||||
|
||||
> 你不是在**转写**,你是在**对齐**。你早就知道确切的字 —— 那就是你的歌词。音频只是用来提供**锚点**。
|
||||
|
||||
## 让它成立的思路反转
|
||||
|
||||
让识别器给出词级时间戳,然后拿它的输出跟你已知的歌词做最长公共子序列 diff。你根本不在乎它有没有听对 —— 你在乎的是它听出来的那些词**顺序对不对**,因为每一个匹配都是一个时间锚点。
|
||||
|
||||
```python
|
||||
import difflib
|
||||
|
||||
ref = [u for line in lines for u in units(line)] # 你的歌词
|
||||
hyp = [w[0] for w in asr_words] # 它听到的
|
||||
sm = difflib.SequenceMatcher(a=ref, b=hyp, autojunk=False)
|
||||
|
||||
for tag, i1, i2, j1, j2 in sm.get_opcodes():
|
||||
if tag != "equal":
|
||||
continue # 不匹配的地方只是空洞,不是错误
|
||||
for k in range(i2 - i1):
|
||||
matched[ref_index[i1 + k]] = asr_words[j1 + k][1:] # (起, 止)
|
||||
```
|
||||
|
||||
然后每一行歌词取它**第一个匹配单位**的时间戳。这种做法的稳健性是转写给不了的:60–70% 的词准确率就完全够用,因为每一个位置正确的词都钉住了它所属的那一行。
|
||||
|
||||
这批实测的锚定覆盖率 —— 也就是「拿到了至少一个真实锚点」的行占比:
|
||||
|
||||
| 语言 | 单位 | 平均锚定覆盖率 | 全行锚定的歌 |
|
||||
|---|---|---:|---|
|
||||
| 英文 | 词 | **0.96** | 9/18 首 |
|
||||
| 中文 | 字 | 0.70 | 11/11 首 |
|
||||
|
||||
英文对齐更好,原因很无聊:词之间用空格隔开,所以每个 ASR token 能干净地对应一个歌词 token。中文则必须把每个字平摊到 token 的时间跨度上:
|
||||
|
||||
```python
|
||||
span = w.end - w.start
|
||||
for i, ch in enumerate(hanzi_in_word):
|
||||
chars.append((ch, w.start + span * i / n, w.start + span * (i + 1) / n))
|
||||
```
|
||||
|
||||
## 修正器:三条规则,挡住荒唐的时间
|
||||
|
||||
锚点能带你走完大半程。但如果放着不管,锚点之间的空隙会产出物理上不可能的时间 —— 其中两个是真的咬到我了:
|
||||
|
||||
**故障 A —— 一行落在 0.0 秒。** 有一首歌的第一句歌词正好落在零点,前奏都还没结束,因为锚点搜索在开头的喊麦里匹配到了一个零散的字。
|
||||
|
||||
**故障 B —— 四行挤在 0.6 秒里。** 有一首歌的尾奏被识别器整段漏掉,剩下的行被压到相隔 0.18 秒。12 个字不可能在 0.18 秒里唱完。
|
||||
|
||||
所以对齐之后,跑三条规则:
|
||||
|
||||
1. **估计这首歌自己的速率** —— 用相邻两行都已锚定的样本(单位数 ÷ 秒数,取中位数)。每行的期望时长 = `单位数 ÷ 速率`,下限约 1.8 秒。同一批里英文是 0.96 到 2.33 词/秒,中文是 2.3 到 4.1 字/秒,**不能用全局常数**。
|
||||
2. **按比例填充没锚定的段**,而不是固定行距。一段夹在两个锚点之间,就按期望时长分摊;空间不够就等比压缩。
|
||||
3. **剔除不可能的锚点 + 强制最小行距。** 起始时间早于「5 秒 + 它前面所有内容可能占用的时间」的锚点一定是假匹配 —— 降级重算。然后正向扫一遍,保证任意两行起始间隔不小于 1.2 秒;若尾部被推出音频,再从末尾倒推收回。
|
||||
|
||||
最后那趟扫描,才是把「看起来合理」变成「不可能闪烁」的关键。
|
||||
|
||||
## 同时输出两种格式
|
||||
|
||||
同一份时间数组,两个写出函数:
|
||||
|
||||
```python
|
||||
def lrc(ts, lines): # [mm:ss.xx]
|
||||
return "\n".join(f"[{m:02d}:{s:05.2f}]{l}" for (m, s), l in zip(ts, lines))
|
||||
|
||||
def srt(spans, lines): # hh:mm:ss,mmm
|
||||
out = []
|
||||
for i, (line, (a, b)) in enumerate(zip(lines, spans), 1):
|
||||
out.append(f"{i}\n{stamp(a)} --> {stamp(b)}\n{line}\n")
|
||||
return "\n".join(out)
|
||||
```
|
||||
|
||||
LRC 只要起点;SRT 要起点**和**终点,所以用**下一行**的起点当作当前行的结束(这正是最小行距规则重要的原因 —— 没有它,SRT 块会变成零时长,有些播放器会整块跳过)。
|
||||
|
||||
## 验证:我错了两次的地方
|
||||
|
||||
字幕早在显示之前就是对的。两个 bug 都在那 20 行播放器脚本里,而且都是**读代码看不出来**的。
|
||||
|
||||
**Bug 1 —— 一开播就在末尾。** 找当前行我写的是 `lines.findIndex(l => l.t > now) - 1`。第一句之前 `findIndex` 返回 `0`,于是 `i` 变成 `-1`,而那句 `if (i < 0) i = lines.length - 1` 把「还没开始」翻译成了「最后一行」。播放器一打开就停在尾奏。
|
||||
|
||||
**Bug 2 —— 然后第一个和弦就滚到底。** 修完 bug 1,我用 `p.offsetTop` 来做居中。`offsetTop` 是相对**最近的定位祖先**量的 —— 而歌词框没有 `position: relative`,所以它返回的是这一行到**页面顶部**的距离,上千像素。`scrollTop` 被夹到 `maxScroll`:直接到底,字全看不见。
|
||||
|
||||
正确写法根本不关心定位上下文:
|
||||
|
||||
```js
|
||||
const br = box.getBoundingClientRect(), pr = p.getBoundingClientRect();
|
||||
box.scrollTop += (pr.top - br.top) - (box.clientHeight - pr.height) / 2;
|
||||
```
|
||||
|
||||
**关于「怎么测」的教训比修复本身更重要。** 我在 Node 里单测过索引逻辑 —— 通过了。我看过截图 —— 我把高亮的那一行看错了。两者都看不见布局 bug。真正有效的是在 headless Chrome 里打数值探针:stub 掉 `currentTime`,派发 `timeupdate`,然后把真实 DOM 读回来。
|
||||
|
||||
```bash
|
||||
chrome --headless=new --dump-dom --virtual-time-budget=8000 \
|
||||
--window-size=760,520 "file:///probe.html"
|
||||
```
|
||||
|
||||
```js
|
||||
Object.defineProperty(a, 'currentTime', { get: () => 100, configurable: true });
|
||||
a.dispatchEvent(new Event('timeupdate'));
|
||||
// 然后输出:当前行索引、它在框内的偏移、scrollTop、maxScroll
|
||||
```
|
||||
|
||||
通过条件是**数字**,不是观点:当前行在框内的偏移应当约为框高的一半(我得到的 274 px 框里是 124 px);t = 0 时 `scrollTop = 0` 且没有任何行高亮;只有最后几句时 `scrollTop = maxScroll`。
|
||||
|
||||
## 结果
|
||||
|
||||
18 首歌,没有一首自带时间戳。现在每一首都有逐行的 LRC 和 SRT —— 只靠歌词加音频生成。
|
||||
|
||||
| | |
|
||||
|---|---:|
|
||||
| 歌曲 | 18 |
|
||||
| 字幕行数 | 342 |
|
||||
| 平均锚定覆盖率 | 0.96 |
|
||||
| 全行锚定的歌 | 9 / 18(每行都有时间) |
|
||||
| 处理耗时 | 每首 63–90 秒,纯 CPU |
|
||||
| 占用显卡 | 无 |
|
||||
|
||||
下面每个播放器都会滚动歌词、把当前句保持在中间,旁边还有 **.srt 下载** —— 想烧字进视频或在 VLC 里打开都行。
|
||||
|
||||
<style>
|
||||
.subs-track{margin:2.4rem 0}
|
||||
.subs-track figcaption{font-weight:600;margin-bottom:.35rem}
|
||||
.subs-meta{font-weight:400;opacity:.6;font-size:.9em}
|
||||
.subs-dl{float:right;font-size:.8em;font-weight:600;text-decoration:none;border:1px solid var(--accent,#22c55e);border-radius:6px;padding:.16rem .55rem;color:var(--accent,#22c55e);background:transparent}
|
||||
.subs-dl:hover{background:rgba(34,197,94,.14)}
|
||||
.subs-dl::before{content:"930"}
|
||||
.subs-track audio{width:100%;max-width:560px}
|
||||
.subs-box{position:relative;max-height:250px;overflow-y:auto;border:1px solid var(--border,#3a3f47);border-radius:8px;padding:.7rem 1rem;margin-top:.6rem;font-size:.95em;line-height:1.6}
|
||||
.subs-box p{margin:.18rem 0;opacity:.55}
|
||||
.subs-box p.on{opacity:1;font-weight:600;color:var(--accent,#22c55e)}
|
||||
</style>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Tiny Borrowed Shoes <span class="subs-meta">· Celtic folk · 21 lines · 139 s</span><a class="subs-dl" href="/subs/tiny-borrowed-shoes.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-1" src="https://content.hoelee.com/file/hoelee/music/Tiny-Borrowed-Shoes-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-1" hidden>[ti:Tiny Borrowed Shoes]
|
||||
[ar:Mr Hoelee]
|
||||
[00:11.56]Underneath the floorboards where the shadows play
|
||||
[00:14.60]I tied a little ribbon at the break of day
|
||||
[00:18.32]A button for a table, a thimble for a cup
|
||||
[00:22.02]I climbs the ivy ladder when the sun comes up
|
||||
[00:27.76]Sugar on the windowsill, a feather in my hand
|
||||
[00:31.42]The garden is a jungle and a wonderland
|
||||
[00:35.22]Careful not to wake the cat sleeping by the door
|
||||
[00:40.00]Tip-toe in my borrowed shoes across the wooden floor
|
||||
[00:44.46]Fly away, little breeze, carry me along
|
||||
[00:48.10]Through the clover and the leaves, singing my own song
|
||||
[00:51.90]Though the world is wide and tall, and I am very small
|
||||
[00:57.58]In the secret morning light, I can have it all
|
||||
[01:09.62]Dewdrops on the dandelion shining like a crown
|
||||
[01:12.24]I catch a floating parachute and spin around and down
|
||||
[01:15.98]If you hear a tiny laugh hiding in the wall
|
||||
[01:19.62]That is just my secret song, answering your call
|
||||
[01:27.26]Fly away, little breeze, carry me along
|
||||
[01:30.72]Through the clover and the leaves, singing my own song
|
||||
[01:34.58]Though the world is wide and tall, and I am very small
|
||||
[01:40.32]In the secret morning light, I can have it all
|
||||
[01:51.98]La-la-la, in the morning light...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Mist Over Skellig <span class="subs-meta">· Celtic folk · 18 lines · 194 s</span><a class="subs-dl" href="/subs/mist-over-skellig.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-2" src="https://content.hoelee.com/file/hoelee/music/Mist-Over-Skellig-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-2" hidden>[ti:Mist Over Skellig]
|
||||
[ar:Mr Hoelee]
|
||||
[00:21.73]Where the gray Atlantic meets the abbey stone
|
||||
[00:28.56]White birds circle high above the cliff alone
|
||||
[00:33.56]Carved into the stairway of a thousand years
|
||||
[00:42.16]Every drop of ocean rain whispers in my ears
|
||||
[00:49.16]Sail into the silver mist, beyond the western sea
|
||||
[00:57.96]Where the ancient lanterns glow for you and me
|
||||
[01:06.32]Hush now, hear the harp strings ring across the foam
|
||||
[01:14.74]Through the fog and falling stars, the tide will bring us home
|
||||
[01:25.36]Candles in the chapel window flicker in the gale
|
||||
[01:33.04]Ink upon the parchment tells a forgotten tale
|
||||
[01:57.48]Little hands upon the rock, looking at the sky
|
||||
[02:05.18]Watching all the centuries gently passing by
|
||||
[02:16.98]Sail into the silver mist, beyond the western sea
|
||||
[02:22.94]Where the ancient lanterns glow for you and me
|
||||
[02:30.46]Hush now, hear the harp strings ring across the foam
|
||||
[02:38.98]Through the fog and falling stars, the tide will bring us home
|
||||
[02:57.02]Oceans rise and oceans fall...
|
||||
[03:04.34]The tide will bring us home.</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Willow by the Silver Stream <span class="subs-meta">· Celtic folk · 19 lines · 198 s</span><a class="subs-dl" href="/subs/willow-by-the-silver-stream.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-3" src="https://content.hoelee.com/file/hoelee/music/Willow-by-the-Silver-Stream-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-3" hidden>[ti:Willow by the Silver Stream]
|
||||
[ar:Mr Hoelee]
|
||||
[00:23.83]Mmm-mmm, ahh-ahh...
|
||||
[00:26.70]Silver runs the quiet stream beneath the willow tree
|
||||
[00:33.64]Golden is the evening star shining down on me
|
||||
[00:40.54]All the little meadow flowers fold their petals tight
|
||||
[00:46.36]Waiting for the moon to weave a blanket of the night
|
||||
[00:53.02]May the wind be gentle on your weary wings
|
||||
[00:59.76]May you hear the lullaby the river softly sings
|
||||
[01:06.28]Close your eyes and drift away where the shadows gleam
|
||||
[01:13.52]Peace will walk beside you in the valley of a dream
|
||||
[01:27.32]Fireflies are dancing slow among the reeds and moss
|
||||
[01:33.14]Showing every wandering heart the stepping stones to cross
|
||||
[01:39.46]Nothing in the dark can harm the light inside your chest
|
||||
[01:46.66]Lay your head upon the grass and let the world rest
|
||||
[01:53.62]May the wind be gentle on your weary wings
|
||||
[01:59.76]May you hear the lullaby the river softly sings
|
||||
[02:06.30]Close your eyes and drift away where the shadows gleam
|
||||
[02:13.42]Peace will walk beside you in the valley of a dream
|
||||
[02:50.86]In the valley of a dream...
|
||||
[02:56.54]Sleep in peace tonight.</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Clockwork Starlight <span class="subs-meta">· Japanese healing · 21 lines · 161 s</span><a class="subs-dl" href="/subs/clockwork-starlight.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-4" src="https://content.hoelee.com/file/hoelee/music/Clockwork-Starlight-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-4" hidden>[ti:Clockwork Starlight]
|
||||
[ar:Mr Hoelee]
|
||||
[00:19.30]Ticking in the quiet tower made of porcelain and glass
|
||||
[00:23.44]I can see the painted clouds and paper swallows pass
|
||||
[00:32.36]Every gear is turning slow beneath the velvet sky
|
||||
[00:36.72]Counting all the shooting stars that never say goodbye
|
||||
[00:46.12]Someone left a silver key beside the windowpane
|
||||
[00:50.52]Unlocking all the memories hidden in the rain
|
||||
[00:59.86]Sing for the dawn across the endless night
|
||||
[01:04.66]Spinning the threads of shadow into light
|
||||
[01:09.20]Even if the clock should stop and time fades away
|
||||
[01:13.70]I will keep this little wish until the break of day
|
||||
[01:22.28]La-la-lu-la, hear the distant bell
|
||||
[01:31.34]Breaking the silent spell
|
||||
[01:38.14]Pages of an ancient book are fluttering like wings
|
||||
[01:42.50]Telling me of emerald seas and forgotten kings
|
||||
[01:52.16]With my small and trembling hands I open up the door
|
||||
[01:56.38]Stepping out into a world I've never seen before
|
||||
[02:05.70]Sing for the dawn across the endless night
|
||||
[02:10.56]Spinning the threads of shadow into light
|
||||
[02:15.02]Even if the clock should stop and time fades away
|
||||
[02:21.12]I will keep this little wish until the break of day
|
||||
[02:33.64]Until the break of day...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Waltz of the Dandelion <span class="subs-meta">· Japanese healing · 18 lines · 180 s</span><a class="subs-dl" href="/subs/waltz-of-the-dandelion.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-5" src="https://content.hoelee.com/file/hoelee/music/Waltz-of-the-Dandelion-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-5" hidden>[ti:Waltz of the Dandelion]
|
||||
[ar:Mr Hoelee]
|
||||
[00:17.62]One, two, three, the summer breeze is knocking at my door
|
||||
[00:22.56]Dancing with the sunlit dust upon the wooden floor
|
||||
[00:30.62]Out across the grassy hill the dandelions grow
|
||||
[00:38.40]Waiting for a little breath to tell them where to go
|
||||
[00:48.08]La-la-la, wherever you may fly
|
||||
[00:53.28]Underneath the big and gentle sky
|
||||
[00:57.28]Even when the seasons change and winter turns to spring
|
||||
[01:06.06]I will still remember every little song we sing
|
||||
[01:27.36]Drops of rain upon a leaf are rolling into one
|
||||
[01:34.62]Shining like a diamond in the afternoon sun
|
||||
[01:42.46]If you ever lose your way or feel a little sad
|
||||
[01:50.26]Think about the quiet days and all the smiles we had
|
||||
[02:00.18]La-la-la, wherever you may fly
|
||||
[02:05.28]Underneath the big and gentle sky
|
||||
[02:09.14]Even when the seasons change and winter turns to spring
|
||||
[02:17.90]I will still remember every little song we sing
|
||||
[02:25.96]La-la-la, la-la-la...
|
||||
[02:29.46]See you again someday.</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Whale in the Milky Way <span class="subs-meta">· Japanese healing · 20 lines · 165 s</span><a class="subs-dl" href="/subs/whale-in-the-milky-way.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-6" src="https://content.hoelee.com/file/hoelee/music/Whale-in-the-Milky-Way-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-6" hidden>[ti:Whale in the Milky Way]
|
||||
[ar:Mr Hoelee]
|
||||
[00:12.10]Ah-ah-ah, ooh-ooh...
|
||||
[00:15.70]Up above the sleeping town where all the rooftops end
|
||||
[00:21.86]Swims a giant silver whale that wants to be my friend
|
||||
[00:27.94]Ripples in the Milky Way are washing on the shore
|
||||
[00:34.34]Leaving little seashells by my bedroom door
|
||||
[00:40.98]Can you hear the quiet song echoing in space?
|
||||
[00:47.28]Every lonely little star has found a hiding place
|
||||
[00:59.60]Float away, float away, into the velvet blue
|
||||
[01:06.26]I am sending all my gentle lullabies to you
|
||||
[01:12.74]Through the clouds of stardust and the galaxies afar
|
||||
[01:19.59]You are never lost because I see how bright you are
|
||||
[01:38.82]Paper boats upon the sea of infinite delight
|
||||
[01:44.56]Carrying our tiny dreams across the quiet night
|
||||
[01:51.08]Hold my hand and do not fear the deep and silent sky
|
||||
[01:57.42]We can ride the silver whale and watch the world go by
|
||||
[02:04.14]Float away, float away, into the velvet blue
|
||||
[02:10.26]I am sending all my gentle lullabies to you
|
||||
[02:16.74]Through the clouds of stardust and the galaxies afar
|
||||
[02:23.52]You are never lost because I see how bright you are
|
||||
[02:32.74]Goodnight, little star...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Puddle Jumping Parade <span class="subs-meta">· Japanese cute · 21 lines · 106 s</span><a class="subs-dl" href="/subs/puddle-jumping-parade.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-7" src="https://content.hoelee.com/file/hoelee/music/Puddle-Jumping-Parade-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-7" hidden>[ti:Puddle Jumping Parade]
|
||||
[ar:Mr Hoelee]
|
||||
[00:06.76]One, two! Ready, go!
|
||||
[00:08.68]Put on my yellow boots and grab my red umbrella too
|
||||
[00:12.30]The rain has stopped and left the sky a shiny, happy blue!
|
||||
[00:16.08]A giant puddle in the street is looking back at me
|
||||
[00:20.08]I take a giant running leap—one, two, and three!
|
||||
[00:23.86]Splash! Goes the water, jumping to the sky
|
||||
[00:27.66]Even little sparrows stop to watch us marching by!
|
||||
[00:32.66]Hooray, hooray! Join the happy parade!
|
||||
[00:36.20]Dancing in the sunshine that the morning made!
|
||||
[00:40.16]Clap your hands together, stomp your little feet
|
||||
[00:44.44]Every single puddle makes the melody complete!
|
||||
[00:49.30]La-la-la, step in time, smiling ear to ear!
|
||||
[00:56.42]A snail upon the garden wall is waving with its horn
|
||||
[01:00.10]The brightest, biggest rainbow in the neighborhood is born!
|
||||
[01:03.90]We'll share a pocketful of sweets and sing a silly tune
|
||||
[01:07.72]And march around the playground till we reach the afternoon!
|
||||
[01:13.06]Hooray, hooray! Join the happy parade!
|
||||
[01:16.24]Dancing in the sunshine that the morning made!
|
||||
[01:20.12]Clap your hands together, stomp your little feet
|
||||
[01:23.90]Every single puddle makes the melody complete!
|
||||
[01:29.20]Jump! Splash! Hooray!</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Strawberry Cloud Bakery <span class="subs-meta">· Japanese cute · 19 lines · 101 s</span><a class="subs-dl" href="/subs/strawberry-cloud-bakery.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-8" src="https://content.hoelee.com/file/hoelee/music/Strawberry-Cloud-Bakery-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-8" hidden>[ti:Strawberry Cloud Bakery]
|
||||
[ar:Mr Hoelee]
|
||||
[00:08.32]Ding-dong rings the little bell above the bakery door
|
||||
[00:13.48]Flour on the apron and confetti on the floor
|
||||
[00:16.54]Butter in the mixing bowl and sugar in the pan
|
||||
[00:20.34]Baking up the fluffiest creations that I can!
|
||||
[00:24.20]Wait a little minute as the oven starts to glow
|
||||
[00:29.12]Watch the little loaves of bread begin to rise and grow!
|
||||
[00:34.04]Welcome to the bakery upon the strawberry cloud!
|
||||
[00:39.24]Where singing in the kitchen is definitely allowed!
|
||||
[00:42.76]A croissant for the puppy and a muffin for the cat
|
||||
[00:46.20]With a dollop of vanilla cream upon a beret hat!
|
||||
[00:57.82]Pour a cup of warm milk tea and sit beside the window
|
||||
[01:01.68]Wave hello to everyone walking down below
|
||||
[01:05.98]If your day is sour like a lemon on a tree
|
||||
[01:09.78]Take a bite of honey toast and share a smile with me!
|
||||
[01:13.90]Welcome to the bakery upon the strawberry cloud!
|
||||
[01:19.26]Where singing in the kitchen is definitely allowed!
|
||||
[01:22.48]A croissant for the puppy and a muffin for the cat
|
||||
[01:26.20]With a dollop of vanilla cream upon a beret hat!
|
||||
[01:33.58]Fresh out of the oven! Yum, yum!</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Captain Marshmallow <span class="subs-meta">· Japanese cute · 22 lines · 95 s</span><a class="subs-dl" href="/subs/captain-marshmallow.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-9" src="https://content.hoelee.com/file/hoelee/music/Captain-Marshmallow-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-9" hidden>[ti:Captain Marshmallow]
|
||||
[ar:Mr Hoelee]
|
||||
[00:08.06]Attention please! Captain on the deck!
|
||||
[00:10.64]Sofa is my pirate ship, the carpet is the sea
|
||||
[00:13.92]Pillow fort is waiting there for teddy bear and me
|
||||
[00:17.52]Put a paper triangle upon my curly head
|
||||
[00:20.96]No one has to take a nap or go to sleep in bed!
|
||||
[00:25.68]Left turn! Right turn! Watch out for the shark!
|
||||
[00:31.08]Wait—that's just the fluffy dog barking in the dark!
|
||||
[00:36.78]Aye, aye, Captain Marshmallow!
|
||||
[00:38.42]Sailing where the candy breezes blow!
|
||||
[00:42.04]Cookies in the treasure chest, chocolate on the map
|
||||
[00:45.56]Give a little salute and a double-double clap! (Clap-clap!)
|
||||
[00:50.74]We rule the living room today!
|
||||
[00:56.34]Homework is forbidden by the royal pirate law
|
||||
[00:59.60]Every single citizen must draw a dinosaur!
|
||||
[01:03.12]More pudding for the afternoon, and juice inside the cup
|
||||
[01:07.28]When the clock strikes dinner time, we'll eat the treasure up!
|
||||
[01:13.80]Aye, aye, Captain Marshmallow!
|
||||
[01:15.28]Sailing where the candy breezes blow!
|
||||
[01:19.00]Cookies in the treasure chest, chocolate on the map
|
||||
[01:22.46]Give a little salute and a double-double clap! (Clap-clap!)
|
||||
[01:26.82]We rule the living room today!
|
||||
[01:33.00]Mission accomplished! Yay!</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Lanterns on the Lotus Pond <span class="subs-meta">· Guofeng fusion · 19 lines · 132 s</span><a class="subs-dl" href="/subs/lanterns-on-the-lotus-pond.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-10" src="https://content.hoelee.com/file/hoelee/music/Lanterns-on-the-Lotus-Pond-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-10" hidden>[ti:Lanterns on the Lotus Pond]
|
||||
[ar:Mr Hoelee]
|
||||
[00:10.69]Patter goes the summer rain upon the lotus leaf
|
||||
[00:15.29]Washing all the dusty world and bringing cool relief
|
||||
[00:19.89]Stepping on the wet bluestone beside the willow bridge
|
||||
[00:24.49]Dragonflies are resting on the painted wooden ridge
|
||||
[00:28.58]Fold a little paper boat and light a candlewick
|
||||
[00:33.16]Make a wish before the current carries it so quick
|
||||
[00:40.46]Floating down the lotus pond, a hundred lanterns glow
|
||||
[00:46.38]Mirrored in the ripples where the silver fishes go
|
||||
[00:49.62]Listen to the bamboo flute across the misty stream
|
||||
[00:54.22]In the courtyard of the moon, we share a summer dream
|
||||
[01:03.96]Silk fan in my little hand to chase the fireflies
|
||||
[01:08.72]Red string braided in my hair beneath the lantern skies
|
||||
[01:13.36]Grandma tells a fairy tale of rabbits in the moon
|
||||
[01:18.22]While the sweet osmanthus flowers blossom in the June
|
||||
[01:25.54]Floating down the lotus pond, a hundred lanterns glow
|
||||
[01:30.02]Mirrored in the ripples where the silver fishes go
|
||||
[01:34.62]Listen to the bamboo flute across the misty stream
|
||||
[01:39.36]In the courtyard of the moon, we share a summer dream
|
||||
[02:06.76]Red lanterns drifting far away...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Wings of the Kunpeng <span class="subs-meta">· Guofeng fusion · 19 lines · 214 s</span><a class="subs-dl" href="/subs/wings-of-the-kunpeng.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-11" src="https://content.hoelee.com/file/hoelee/music/Wings-of-the-Kunpeng-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-11" hidden>[ti:Wings of the Kunpeng]
|
||||
[ar:Mr Hoelee]
|
||||
[00:25.18]Deep beneath the silent waves where no one ever sees
|
||||
[00:31.60]Sleeps a tiny silver fish dreaming of the breeze
|
||||
[00:38.16]Counting every falling tear that drops into the tide
|
||||
[00:44.50]Waiting for the heavy gates of heaven to divide
|
||||
[00:51.16]Do not fear the rising storm or shadows in the deep
|
||||
[00:57.24]There is still a ancient promise that the ocean keeps
|
||||
[01:06.34]Spread your wings and rise above the sea of clouds and rain
|
||||
[01:13.18]Never let the mortal world bind you with a chain
|
||||
[01:19.74]Fly across the mountain peaks where immortal rivers flow
|
||||
[01:25.96]I will watch you turn to wind and let your spirit go
|
||||
[01:49.10]Cycles of a thousand years are written in the stars
|
||||
[01:54.96]Time will heal the broken shells and wash away the scars
|
||||
[02:01.32]When the red camellia blooms upon the snowy shore
|
||||
[02:07.58]We will meet beyond the sky and part ways nevermore
|
||||
[02:16.86]Spread your wings and rise above the sea of clouds and rain
|
||||
[02:23.52]Never let the mortal world bind you with a chain
|
||||
[02:30.18]Fly across the mountain peaks where immortal rivers flow
|
||||
[02:36.26]I will watch you turn to wind and let your spirit go
|
||||
[02:48.84]Ah-ah-ah, fly into the wind...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>The Puppeteer's Thread <span class="subs-meta">· Guofeng fusion · 19 lines · 222 s</span><a class="subs-dl" href="/subs/the-puppeteer-s-thread.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-12" src="https://content.hoelee.com/file/hoelee/music/The-Puppeteers-Thread-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-12" hidden>[ti:The Puppeteer's Thread]
|
||||
[ar:Mr Hoelee]
|
||||
[00:24.12]Carved from a willow branch, painted with a smile
|
||||
[00:34.16]Dressed in tiny embroidered silk, traveling mile by mile
|
||||
[00:46.00]Ten thin threads of crimson silk tied upon my hands
|
||||
[00:55.50]Dancing in the market square across the distant lands
|
||||
[01:07.80]Crowds will gather when the gong begins to softly ring
|
||||
[01:13.12]Laughing at the little doll that cannot speak or sing
|
||||
[01:21.66]Dance in the lantern light, spin around the stage
|
||||
[01:26.70]Telling all the legends of a long-forgotten age
|
||||
[01:32.42]Though my heart is made of wood and cannot feel the rain
|
||||
[01:37.66]Every pull upon the thread remembers joy and pain
|
||||
[02:10.68]Autumn leaves are falling down upon the empty street
|
||||
[02:15.82]Only echoes remain of the applause so sweet
|
||||
[02:21.36]Keep me in the wooden box beside your warm fireplace
|
||||
[02:26.98]Even when the paint fades off my little smiling face
|
||||
[02:36.74]Dance in the lantern light, spin around the stage
|
||||
[02:42.86]Telling all the legends of a long-forgotten age
|
||||
[02:48.56]Though my heart is made of wood and cannot feel the rain
|
||||
[02:54.02]Every pull upon the thread remembers joy and pain
|
||||
[03:05.04]Ten thin threads of crimson silk...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Paper Airplane in September <span class="subs-meta">· Acoustic folk · 18 lines · 129 s</span><a class="subs-dl" href="/subs/paper-airplane-in-september.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-13" src="https://content.hoelee.com/file/hoelee/music/Paper-Airplane-in-September-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-13" hidden>[ti:Paper Airplane in September]
|
||||
[ar:Mr Hoelee]
|
||||
[00:10.42]Sunlight on the wooden desk is moving inch by inch
|
||||
[00:15.10]Sparrows on the telegraph wire never seem to flinch
|
||||
[00:20.88]I fold a page of notebook paper creases nice and neat
|
||||
[00:25.60]And throw it out the window to the quiet autumn street
|
||||
[00:30.88]Fly away, paper plane, into the golden air
|
||||
[00:36.36]Carry all the little words I didn't dare to share
|
||||
[00:41.64]Goodbye to the summer clouds, hello to the breeze
|
||||
[00:48.72]Floating past the bicycles and underneath the trees
|
||||
[01:03.30]Chalk dust on the blackboard fades as afternoon goes by
|
||||
[01:08.38]Clouds like cotton candy drift across the September sky
|
||||
[01:13.76]Every simple little thing we took for granted then
|
||||
[01:18.90]Stays inside a photograph we'll look at once again
|
||||
[01:24.30]Fly away, paper plane, into the golden air
|
||||
[01:29.66]Carry all the little words I didn't dare to share
|
||||
[01:34.90]Goodbye to the summer clouds, hello to the breeze
|
||||
[01:41.68]Floating past the bicycles and underneath the trees
|
||||
[01:57.78]Underneath the autumn trees...
|
||||
[02:02.18]Goodbye, summer days.</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Porridge and Evening Smoke <span class="subs-meta">· Acoustic folk · 17 lines · 144 s</span><a class="subs-dl" href="/subs/porridge-and-evening-smoke.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-14" src="https://content.hoelee.com/file/hoelee/music/Porridge-and-Evening-Smoke-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-14" hidden>[ti:Porridge and Evening Smoke]
|
||||
[ar:Mr Hoelee]
|
||||
[00:11.54]Smoke is rising from the roof into the purple sky
|
||||
[00:17.04]While the evening swallows call and hurry on up high
|
||||
[00:22.84]Steam upon the kitchen glass is blurring out the view
|
||||
[00:28.48]Sitting on a wooden stool, I wait for dinner too
|
||||
[00:34.02]One bowl of warm white rice, a dish of tender greens
|
||||
[00:39.52]The simplest kind of happiness is what the evening means
|
||||
[00:45.42]No matter how the outside world is noisy, cold, and wide
|
||||
[00:50.98]The lamp upon the dining table keeps us warm inside
|
||||
[01:09.84]Wrinkles on a gentle hand that smooths my messy hair
|
||||
[01:14.88]Telling me to eat it all and sit up in my chair
|
||||
[01:20.48]Years will pass like river water flowing to the sea
|
||||
[01:26.26]But this quiet kitchen light will always stay with me
|
||||
[01:33.04]One bowl of warm white rice, a dish of tender greens
|
||||
[01:38.76]The simplest kind of happiness is what the evening means
|
||||
[01:44.60]No matter how the outside world is noisy, cold, and wide
|
||||
[01:50.14]The lamp upon the dining table keeps us warm inside
|
||||
[01:57.40]The lamp is always on for you...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Green Train to the Sea <span class="subs-meta">· Acoustic folk · 17 lines · 109 s</span><a class="subs-dl" href="/subs/green-train-to-the-sea.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-15" src="https://content.hoelee.com/file/hoelee/music/Green-Train-to-the-Sea-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-15" hidden>[ti:Green Train to the Sea]
|
||||
[ar:Mr Hoelee]
|
||||
[00:28.22]Clickety-clack upon the track, the green train starts to roll
|
||||
[00:29.42]Leaving all the city gray behind the tunnel hole
|
||||
[00:30.62]Forehead pressed against the glass, I watch the fields go by
|
||||
[00:31.82]Golden wheat and windmills waving underneath the sky
|
||||
[00:33.02]Take me where the spring wind blows across the open blue
|
||||
[00:34.22]Ten miles of wildflowers blooming just for me and you
|
||||
[00:38.36]Every station has a name I've never heard before
|
||||
[00:42.68]Soon the scent of salty air will meet us at the shore
|
||||
[00:57.62]Strangers sharing oranges and stories in the seat
|
||||
[01:01.92]Sunlight dancing in the aisle around my dangling feet
|
||||
[01:06.68]Postcards in my backpack waiting for a stamp and pen
|
||||
[01:11.50]To tell the people back at home I'm coming back again
|
||||
[01:16.24]Take me where the spring wind blows across the open blue
|
||||
[01:21.14]Ten miles of wildflowers blooming just for me and you
|
||||
[01:26.34]Every station has a name I've never heard before
|
||||
[01:30.66]Soon the scent of salty air will meet us at the shore
|
||||
[01:46.82]Look, there is the sea...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Sanctuary of the Dawn <span class="subs-meta">· Choral · 19 lines · 183 s</span><a class="subs-dl" href="/subs/sanctuary-of-the-dawn.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-16" src="https://content.hoelee.com/file/hoelee/music/Sanctuary-of-the-Dawn-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-16" hidden>[ti:Sanctuary of the Dawn]
|
||||
[ar:Mr Hoelee]
|
||||
[00:22.82]Ahh-ahh, sanctus, ahh...
|
||||
[00:25.64]Shadows fade before the light that rises in the east
|
||||
[00:31.74]Every troubled storm is stilled and every sorrow ceased
|
||||
[00:37.76]Through the tall stained-glass windows morning beams descend
|
||||
[00:44.12]Shining on a quiet road where broken hearts can mend
|
||||
[00:50.56]Peace be with you, weary soul, lay your burden down
|
||||
[00:58.74]Where the silver rivers flow beyond the sleeping town
|
||||
[01:05.08]Lift your eyes unto the hills where golden angels sing
|
||||
[01:11.46]Rest beneath the gentle shelter of a shining wing
|
||||
[01:21.16]Like a bell across the valley ringing clear and true
|
||||
[01:27.18]Every dawn is bringing back a promise made anew
|
||||
[01:34.18]Walk into the quiet light and leave the dark behind
|
||||
[01:40.06]There is grace in every breath for all of humankind
|
||||
[01:48.40]Peace be with you, weary soul, lay your burden down
|
||||
[01:54.64]Where the silver rivers flow beyond the sleeping town
|
||||
[02:01.02]Lift your eyes unto the hills where golden angels sing
|
||||
[02:07.48]Rest beneath the gentle shelter of a shining wing
|
||||
[02:15.30]Peace be with you... forevermore.
|
||||
[02:26.48]Amen, ahh...</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Look Upon Your Path <span class="subs-meta">· Choral · 17 lines · 122 s</span><a class="subs-dl" href="/subs/look-upon-your-path.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-17" src="https://content.hoelee.com/file/hoelee/music/Look-Upon-Your-Path-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-17" hidden>[ti:Look Upon Your Path]
|
||||
[ar:Mr Hoelee]
|
||||
[00:09.64]Look upon the winding path where fallen leaves are blown
|
||||
[00:14.64]Children walking hand in hand so no one is alone
|
||||
[00:19.64]Even when the winter wind is cold against your face
|
||||
[00:25.04]Every step you take today is leading to a place
|
||||
[00:31.52]Shine your light into the dark, let your voice be heard
|
||||
[00:36.60]Rising like the morning lark, a brave and little bird
|
||||
[00:41.60]Though the night is long and deep, the stars are watching still
|
||||
[00:46.68]Spring will wake the seeds asleep upon the quiet hill
|
||||
[00:57.00]Write a song upon the wind for everyone who strays
|
||||
[01:02.16]Hope is like a tiny spark that sets the sky ablaze
|
||||
[01:07.48]Hold the hand beside you tight and never look below
|
||||
[01:11.88]There are gardens waiting where the wildest rivers flow
|
||||
[01:21.30]Shine your light into the dark, let your voice be heard
|
||||
[01:26.36]Rising like the morning lark, a brave and little bird
|
||||
[01:31.34]Though the night is long and deep, the stars are watching still
|
||||
[01:36.44]Spring will wake the seeds asleep upon the quiet hill
|
||||
[01:45.98]Look upon your path... the dawn is near.</pre>
|
||||
</figure>
|
||||
|
||||
<figure class="subs-track">
|
||||
<figcaption>Bells of the Winter Star <span class="subs-meta">· Choral · 18 lines · 178 s</span><a class="subs-dl" href="/subs/bells-of-the-winter-star.srt" download>.srt</a></figcaption>
|
||||
<audio controls preload="metadata" oncontextmenu="return false;" controlslist="nodownload" data-lrc="subs-18" src="https://content.hoelee.com/file/hoelee/music/Bells-of-the-Winter-Star-Mr-Hoelee.mp3"></audio>
|
||||
<pre id="subs-18" hidden>[ti:Bells of the Winter Star]
|
||||
[ar:Mr Hoelee]
|
||||
[00:08.50]Ding-dong, ding-dong, ring out the bells...
|
||||
[00:18.20]Snowflakes falling from the sky in silence pure and white
|
||||
[00:25.44]Dressing every cedar bough in robes of silver light
|
||||
[00:34.56]Listen to the steeple bells across the frozen square
|
||||
[00:43.42]Sending out a melody upon the midnight air
|
||||
[00:52.92]Ring, silver bells, across the winter snow
|
||||
[01:01.30]Tell all the world the star has begun to glow
|
||||
[01:11.76]Gloria, gloria, hear the angels sing
|
||||
[01:19.28]Peace on the earth this holy night will bring
|
||||
[01:32.12]Candles in the frosted glass are shining warm and clear
|
||||
[01:40.42]Guiding every traveler home at the end of year
|
||||
[01:49.68]Every chime is like a prayer ascending to the sky
|
||||
[01:58.26]Watched by all the quiet stars that never pass us by
|
||||
[02:09.62]Ring, silver bells, across the winter snow
|
||||
[02:18.22]Tell all the world the star has begun to glow
|
||||
[02:28.00]Gloria, gloria, hear the angels sing
|
||||
[02:37.14]Peace on the earth this holy night will bring
|
||||
[02:49.30]Gloria... peace on the earth.</pre>
|
||||
</figure>
|
||||
<script>
|
||||
// subs-track: scroll LRC in step with <audio>; current line stays centred
|
||||
document.querySelectorAll('audio[data-lrc]').forEach((audio) => {
|
||||
const raw = document.getElementById(audio.dataset.lrc).textContent;
|
||||
const lines = raw.split('\n').map((l) => {
|
||||
const m = l.match(/\[(\d+):(\d+)(?:\.(\d+))?\](.*)/);
|
||||
return m ? { t: +m[1] * 60 + +m[2] + (+(m[3] || '0')) / 100, txt: m[4] } : null;
|
||||
}).filter(Boolean);
|
||||
const box = document.createElement('div');
|
||||
box.className = 'subs-box';
|
||||
lines.forEach((l) => { const p = document.createElement('p'); p.textContent = l.txt; box.appendChild(p); });
|
||||
audio.parentNode.insertBefore(box, audio.nextSibling);
|
||||
let cur = -1;
|
||||
audio.addEventListener('timeupdate', () => {
|
||||
const now = audio.currentTime;
|
||||
// last line whose timestamp has passed; -1 before the first line starts
|
||||
let i = -1;
|
||||
for (let k = 0; k < lines.length; k++) { if (lines[k].t <= now) i = k; else break; }
|
||||
if (i !== cur) {
|
||||
if (cur >= 0) box.children[cur].classList.remove('on');
|
||||
cur = i;
|
||||
if (cur >= 0) {
|
||||
const p = box.children[cur];
|
||||
p.classList.add('on');
|
||||
const br = box.getBoundingClientRect(), pr = p.getBoundingClientRect();
|
||||
box.scrollTop += (pr.top - br.top) - (box.clientHeight - pr.height) / 2;
|
||||
} else {
|
||||
box.scrollTop = 0;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
Reference in new issue
Block a user