C#实现文本转语音功能
作者:qq_32915337 发布时间:2021-07-07 20:20:54
标签:C#,文本,语音
由于最近的工作需要用到文本转语音的功能,在网上找到的资料有些不完整,特此记录下整个完整功能。
这种方式的优点在于不会被浏览器限制,在js的文本转语音功能中,谷歌高版本的浏览器会阻止通过模拟点击的自动播放,而ie不会阻止.
一.确认研发环境
操作系统:win10或win7(我自己用的是win10 据说有些 * 版的win7会报错)
IDE:VS2012 (可高于此版本)
.NET framework 4.0(可高于此版本)
二.系统自带语音识别功能
1.C:\Windows文件夹下有Speech
2.控制面板有语音识别
三.DLL引用
1.选中要使用该功能的程序右键选择"添加引用"
2.选中"程序集"--"框架"下的System.Speech
四.代码
需要注意的是:
1.页面需要设置为异步
2.通过委托代理的方式调用,防止页面无响应
3.页面代码如下:
aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="yy.aspx.cs" Inherits="yy" Async="true" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>文字转语音测试</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
aspx.cs:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Speech.Synthesis;
using System.Threading.Tasks;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class yy : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 文字转语音
/// </summary>
/// <param name="content">语音内容</param>
delegate void MyDelegate(string content);
string content = "有新的订单,请及时处理";
SpeechSynthesizer synthesizer = new SpeechSynthesizer(); //点击开始按钮
//开始朗读
private void speakParagh(string text)
{
synthesizer.Speak(text);
}
//朗读结束后释放资源
private void Completed(IAsyncResult result)
{
synthesizer.SpeakAsyncCancelAll();
}
protected void Button1_Click(object sender, EventArgs e)
{
try
{
MyDelegate myDelegate = new MyDelegate(speakParagh); //异步调用委托
myDelegate.BeginInvoke(content, new AsyncCallback(Completed), null); //在启动异步线程后,主线程可以继续工作而不需要等待
}
catch (Exception ex)
{
Console.WriteLine("报错:" + ex.Message);
}
}
}
来源:https://blog.csdn.net/qq_32915337/article/details/123404503


猜你喜欢
- RestAPI中, 经常需要操作json字符串, 需要把json字符串"反序列化"成一个对象, 也需要把一个
- 目录一 前言二 压缩文件2.1 压缩多个文件2.2 压缩文件或文件树2.3 借助文件访问器压缩三 解压文件四 总结一 前言项目开发中,总会遇
- 1. 用indexof的方法:public class Test11 {private static int counter = 0;/**
- 前言在上网的时候我们常常遇到文件上传的情况,例如上传头像、上传资料等;当然除了上传,遇见下载的情况也很多,接下来看看我们 servlet 中
- checkbox控件时导致Activity启动默认不显示输入法。网上很多资料说要放一个空的Linearlayout,完全是在误导大众,正确的
- 本文实例为大家分享了Android实现点击某个按钮指定位置弹出布局,供大家参考,具体内容如下package com.topcee.repor
- ❤️大家好,我是贾斯汀,今天主要聊一聊关于线程的瓜!❤️先来看一下线程这张图线程的几种运行状态之间运行流程:看不懂没关系,慢慢来学习,往
- 一、题目描述题目实现:一个服务器与多个客户端通信。通过一个服务器与多个客户端进行通信,运行程序,服务器启动后,启动两个客户端程序,然后通过服
- 本文实例讲述了java字符串相似度算法。分享给大家供大家参考。具体实现方法如下:public class Levenshtein {&nbs
- 一、来源项目中遇到混合动画的情况,每次实现都需要生命一堆属性,让代码变得杂乱,难以维护。参考 iOS 组动画 CAAimationGroup
- 其实是可以通过@Constraint来限定自定义注解的方法。@Constraint(validatedBy = xxxx.class)下面是
- 首先给出一段代码:public class AslistMethod { public static void main(String[]
- 关于java的字符串处理我们一般使用String类和StringBuffer类那么String类和StringBuffer类的区
- <customErrors>节点用于定义一些自定义错误信息的信息。此节点有Mode和defaultRedirect两个属性,其中
- 本文实例为大家分享了RecyclerView实现点击条目删除的具体代码,供大家参考,具体内容如下MainActivity.javapubli
- 使用第三方的vitamio插件实现简易的播放器。vitamio版本(5.2.3)官网地址:官网地址效果展示效果项目结构代码:MainActi
- 1、分布式锁简介分布式锁是控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,
- 在网上学习了一种继承系统AlertDialog然后用一统一方法控制dialog显示的方法,效果还不错,但按钮栏那里的分隔线并不是想要的。于是
- JWT可以理解为一个加密的字符串,里面由三部分组成:头部(Header)、负载(Payload)、签名(signature)由base64加
- 一、前言我们先来看下面一个例子:using System;using System.Threading;namespace ThreadSy