Xamarin开发笔记—百度在线语音合成

简介: 续《是时候开始用C#快速开发移动应用了》刷屏之后,把C#开发移动应用的技术 => Xamarin,在这里和大家做一个分享! 语音合成:也被称为文本转换技术(TTS),它是将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的口语输出的技术。

《是时候开始用C#快速开发移动应用了》刷屏之后,把C#开发移动应用的技术 => Xamarin,在这里和大家做一个分享!

语音合成:也被称为文本转换技术(TTS),它是将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的口语输出的技术。

技术选型:语音合成初步选择有两个,一是讯飞、二是百度。

因为使用的是Xamarin开发在对接讯飞的时候android绑定上有些问题,攻克不了,讯飞对于Xamarin的态度也是观望,可能是因为国内使用Xamarin的比较少。先来说说讯飞和百度语音各自的优缺点:

  1.讯飞支持的字节数更多8xxx字节,具体的值忘记了,反正4k的汉字不成问题;百度支持的字节数是1024个字节。

  2.讯飞sdk比较小,对接百度的sdk比较大,因为百度语音的离线在线sdk在一个里面,大概有10几兆所以,为了避免安装包过大,所有只能使用百度的REST方式了。

  3.讯飞语音sdk在Xamarin.Android绑定上有问题,暂时没有攻破,在Xamarin.Ios上打调试版也有问题,设置成Release上勉强可以使用。

综合上面的原因,所以选择了百度的REST作为对接语音合成的技术实现。

调用流程:1.获取语音合成密码access_token2.带上秘钥和文本请求api返回数据流文件;


 

 核心流程方案

步骤一获取access_token

请求地址:

https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=你的id&client_secret=你的secret&

参数说明:

  • grant_type:必须参数,固定为“client_credentials”;
  • client_id:必须参数,应用的 API Key;
  • client_secret:必须参数,应用的 Secret Key;

返回结果:

{

  "access_token": "24.6a0d0ee7cc62446cf0a5fbc9d6204321.2592000.1498802594.282335-9044454",

  "session_key": "9mzdDZfH3RYNxaNq9Kb6RP5JqsthOmat9g4guVLvbm2YymOWPxDiq3vQvdjZrByadZp4qou9F4wYH2dfptIjxdPwzmKH",

  "scope": "public audio_tts_post wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian wangrantest_test wangrantest_test1 bnstest_test1 bnstest_test2 vis-classify_flower",

  "refresh_token": "25.df4ee25f807fe4fc8d0e025dc7b8549e.315360000.1811570594.282335-9044454",

  "session_secret": "237af35e4de40ce40e74951d5e187a18",

  "expires_in": 2592000

}

注意:access_token有效期30天。

 

步骤二:合成音频

请求地址:

http://tsn.baidu.com/text2audio?tex=这是要转换的文本内容&lan=zh&cuid=userid&ctp=1&tok=24.6a0d0ee7cc62446cf0a5fbc9d6204321.2592000.1498802594.282335-9044454

注意:参数都需要经过两次 URLENCODE 操作。如果是直接在浏览器地址栏输入则不需要。

返回结果:

如果合成成功,下行数据为二进制语音文件,具体header信息 Content-Type:audio/mp3;如果合成出现错误,则会返回json结果,具体header信息为:Content-Type:application/json。其中sn数据主要用于DEBUG追查问题,如果出现问题,可以提供sn帮助确认问题。

错误实例为:

{"err_no":500,"err_msg":"notsupport.","sn":"abcdefgh","idx":1}

错误码解释

错误码

含义

500

不支持输入

501

输入参数不正确

502

token验证失败

503

合成后端错误

 

注意:合成文本长度必须小于1024字节,如果本文长度较长,可以采用多次请求的方式。切忌不可文本长度超过限制。

更多官方文档请访问:http://yuyin.baidu.com/docs


 

Xamarin调用核心代码如下:

