#! /usr/bin/env python import re, subprocess, random from time import sleep # requires: espeak to be installed dic={ "narrator": "en-us", "Pilot": "m4", "Sensor": "m7", "MC": "m2", "Jag25": "m6", "Unknown": "f1" } 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: print line if p.findall(line): time,char,sentence = (p.findall(line))[0] print char.upper() voice=dic[char] # play time subprocess.call(["espeak", time +" "+char, "-v", dic['narrator'], "-p", "20"]) # narrator speaks: time and character sleep(0.5) #short pause before sentence print sentence if "*expletive*" in sentence: #"*expletive*" in sentence is True: sentence_parts=re.split(r"(\*\w+\*)", sentence) print sentence_parts for part in sentence_parts: if part == '*expletive*': print 'EXPLETIVE', part subprocess.call(["aplay", 'swear.wav']) else: print 'SPEECH', part subprocess.call(["espeak", part, "-v", voice]) # character speaks: his sleep(float(random.randint(1,10))/100) else: subprocess.call(["espeak", sentence, "-v", voice]) # character speaks: his # else: # line w/out time or character (narrator) print "NARRATOR" subprocess.call(["espeak", line, "-v", dic['narrator'], "-p", "20"]) sleep(1) # make pause after each text line