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))