本文介绍了如何使用阿里云智能语音服务提供的.NET SDK,包括SDK的安装方法及SDK代码示例。
前提条件
示例说明
录音文件识别示例使用.Net SDK的CommonRequest提交识别请求和查询识别结果,采用RPC风格的POP API调用方式。
关于阿里云.NET SDK的详细介绍,请参见使用.NET SDK。
.NET SDK CommonRequest的使用方法,请参见使用CommonRequest进行调用。
SDK安装
您只需安装阿里云.NET SDK核心库,有如下两种安装方式:
添加核心库的DLL引用
进入.NET SDK发布列表,在SDK核心库处单击右侧适用于.NET 4.0及以上的DLL引用。
在Visual Studio的解决方案资源管理器,右键单击我的项目,然后单击引用。
在弹出的菜单中单击添加引用。
在弹出的对话框中,单击浏览,选择下载的DLL文件,单击确定。
项目引入方式
在命令行执行以下命令,在GitHub中下载SDK的源码。
git clone https://github.com/aliyun/aliyun-openapi-net-sdk.git
在目录aliyun-openapi-net-sdk中的aliyun-net-sdk-core/aliyun-net-sdk-core.vs2017.csproj文件(适用于VS2017),即.NET项目文件。
在Visual Studio的界面中,右键单击我的解决方案。
单击添加 > 现有项目。
在弹出的对话框中,选择源码中相应的.NET项目文件(如 aliyun-net-sdk-core.vs2010.csproj),单击打开。
右键单击您的项目,单击引用 > 添加引用。
调用步骤
创建并初始化AcsClient。
创建录音文件识别请求,并设置请求参数。
提交录音文件识别请求,处理服务端返回的响应,获取任务ID。
创建识别结果查询请求,设置查询参数为任务ID。
轮询识别结果。
代码示例
下载nls-sample-16k.wav。该录音文件为PCM编码格式16000Hz采样率,管控台设置的模型为通用模型;如果使用其他录音文件,请在请求参数中填入对应的编码格式和采样率,并在管控台设置对应的模型,模型设置请参见管理项目。
using System;
using Newtonsoft.Json.Linq;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Core.Http;
namespace FileTrans
{
class FileTrans
{
// 地域ID,固定值。
public const string REGIONID = "cn-shanghai";
public const string PRODUCT = "nls-filetrans";
public const string DOMAIN = "filetrans.cn-shanghai.aliyuncs.com";
public const string API_VERSION = "2018-08-17";
public const string POST_REQUEST_ACTION = "SubmitTask";
public const string GET_REQUEST_ACTION = "GetTaskResult";
// 请求参数
public const string KEY_APP_KEY = "appkey";
public const string KEY_FILE_LINK = "file_link";
public const string KEY_VERSION = "version";
public const string KEY_ENABLE_WORDS = "enable_words";
// 响应参数
public const string KEY_TASK = "Task";
public const string KEY_TASK_ID = "TaskId";
public const string KEY_STATUS_TEXT = "StatusText";
// 状态值
public const string STATUS_SUCCESS = "SUCCESS";
public const string STATUS_RUNNING = "RUNNING";
public const string STATUS_QUEUEING = "QUEUEING";
static void Main(string[] args)
{
if (args.Length < 3)
{
System.Console.WriteLine("FileTrans Demo need params: <AccessKey Id> <AccessKey Secret> <app-key>");
return;
}
string accessKeyId = args[0];
string accessKeySecret = args[1];
string appKey = args[2];
string fileLink = "https://gw.alipayobjects.com/os/bmw-prod/0574ee2e-f494-45a5-820f-63aee583045a.wav";
/**
* 创建阿里云鉴权对象
*/
IClientProfile profile = DefaultProfile.GetProfile(
REGIONID,
accessKeyId,
accessKeySecret
);
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
/**
* 创建录音文件识别请求,设置请求参数。
*/
CommonRequest request = new CommonRequest();
request.Domain = DOMAIN;
request.Version = API_VERSION;
request.Action = POST_REQUEST_ACTION;
request.Product = PRODUCT;
request.Method = MethodType.POST;
// 设置task,以JSON字符串形式设置到请求Body中。
JObject obj = new JObject();
obj[KEY_APP_KEY] = appKey;
obj[KEY_FILE_LINK] = fileLink;
// 新接入请使用4.0版本,已接入(默认2.0)如需维持现状,请注释掉该参数设置。
obj[KEY_VERSION] = "4.0";
// 设置是否输出词信息,默认为false。开启时需要设置version为4.0。
obj[KEY_ENABLE_WORDS] = false;
string task = obj.ToString();
request.AddBodyParameters(KEY_TASK, task);
/**
* 提交录音文件识别请求,处理服务端返回的响应。
*/
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);
if (response.HttpStatus != 200)
{
System.Console.WriteLine("录音文件识别请求失败: " + response.HttpStatus);
return;
}
// 获取录音文件识别请求任务ID,以供识别结果查询使用。
string taskId = "";
JObject jsonObj = JObject.Parse(response.Data);
string statusText = jsonObj[KEY_STATUS_TEXT].ToString();
if (statusText.Equals(STATUS_SUCCESS))
{
System.Console.WriteLine("录音文件识别请求成功响应!");
taskId = jsonObj[KEY_TASK_ID].ToString();
}
else
{
System.Console.WriteLine("录音文件识别请求失败!");
return;
}
/**
* 创建识别结果查询请求,并设置查询参数为任务ID。
*/
CommonRequest getRequest = new CommonRequest();
getRequest.Domain = DOMAIN;
getRequest.Version = API_VERSION;
getRequest.Action = GET_REQUEST_ACTION;
getRequest.Product = PRODUCT;
getRequest.Method = MethodType.GET;
getRequest.AddQueryParameters(KEY_TASK_ID, taskId);
/**
* 提交录音文件识别结果查询请求
* 以轮询的方式进行识别结果的查询,直到服务端返回的状态描述为“SUCCESS”、“SUCCESS_WITH_NO_VALID_FRAGMENT”,
* 或者为错误描述,则结束轮询。
*/
statusText = "";
while (true)
{
CommonResponse getResponse = client.GetCommonResponse(getRequest);
System.Console.WriteLine(getResponse.Data);
if (getResponse.HttpStatus != 200)
{
System.Console.WriteLine("识别结果查询请求失败,Http错误码:" + getResponse.HttpStatus);
break;
}
JObject jsonObj2 = JObject.Parse(getResponse.Data);
statusText = jsonObj2[KEY_STATUS_TEXT].ToString();
if (statusText.Equals(STATUS_RUNNING) || statusText.Equals(STATUS_QUEUEING))
{
// 继续轮询
System.Threading.Thread.Sleep(10 * 1000);
}
else
{
// 退出轮询
break;
}
}
if (statusText.Equals(STATUS_SUCCESS))
{
System.Console.WriteLine("录音文件识别成功!");
}
else {
System.Console.WriteLine("录音文件识别失败!");
}
}
catch (ServerException ex)
{
System.Console.WriteLine(ex.ToString());
}
catch (ClientException ex)
{
System.Console.WriteLine(ex.ToString());
}
}
}
}