You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.8 KiB
Python

#! /usr/bin/env python
import re, subprocess, random
from time import sleep
# requires: espeak to be installed
dic={
"narrator": "en-us",
"Pilot": "klatt",
"Sensor": "whisper",
"MC": "pt",
"Jag25": "mb-us2",
"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