记得上高中时,给人当会计,帮忙结算月度工资;用的就是带语音功能的计算器! 当时用起来倍儿爽,于是速度加倍,效率加速;结果让老板赔了不少钱!

就是因为这个,才对语音计算器有了深刻印象!可能是这货坑了我!哼~!

好吧,闲言少叙,直入正题吧!

最近在做一个项目,有个简单的功能,就是将文本转换成语音。

研究了这个功能后,抽空顺带做了个语音计算器!

“来银啊,上代码!”

“老大,木有银,上不了”

“哎呀我去,非逼我说粗话,来个货,把代码码上来!”

“好的,老大!”

哈哈哈,俺就是那个带点儿逗比的搬砖员儿!好吧,代码来了,小主,等急了吧?

using System;
using System.Speech.Synthesis;
using System.Collections.Generic; namespace ReadTxt
{
class Program
{ static string num1 = "", firchar = "", lastchar = "", tempRe = ""; static void Main(string[] args)
{ Console.Title = "语音计算器";
bool jump = true;
do
{ ConsoleKeyInfo info = Console.ReadKey();
switch (info.Key)
{
case ConsoleKey.Escape: Environment.Exit(); jump = false; break;
case ConsoleKey.NumPad0: GetKeyRead(""); break;
case ConsoleKey.NumPad1: GetKeyRead(""); break;
case ConsoleKey.NumPad2: GetKeyRead(""); break;
case ConsoleKey.NumPad3: GetKeyRead(""); break;
case ConsoleKey.NumPad4: GetKeyRead(""); break;
case ConsoleKey.NumPad5: GetKeyRead(""); break;
case ConsoleKey.NumPad6: GetKeyRead(""); break;
case ConsoleKey.NumPad7: GetKeyRead(""); break;
case ConsoleKey.NumPad8: GetKeyRead(""); break;
case ConsoleKey.NumPad9: GetKeyRead(""); break;
case ConsoleKey.Add: GetKeyRead("加"); break;
case ConsoleKey.Subtract: GetKeyRead("减"); break;
case ConsoleKey.Multiply: GetKeyRead("乘"); break;
case ConsoleKey.Divide: GetKeyRead("除"); break;
case ConsoleKey.Enter:
if (!string.IsNullOrEmpty(num1) && GetSignIsTrue(num1))
{
SetValue(num1);
num1 = "";
}
else
{
num1 = "";
if (!string.IsNullOrEmpty(num1))
{
Console.Beep();
Console.WriteLine("Error.");
}
}
break;
default:
break;
}
} while (jump);
Console.Read();
} //判断用户输入的内容是否合法
static void GetKeyRead(string str)
{
SpeechSynthesizer spvoice = new SpeechSynthesizer();
spvoice.Rate = ;
spvoice.Volume = ; if (!string.IsNullOrEmpty(num1))
{
firchar = num1.Substring(, );
lastchar = num1.Substring(num1.Length - , );
} switch (str)
{
case "加":
if (firchar != "加" && lastchar != "加")
{
if (lastchar != "减" && lastchar != "乘" && lastchar != "除")
{
num1 += str;
}
else
{
num1 = num1.Remove(num1.Length - );
num1 += str;
}
} break;
case "减":
if (firchar != "减" && lastchar != "减")
{
if (lastchar != "加" && lastchar != "乘" && lastchar != "除")
{
num1 += str;
}
else
{
num1 = num1.Remove(num1.Length - );
num1 += str;
}
} break;
case "乘":
if (firchar != "乘" && lastchar != "乘")
{
if (lastchar != "加" && lastchar != "减" && lastchar != "除")
{
num1 += str;
}
else
{
num1 = num1.Remove(num1.Length - );
num1 += str;
}
}
break;
case "除":
if (firchar != "除" && lastchar != "除")
{
if (lastchar != "加" && lastchar != "减" && lastchar != "乘")
{
num1 += str;
}
else
{
num1 = num1.Remove(num1.Length - );
num1 += str;
}
}
break;
default:
num1 += str;
break;
}
spvoice.SpeakAsync(str);
Console.Clear();
Console.Write(tempRe + num1.Replace('加', '+').Replace('减', '-').Replace('乘', '*').Replace('除', '/').Replace("等于", "="));
} static bool GetSignIsTrue(string num1)
{
if (!string.IsNullOrEmpty(num1))
{
firchar = num1.Substring(, );
lastchar = num1.Substring(num1.Length - , );
} return firchar != "加" && lastchar != "加" && firchar != "减" && lastchar != "减" && firchar != "乘" && lastchar != "乘" && firchar != "除" && lastchar != "除";
} //计算
static void SetValue(string num1)
{
List<double> array = new List<double>();
List<string> sign = new List<string>();
num1 = num1.Replace('加', '+').Replace('减', '-').Replace('乘', '*').Replace('除', '/');
string tempCap = "";
char[] MyChar = num1.ToCharArray();
for (int i = ; i < MyChar.Length; i++)
{
if (MyChar[i].ToString() == "+" || MyChar[i].ToString() == "-" || MyChar[i].ToString() == "*" || MyChar[i].ToString() == "/")
{
array.Add(Convert.ToDouble(tempCap));
tempCap = "";
sign.Add(MyChar[i].ToString());
}
else
{
if (i == MyChar.Length - )
{
tempCap += MyChar[i].ToString();
array.Add(Convert.ToDouble(tempCap));
}
else
{
tempCap += MyChar[i].ToString();
}
}
} double resultTemp = ;
for (int i = ; i < sign.ToArray().Length; i++)
{
if (sign[i] == "*")
{
resultTemp = array[i] * array[i + ];
array[i] = resultTemp;
array.Remove(array[i + ]);
sign.Remove(sign[i]);
resultTemp = ;
i--;
}
else if (sign[i] == "/")
{
resultTemp = array[i] / array[i + ];
array[i] = resultTemp;
array.Remove(array[i + ]);
sign.Remove(sign[i]);
resultTemp = ;
i--;
}
} for (int i = ; i < sign.ToArray().Length; i++)
{
if (sign[i] == "+")
{
resultTemp = array[i] + array[i + ];
array[i] = resultTemp;
array.Remove(array[i + ]);
sign.Remove(sign[i]);
resultTemp = ;
i--;
}
else if (sign[i] == "-")
{
resultTemp = array[i] - array[i + ];
array[i] = resultTemp;
array.Remove(array[i + ]);
sign.Remove(sign[i]);
resultTemp = ;
i--;
}
} double answ = array[];
array.Clear();
sign.Clear();
tempRe += num1.Replace('加', '+').Replace('减', '-').Replace('乘', '*').Replace('除', '/') + "= " + answ + "\n";
GetKeyRead("等于" + answ);
}
}
}

