Ver código fonte

添加 target/unisound/unisound.lua

1585346868 2 meses atrás
pai
commit
5f1dd5359f
1 arquivos alterados com 64 adições e 0 exclusões
  1. 64 0
      target/unisound/unisound.lua

+ 64 - 0
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