#2342 有人能教一下怎么在TTS设置中填写自定义TTS API,以获得其它非官方语音整合包的支持吗?

36.163* Posted at: 20 days ago 👁96

无效的值或参数:Cannot find a function with api_name: /generate.:
Traceback (most recent call last):
File "videotrans\util\ListenVoice.py", line 18, in run
File "videotrans\tts\__init__.py", line 305, in run
File "videotrans\tts\_base.py", line 179, in run
File "tenacity\__init__.py", line 480, in call
File "videotrans\tts\_f5tts.py", line 307, in _run
File "videotrans\tts\_f5tts.py", line 220, in _item_task_voxcpm
File "gradio_client\client.py", line 496, in predict
File "gradio_client\client.py", line 542, in submit
File "gradio_client\client.py", line 876, in _infer_fn_index
ValueError: Cannot find a function with api_name: /generate.

3 Replies

根据错误信息 Cannot find a function with 'api_name': /generate,问题出在您配置的自定义TTS API地址或参数与目标整合包的Gradio接口不匹配。

要正确配置自定义TTS API,请按以下步骤操作:

  1. 获取正确的API地址和端点

    • 首先,确保您要接入的语音整合包(如F5-TTS、Spark-TTS、CosyVoice等)已成功在本地启动,并显示为一个可访问的URL(例如 http://127.0.0.1:7860)。
    • 您需要知道该整合包对外提供服务的具体API端点(路径)。这个端点通常不是根路径 /,而是像 /api/generate/tts/run/predict 这样的路径。
    • 关键步骤:在浏览器中打开整合包的Gradio界面,按 F12 打开开发者工具,切换到 “网络”(Network) 选项卡。然后在界面上进行一次试合成操作,观察网络请求中出现的 “Fetch/XHR” 请求。其 “请求URL”(Request URL) 的后半部分(如 /run/predict)就是您需要的API端点。
  2. 在pyVideoTrans中填写配置

    • 在软件主界面,进入 “配音设置”,选择 “自定义TTS-API”
    • 在出现的配置框中,按格式填写:

      • API地址:填写整合包的完整基础URL(例如 http://127.0.0.1:7860)。
      • API端点:填写您在上一步中确定的端点路径(例如 /run/predict)。这是解决您当前报错的关键,错误信息表明软件正在寻找 /generate 端点,但您的整合包可能使用的是其他端点。
      • 数据格式:通常选择 json
      • 输入文本变量名:查看整合包的API文档或通过上述网络请求查看 Payload,找到接收文本的参数名(常见如 textinput_text)。
      • 语速/音调变量名:同上,找到对应参数(可能为 speedratepitch)。
      • 输出音频格式:通常为 wavmp3
  3. 测试连接

    • 填写后,点击 “测试” 按钮。如果配置正确,软件会返回成功信息并列出可用的语音角色。
    • 如果测试失败,请根据返回的错误信息调整参数,并再次确认整合包服务是否正常运行、网络是否可达。

针对您当前的错误:请重点检查第2步中的 “API端点” 是否填写正确。您遇到的错误表明软件向 [您的API地址]/generate 发送了请求,但该端点不存在。您需要将其更正为整合包实际提供的端点。

有用的文档链接:自定义TTS-API

用F12观察了多个整合包的端点是http://localhost:7860/api/tts/或者是http://localhost:7860/gradio_api/queue/join?这样的形式,不过学着填入py里测试不通

您观察到的端点格式是正确的,但需要区分“API端点”和“Gradio内部队列端点”。您看到的 /gradio_api/queue/join? 是Gradio内部处理队列的地址,不是用于直接调用的API端点。而 /api/tts/ 则可能是正确的自定义API端点。

请按以下步骤精确配置:

  1. 确定正确的API地址和端点

    • 如果整合包启动后提供了一个明确的“API文档”页面或说明,请优先按照其文档填写。
    • 对于大多数基于Gradio的整合包,标准的、用于程序调用的端点通常是 /api/tts/run/predict/api/predict
    • 验证方法:在浏览器中直接访问 http://localhost:7860/api/tts(不带末尾斜杠),看是否会返回一个JSON响应(可能包含错误信息,但至少说明端点存在)。或者访问 http://localhost:7860 查看是否有API使用说明。
  2. 在pyVideoTrans中配置

    • API地址http://localhost:7860
    • API端点:尝试填入 /api/tts/run/predict
    • 数据格式:选择 json
    • 输入文本变量名:这需要查看整合包的源代码或网络请求负载。打开F12开发者工具的“网络”选项卡,在整合包Web界面输入文本并点击合成,观察发出的POST请求的“载荷”(Payload)。找到其中代表文本的键名,常见的有 "text""input_text""prompt"。将其填入此框。
    • 语速/音调变量名:同上,在载荷中查找如 "speed""rate""pitch" 的键名。如果整合包不支持或不提供这些参数,可以留空。
    • 输出音频格式:查看网络请求的响应,或整合包说明,确定返回的音频格式,通常是 wavmp3
  3. 测试与排查

    • 点击“测试”按钮。如果失败,软件会返回具体错误信息。
    • 常见错误及解决

      • 连接被拒绝:确保整合包服务正在运行,且端口号(7860)正确。
      • 404 Not Found:端点路径填写错误。请返回第1步重新确认。
      • 返回结果解析失败:可能是“输出音频格式”不正确,或者API返回的数据结构不是纯音频字节流。有些整合包返回的是包含音频base64编码的JSON对象。此时您可能需要查阅该整合包的具体API文档。

如果以上步骤仍无法解决,请提供:

  1. 您使用的是哪个具体的整合包(如F5-TTS、Spark-TTS的具体版本)?
  2. 点击“测试”后pyVideoTrans返回的完整错误信息。
  3. 该整合包是否有公开的API说明文档?

有用的文档链接:自定义TTS-API

Post Your Reply
Open source and free maintenance is not easy. If this project is helpful to you, please consider making a small donation to help the project continue to maintain and update.

Donate: https://ko-fi.com/jianchang512

Trending Questions