web技术

腾讯云TTS踩坑之旅:流式语音合成SDK的问题

2023-07-24 17:59 作者:不是企鹅原创

这篇文章我讲一下腾讯云TTS里面的一些坑,以及解决的方法。

我们刚开始使用腾讯云TTS的时候,一般都会先打开文档,你如果进入文档页面之后,第一步就是去看“在线SDK文档”的话,那么恭喜你,这是你踩坑之旅的开始。

我以PHP版本为例,打开后内容是这样的:

我们看到这样的页面,一般会以为这个SDK可以解决语音合成所有的问题,包括短文本、长文本的合成等等,但其实不是,这个页面其实只是流式语音的SDK页面。

它说接口请求域名是 tts.cloud.tencent.com/stream ,但你要注意这个接口是用来合成流式语音的,只能合成不超过600个汉字的短文本,超过600字自己另外想办法吧。

按提示下载SDK,压缩包是 php_stream_tts_sdk.zip 只有8KB,里面有4个文件,但其实只有2个是有用的。

我们需要修改 Config.php 文件里面的 SECRET_ID、SECRET_KEY、APPID,把默认输出格式 pcm 改成 mp3 ,因为生成pcm之后几乎没有播放器能打开。文件 TCloudTTS.php 是 demo,可以把它的代码复制出来测试。PHP代码整理如下:

require ('./php_stream_tts_sdk/TTSUtil.php');

# 1. 先修改好Config.php文件中的配置值。
# 2. TEXT为每次请求的文本,SESSION_ID建议每次请求修改成唯一id,例如uuid。
Config :: $TEXT = "你好,五一节准备去哪里玩啊";
Config :: $SESSION_ID = guid();
//echo "Session id : " . Config :: $SESSION_ID . "\n";

# 2. 调用获取pcm格式音频
$result = getVoice();
$file = fopen('./'.time().'.mp3','w');
fwrite($pcm_file, $result);

然后运行,如无意外的话,你会遇到一个错误:

SSL certificate problem: unable to get local issuer certificate" http_curl_exec failed

这个问题我在前面两篇文章提过,解决方法是在 TTSUtil.php 文件的 http_curl_exec() 函数中,执行curl_exec()之前加上这两行代码:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

这个API似乎只支持输出 pcm 和 mp3 格式,如果把 CODEC 的值改成 wav,会出现这个错误:

Error":{"Code":"InvalidParameterValue.Codec","Message":"Please check your parameter Codec"}

但事情到这里就结束了吗?还远远没有,因为你选择在这个API去做TTS,一开始就是错误的,除非你本来就是想做流式TTS。

前面说了,这个接口只能合成短文本,长文本还得另外想办法,然后如果你想在这个SDK的基础上去修改,改成可以合成长文本,那么恭喜你,你踩到一个更大的坑。后续我会再出文章讲讲那个更大的坑。

推荐文章
作者在使用百度云开发PHP项目时,遇到一个unsupported_grant_type错误。经研...
最近我想把百度云TTS应用到我的一个小项目中,但刚上手就遇到一个问题:官方...
推荐专题
如何自己建网站?建网站难不难?其实建网站说难不难,说容易也并不容易,难...
本专题精心收集整理了多种HTML+CSS+JS轮播图实现方案,带详细代码和讲解,正...