{"concurrentRate":"1500","contentType":"audio/(mpeg|mp3)","enabledCookieJar":false,"header":"","id":1763959149150,"lastUpdateTime":1774152580867,"loginCheckJs":"if (result.code() != 200) {\n\tjava.log(\"错误：\" + java.ruleUrl)\n\teval(String(source.loginUrl));\n\tnext();\n\tjava.initUrl()\n\tresult = java.getResponse()\n}\nresult","loginUi":"[\n  {\"name\": \"显示当前发言人\", \"type\": \"button\", \"action\": \"get(sz)\",\"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"切换风格\", \"type\": \"button\", \"action\": \"Style()\",\"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\":\"切换接口\", \"type\":\"button\",\"action\":\"next()\",\"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\":\"状态检查\", \"type\":\"button\", \"action\":\"status()\",\"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\":\"更新日志\", \"type\":\"button\", \"action\":\"https://skybook.legado1.top/posts/8d4ee761\",\"style\": {\"layout_flexGrow\": \"1\"}},\n   {\"name\":\"重置设置\", \"type\":\"button\", \"action\":\"reset()\",\"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓晓\", \"type\": \"button\", \"action\": \"set(0)\", \"style\": {\"layout_flexGrow\": \"1\",\"layout_wrapBefore\": true}},\n  {\"name\": \"晓亦\", \"type\": \"button\", \"action\": \"set(1)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓辰\", \"type\": \"button\", \"action\": \"set(2)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓涵\", \"type\": \"button\", \"action\": \"set(3)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓梦\", \"type\": \"button\", \"action\": \"set(4)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓墨\", \"type\": \"button\", \"action\": \"set(5)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓秋\", \"type\": \"button\", \"action\": \"set(6)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓柔\", \"type\": \"button\", \"action\": \"set(7)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓睿\", \"type\": \"button\", \"action\": \"set(8)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓双\", \"type\": \"button\", \"action\": \"set(9)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓颜\", \"type\": \"button\", \"action\": \"set(10)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓悠\", \"type\": \"button\", \"action\": \"set(11)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓甄\", \"type\": \"button\", \"action\": \"set(12)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云溪\", \"type\": \"button\", \"action\": \"set(13)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云间\", \"type\": \"button\", \"action\": \"set(14)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云扬\", \"type\": \"button\", \"action\": \"set(15)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云枫\", \"type\": \"button\", \"action\": \"set(16)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云皓\", \"type\": \"button\", \"action\": \"set(17)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云杰\", \"type\": \"button\", \"action\": \"set(18)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云夏\", \"type\": \"button\", \"action\": \"set(19)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云野\", \"type\": \"button\", \"action\": \"set(20)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云泽\", \"type\": \"button\", \"action\": \"set(21)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n\n  {\"name\": \"晓晓DIA\", \"type\": \"button\", \"action\": \"set(22)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓晓MT\", \"type\": \"button\", \"action\": \"set(23)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓宇MT\", \"type\": \"button\", \"action\": \"set(24)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云晓MT\", \"type\": \"button\", \"action\": \"set(25)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云逸MT\", \"type\": \"button\", \"action\": \"set(26)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云帆MT\", \"type\": \"button\", \"action\": \"set(27)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n\n  {\"name\": \"晓辰HD\", \"type\": \"button\", \"action\": \"set(28)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云帆HD\", \"type\": \"button\", \"action\": \"set(29)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n\n  {\"name\": \"晓辰FHD\", \"type\": \"button\", \"action\": \"set(30)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓晓FHD\", \"type\": \"button\", \"action\": \"set(31)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"潇潇FHD\", \"type\": \"button\", \"action\": \"set(32)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云萧FHD\", \"type\": \"button\", \"action\": \"set(33)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云野FHD\", \"type\": \"button\", \"action\": \"set(34)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云逸FHD\", \"type\": \"button\", \"action\": \"set(35)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n\n  {\"name\": \"晓宸（繁）\", \"type\": \"button\", \"action\": \"set(36)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"晓语（繁）\", \"type\": \"button\", \"action\": \"set(37)\", \"style\": {\"layout_flexGrow\": \"1\"}},\n  {\"name\": \"云喆（繁）\", \"type\": \"button\", \"action\": \"set(38)\", \"style\": {\"layout_flexGrow\": \"1\"}}\n]","loginUrl":"function login() {\n    java.log(\"success\");\n}\nvar sz = source.getLoginHeader();\nvar data = [\n    [\"晓晓\", \"zh-CN-XiaoxiaoNeural\"],\n    [\"晓亦\", \"zh-CN-XiaoyiNeural\"],\n    [\"晓辰\", \"zh-CN-XiaochenNeural\"],\n    [\"晓涵\", \"zh-CN-XiaohanNeural\"],\n    [\"晓梦\", \"zh-CN-XiaomengNeural\"],\n    [\"晓墨\", \"zh-CN-XiaomoNeural\"],\n    [\"晓秋\", \"zh-CN-XiaoqiuNeural\"],\n    [\"晓柔\", \"zh-CN-XiaorouNeural\"],\n    [\"晓睿\", \"zh-CN-XiaoruiNeural\"],\n    [\"晓双\", \"zh-CN-XiaoshuangNeural\"],\n    [\"晓颜\", \"zh-CN-XiaoyanNeural\"],\n    [\"晓悠\", \"zh-CN-XiaoyouNeural\"],\n    [\"晓甄\", \"zh-CN-XiaozhenNeural\"],\n    [\"云溪\", \"zh-CN-YunxiNeural\"],\n    [\"云间\", \"zh-CN-YunjianNeural\"],\n    [\"云扬\", \"zh-CN-YunyangNeural\"],\n    [\"云枫\", \"zh-CN-YunfengNeural\"],\n    [\"云皓\", \"zh-CN-YunhaoNeural\"],\n    [\"云杰\", \"zh-CN-YunjieNeural\"],\n    [\"云夏\", \"zh-CN-YunxiaNeural\"],\n    [\"云野\", \"zh-CN-YunyeNeural\"],\n    [\"云泽\", \"zh-CN-YunzeNeural\"],\n\n    [\"晓晓DIA\", \"zh-CN-XiaoxiaoDialectsNeural\"],\n    [\"晓晓MT\", \"zh-CN-XiaoxiaoMultilingualNeural\"],\n    [\"晓宇MT\", \"zh-CN-XiaoyuMultilingualNeural\"],\n    [\"云晓MT\", \"zh-CN-YunxiaoMultilingualNeural\"],\n    [\"云逸MT\", \"zh-CN-YunyiMultilingualNeural\"],\n    [\"云帆MT\", \"zh-CN-YunfanMultilingualNeural\"],\n\n    [\"晓辰HD\", \"zh-CN-Xiaochen:DragonHDLatestNeural\"],\n    [\"云帆HD\", \"zh-CN-Yunfan:DragonHDLatestNeural\"],\n\n    [\"晓辰FHD\", \"zh-CN-Xiaochen:DragonHDFlashLatestNeural\"],\n    [\"晓晓FHD\", \"zh-CN-Xiaoxiao:DragonHDFlashLatestNeural\"],\n    [\"潇潇FHD\", \"zh-CN-Xiaoxiao2:DragonHDFlashLatestNeural\"],\n    [\"云萧FHD\", \"zh-CN-Yunxiao:DragonHDFlashLatestNeural\"],\n    [\"云野FHD\", \"zh-CN-Yunye:DragonHDFlashLatestNeural\"],\n    [\"云逸FHD\", \"zh-CN-Yunyi:DragonHDFlashLatestNeural\"],\n\n    [\"晓宸（繁）\", \"zh-TW-HsiaoChenNeural\"],\n    [\"晓语（繁）\", \"zh-TW-HsiaoYuNeural\"],\n    [\"云喆（繁）\", \"zh-TW-YunJheNeural\"],\n];\n// 接口数据\n\n// 判断接口是否为空\nif (sz == null || sz == \"\" || isNaN(sz) || sz < 0 || sz > data.length) {\n    sz = 0;\n    source.putLoginHeader(sz);\n    java.toast(\"未设置发言人或发言人无效，使用默认发言人：\" + data[sz][0]);\n} else {\n    sz = parseInt(sz); // 将sz转换为整数\n}\n\n// 设置保存接口\nfunction set(num) {\n    if (num < 0 || num > data.length) {\n        java.longToast(\"无效的编号！\");\n        return;\n    }\n    var show = \"✅设置成功！\\n发言人：\";\n    var tips = \"\\n发言人已更改\";\n    var msg = show + data[num][0] + tips;\n    java.longToast(msg);\n    return source.putLoginHeader(num);\n}\n\n// 获取接口显示\nfunction get(sz) {\n    if (sz < 0 || sz > data.length) {\n        java.longToast(\"❌无效的接口编号！\");\n        return;\n    }\n    var show = \"\\n发言人：\";\n    return java.longToast(show + data[sz][0]);\n}\n\nfunction Style() {\n    let styles = [\n        [\"\", \"无风格\"],\n        [\"assistant\", \"助手\"],\n        [\"chat\", \"聊天\"],\n        [\"customerservice\", \"客户服务\"],\n        [\"newscast\", \"新闻播报\"],\n        [\"affectionate\", \"深情\"],\n        [\"angry\", \"愤怒\"],\n        [\"calm\", \"平静\"],\n        [\"cheerful\", \"欢快\"],\n        [\"disgruntled\", \"不满\"],\n        [\"fearful\", \"恐惧\"],\n        [\"gentle\", \"温柔\"],\n        [\"lyrical\", \"抒情\"],\n        [\"sad\", \"悲伤\"],\n        [\"serious\", \"严肃\"],\n        [\"poetry-reading\", \"诗歌朗诵\"],\n        [\"friendly\", \"友好\"],\n        [\"chat-casual\", \"随意聊天\"],\n        [\"whispering\", \"耳语\"],\n        [\"sorry\", \"歉意\"],\n        [\"excited\", \"兴奋\"],\n    ];\n    let current = cache.get(\"NextTTS\");\n    let index = styles.findIndex((s) => s[0] == current);\n    if (index === -1) {\n        index = 0;\n    }\n    let nextIndex = (index + 1) % styles.length;\n    cache.put(\"NextTTS\", styles[nextIndex][0]);\n    java.toast(\"切换到风格\\n\" + styles[nextIndex][1]);\n}\n\nlet apis = [\n    [\"http://171.113.117.50:8085/tts\", true],\n    [\"https://tts.wangwangit.com/v1/audio/speech\", true, \"\", \"POST\"],\n    [\"http://5.45.99.149:8075/tts\", true],\n    [\"http://74.48.40.244:8010/tts\", true],\n    [\"http://64.112.42.45:9080/tts\", true],\n    [\"http://146.56.188.115:8080/tts\", false],\n    [\"https://t.leftsite.cn/tts\", false],\n    [\"http://47.79.92.215:18080/tts\", false],\n    [\"http://36.248.181.23:22335/tts\", true],\n    [\"http://124.71.164.73:8085/tts\", true],\n    [\"http://190.92.218.92:8080/tts\", true],\n];\n\nfunction shuffle(r) {\n    var t = r.slice();\n    for (let r = t.length - 1; 0 < r; r--) {\n        var a = Math.floor(Math.random() * (r + 1));\n        [t[r], t[a]] = [t[a], t[r]];\n    }\n    return t;\n}\n\nfunction next() {\n    let idx = source.getVariable();\n    idx = parseInt(idx);\n    if (isNaN(idx) || idx < 0 || idx >= apis.length) {\n        idx = Math.floor(Math.random() * apis.length);\n    } else {\n        idx = (idx + 1) % apis.length;\n    }\n\n    source.setVariable(idx);\n    let apii = apis[idx];\n\n    java.toast(\"接口检测中...\");\n\n    java.toast(`✅切换成功\\n当前接口：${apii[0]}\\n是否支持FHD发言人：${apii[1] ? \"支持\" : \"不支持\"}\\n${check(apii)}`);\n}\n\nfunction status() {\n    let idx = source.getVariable();\n    idx = parseInt(idx);\n    if (isNaN(idx) || idx < 0 || idx >= apis.length) {\n        java.toast(`\\n❌尚未初始化`);\n    } else {\n        let apii = apis[idx];\n        java.toast(`当前接口：${apii[0]}\\n是否支持FHD发言人：${apii[1] ? \"支持\" : \"不支持\"}\\n${check(apii)}`);\n    }\n}\n\nfunction check(api) {\n    let isPost = !!api[3];\n    let testu = isPost\n        ? api[0]\n        : `${api[0]}?t=这是一段测试文本&v=zh-CN-XiaoxiaoNeural&r=-10&p=0&s=${source.getVariable()}&api_key=${api[2] ?? \"\"}`;\n    let json = `{\n    \"input\":\"这是一段测试文本\",\n    \"voice\":\"zh-CN-XiaozhenNeural\",\n    \"speed\":1,\n    \"pitch\":\"0\",\n    \"style\":\"general\"\n  }`;\n    java.log(testu);\n\n    try {\n        let conn = org.jsoup.Jsoup.connect(testu)\n            .method(isPost ? org.jsoup.Connection.Method.POST : org.jsoup.Connection.Method.GET)\n            .timeout(5000)\n            .ignoreContentType(true);\n\n        if (isPost) {\n            conn.header(\"Content-Type\", \"application/json\").requestBody(json);\n        }\n        conn.execute();\n        return \"✅接口正常\";\n    } catch (e) {\n        java.log(e);\n        return \"❌接口异常\";\n    }\n}\n\nfunction reset() {\n    source.setVariable(\"\");\n    cache.delete(\"NextTTS\");\n    java.toast(\"\\n✅重置成功\");\n}\n\n// 按接口获取网址\nvar voice = data[sz];\nvoice;","name":"Next-点击切换接口-明月v2.4","url":"@js:\neval(String(source.loginUrl));\n\n// cache.delete(\"NextTTS\")\nlet idx = source.getVariable();\nif (idx == null) {\n    java.toast(\"自动设置随机接口\");\n    next();\n    idx = source.getVariable();\n}\n\njava.log(idx);\nlet url = apis[+idx];\n\n// if (voice[0].includes(\"HD\")) url = shuffle(apis.filter(api => api[1]))[0]\nlet body = {};\njava.log(speakText);\n\nif (url[3] && url[3] === \"POST\") {\n    let params = JSON.stringify({\n        \"input\": speakText,\n        \"voice\": voice[1],\n        \"speed\": speakSpeed / 10,\n        \"pitch\": \"0\",\n        \"style\": \"general\"\n    });\n    requestUrl = `${url[0]},{\"body\":${params},\"method\":\"POST\"}`;\n} else {\n    let params = `?t=${speakText}&v=${voice[1]}&r=${(speakSpeed - 10) * 10}&p=0&s=${source.getVariable()}&api_key=${url[2] ?? \"\"}`;\n    requestUrl = `${url[0]}${params}`;\n}"}