string url = "http://tsn.baidu.com/text2audio"; //百度tts请求地址
HttpClient client = new HttpClient();
client.Timeout = new TimeSpan(0, 1, 0); //超时时间设置
Dictionary<string, string> param = new Dictionary<string, string>() {
    { "lan", "zh" },{ "ctp", "1" } //不需要修改的参数
};
param.Add("tex", "需要合成的文本内容"); //需要转换的文本内容
param.Add("cuid", "userid"); //用户唯一标识
param.Add("tok", "24.6a0d0ee7cc62446cf0a5fbc9d6204321.2592000.1498802594.282335-9044454");//access_token,在发送之前先调用一次获取到这个值
FormUrlEncodedContent content = new FormUrlEncodedContent(param); //post请求参数设置对象
try
{
    HttpResponseMessage x = await client.PostAsync(url, content);
    if (x.StatusCode == HttpStatusCode.OK)
    {
        Stream st = await x.Content.ReadAsStreamAsync();
        //路径保存地址,ios和android各不相同,分别实现,传递文件名
        string filePath = DependencyService.Get<IResourcesHelper>().GetImageDownLoadPath("bd_" + DateTime.Now.Ticks + ".mp3");
        using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
        {
            st.CopyTo(fileStream); //保存文件
        }
    }
    else
    {
        //todo:请求失败处理逻辑(警告)
    }
}
catch
{
    //todo:异常处理逻辑(警告)
}

  

Xamarin系列其他推荐 


 

img_fa0be433d68c8212b2b0b3b1a564ccb1.png
如果本文对你有所帮助,请打赏——1元就足够感动我:)
支付宝打赏 微信打赏
联系邮箱:intdb@qq.com
我的GitHub: https://github.com/vipstone
关注公众号: img_9bde0f31ac4a0eca10b1bd7414b78faf.png


作者: 王磊
出处: http://vipstone.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,请标明出处。

相关文章
|
机器学习/深度学习 自然语言处理 机器人
ChatGPT体验地址,超多功能,附公众号源码
ChatGPT体验地址,超多功能,附公众号源码
|
存储 NoSQL 安全
取代微信?RocketChat开源聊天应用搭建教程
取代微信?RocketChat开源聊天应用搭建教程
取代微信?RocketChat开源聊天应用搭建教程
|
数据采集 机器学习/深度学习 人工智能
文心千帆:PPT 制作、数字人主播一键开播等数十种应用场景惊艳到我了,下面给出简介和使用指南,快去使用起来吧
文心千帆:PPT 制作、数字人主播一键开播等数十种应用场景惊艳到我了,下面给出简介和使用指南,快去使用起来吧
文心千帆:PPT 制作、数字人主播一键开播等数十种应用场景惊艳到我了,下面给出简介和使用指南,快去使用起来吧
|
29天前
|
搜索推荐 Linux iOS开发
打造个人听书神器:使用pyttsx3实现文字转语音
在这个信息时代,利用Python的pyttsx3库,可以轻松将文字转化为语音,制作个人听书工具。本文介绍pyttsx3的安装与使用,以及如何通过编程实现小说文本的语音化,提供个性化阅读体验。
105 0
|
2月前
|
存储 人工智能 开发者
三文带你轻松上手鸿蒙的AI语音02-声音文件转文本
三文带你轻松上手鸿蒙的AI语音02-声音文件转文本
106 0
三文带你轻松上手鸿蒙的AI语音02-声音文件转文本
|
6月前
|
人工智能 API 语音技术
MoneyPrinterPlus:AI自动短视频生成工具,详细使用教程
详细介绍如何使用MoneyPrinterPlus:AI自动短视频生成工具,一键批量生成各类短视频。一键混剪短视频。
MoneyPrinterPlus:AI自动短视频生成工具,详细使用教程
|
4月前
|
Web App开发 人工智能 iOS开发
灵办AI助手Chrome插件全面评测:PC Web端的智能办公利器
《灵办AI助手:Mac OS下的高效办公利器》 灵办AI助手是一款专为提升工作效率而设计的浏览器插件,适用于Chrome、Edge等主流浏览器,在Mac OS系统中表现尤其出众。本文将深入评测其核心功能,包括网页翻译、AI对话、AI阅读及代码辅助等,展示如何在实际工作中运用这些功能来提升效率。此外,文中还提供了详细的安装与设置指南,帮助读者轻松上手这款办公神器。无论你是学生、职场人还是开发者,灵办AI助手都能成为你提高生产力的理想选择。
144 0
|
7月前
|
JSON 自然语言处理 Java
Android App开发语音处理之系统自带的语音引擎、文字转语音、语音识别的讲解及实战(超详细 附源码)
Android App开发语音处理之系统自带的语音引擎、文字转语音、语音识别的讲解及实战(超详细 附源码)
356 0
|
6月前
|
语音技术
【手把手教学】最新ChatTTS语音合成项目使用指南【附所有源码与模型】
【手把手教学】最新ChatTTS语音合成项目使用指南【附所有源码与模型】
|
7月前
|
小程序 前端开发 JavaScript
(保姆教程及高级玩法及坑)微信同声传译插件-语音识别
(保姆教程及高级玩法及坑)微信同声传译插件-语音识别
431 0
下一篇
DataWorks