找回密码
 立即注册
搜索
查看: 292|回复: 1

[基础语法] 百度文本语音合成demo

[复制链接]

581

主题

110

回帖

4066

积分

管理员

积分
4066

众神之神

发表于 2024-11-14 16:44:31 | 显示全部楼层 |阅读模式
  1. <?php
  2. define('DEMO_CURL_VERBOSE', false);

  3. # 填写网页上申请的appkey 如 $apiKey="g8eBUMSokVB1BHGmgxxxxxx"
  4. $apiKey = "TODO";
  5. # 填写网页上申请的APP SECRET 如 $secretKey="94dc99566550d87f8fa8ece112xxxxx"
  6. $secretKey = "TODO";

  7. # text 的内容为"欢迎使用百度语音合成"的urlencode,utf-8 编码
  8. # 可以百度搜索"urlencode"
  9. //$text = "大業四年六月二十七日疏一時講語。此序理深事博、言約義周,略曉六條方乃可讀。一須深見論意、二精通《法華》、三妙識《般若》、四善鑒《老》、《莊》、五[*]博尋儒典、六巧制文章。余昔已著三論文玄正言,序是人制不我釋之。但師每講常讀此序,而淺識之流意多紛謬,故略陳綱要以賜門人也。序為六分:一標大宗、二釋題目、三敘造論意、四讚論功能、五讚論利益、六作者謙讓。";
  10. $text = "大业四年(公元608年)六月二十七日,对(某部著作的)疏进行了一次讲解时所说的话语。这篇序道理深邃、内容广博,言辞简约但含义周全,大致要通晓六条要求之后才能够去阅读它。一是必须深刻领会论著的意旨;二是要精通《法华经》;三是要精妙地知晓《般若经》;四是善于鉴别《老子》《庄子》;五是广泛探寻儒家经典;六是能够巧妙撰写文章。我过去已经撰写了三篇论述文章义理的著述,这篇序是别人所写的,所以我就不做阐释了。只是师父每次讲学的时候常常会读这篇序,然而那些见识浅薄的人往往理解上有诸多错乱谬误之处,所以我大略陈述一下它的纲要用来赐给门下弟子。这篇序分为六个部分:一是标明主要宗旨;二是解释题目;三是叙述撰写论著的意图;四是称赞论著的功用;五是称赞论著带来的益处;六是作者表现出的谦逊退让之意。 ";
  11. $text2 = iconv("UTF-8", "GBK", $text);
  12. echo "text length :" . mb_strlen($text2, "GBK") . "\n";

  13. # 发音人选择, 基础音库:0为度小美,1为度小宇,3为度逍遥,4为度丫丫,
  14. # 精品音库:5为度小娇,103为度米朵,106为度博文,110为度小童,111为度小萌,默认为度小美
  15. $per = 4226;
  16. #语速,取值0-15,默认为5中语速
  17. $spd = 5;
  18. #音调,取值0-15,默认为5中语调
  19. $pit = 5;
  20. #音量,取值0-9,默认为5中音量
  21. $vol = 5;
  22. // 下载的文件格式, 3:mp3(default) 4: pcm-16k 5: pcm-8k 6. wav
  23. $aue = 3;

  24. $formats = array(3 => 'mp3', 4 => 'pcm', 5 =>'pcm', 6 => 'wav');
  25. $format = $formats[$aue];

  26. $cuid = "123456PHP";

  27. /** 公共模块获取token开始 */

  28. $auth_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=".$apiKey."&client_secret=".$secretKey;
  29. $ch = curl_init();
  30. curl_setopt($ch, CURLOPT_URL, $auth_url);
  31. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  32. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  33. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //信任任何证书
  34. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 检查证书中是否设置域名,0不验证
  35. curl_setopt($ch, CURLOPT_VERBOSE, DEMO_CURL_VERBOSE);
  36. $res = curl_exec($ch);
  37. if(curl_errno($ch))
  38. {
  39.     print curl_error($ch);
  40. }
  41. curl_close($ch);

  42. echo "Token URL response is " . $res . "\n";
  43. $response = json_decode($res, true);

  44. if (!isset($response['access_token'])){
  45.         echo "ERROR TO OBTAIN TOKEN\n";
  46.         exit(1);
  47. }
  48. if (!isset($response['scope'])){
  49.         echo "ERROR TO OBTAIN scopes\n";
  50.         exit(2);
  51. }

  52. if (!in_array('audio_tts_post',explode(" ", $response['scope']))){
  53.         echo "DO NOT have tts permission\n";
  54.         // 请至网页上应用内开通语音合成权限
  55.         exit(3);
  56. }

  57. $token = $response['access_token'];
  58. echo "token = $token ; expireInSeconds: ${response['expires_in']}\n\n";
  59. /** 公共模块获取token结束 */

  60. /** 拼接参数开始 **/
  61. // tex=$text&lan=zh&ctp=1&cuid=$cuid&tok=$token&per=$per&spd=$spd&pit=$pit&vol=$vol
  62. $params = array(
  63.         'tex' => urlencode($text), // 为避免+等特殊字符没有编码,此处需要2次urlencode。
  64.         'per' => $per,
  65.         'spd' => $spd,
  66.         'pit' => $pit,
  67.         'vol' => $vol,
  68.         'aue' => $aue,
  69.         'cuid' => $cuid,
  70.         'tok' => $token,
  71.         'lan' => 'zh', //固定参数
  72.         'ctp' => 1, // 固定参数
  73. );
  74. $paramsStr =  http_build_query($params);
  75. $url = 'http://tsn.baidu.com/text2audio';
  76. $urltest = $url . '?' . $paramsStr;
  77. echo $urltest . "\n"; // 反馈请带上此url

  78. /** 拼接参数结束 **/

  79. $g_has_error = true;
  80. $ch = curl_init();
  81. curl_setopt($ch, CURLOPT_URL, $url);
  82. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  83. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  84. curl_setopt ($ch, CURLOPT_POST, 1);
  85. curl_setopt($ch, CURLOPT_POSTFIELDS, $paramsStr);
  86. function read_header($ch, $header){
  87.         global $g_has_error;
  88.        
  89.         $comps = explode(":", $header);
  90.         // 正常返回的头部 Content-Type: audio/*
  91.         // 有错误的如 Content-Type: application/json
  92.         if (count($comps) >= 2){
  93.                 if (strcasecmp(trim($comps[0]), "Content-Type") == 0){
  94.                         if (strpos($comps[1], "audio/") > 0 ){
  95.                                 $g_has_error = false;
  96.                         }else{
  97.                                 echo $header ." , has error \n";
  98.                         }
  99.                 }
  100.         }
  101.         return strlen($header);
  102. }
  103. curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header');
  104. $data = curl_exec($ch);
  105. if(curl_errno($ch))
  106. {
  107.     echo curl_error($ch);
  108.         exit(2);
  109. }
  110. curl_close($ch);

  111. $file = $g_has_error ? "result.txt" : "result." . $format;
  112. file_put_contents($file, $data);
  113. echo "\n$file saved successed, please open it \n";
复制代码
音色选择:

https://ai.baidu.com/ai-doc/SPEECH/Rluv3uq3d

PHPdemo地址:
https://github.com/Baidu-AIP/spe ... er/rest-api-tts/php

581

主题

110

回帖

4066

积分

管理员

积分
4066

众神之神

 楼主| 发表于 2024-11-14 17:11:28 | 显示全部楼层
关于价格:
https://ai.baidu.com/ai-doc/SPEECH/Ql9misjot


短文本在线合成的计费是按照调用次数来进行的。120个GBK字节以内(含120个)记为1次计费调用;每超过120个GBK字节则多记1次计费调用。
每次请求合成文本不超过60个汉字或者字母数字;

45元 = 1万次
60个汉字 = 120GBK字节 = 1次调用 = 0.0045元
60汉字 = 0.0045元
1个汉字 = 0.000075元
5亿汉字 = 37500元

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|十三博客 ( 鲁ICP备2023000528号 )

GMT+8, 2026-6-1 16:11 , Processed in 0.050580 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表