Added tts

git-svn-id: file:///srv/svn/repo/mai/trunk@17 e410bdd4-646f-c54f-a7ce-fffcc4f439ae
This commit is contained in:
manerakai
2023-08-30 15:41:40 +00:00
parent b46d8767b2
commit f22a31330d
2 changed files with 64 additions and 0 deletions

View File

@@ -1,6 +1,10 @@
package main package main
import ( import (
"bytes"
"net/http"
"net/url"
"codeberg.org/SimpleWeb/SimplyTranslate/engines" "codeberg.org/SimpleWeb/SimplyTranslate/engines"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/gofiber/template/html/v2" "github.com/gofiber/template/html/v2"
@@ -84,6 +88,8 @@ func main() {
translatedText := "" translatedText := ""
from := "" from := ""
to := "" to := ""
ttsFrom := ""
ttsTo := ""
if c.Method() == "POST" { if c.Method() == "POST" {
from = from =
@@ -95,6 +101,23 @@ func main() {
} else { } else {
translatedText = result.TranslatedText translatedText = result.TranslatedText
} }
ttsFromURL, _ := url.Parse("api/tts")
fromQuery := url.Values{}
fromQuery.Add("lang", from)
fromQuery.Add("text", originalText)
ttsFromURL.RawQuery = fromQuery.Encode()
ttsFrom = ttsFromURL.String()
ttsToURL, _ := url.Parse("api/tts")
toQuery := url.Values{}
toQuery.Add("lang", to)
toQuery.Add("text", translatedText)
ttsToURL.RawQuery = toQuery.Encode()
ttsTo = ttsToURL.String()
} }
return c.Render("index", fiber.Map{ return c.Render("index", fiber.Map{
"Engine": engine, "Engine": engine,
@@ -104,10 +127,43 @@ func main() {
"TranslatedText": translatedText, "TranslatedText": translatedText,
"From": from, "From": from,
"To": to, "To": to,
"TtsFrom": ttsFrom,
"TtsTo": ttsTo,
}) })
}) })
app.Static("/static", "./static") app.Static("/static", "./static")
app.Get("/api/tts", func(c *fiber.Ctx) error {
engine := c.Query("engine")
if _, ok := engines.Engines[engine]; !ok || engine == "" {
engine = "google"
}
text := c.Query("text")
if text == "" {
return c.SendStatus(400)
}
lang := c.Query("lang")
if lang == "" {
lang = "en"
}
if url, err := engines.Engines[engine].Tts(text, lang); err != nil {
return c.SendStatus(500)
} else {
if response, err := http.Get(url); err != nil {
return c.SendStatus(500)
} else {
defer response.Body.Close()
var buf bytes.Buffer
response.Write(&buf)
c.Context().SetContentType("audio/mpeg")
return c.Send(buf.Bytes())
}
}
})
app.Listen(":3000") app.Listen(":3000")
} }

View File

@@ -48,11 +48,19 @@
<div class="item-wrapper"> <div class="item-wrapper">
<textarea autofocus class="item" id="input" name="text" dir="auto" <textarea autofocus class="item" id="input" name="text" dir="auto"
placeholder="Enter Text Here">{{ .OriginalText }}</textarea> placeholder="Enter Text Here">{{ .OriginalText }}</textarea>
<div class="center">
<audio controls>
<source type="audio/mpeg" src="{{ .TtsFrom }}">
</audio>
</div>
</div> </div>
<div class="item-wrapper"> <div class="item-wrapper">
<textarea id="output" class="translation item" dir="auto" placeholder="Translation" <textarea id="output" class="translation item" dir="auto" placeholder="Translation"
readonly>{{.TranslatedText}}</textarea> readonly>{{.TranslatedText}}</textarea>
<audio controls>
<source type="audio/mpeg" src="{{ .TtsTo }}">
</audio>
</div> </div>
</div> </div>