TheJach.com

Jach's personal blog

(Largely containing a mind-dump to myselves: past, present, and future)
Current favorite quote: "Supposedly smart people are weirdly ignorant of Bayes' Rule." William B Vogt, 2010

Song Translations - Calling To The Night

Thought of a new little project to do: song translations! (Edit: and by 'project', maybe I'll post one of them before the year is out...) They're mostly going to be Japanese -> English, in an effort to help me learn more Japanese, but this first one is actually English -> French and something I did all the way back in high school for French class.

The song is Calling To The Night, by Natasha Farrow, from the game Metal Gear Solid Portable Ops. (I think I heard it first in Smash Bros.)



EN
Calling To The Night
Through the night, to the day
When everything is gone
Carry this soul away
From the dry lands
In the sun we see,
Fighting over lines
All our dreams and wishes
We send home for safekeeping
Fighting for what's right

Calling to the night
To dream, again in the light
Waiting for a storm to rise
Feel the isolation fleeting

Calling to the night
To be or not to be fighting here
Leaving without you, leaving my soul behind
Calling to the night
Colors of Kodachrome fade with time

Calling to the night
For us, for every single life
All the ashes of men remain
As a perfect memory
Calling to the night

But the heart will remain
As a silhouette of time
Hear the ringing echoes
In the splitting horizon
Calling to the night
FR
Criant À La Nuit
Dans la nuit, dans le jour
Quand toutes les choses sont parties
Emportez ce coeur
Des terres fermes
Au soleil, on voit
Du combat aux lignes
Tous les rêves et les souhaits
On fait rentrer pour les garder
Luttant pour la vie

Criant à la nuit
Rêver encore les rêves luisants
Attendant qu'un orage se produise
Et sentant l'isolement fugace

Criant à la nuit
Être ou pas être luttant ici
Partant sans vous, laissant mon esprit
Criant à la nuit
Les coleurs de Kodachrome s'éteindent en temps.

Criant à la nuit
Pour nous, pour chaqu'un et toutes des vies
Toutes les cendres des hommes restent
Comme une mémoire parfaite
Criant à la nuit

Mais le coeur restera
Comme une silhouette de temps
Entendez les échos qui retentissent
À l'horizon mitoyen
Criant à la nuit



I took some minor liberties with some of the words in the name of rhyming/sounding nicer to my ear (like soul -> heart, fighting for what's right -> for life...), so it's not as literal a translation as I usually prefer in a few places, but I still like it. The one part that still bugs me is the "mon esprit", where "mon" is basically stretched out into three syllables...

We were forced to sing (which I'm bad at) but I made a little karaoke program in pygame back then hoping maybe some people might want to sing along (they didn't). Here's its source, written by teenage me, consider it public domain and an example of how not to do a karaoke program:


#!/usr/bin/python
# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
pygame.init()

pygame.mixer.music.load('Natasha Farrow - Calling To The Night.ogg')
lyrics = [u"Dans la nuit, dans le jour",
"Quand toutes les choses sont parties",
"Emportez ce coeur",
"Des terres fermes",
"Au soleil, on voit",
"Du combat aux lignes",
u"Tous les rêves et les souhaits",
"On fait rentrer pour les garder",
"Luttant pour la vie",
"",
u"Criant à la nuit",
u"Rêver encore les rêves luisants",
"Attendant qu'un orage se produise",
"Et sentant l'isolement fugace",
u"Criant à la nuit",
u"Être ou pas être luttant ici",
"Partant sans vous, laissant mon esprit",
u"Criant à la nuit",
"Les coleurs",
u"de Kodachrome s'éteindent en temps.",
"",
u"Criant à la nuit",
"Pour nous pour chaqu'un et toutes des vies",
"Toutes les cendres des hommes restent",
u"Comme une mémoire parfaite",
u"Criant à la nuit",
"",
"Mais le coeur restera",
"Comme une silhouette de temps",
u"Entendez les échos qui retentissent",
u"À l'horizon mitoyen",
u"Criant à la nuit",
""]

size = 800, 600
screen = pygame.display.set_mode(size)
font = pygame.font.Font('comic.ttf', 38)

pygame.mouse.set_visible(0)

def draw_line(line, chars):
if line < 0: return
txt = font.render(lyrics[line], 1, (255,255,255))
txt2 = font.render(lyrics[line][:chars], 1, (0, 0, 255))
rect = txt.get_rect()
rect.center = size[0]/2, size[1]/2
screen.blit(txt, rect)
screen.blit(txt2, rect)

clock = pygame.time.Clock()
keep_going = 1
skip = 0
pygame.mixer.music.play(0, skip)
pos = pygame.mixer.music.get_pos() + skip * 1000
while keep_going and pos >= 0:
clock.tick(30)
for event in pygame.event.get():
if event.type == QUIT:
keep_going = 0
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
keep_going = 0
# Decide which line to draw
line = -1
chars = -1
pos = pygame.mixer.music.get_pos() + skip * 1000
if 20759 < pos: # 1
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 #dans
if pos > 21100: #la
chars += len(words[1])+1
if pos > 21400: # nuit
chars += len(words[2])+1
if pos > 23222: # dans
chars += len(words[3])+1
if pos > 23422: # le
chars += len(words[4])+1
if pos > 23700: # jour
chars += len(words[5])+1
if 25200 < pos: # 2
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # quand
if pos > 25900: # tous
chars += len(words[1])+1
if pos > 26200: # les
chars += len(words[2])+1
if pos > 26600: # choses
chars += len(words[3])+1
if pos > 27800: # sont
chars += len(words[4])+1
if pos > 28200: # parti
chars += len(words[5])+1
if 29672 < pos: # 3
line += 1
chars = 6 # emport
if pos > 30700: #ez
chars += 3
if pos > 32300: # ce
chars += 3
if pos > 32700: # coeur
chars += 5
if 33741 < pos: # 4
line += 1
words = lyrics[line].split(' ')
chars = 0
if pos > 34000:
chars = len(words[0])+1 # des
if pos > 35600: # terres
chars += len(words[1])+1
if pos > 36600: # fermes
chars += len(words[2])+1
if 39398 < pos: # 5
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # au
if pos > 40300: # soleil
chars += 3
if pos > 40600:
chars += 5
if pos > 42000: # on
chars += len(words[2])+1
if pos > 42500: # voit
chars += len(words[3])+1
if 44674 < pos: # 6
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # du
if pos > 45000:
chars += len(words[1])+1 # combat
if pos > 47300: # aux
chars += len(words[2])+1
if pos > 47700: # lignes
chars += len(words[3])+1
if 48982 < pos: # 7
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # tous
if pos > 49500: # les
chars += len(words[1])+1
if pos > 50000: # reves
chars += len(words[2])+1
if pos > 50900: # et
chars += len(words[3])+1
if pos > 51300: # les
chars += len(words[4])+1
if pos > 52000: # souhaits
chars += 3
if pos > 52400:
chars += 6
if 53594 < pos: # 8
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # on
if pos > 54100: # fait
chars += len(words[1])+1
if pos > 54500: # rentrer
chars += 3
if pos > 55500:
chars += 5
if pos > 56000: # pour
chars += len(words[3])+1
if pos > 56500: # les
chars += len(words[4])+1
if pos > 57000: # garder
chars += len(words[5])+1
if 58000 < pos: # 9
line += 1
words = lyrics[line].split(' ')
chars = 4 # luttant
if pos > 58400: # ant
chars += 4
if pos > 59000: # pour
chars += len(words[1])+1
if pos > 59400: # la
chars += len(words[2])+1
if pos > 59700: # vie
chars += len(words[3])+1
if 63412 < pos: # 10
line += 1
if 77200 < pos: # 11
line += 1
words = lyrics[line].split(' ')
chars = 3 # cri
if pos > 77800: # ant
chars += 4
if pos > 78300: # a
chars += len(words[1])+1
if pos > 78700: # la
chars += len(words[2])+1
if pos > 79000: # nuit
chars += len(words[3])+1
if 80997 < pos: # 12
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # rever
if pos > 83600: # encore
chars += len(words[1])+1
if pos > 84000: # les
chars += len(words[2])+1
if pos > 84200: # reves
chars += len(words[3])+1
if pos > 85300: # luisants
chars += 4
if pos > 85700:
chars += 5
if 87315 < pos: # 13
line += 1
words = lyrics[line].split(' ')
chars = 6 # attend
if pos > 87900: # ant
chars += 4
if pos > 88500: # qu'un
chars += len(words[1])+1
if pos > 88900: # orage
chars += 2
if pos > 89400:
chars += 4
if pos > 89850: # se
chars += len(words[3])+1
if pos > 90100: # produise
chars += 3
if pos > 90600:
chars += 6
if 91655 < pos: # 14
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # et
if pos > 92000: # sentant
chars += len(words[1])+1
if pos > 93000: # l'isol
chars += 6
if pos > 93500: #ement
chars += 6
if pos > 94900: # fugace
chars += 3
if pos > 95200:
chars += 4
if 96067 < pos: # 15
line += 1
words = lyrics[line].split(' ')
chars = 3
if pos > 96667: # criant
chars += 4
if pos > 97000: # a
chars += 2
if pos > 97300: # la
chars += 3
if pos > 97500: # nuit
chars += len(words[-1])+1
if 99264 < pos: # 16
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # etre
if pos > 101500: # ou
chars += len(words[1])+1
if pos > 102000: # pas
chars += len(words[2])+1
if pos > 102500: # etre
chars += len(words[3])+1
if pos > 103500: # luttant
chars += len(words[4])+1
if pos > 104000: # ici
chars += len(words[5])+1
if 105624 < pos: # 17
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # partant
if pos > 106500: # sans
chars += len(words[1])+1
if pos > 107500: # vous
chars += len(words[2])+1
if pos > 108300: # laissant
chars += 4
if pos > 108900:
chars += 5
if pos > 110200: #mon
chars += 1
if pos > 111000: #o
chars += 1
if pos > 112000: #n
chars += 1
if pos > 112800: # esprit
chars += len(words[5])+1
if 114200 < pos: # 18
line += 1
words = lyrics[line].split(' ')
chars = 3
if pos > 114800: #ant
chars += 4
if pos > 115200: # a
chars += 2
if pos > 115500: # la
chars += 3
if pos > 115700: # nuit
chars += len(words[-1])+1
if 117425 < pos: # 19
line += 1
chars = 4
if pos > 118000: # coleurs
chars += 8
if 119900 < pos: # 19part2
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # du
if pos > 120000: # ko
chars += 2
if pos > 120500: #da
chars += 2
if pos > 121000: #chrome
chars += 7
if pos > 122000: # s'eteind
chars += len(words[2])+1
if pos > 123000: #en
chars += len(words[3])+1
if pos > 123300: #temps
chars += len(words[4])+1
if 127231 < pos: # 20
line += 1
if 132572 < pos: # 21
line += 1
words = lyrics[line].split(' ')
chars = 3 # cri
if pos > 133100: # ant
chars += 4
if pos > 133500: # a
chars += 2
if pos > 133800: # la
chars += 3
if pos > 134000: # nuit
chars += len(words[-1])+1
if 135756 < pos: # 22
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # pour
if pos > 136200: # nous
chars += len(words[1])+1
if pos > 138000: # pour
chars += len(words[2])+1
if pos > 138500: # chaqu'un
chars += len(words[3])+1
if pos > 139000: # et
chars += len(words[4])+1
if pos > 139400: # tous
chars += len(words[5])+1
if pos > 140500: # des
chars += len(words[6])+1
if pos > 141000: # vies
chars += len(words[7])+1
if 142280 < pos: # 23
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # tous
if pos > 142700: # les
chars += len(words[1])+1
if pos > 143000: # cendres
chars += len(words[2])+1
if pos > 144000: # des
chars += len(words[3])+1
if pos > 144300: # hommes
chars += len(words[4])+1
if pos > 145000: # rest
chars += len(words[5])+1
if 146484 < pos: # 24
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # comme
if pos > 147000: # un
chars += len(words[1])+1
if pos > 147500: # mem
chars += 3
if pos > 148500: # oire
chars += 5
if pos > 149000: # par
chars += 3
if pos > 150000: # faite
chars += 6
if 150741 < pos: # 25
line += 1
words = lyrics[line].split(' ')
chars = 3 # cri
if pos > 151300: # ant
chars += 4
if pos > 151700: # a
chars += 2
if pos > 152000: # la
chars += 3
if pos > 152200: # nuit
chars += len(words[-1])+1
if 158316 < pos: # 26
line += 1
if 161460 < pos: # 27
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # mais
if pos > 162000: # le
chars += len(words[1])+1
if pos > 162200: # coeur
chars += len(words[2])+1
if pos > 164000: # rest
chars += 4
if pos > 164300: #era
chars += 4
if 166160 < pos: # 28
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # comme
if pos > 166500: # un
chars += len(words[1])+1
if pos > 167000: # sil
chars += 3
if pos > 167500: #hou
chars += 3
if pos > 168000: #ette
chars += 5
if pos > 169100: # de
chars += len(words[3])+1
if pos > 169500: # temps
chars += len(words[4])+1
if 171198 < pos: # 29
line += 1
words = lyrics[line].split(' ')
chars = 6 # entend
if pos > 171600: # ez
chars += 3
if pos > 172200: # les
chars += len(words[1])+1
if pos > 172650: # echos
chars += len(words[2])+1
if pos > 173200: # qui
chars += len(words[3])+1
if pos > 173650: # rent
chars += len(words[4])+1
if 175850 < pos: # 30
line += 1
words = lyrics[line].split(' ')
chars = len(words[0])+1 # a
if pos > 176500: #l'hori
chars += 6
if pos > 177500: # zon
chars += 4
if pos > 178000: # mit
chars += 3
if pos > 178500: #oy
chars += 2
if pos > 179000: # on
chars += 3
if 180305 < pos: # 31
line += 1
words = lyrics[line].split(' ')
chars = 3 # cri
if pos > 180900: # ant
chars += 4
if pos > 181500: # a
chars += 2
if pos > 182000: # la
chars += 3
if pos > 182600: # nuit
chars += len(words[-1])+1
if 189278 < pos: # 32
line += 1

screen.fill((0,0,0))
draw_line(line, chars)
pygame.display.update()



Posted on 2022-10-14 by Jach

Tags: french, pygame, song translation

Permalink: https://www.thejach.com/view/id/401

Trackback URL: https://www.thejach.com/view/2022/10/song_translations_-_calling_to_the_night

Back to the top

Back to the first comment

Comment using the form below

(Only if you want to be notified of further responses, never displayed.)

Your Comment:

LaTeX allowed in comments, use $$\$\$...\$\$$$ to wrap inline and $$[math]...[/math]$$ to wrap blocks.