|
|
@@ -0,0 +1,64 @@
|
|
|
+require("app.app")
|
|
|
+local httpclient = require("httpclient")
|
|
|
+
|
|
|
+
|
|
|
+local M = {}
|
|
|
+
|
|
|
+M.eval_url = "https://edu.hivoice.cn/eval/"
|
|
|
+
|
|
|
+
|
|
|
+local function resolve_eval_format(format)
|
|
|
+ format = string.lower(tostring(format or "pcm"))
|
|
|
+ if format == "wav" or format == "pcm" then
|
|
|
+ return format, "pcm"
|
|
|
+ end
|
|
|
+ return format, format
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+local function build_multipart_body(parts, boundary)
|
|
|
+ local payload = ""
|
|
|
+ for _, part in ipairs(parts) do
|
|
|
+ payload = payload .. "--" .. boundary .. "\r\n"
|
|
|
+ if part.filename then
|
|
|
+ payload = payload .. 'Content-Disposition: form-data; name="' .. part.name .. '"; filename="' .. part.filename .. '"\r\n'
|
|
|
+ payload = payload .. "Content-Type: " .. (part.content_type or "application/octet-stream") .. "\r\n\r\n"
|
|
|
+ else
|
|
|
+ payload = payload .. 'Content-Disposition: form-data; name="' .. part.name .. '"\r\n\r\n'
|
|
|
+ end
|
|
|
+ payload = payload .. (part.data or "") .. "\r\n"
|
|
|
+ end
|
|
|
+ payload = payload .. "--" .. boundary .. "--\r\n"
|
|
|
+ return payload
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+M.eval = function(text, mode, format, voice, config)
|
|
|
+ local file_format, url_format = resolve_eval_format(format)
|
|
|
+ local boundary = "----WebKitFormBoundary" .. tostring(os.time())
|
|
|
+ local payload = build_multipart_body({
|
|
|
+ { name = "text", data = tostring(text) },
|
|
|
+ { name = "mode", data = tostring(mode) },
|
|
|
+ {
|
|
|
+ name = "voice",
|
|
|
+ data = voice,
|
|
|
+ filename = "voice." .. file_format,
|
|
|
+ content_type = "application/octet-stream",
|
|
|
+ },
|
|
|
+ }, boundary)
|
|
|
+ local result, err = httpclient.post(M.eval_url .. url_format, {
|
|
|
+ ["Content-Type"] = "multipart/form-data; boundary=" .. boundary,
|
|
|
+ ["session-id"] = fw.make_software_guid(),
|
|
|
+ ["appkey"] = config.appkey .. "@" .. config.appsecret,
|
|
|
+ ["Wrap-Create-Time"] = "true",
|
|
|
+ }, payload)
|
|
|
+ if result then
|
|
|
+
|
|
|
+ return true, cjson.decode(err)
|
|
|
+ end
|
|
|
+ print(err)
|
|
|
+ return false, err
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+return M
|