好的开始是从吃早饭开始的

百度语音合成(PHP)-解决文本长度较长
发表于2018-05-21 16:27:10 | 分类:技术 | 阅读:120

“把文字转换成声音,让你的应用开口说话。”这是一篇关于体验百度语音合成技术的记录。


具体接入指南:根据百度语音合成技术的百度百科词条(点击查看)和 百度语音合成 PHP SDK文档(点击查看)创建并部署基本应用。


想要体验的请戳->技术体验


文档中指出:目前最多接受合成文本长度必须小于1024字节,如果文本长度较长,可以采用多次请求的方式。


具体实现:


  <?php
      require_once 'AipSpeech.php';

      // 成为百度开发者,创建应用后获得的 APPID AK SK
      const APP_ID = '*****';
      const API_KEY = '*****';
      const SECRET_KEY = '*****';

      $client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);

      $k=10;  //设置最大的合成文本长度(最大为1024字节,测试数字10个字符长度,占的字节不同)

      $text="如同施展了法术,在不到40年的时间里,从一个默默无闻的边陲小镇到拥有2000万人的现代化国际都市,深圳奇迹般崛起于中国南方,绽放夺目光彩。";

      $length=mb_strlen($text);  //mb_strlen()获得正确的中文字符数

      $chars=array();

      //将长文本划分成多个文本,存入数组,分别进行语音合成
      while ($length>$k) {
	  array_push($chars,mb_substr($text,0,$k));
	  $content=mb_substr($text,$k);
	  $length=mb_strlen($content);
	  $text=$content;
      } 
      
      array_push($chars,$content);

      //显示划分后的多个文本,可删除
      print_r($chars);

      //将每个文本识别后的语音二进制存入数组
      $arr=array();

      for($i=0;$i<count($chars);$i++)
      {
	  $result[$i] = $client->synthesis($chars[$i], 'zh', 1, array(
	     'vol' => 5,
	  ));

	  array_push($arr, $result[$i]);
      }
      
      //将数组转换成一个字符串,目的是将多段语音合成一个完整的语音文件
      $result=implode(",", $arr);

      // 识别正确返回语音二进制 错误则返回json 参照下面错误码
      if(!is_array($result)){
	  file_put_contents('audio.mp3', $result);
      }

?>


一个问题:最终的输出的语音文件因为测试中是以每10个字符长度分别输出二进制再合成的,句子中间的停顿也以10个字符长度为准。


具体解决方法就是:利用标点符号去划分成文本,能够让文本的语句停顿更加舒适。在规定的1024字节内,判断最后一个字符是否为标点符号,如果是就可以将该标点符号前的文本归为一段语音,如果不是,则往文本的前面找标点符号作为分隔点。具体代码不写了。


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
点击此处,取消分享
*以下内容皆为必填项目

0条评论

暂无评论
TOP