From 5f1dd5359f18c4961c8af65d93746296c87a122f Mon Sep 17 00:00:00 2001 From: 1585346868 <1585346868@qq.com> Date: Mon, 29 Jun 2026 13:14:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20target/unisound/unisound.l?= =?UTF-8?q?ua?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- target/unisound/unisound.lua | 64 ++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 target/unisound/unisound.lua diff --git a/target/unisound/unisound.lua b/target/unisound/unisound.lua new file mode 100644 index 0000000..a86dc7d --- /dev/null +++ b/target/unisound/unisound.lua @@ -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