Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] 自定义朗读引擎,无法修改请求的 Content-Type ? #1469

Closed
wxxxcxx opened this issue Dec 17, 2021 · 10 comments
Closed

[BUG] 自定义朗读引擎,无法修改请求的 Content-Type ? #1469

wxxxcxx opened this issue Dec 17, 2021 · 10 comments
Labels
BUG B.软件未按预期的功能运行

Comments

@wxxxcxx
Copy link

wxxxcxx commented Dec 17, 2021

微软的认知服务TTS提供每月500万字的免费限额,对于个人用户足够了。

所以我想添加一个自定义朗读引擎,调用它提供的API。

API格式如下:

curl --location --request POST 'https://INSERT_REGION_HERE.tts.speech.microsoft.com/cognitiveservices/v1' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: application/ssml+xml' \
--header 'X-Microsoft-OutputFormat: audio-16khz-128kbitrate-mono-mp3' \
--header 'User-Agent: curl' \
--data-raw '<speak version='\''1.0'\'' xml:lang='\''en-US'\''>
    <voice xml:lang='\''en-US'\'' xml:gender='\''Female'\'' name='\''en-US-JennyNeural'\''>
        my voice is my passport verify me
    </voice>
</speak>' > output.mp3

我编写的规则:

# url
https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1,{"method":"POST","body":"<speak version=\"1.0\" xml:lang=\"en-US\"><voice name=\"zh-CN-XiaoxiaoNeural\"><prosody rate=\"0%\" pitch=\"0%\">{{speakText}}</prosody></voice></speak>"}
# header key 需要使用替换为真实的key
{"Ocp-Apim-Subscription-Key": "key",
"Content-Type": "application/ssml+xml",
"X-Microsoft-OutputFormat": "audio-16khz-128kbitrate-mono-mp3",
"User-Agent": "yd"}

这个API需要设置Content-Type 为 application/ssml+xml ,我使用抓包工具发现请求的 Content-Type 被阅读修改为了 application/x-www-form-urlencoded,而且 body中的xml内容被截断并编码为了

%3Cspeak%20version=%221.0%22+xml%3Alang

看了下源代码,阅读现在似乎只能处理 Form 和 Json 两种 Content-Type 的 post 请求?

对 Kotlin 不太熟悉,也可能是我规则写的不对,请大佬们指教以下应该怎么修改?

@wxxxcxx wxxxcxx added the BUG B.软件未按预期的功能运行 label Dec 17, 2021
@wxxxcxx wxxxcxx changed the title [BUG] 自定义阅读引擎,无法修改请求的 Content-Type ? [BUG] 自定义朗读引擎,无法修改请求的 Content-Type ? Dec 17, 2021
@gedoor
Copy link
Owner

gedoor commented Dec 18, 2021

好的,我看下

@gedoor
Copy link
Owner

gedoor commented Dec 18, 2021

提交了一个测试版本,下载试试

@SinoAHpx
Copy link

image

好像还是用不了?这是我复制的规则,开启朗读之后无事发生
app版本是legado_app_3.21.12191159_共存.apk

@wxxxcxx
Copy link
Author

wxxxcxx commented Dec 19, 2021

提交了一个测试版本,下载试试

legado_app_3.21.12182037_共存.apk 的content-type会变成json。

legado_app_3.21.12191159_共存.apk 测试可以用了,大佬辛苦了。

image

@gedoor gedoor closed this as completed Dec 19, 2021
@wxxxcxx
Copy link
Author

wxxxcxx commented Dec 19, 2021

@SinoAHpx url 下面的 Content-Type 根据内置阅读引擎推测设置的应该是Response的Content-Type。即应该为 audio/mpeg。

@SinoAHpx
Copy link

@meetcw 谢谢老哥!我发现我传的url和header都有一点json语法问题,修正之后就可以用了

@Jay54520
Copy link

Jay54520 commented Jan 12, 2022

阅读3.0朗读引擎配置

将下方代码中的 API-KEY 替换为 Azure 的 API-KEY
在阅读3.0中新增朗读引擎
复制下方代码,在阅读3.0中点击右上角菜单-粘贴源

{
  "concurrentRate": "0",
  "contentType": "audio/mpeg",
  "header": "{\n  \"Ocp-Apim-Subscription-Key\": \"API-KEY\",\n  \"Content-Type\": \"application/ssml+xml\",\n  \"X-Microsoft-OutputFormat\": \"audio-16khz-128kbitrate-mono-mp3\",\n  \"User-Agent\": \"legado\"\n}",
  "id": 1642068899362,
  "loginCheckJs": "",
  "loginUi": "",
  "loginUrl": "",
  "name": Azure,
  "url": "https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1,{\n    \"method\": \"POST\",\n    \"body\": \"<speak version=\\\"1.0\\\" xml:lang=\\\"zh-CN\\\"><voice name=\\\"zh-CN-XiaoxiaoNeural\\\"><prosody rate=\\\"0%\\\" pitch=\\\"0%\\\">{{speakText}}</prosody></voice></speak>\"\n}"
}

