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

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

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

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

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

“来银啊,上代码!”

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

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

“好的,老大!”

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

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. ICONFONT在APP中的使用

    阿里IconFont平台 http://www.iconfont.cn/ 这里是阿里巴巴UED部门开发的IconFont平台,眼下阿里系的重量级产品都在使用,里面有非常多资源可供使用. 这里说说怎样在 ...

  2. API Copy Big FIles

    public class ApiCopyFile { private const int FO_COPY = 0x0002; private const int FOF_ALLOWUNDO = 0x0 ...

  3. icvSetWeightsAndClasses

    /* *icvSetWeightsAndClasses *作用:给训练样本的权重和类别赋值 */ static void icvSetWeightsAndClasses( CvHaarTraining ...

  4. HelloH5+搭建

    一.所用工具 代理服务器:squid 编辑工具:HBuilder 调试工具:weinre 参考工具:Hello MUI    HelloH5 二.涉及项目 ***-pifa-------------- ...

  5. 20170111 ABAP技术小结(全半角转换)

    DATA: it_po LIKE it_alv OCCURS 0 WITH HEADER LINE.************************************************** ...

  6. MVC Web Api 发布到Azure报错

    I fixed this by reinstalling the NuGet package, which corrects broken dependencies. From the package ...

  7. Test redis

    单机测试: public class RedisClient{ private Jedis jedis; private JedisPool jedisPool; private ShardedJed ...

  8. linux下jiffies定时器和hrtimer高精度定时器【转】

    本文转载自:http://blog.csdn.net/dosculler/article/details/7932315 一.jiffies定时器,HZ=100,精度只能达到10ms. 注:采用jif ...

  9. POJ3616 Milking Time —— DP

    题目链接:http://poj.org/problem?id=3616 Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

  10. Masonry scrollview循环布局

    前言 说到iOS自动布局,有很多的解决办法.有的人使用xib/storyboard自动布局,也有人使用frame来适配.对于前者,笔者并不喜欢,也不支持.对于后者,更是麻烦,到处计算高度.宽度等,千万 ...