import os
from fifteen_api import FifteenAPI
import csv
import re
tts_api = FifteenAPI()
mwhscharacters = [['c','Twilight Sparkle'],['i','Rise Kujikawa'],['a','Adagio Dazzle'],['h','Lyra'],['n','Maud Pie']]
previous_character = ''
def ChooseCharacter(char):
global previous_character
if char == 'extend':
return previous_character
else:
for character in mwhscharacters:
if char[0] == character[0]:
current_character = character[1]
previous_character = current_character
break
return current_character
def TextCorrector(txt):
result = txt.replace("{w}","...")
result = result.replace("{i}","")
result = result.replace("[player]","Player")
result = result.replace("[pronoun[1]]","them")
result = result.replace("[pronoun[2]]","their")
result = result.replace("[pronoun[4]]","they're")
result = result.replace("[pronoun[5]]","they're")
result = result.replace("[pronoun[0]]","they")
result = result.replace("[is_conj]","are")
result = result.replace("[s_conj]","") #I don't like to force pronouns like this, but the empty gaps are too much
result = re.sub(r"\s*{.*}\s*", " ", result)
result = re.sub(r"\s*\[.*\]\s*", " ", result)
print(result)
return result
with open('dialogue.tab', newline='') as dialogue:
dialogue_reader = csv.reader(dialogue, delimiter='\t')
firstline = True
i = 0
for line in dialogue_reader:
if firstline:
firstline = False
continue
#If Its from the promo material, skip. Those dont happen in the game.
if line[0].find('trailer') != -1 or line[0].find('screenshots') != -1 or line[0].find('letsplayers') != -1:
continue
#Get the character
if line[1] != 'centered' and line[1] != '':
final_character = ChooseCharacter(line[1])
else:
continue
#Correct the text
if re.search('[a-zA-Z]',line[2]):
final_text = TextCorrector(line[2])
else:
continue
tts_api.save_to_file(final_character,"Neutral",final_text,line[0] + '.wav')
'''
os.system("ffmpeg -i " + line[0] + ".wav " + line[0] + ".ogg")
os.remove(line[0] + ".wav")
'''
i = i + 1
print(str(i) + '/' + str(3252))