#! /usr/bin/env python import re, subprocess, random, os from time import sleep devnull = open(os.devnull, 'w') # requires: espeak and aplay (alsa-utils) to be installed dic={ "narrator": "en-us", "Pilot": "m4", "Sensor": "m7", "MC": "m2", "Jag25": "m6", "Unknown": "f1", "Bam Bam 41": "m3", "Safety Observer":"f3" } f=open("transcripts-drone-attack.txt","r") txt=f.readlines() p= re.compile(r"^(\d\d\:\d\d) \((.*?)\)\: (.*)") # regex for capturing groups: time, character, sentence for line in txt: if p.findall(line): time,char,sentence = (p.findall(line))[0] voice=dic[char] # play time subprocess.call(["espeak", time +" "+char, "-v", dic['narrator'], "-p", "20"], stdout=devnull, stderr=devnull) # narrator speaks: time and character sleep(0.5) #short pause before sentence if "*expletive*" in sentence: #"*expletive*" in sentence is True: sentence_parts=re.split(r"(\*\w+\*)", sentence) for part in sentence_parts: if part == '*expletive*': subprocess.call(["aplay", 'swear.wav'], stdout=devnull, stderr=devnull) else: subprocess.call(["espeak", part, "-v", voice], stdout=devnull, stderr=devnull) # character speaks: his sleep(float(random.randint(1,10))/100) else: subprocess.call(["espeak", sentence, "-v", voice], stdout=devnull, stderr=devnull) # character speaks: his # else: # line w/out time or character (narrator) subprocess.call(["espeak", line, "-v", dic['narrator'], "-p", "20"], stdout=devnull, stderr=devnull) sleep(1) # make pause after each text line