Last active
July 26, 2018 09:12
-
-
Save borisisok/9c83fb0e96b8a91012326f1c448143f1 to your computer and use it in GitHub Desktop.
Google Translate and TTS fun
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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