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