ok,这就是全部代码了,请容在下粗略的介绍下实现步骤:

1.既然是语音计算器,首先要解决的就是如何实现语音?

其实,语音功能实现起来并不复杂,微软早就封装好了一个,将文本转换成语音功能的类库,现在你要做的就是:找到它,然后把它引用到你的项目里!

什么?这个类库叫啥?

表急嘛,心急吃不了“热豆腐”,有可能“豆腐”还跑了呢,要耐心点儿,才能约到手!是吧?

好吧,介绍下这个类库,它叫“System.Speech.dll”。.net FrameWork 的安装目录里就有它的身影!装了.net FrameWork 的童鞋,可以通过以下目录去寻觅它!

大概是这个:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5

寻寻觅觅,冷冷清清,凄凄惨惨戚戚!什么?没寻觅到?

好吧,教你一招

 

打开C盘,直接搜索!

没装的,那就去网上搜吧,自己下崽儿!哈哈~!愿意装的也可以装一下!

找到的,直接引用到项目里就行了哈!

2.其次,别忘了引用下这两个命名空间:

  using System.Speech.Synthesis;  //语音类库

  using System.Collections.Generic;  //数组集合类库

3.最后,简单介绍下文本转换成语音的功能!

其实,也就几句话!

SpeechSynthesizer spvoice = new SpeechSynthesizer();  //语音类
spvoice.Rate = ;  //使用 spvoice 设置朗读频率 [范围 -10 ~ 10]
spvoice.Volume = ; //使用 spvoice 设置朗读音量 [范围 0 ~ 100]
spvoice.SpeakAsync("大家好,我是博主小白!"); //开始读

好了,其他的代码就要看小主的内力了,在下就不多说了!

看小主骨骼惊奇,“英语非凡”,想是定能习得搬砖精髓,打遍天下需求,杀掉世间bug;然后走上淫僧巅峰,赢取大白美眉的!哈哈哈~!

 

拙文一篇,望各位海涵!

技术讨论群:225443677 有意者欢迎骚扰,谢谢!

