.ReadAsStreamAsync())
{
stream.Position = 0;
Console.WriteLine("正在下载语音文件 {0} ...", fileName);
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
{
await stream.CopyToAsync(fs);
fs.Close();
}
}
Console.WriteLine("文本转换语音成功");
Console.WriteLine("===============\n");
}
}
这段代码也非常的简单,首先是构造一个 SSML 文件格式的 Body,并在请求头中加入 AuthToken 还有其它的一些头部标识,然后就开始正式的请求语音文件,最后将合成好的语音文件保存到本地。
2.3 开始调用过程
static void Main(string[] args)
{
var result = GetTokenAsync().ConfigureAwait(false).GetAwaiter();
string token = result.GetResult();
var text1 = "你好,我是来自博客园的技术爱好者 Ron Liang;很高兴可以试用 Speech,希望一切顺利。";
var task1 = RequestSSML(token, text1, "1.wav");
task1.ConfigureAwait(false).GetAwaiter().GetResult();
var text2 = "小哥哥,来一发<prosody rate=\"-40.00%\" volume=\"-80.00%\" duration=\"1.5s\">吗?</prosody>";
var task2 = RequestSSML(token, text2, "2.wav");
task2.ConfigureAwait(false).GetAwaiter().GetResult();
var text3 = "蒿嗨偶,肝绝忍僧衣襟捣打的高草,肝绝忍僧衣襟捣打了巅峰。蒿赠寒,蒿朵母,蒿悬猜。";
var task3 = RequestSSML(token, text3, "3.wav");
task3.ConfigureAwait(false).GetAwaiter().GetResult();
Console.WriteLine("按任意键退出");
Console.ReadKey();
}
上面有3段文本,对应合成3段语音,1和3是纯粹捣乱的,第二段文本中加入了SSML标记prosody,其属性表示:rate=-40%(降低语速),volume=80%(降低音量),duration=1.5s(延时1.5s)
2.3 按 F5 运行程序
非常完美的运行成功,我们得到了3个语音文件,分别是:
- 正常版:
- 你好,我是来自博客园的技术爱好者 Ron Liang;很高兴可以试用 Speech,希望一切顺利。
- 方言版:
- 蒿嗨偶,肝绝忍僧衣襟捣打的高草,肝绝忍僧衣襟捣打了巅峰。蒿赠寒,蒿朵母,蒿悬猜。
结束语
整体来说,在普通的语境环境下,晓晓的表现还是不错的,整体令人满意,但是在自定义 SSML 的时候,就非常的麻烦,我调整了不下30分钟,都没有达到一个令人满意的结果;当然,晓晓还有别的优点,比如可以自定义语音字体,你可以请声优来训练专业你自己的语音字体,只为你一个人服务。
代码托管在GitHub上了
https://github.com/lianggx/Examples/tree/master/MySpeechApp