Skip to content

Instantly share code, notes, and snippets.

@borisisok
Last active July 26, 2018 09:12
Show Gist options
  • Save borisisok/9c83fb0e96b8a91012326f1c448143f1 to your computer and use it in GitHub Desktop.
Save borisisok/9c83fb0e96b8a91012326f1c448143f1 to your computer and use it in GitHub Desktop.
Google Translate and TTS fun
import random
import sys
from googletrans import Translator
import feedparser
import hashlib
from gtts import gTTS
from time import sleep
import os
import bleach
import pygame
import codecs
pygame.init()
pygame.mixer.init()
SONG_END = pygame.USEREVENT + 1
first = True;
baselang = 'en'
translangs = ( 'af', 'sq', 'am', 'ar', 'hy', 'az', 'eu', 'bn', 'bs', 'bg', 'ca', 'ceb', 'zh-CN', 'zh-TW', 'co', 'hr', 'cs', 'da', 'nl',
'eo', 'et', 'fi', 'fr', 'fy', 'gl', 'ka', 'de', 'el', 'gu', 'ht', 'ha', 'haw', 'iw', 'hi', 'hmn', 'hu', 'is', 'ig', 'id', 'ga', 'it',
'ja', 'jw', 'kn', 'kk', 'km', 'ko', 'ku', 'lo', 'lv', 'lt', 'lb', 'mk', 'mg', 'ms', 'ml', 'mt', 'mi', 'mr', 'mn', 'ne', 'no', 'ny',
'ps', 'fa', 'pl', 'pt', 'pa', 'ro', 'ru', 'sm', 'gd', 'sr', 'st', 'sn', 'sd', 'si', 'sk', 'sl', 'so', 'es', 'sw', 'sv', 'tl', 'tg',
'ta', 'te', 'th', 'tr', 'uk', 'ur', 'uz', 'vi', 'cy', 'xh', 'yi', 'yo', 'zu' )
if len(sys.argv) == 1:
print "no text given"
sys.exit()
translator = Translator()
langcount = len(translangs)
idx = 0
def mutate(starttext):
detected = translator.detect(starttext)
startlang = detected.lang
global first
print "> " + starttext
if startlang != baselang:
translated = translator.translate(starttext, src=startlang, dest=baselang)
starttext = translated.text
transnum = random.randint(9,50)
lasttext = starttext
loop = True
x = 0
channel = None
while loop:
x += 1
idx=(random.randint(1,langcount)-1)
lang = translangs[idx]
translated = translator.translate(lasttext, src=baselang, dest=lang)
translated_en = translator.translate(translated.text, src=lang, dest=baselang)
lasttext = translated_en.text
if lang == startlang or x > transnum:
loop = False
restext = translator.translate(lasttext, src=baselang, dest=startlang).text
print "< " + restext + " (" + lang + ")" + " (" + str(x+1) + ") "
tts = gTTS(text=restext, lang=startlang)
hash_object = hashlib.sha1(restext.encode('utf-8'))
hex_dig = hash_object.hexdigest()
filename = '/tmp/giggle-' + hex_dig + '.mp3'
print ("File: "+ filename )
tts.save(filename)
wait = True;
if first == True:
first = False
else:
while wait:
for event in pygame.event.get():
if event.type == SONG_END:
wait = False
sleep(1)
pygame.mixer.music.set_endevent(SONG_END)
pygame.mixer.music.load(filename)
pygame.mixer.music.play()
#os.remove(filename) #remove temperory file
print " "
if sys.argv[1].startswith("http"):
hashes = {};
while 1:
feed = feedparser.parse(sys.argv[1])
for post in feed.entries:
text = post.title
if 'summary' in post:
text = post.title + ".\n" + post.summary
hash_object = hashlib.sha1(text.encode('utf-8'))
hex_dig = hash_object.hexdigest()
if not hex_dig in hashes:
hashes[hex_dig] = 1;
mutate(bleach.clean(text))
sleep(1)
sleep(1)
elif os.path.isfile(sys.argv[1]):
inputfile = sys.argv[1];
text = "";
#f = codecs.open(inputfile, encoding = 'utf-8')
#for line in f:
# text = text + repr(line)
# print repr(line)
with open(inputfile, "r") as ins:
array = []
for line in ins:
text = text + line
mutate(text)
wait = True;
while wait:
for event in pygame.event.get():
if event.type == SONG_END:
wait = False
sleep(1)
else:
mutate(sys.argv[1])
## Docs:
# https://pypi.org/project/googletrans/
# https://pypi.org/project/feedparser/
# https://cloud.google.com/translate/docs/languages
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment