Added tts
git-svn-id: file:///srv/svn/repo/mai/trunk@17 e410bdd4-646f-c54f-a7ce-fffcc4f439ae
This commit is contained in:
56
web/main.go
56
web/main.go
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user