添加 target/unisound/unisound.lua

This commit is contained in:
2026-06-29 13:14:11 +08:00
parent 0f8d487926
commit 5f1dd5359f

View File

@@ -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