Azure 参数是 url 中的 name, rate 和 pitch。

@gkcngk
Copy link

gkcngk commented Jan 19, 2022

阅读3.0朗读引擎配置

将下方代码中的 API-KEY 替换为 Azure 的 API-KEY 在阅读3.0中新增朗读引擎 复制下方代码,在阅读3.0中点击右上角菜单-粘贴源

{
  "concurrentRate": "0",
  "contentType": "audio/mpeg",
  "header": "{\n  \"Ocp-Apim-Subscription-Key\": \"API-KEY\",\n  \"Content-Type\": \"application/ssml+xml\",\n  \"X-Microsoft-OutputFormat\": \"audio-16khz-128kbitrate-mono-mp3\",\n  \"User-Agent\": \"legado\"\n}",
  "id": 1642068899362,
  "loginCheckJs": "",
  "loginUi": "",
  "loginUrl": "",
  "name": Azure,
  "url": "https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1,{\n    \"method\": \"POST\",\n    \"body\": \"<speak version=\\\"1.0\\\" xml:lang=\\\"zh-CN\\\"><voice name=\\\"zh-CN-XiaoxiaoNeural\\\"><prosody rate=\\\"0%\\\" pitch=\\\"0%\\\">{{speakText}}</prosody></voice></speak>\"\n}"
}

Azure 参数是 url 中的 name, rate 和 pitch。

感谢!成功解决了我遇到的问题

顺便提示如果有使用eastasia以外服务器的用户,需要把eastasia换到你所在地对应的server
另外如果网速不错的话,也可以把audio-16khz-128kbitrate-mono-mp3换到更高码率

@SinoAHpx
Copy link

阅读3.0朗读引擎配置

将下方代码中的 API-KEY 替换为 Azure 的 API-KEY 在阅读3.0中新增朗读引擎 复制下方代码,在阅读3.0中点击右上角菜单-粘贴源

{
  "concurrentRate": "0",
  "contentType": "audio/mpeg",
  "header": "{\n  \"Ocp-Apim-Subscription-Key\": \"API-KEY\",\n  \"Content-Type\": \"application/ssml+xml\",\n  \"X-Microsoft-OutputFormat\": \"audio-16khz-128kbitrate-mono-mp3\",\n  \"User-Agent\": \"legado\"\n}",
  "id": 1642068899362,
  "loginCheckJs": "",
  "loginUi": "",
  "loginUrl": "",
  "name": Azure,
  "url": "https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1,{\n    \"method\": \"POST\",\n    \"body\": \"<speak version=\\\"1.0\\\" xml:lang=\\\"zh-CN\\\"><voice name=\\\"zh-CN-XiaoxiaoNeural\\\"><prosody rate=\\\"0%\\\" pitch=\\\"0%\\\">{{speakText}}</prosody></voice></speak>\"\n}"
}

Azure 参数是 url 中的 name, rate 和 pitch。

感谢!成功解决了我遇到的问题
顺便提示使用eastasia以外服务器的用户,需要把eastasia换到你所在地对应的server
另外如果网速不错的话,也可以把audio-16khz-128kbitrate-mono-mp3换到更高码率

建议使用@meetcw 的https://github.com/meetcw/ms-ra-forwarder 体验更佳

@kettly1260
Copy link

阅读3.0朗读引擎配置
将下方代码中的 API-KEY 替换为 Azure 的 API-KEY 在阅读3.0中新增朗读引擎 复制下方代码,在阅读3.0中点击右上角菜单-粘贴源

{
  "concurrentRate": "0",
  "contentType": "audio/mpeg",
  "header": "{\n  \"Ocp-Apim-Subscription-Key\": \"API-KEY\",\n  \"Content-Type\": \"application/ssml+xml\",\n  \"X-Microsoft-OutputFormat\": \"audio-16khz-128kbitrate-mono-mp3\",\n  \"User-Agent\": \"legado\"\n}",
  "id": 1642068899362,
  "loginCheckJs": "",
  "loginUi": "",
  "loginUrl": "",
  "name": Azure,
  "url": "https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1,{\n    \"method\": \"POST\",\n    \"body\": \"<speak version=\\\"1.0\\\" xml:lang=\\\"zh-CN\\\"><voice name=\\\"zh-CN-XiaoxiaoNeural\\\"><prosody rate=\\\"0%\\\" pitch=\\\"0%\\\">{{speakText}}</prosody></voice></speak>\"\n}"
}

Azure 参数是 url 中的 name, rate 和 pitch。

感谢!成功解决了我遇到的问题
顺便提示使用eastasia以外服务器的用户,需要把eastasia换到你所在地对应的server
另外如果网速不错的话,也可以把audio-16khz-128kbitrate-mono-mp3换到更高码率

建议使用@meetcw 的https://github.com/meetcw/ms-ra-forwarder 体验更佳

好像只有晓晓可用,我替换了voice name,但是没办法正常连接。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BUG B.软件未按预期的功能运行
Projects
None yet
Development

No branches or pull requests

6 participants