C# 控制台语音计算器的更多相关文章

  1. 【PowerShell语音计算器】

    [PowerShell语音计算器]带中文发音功能的计算器程序,支持鼠标和小键盘输入,支持多种数值转人民币大写,如:123.4--->壹佰贰拾叁点肆圆. 版本号 1.51 下载:http://fi ...

  2. Java方法:练习,控制台简易计算器

    可以更改计算个数的简易计算器 package com.zdz.method; import java.util.Scanner; public class Operator { public stat ...

  3. java实现简单的控制台的计算器

    要用面向对象的思维写. //我是代码的搬运工import java.util.Scanner;public class Main { public static void main(String[] ...

  4. 控制台下的计算器——C++实现

    最近这段时间看操作系统的东西看的头晕脑胀的,所以先停个一晚上,写个控制台下的计算器,来练练栈的使用. 首先,分析一下要完成的东西.输入肯定使用string类来输入的,然后第一步,就是把string的字 ...

  5. Chrome开发者控制台的这些功能你都知道吗?

    Chrome内置了一些开发者工具,这些工具提供了很多的功能.今天,我们将会专注于JavaScript控制台. 在我编程的过程中,这个控制台为我提供了大量的帮助. 如果你正在电脑端阅读这篇文章,你可以在 ...

  6. 使用Olami SDK 语音控制一个支持HomeKit的智能家居的iOS程序

    前言 HomeKit是苹果发布的智能家居平台.通过HomeKit组件,用户可以通过iphone.iPad和ipod Touch来控制智能灯泡,风扇.空调等支持HomeKit的智能家居,尤其是可以通过S ...

  7. Chrome 开发者控制台使用技巧

    Chrome 有内置的开发者工具.它拥有丰富的特性,比如元素(Elements).网络(Network)和安全(Security).今天,我们主要关注一下 JavaScript 控制台. 当我最初写代 ...

  8. 【转】天啦噜!原来Chrome自带的开发者工具还能这么用!(提升JS调试能力的10个技巧)

    天啦噜!原来Chrome自带的开发者工具还能这么用! (提升JS调试能力的10个技巧)   Chrome自带开发者工具.它的功能十分丰富,包括元素.网络.安全等等.今天我们主要介绍JavaScript ...

  9. 天啦噜!原来Chrome自带的开发者工具能这么用你知道么!

    Chrome自带开发者工具.它的功能十分丰富,包括元素.网络.安全等等.今天我们主要介绍JavaScript控制台部分的功能. 我最早写代码的时候,也就是在JS控制台里输出一些服务器返回的内容,或者一 ...

随机推荐

  1. 【iOS系列】-UIImageView帧动画相关属性介绍

    UIImageView帧动画相关属性介绍 1:相关属性: //An array of UIImage objects to use for an animation.存放UIImage对象,会按顺序显 ...

  2. 2016/2/24 1,css有几种引入方式 2,div除了可以声明id来控制,还可以声明什么控制? 3,如何让2个div,并排显示。4,清除浮动 clear:left / right / both

    1,css有几种引入方式 使用HTML标签的STYLE属性 将STYLE属性直接加在单个的HTML元素标签上,控制HTML标签的表现样式.这种引入CSS的方式是分散灵活方便,但缺乏整体性和规划性,不利 ...

  3. NS3网络仿真(4): DataRate属性

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在first.py中创建了一个点到点的信道,且配置了两个属性: pointToPoint = ns ...

  4. Mac mysql 运行sql文件中文乱码的问题

    别再傻傻的改什么mysql的编码格式了. 是.sql文件的编码有问题,把sql文件的编码格式改成utf-8就行了. mac怎么修改呢? vscode最爽了. 用vscode打开.sql文件,然后点右下 ...

  5. Android开发之自定义对话框

    由于系统自带的对话框不好看,于是本人就自定义了一个对话框,以后有类似的就可以直接使用啦.先上效果图: 1,布局文件dialog_clear_normal.xml <?xml version=&q ...

  6. 主机与虚拟机互ping

    1.设置虚拟机网络连接方式(如下图): 2.设置主机和虚拟机的ip为同一个网段,如主机ip:192.168.28.1,虚拟机ip:192.168.28.128 3.如果相互还是ping不通,就检查一下 ...

  7. codeforces 688C C. NP-Hard Problem(bfs判断奇数长度环)

    题目链接: C. NP-Hard Problem time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  8. Ubuntu Nginx uwsgi django 初试

    /************************************************************************************** * Ubuntu Ngi ...

  9. 一个tomcat部署多个应用实例总结

    项目组有好几个项目需要运行,之前项目少,一个tomcat对应一个项目还能应付,但现在项目多了,要是再一个tomcat对应一个项目的话,一方面看起来很业余,一方面也加大服务器的维护难度.所以现在需要对t ...

  10. Ubuntu下搭建基于apache2的gerrit+gitweb服务器

    说明:Ubuntu版本12.04 1. 配置gerrit管理帐号 1 sudo adduser gerrit 增加sudo权限: 1 sudo usermod -a -G sudo gerrit 切换 ...