腾讯云TTS踩坑之旅:流式语音合成SDK的问题
这篇文章我讲一下腾讯云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的基础上去修改,改成可以合成长文本,那么恭喜你,你踩到一个更大的坑。后续我会再出文章讲讲那个更大的坑。