由于公司服务器环境及各项限制条件,我们采用的是从前端录制音频,将音频由前端上传至阿里云oss(将服务器压力转到阿里云),再由php将得到的音频用智龄语音进行评分判定。
1.账号准备:
腾讯云账户secretId,secretKey
SDK文档中心
下载php版本的sdk
参照 示例/soe/v20180724/的例子,结合API文档,最终选定了“发音数据传输接口附带初始化过程”
注意:音频采用率必须是16k采样率16bit位深单声道
以下是tp5.1的示例
<?php
namespace app\api\controller;
use TencentCloud\Soe\V20180724\Models\TransmitOralProcessWithInitRequest;
use TencentCloud\Soe\V20180724\SoeClient;
use TencentCloud\Soe\V20180724\Models\InitOralProcess;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Common\Credential;
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
use think\facade\Request;
class Api{
public function __construct()
{
require_once '../extend/tencentcloud-sdk-php-master/TCloudAutoLoader.php';
}
public function test(){
$this->init_index(Request::param('text'),Request::param('url'));
}
public function init_index($text='',$url=''){ //识别文本,识别语音
try{
// 实例化一个证书对象,入参需要传入腾讯云账户secretId,secretKey
$cred = new Credential("secretId","secretKey");
// 实例化一个http选项,可选的,没有特殊需求可以跳过
$httpProfile = new HttpProfile();
$httpProfile->setReqMethod("POST"); // post请求(默认为post请求)
$httpProfile->setReqTimeout(30); // 请求超时时间,单位为秒(默认60秒)
$httpProfile->setEndpoint("soe.tencentcloudapi.com"); // 指定接入地域域名(默认就近接入)
// 实例化一个client选项,可选的,没有特殊需求可以跳过
$clientProfile = new ClientProfile();
$clientProfile->setSignMethod("TC3-HMAC-SHA256"); // 指定签名算法(默认为HmacSHA256)
$clientProfile->setHttpProfile($httpProfile);
$client = new SoeClient($cred, "", $clientProfile);
$str = base64_encode(file_get_contents($url));
// 实例化一个ecc实例信息查询请求对象,每个接口都会对应一个request对象。
$req = new TransmitOralProcessWithInitRequest();
$sessionid = rand(100000,999999);
$req->SessionId = "stress_test_".$sessionid; //语音段唯一标识,一个完整语音一个SessionId。
$req->VoiceFileType = 3; //语音文件类型 1:raw, 2:wav, 3:mp3 三种格式目前仅支持16k采样率16bit编码单声道,如有不一致可能导致评估不准确或失败
$req->SeqId = 1; //流式数据包的序号,从1开始
$req->VoiceEncodeType = 1; //语音编码类型 1:pcm。
$req->IsEnd = 1; //是否传输完毕标志,若为0表示未完毕,若为1则传输完毕开始评估,非流式模式下无意义。
$req->TextMode = 0; //输入文本模式,0: 普通文本,1:音素结构文本。
$req->UserVoiceData = $str;
$req->RefText = $text; //被评估语音对应的文本
$req->WorkMode = 1; //语音输入模式,0:流式分片,1:非流式一次性评估
$req->EvalMode = 3; //评估模式,0:词模式 1:句子模式 2:段落模式 3:自由说模式
$req->ScoreCoeff = 2; //评价苛刻指数,取值为[1.0 - 4.0]范围内的浮点数,用于平滑不同年龄段的分数,1.0为小年龄段,4.0为最高年龄段
$resp = $client->TransmitOralProcessWithInit($req);
// 输出json格式的字符串回包
return $resp->toJsonString();
}catch (TencentCloudSDKException $e) {
return $e;
}
}
}