基于百度云实现微信服务号内文字语音互转STT TTS

先上效果图:

使用百度语音识别和语音合成两个接口实现

1.语音识别STT

用户微信输入,调用百度api,得到识别文本。

2.语音合成TTS

用户输入问题,调用百度api,得到mps音频,使用开源转码工具ffmpeg,转成微信音频格式amr

代码

使用基于.net的NorWeChat开源微信框架

        [HttpPost]
        [ActionName("Callback")]
        public ActionResult Post(string msg_signature, string timestamp, string nonce)
        {
            try
            {
                string obj = wx.GetMsgStr(Request.InputStream, msg_signature, timestamp, nonce);
                ReceiveMsg obj = ReceiveMsg.GetMsgObj(msg.Text);
                if (obj != null)
                {
                    WeChat wx = WXClient.GetWXAPI();
                    var resStr = string.Empty;
                    switch (obj.MsgType)
                    {
                        case "text":
                            RceMsgText ttobj = (RceMsgText)obj;
                            TextToVoice.Send(ttobj);

                            break;
                        case "voice":
                            RceMsgVoice rmvobj = (RceMsgVoice)obj;
                            VoiceToText.Send(rmvobj);
                            break;
                    }
            }
            catch (Exception ex)
            {
                fileLog.Error(ex.Message);
                fileLog.Error(ex.StackTrace);
                fileLog.Error(ex.ToString());
            }
            return Content(null);
        }

/// <summary>
/// 处理发送的消息
/// </summary>
/// <param name="obj">发送消息</param>
public static void Send(RceMsgText obj)
{
// 设置APPID/AK/SK
var APP_ID = "你的xxx";
var API_KEY = "你的xxx";
var SECRET_KEY = "你的xxx";
//1.调用百度语音合成接口,生成音频文件mp3
var client = new Baidu.Aip.Speech.Tts(API_KEY, SECRET_KEY);
// 可选参数
var option = new Dictionary<string, object>()
{
{"spd", 5}, // 语速
{"vol", 7}, // 音量
{"per", 1} // 发音人,4:情感度丫丫童声
};


string name = DateTime.Now.ToString("yyyyMMddhhmmssttt");


var result = client.Synthesis(obj.Content, option);


if (result.ErrorCode == 0) // 或 result.Success
{
File.WriteAllBytes(@"D:\amr\ffmpeg\mp3\" + name + ".mp3", result.Data);
//mp3转amr
//ffmpeg -i 5.mp3 -ar 8000 -ab 12.2k -ac 1 6.amr
VideoConvertFlv(@"D:\amr\ffmpeg\mp3\" + name + ".mp3", @"D:\amr\ffmpeg\amr\" + name + ".amr");
//amr上传到微信临时素材
WeChat wc = new WeChat(WeChatParameter.CorpID, WeChatParameter.Secret, WeChatParameter.AgentID);
UploaMedia media = wc.mediaTemp(wc.GetAccessTokenVal(), "voice", @"D:\amr\ffmpeg\amr\" + name + ".amr");
if (media != null && media.errcode == 0)
{
//发送临时素材
string res = wc.SendVoice(wc.GetAccessTokenVal(), obj.FromUserName, "", "", obj.AgentID, media.media_id, "0");
}
}
}


public static void VideoConvertFlv(string FromName, string ExportName)
{


string ffmpeg = @"D:\amr\ffmpeg\ffmpeg.exe";
//FromName = "";
//ExportName = "";
string Command = " -i " + FromName + " -ar 8000 -ab 12.2k -ac 1 " + ExportName; //Flv格式
//string Command = " -i \"test.wmv\" -y -ab 32 -ar 22050 -b 800000 -s 320*240 \"2.flv\"";


//string Command = "E:\\FFmpeg\\ffmpeg.exe -i E:\\ClibDemo\\VideoPath\\admin\\a.wmv -y -ab 56 -ar 22050 -b 500 -r 15 -s 320*240 " ExportName;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = ffmpeg;
p.StartInfo.Arguments = Command;
p.StartInfo.WorkingDirectory = @"D:\amr\ffmpeg\";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = false;
//开始执行
p.Start();
p.BeginErrorReadLine();
p.WaitForExit();
p.Close();
p.Dispose();
}

public static void Send(RceMsgVoice obj)
{
string returnText = string.Empty;

//组装下载链接
string downloadurl = string.Format("https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token={0}&media_id={1}", wx.GetAccessTokenVal(), obj.MediaId);

System.Net.WebClient _WebClient = new System.Net.WebClient();

_WebClient.DownloadFile(downloadurl, @"D:\amr\" + obj.MediaId + ".amr");

// 设置APPID/AK/SK
var APP_ID = "11059149";
var API_KEY = "0i6s4Z7Rj4HVwYSi324mXhN1";
var SECRET_KEY = "InmF5wDHuQl7gyLbMc7hNuyiM3rWt5Vf";

var client = new Baidu.Aip.Speech.Asr(API_KEY, SECRET_KEY);

var data = File.ReadAllBytes(@"D:\amr\" + obj.MediaId + ".amr");
JObject mObj = client.Recognize(data, "amr", 8000);

int id = Convert.ToInt32(mObj["err_no"]);
string err_msg = mObj["err_msg"].ToString();
string result = string.Empty;
if (mObj["result"] != null)
{
JToken arr = mObj["result"];//获取Json里的数组 {arr:[{yy:1,zz:2},{yy:3,zz:4}]}

foreach (JToken baseJ in arr)//遍历数组
{
result = baseJ.Value<string>();
}
}

if (mObj != null && id == 0)
{
returnText = result;
}
else
{
returnText = err_msg;
}

//发送消息
wx.SendText(wx.GetAccessTokenVal(), obj.FromUserName, "", "", obj.AgentID, returnText, "0");
}

 

原文地址:https://www.cnblogs.com/yilanyang/p/8918754.html

时间: 2024-10-23 09:25:19

基于百度云实现微信服务号内文字语音互转STT TTS的相关文章

基于百度云推送的高仿微信实时聊天Android源码

基于百度云推送的高仿微信实时聊天Android源码 使用服务:百度云推送    功能分类:社交     支持平台:Android 运行环境:Android       开发语言:Java     开发工具:Eclipse 下载地址:http://sina.lt/z84 源码简介 基于百度云推送的一款Android高仿微信的实时聊天app 运行动态图

Android 高仿微信实时聊天 基于百度云推送

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38799363 ,本文出自:[张鸿洋的博客] 一直在仿微信界面,今天终于有幸利用百度云推送仿一仿微信聊天了~~~ 首先特别感谢:weidi1989分享的Android之基于百度云推送IM ,大家可以直接下载:省了很多事哈,本例中也使用了weidi的部分代码,凡是@author way的就是weidi1989的代码~~ 1.效果图 核心功能也就上面的两张图了~~~我拿着手机和模拟器

微信服务号、订阅号和企业号的差别(运营和开发两个角度)

一.运营的角度 1.1.概括 订阅号: 微信最初的形态是一个纯粹的社交工具,也就是人与人之间的联系工具,当中又分熟人之间的联系和陌生人之间的联系.于是就诞生了朋友圈和订阅号. 而订阅号的作用就是媒体社交.订阅号最主要是自媒体或媒体为读者用户提供优质的对他们感兴趣或有价值的内容.从而与关注者建立关系或使用户对自身品牌的认可. 服务号: 相比于订阅号.服务号要复杂的多,当微信有了朋友圈能够卖商品,订阅号能够做营销. 那么当出现人与商业之间的联系需求时.服务号便诞生了,它不仅要要做一个服务者还要做一个

PHP 开发社区微信服务号实战图解

本博文就月初刚上线的微信服务号,图文进行总结分享给大家. 去年年底,我所在的团队讨论要开发微信号,话题由此拉开: 原来有一个3年前注册的微信号,但是后台操作无法从"订阅号"变更为"服务号",随即找腾讯的客服沟通,客服还算是热情,mm耐心的告之系统已经更新,对于无法升级的微信号,只能重新注册----"*#*(*¥)¥K30#$e&#)",一阵抓狂后,只能重新注册了,下面就开始从注册到内部需求讨论,到开发的图文总结. Step1:微信注册 在

微信服务号认证流程

一.申请微信认证 1.申请微信认证入口. 1) “设置->账户信息->认证情况“点击“申请微信认证”进入. 2) “服务->服务中心“点击“微信认证”进入. 2.申请微信认证操作全攻略. 1) 签署<微信公众平台认证服务协议>,勾选同意,点击下一步. 2) 同意<公众号命名规则>,勾选同意,点击下一步. 3) 填写资料:根据账号类型选择企业或媒体(目前只支持这两种类型),并如实填写认证资料. 特别说明:企业对公银行帐户为必填项,在审核过程中第三方审核公司会向该帐户

微信服务号、订阅号和企业号的区别(运营和开发两个角度)

博客转载自:http://blog.csdn.net/u013142781 为了以后便于查找,转载此博客,在此感谢原博主的无私分享. 一.运营的角度 1.1.概括 订阅号: 微信最初的形态是一个纯粹的社交工具,也就是人与人之间的联系工具,其中又分熟人之间的联系和陌生人之间的联系,于是就诞生了朋友圈和订阅号.而订阅号的作用就是媒体社交,订阅号最主要是自媒体或媒体为读者用户提供优质的对他们感兴趣或有价值的内容,从而与关注者建立关系或使用户对自身品牌的认可. 服务号: 相比于订阅号,服务号要复杂的多,

微信服务号开发-获取用户位置信息

微信服务号开发-获取用户位置信息 在微信公众号开发的中,获取用户位置信息是非常常见的功能需求,通过用户的位置信息,可以做一些地图导航,以及基于LBS的营销活动.下面将介绍微信服务号获取用户位置信息的原理与步骤. 原理 1. 位置信息获取流程 2. 位置信息报文 <xml><ToUserName><![CDATA[gh_public_member_account]]></ToUserName> <FromUserName><![CDATA[o

微信服务号开发笔记

原理 微信服务号的原理比较简单.从请求响应角度来看,逻辑是: 用户微信客户端 <—> 微信服务器 <—> 微信服务号后台程序 <—> 数据库或Web Service 也就是,用户的各种请求先经过微信的服务器,微信服务器将请求转发给微信服务号后台程序. 既然是微信服务器把用户请求数据转发给我们开发的微信服务号后台程序,那么在启用服务号的开发模式时就需要提供一个URL.另外为了安全 考虑,还需要提供一个token,用来校验请求是否来自微信服务器.校验的方法见微信开发者文档.

微信服务号如何认证

日前,徽州区委组织部在全市率先建立党建微信公众平台.该区党建微信公众平台每期微刊内容包括要闻微扫描.党课微推荐.亮点微展示.党员微故事等4个特色栏目,注重“短精活”.“快新准”,通过文字.语音.图片和视频等多种形式,宣传党的路线方针政策.开展党员教育管理.展示党建工作成果.自开通以来不到一个月时间,党建微信公众平台已被260余人关注,收到党员群众意见建议20余条,解决问题12个. 怎样开通这种微信平台并且通过认证呢? 微信公众平台简介 微信公众平台是面向名人.政府.媒体.企业等推出的合作推广业务