added tts functionality

master
tiyn 3 weeks ago
parent 9ea9ab3c53
commit 6e844a3cb1

@ -2,11 +2,9 @@ FROM python:3
MAINTAINER tiyn tiyn@mail-mk.eu
COPY src /blog
WORKDIR /blog
RUN pip3 install -r requirements.txt
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN apt-get update && \
apt-get install -y locales && \
@ -14,9 +12,13 @@ RUN apt-get update && \
sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
dpkg-reconfigure --frontend=noninteractive locales
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN apt-get install -y espeak
COPY src /blog
WORKDIR /blog
RUN pip3 install -r requirements.txt
VOLUME /blog/templates/entry

@ -22,6 +22,7 @@ via plain text files.
- [x] Links to standalone article
- [x] Standalone article page
- [x] Links to scrolling blog page
- [x] TTS Functionality
- [x] RSS feed
- [x] Navigation
- [x] Header

@ -137,4 +137,5 @@ def feed():
if __name__ == "__main__":
con_gen.prepare_tts()
app.run(host="0.0.0.0")

@ -1,3 +1,4 @@
import glob
import locale
import os
import pathlib
@ -7,6 +8,7 @@ from os import path
import markdown
from bs4 import BeautifulSoup
from gtts import gTTS
import config
import search
@ -144,6 +146,11 @@ def gen_stand_string(path_ex):
content_string += "<a href=\"" + "/index.html#" + \
filename_no_end + "\">" + curr_date + "</a>"
content_string += "<br><br>\n"
if os.path.isfile("static/tmp/" + filename_no_end + ".mp3"):
content_string += "<audio controls>\n"
content_string += '<source src="/static/tmp/' + filename_no_end + '.mp3" type="audio/mp3">\n'
content_string += "</audio>\n"
content_string += "<br><br>\n"
if filename.endswith(".html"):
for line in text:
content_string += line
@ -270,3 +277,50 @@ def create_preview(path, is_markdown):
preview = "\n<p>" + first_p.text + "</p>\n"
preview += "...<br>"
return preview
def get_text_only(filename):
"""
Convert a file to text only to use in tts
Parameters:
path (string): path to the article
Returns:
string: unformatted string containing the contents of the file
"""
# filename = os.path.join(ENTRY_DIR, path)
clean_text = ""
if path.exists(filename):
title = open(filename).readline().rstrip("\n")
text = open(filename).readlines()[1:]
filename_no_end = filename.split(".", 1)[0]
filename_no_end = filename_no_end.split("/")[-1]
content_string = ""
if filename.endswith(".html"):
for line in text:
content_string += line
if filename.endswith(".md"):
content_string += gen_md_content(filename, 1)
content_string = absolutize_html(content_string)
soup = BeautifulSoup(content_string, "html.parser")
tag_to_remove = soup.find("figure")
if tag_to_remove:
tag_to_remove.decompose()
clean_text = soup.get_text(separator=" ")
clean_text = title + "\n\n" + clean_text
return clean_text
def prepare_tts():
files = glob.glob('static/tmp/*')
for f in files:
os.remove(f)
files = glob.glob('templates/entry/*')
clean_text = ""
for f in files:
clean_text = get_text_only(f)
tts = gTTS(clean_text, lang=LANGUAGE.split("-")[0])
_, tail = os.path.split(f)
new_filename = "static/tmp/" + os.path.splitext(tail)[0] + ".mp3"
tts.save(new_filename)

@ -5,3 +5,4 @@ WTForms
Flask_WTF
Font-Awesome-Flask
BeautifulSoup4
gTTS

@ -269,6 +269,12 @@ form.search::after {
.standalone img {
width: 50%;
}
.entry img {
width: 50%;
}
audio {
width: 50%;
height: 5vh;
}

Loading…
Cancel
Save