Facebot: Difference between revisions
(Created page with "Category:WriteMe") |
No edit summary |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
Eurico made a mouth animation, which could react to the text appearing in the chatroom. | |||
Fembot | |||
[[File:mouth-closed.png|300px|Mouth closed]] | |||
[[File:mouthopen-1.png|300px|Mouth half open]] | |||
[[File:mouthopen-2.png|300px|Mouth open]] | |||
import sys, os | |||
while True: | |||
i = sys.stdin.readline() | |||
if i == "": | |||
break | |||
i = i.rstrip() | |||
parts = i.split (" ", 2) | |||
msg = parts[2] | |||
#print msg | |||
os.system('espeak "{0}" -w padded.wav'.format(msg)) | |||
os.system('sox padded.wav -b 8 -e unsigned-integer -c 1 -r 4000 -t raw rawfile') | |||
#print "complete" | |||
framerate = 10 ; slice=4000/framerate | |||
dat = open("rawfile").read() | |||
frames = [] | |||
for i in range(0,len(dat),slice): | |||
samples = map(lambda x:ord(x)-128, | |||
dat[i:i+slice]) | |||
frames.append(max(samples)) | |||
pics = ["mouth-closed.png", | |||
"mouthopen-1.png", | |||
"mouthopen-2.png"] | |||
max_mouthOpen = len(pics)-1 | |||
step = int(max(frames)/(max_mouthOpen*2)) | |||
for i in range(len(frames)): | |||
mouth=min(int(frames[i]/step),max_mouthOpen) | |||
if i: | |||
if mouth>frames[i-1]+1: | |||
mouth=frames[i-1]+1 | |||
elif mouth < frames[i-1]-1: | |||
mouth=frames[i-1]-1 | |||
else: mouth=0 | |||
frames[i] = mouth | |||
os.system("ln -s %s frame%09d.png" % | |||
(pics[mouth],i)) | |||
os.system(("mencoder 'mf://frame0*.png' " + | |||
"-audiofile padded.wav -mf type=png " + | |||
"-mf fps=%d -oac mp3lame -ovc lavc " + | |||
"-o animation.mp4 && rm frame0*.png") | |||
% framerate) | |||
#clean up files | |||
os.system("rm padded.wav rawfile") | |||
#open player and play animation | |||
os.system("omxplayer animation.mp4") | |||
os.system("fim mouth-closed.png") | |||
print "end script" | |||
[[Category:DIY Manual]] | |||
[[Category:WriteMe]] | [[Category:WriteMe]] | ||
[[Category:Print]] | |||
[[Category:Web]] |
Latest revision as of 10:59, 25 April 2017
Eurico made a mouth animation, which could react to the text appearing in the chatroom. Fembot
import sys, os
while True:
i = sys.stdin.readline() if i == "": break i = i.rstrip() parts = i.split (" ", 2) msg = parts[2] #print msg os.system('espeak "{0}" -w padded.wav'.format(msg)) os.system('sox padded.wav -b 8 -e unsigned-integer -c 1 -r 4000 -t raw rawfile')
#print "complete"
framerate = 10 ; slice=4000/framerate dat = open("rawfile").read() frames = []
for i in range(0,len(dat),slice): samples = map(lambda x:ord(x)-128, dat[i:i+slice]) frames.append(max(samples))
pics = ["mouth-closed.png", "mouthopen-1.png", "mouthopen-2.png"] max_mouthOpen = len(pics)-1
step = int(max(frames)/(max_mouthOpen*2)) for i in range(len(frames)): mouth=min(int(frames[i]/step),max_mouthOpen) if i: if mouth>frames[i-1]+1: mouth=frames[i-1]+1 elif mouth < frames[i-1]-1: mouth=frames[i-1]-1 else: mouth=0 frames[i] = mouth os.system("ln -s %s frame%09d.png" % (pics[mouth],i))
os.system(("mencoder 'mf://frame0*.png' " + "-audiofile padded.wav -mf type=png " + "-mf fps=%d -oac mp3lame -ovc lavc " + "-o animation.mp4 && rm frame0*.png") % framerate)
#clean up files os.system("rm padded.wav rawfile") #open player and play animation os.system("omxplayer animation.mp4") os.system("fim mouth-closed.png")
print "end script"