C# 控制台语音计算器
记得上高中时,给人当会计,帮忙结算月度工资;用的就是带语音功能的计算器! 当时用起来倍儿爽,于是速度加倍,效率加速;结果让老板赔了不少钱!
就是因为这个,才对语音计算器有了深刻印象!可能是这货坑了我!哼~!
好吧,闲言少叙,直入正题吧!
最近在做一个项目,有个简单的功能,就是将文本转换成语音。
研究了这个功能后,抽空顺带做了个语音计算器!
“来银啊,上代码!”
“老大,木有银,上不了”
“哎呀我去,非逼我说粗话,来个货,把代码码上来!”
“好的,老大!”
哈哈哈,俺就是那个带点儿逗比的搬砖员儿!好吧,代码来了,小主,等急了吧?
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# 控制台语音计算器的更多相关文章
- 【PowerShell语音计算器】
[PowerShell语音计算器]带中文发音功能的计算器程序,支持鼠标和小键盘输入,支持多种数值转人民币大写,如:123.4--->壹佰贰拾叁点肆圆. 版本号 1.51 下载:http://fi ...
- Java方法:练习,控制台简易计算器
可以更改计算个数的简易计算器 package com.zdz.method; import java.util.Scanner; public class Operator { public stat ...
- java实现简单的控制台的计算器
要用面向对象的思维写. //我是代码的搬运工import java.util.Scanner;public class Main { public static void main(String[] ...
- 控制台下的计算器——C++实现
最近这段时间看操作系统的东西看的头晕脑胀的,所以先停个一晚上,写个控制台下的计算器,来练练栈的使用. 首先,分析一下要完成的东西.输入肯定使用string类来输入的,然后第一步,就是把string的字 ...
- Chrome开发者控制台的这些功能你都知道吗?
Chrome内置了一些开发者工具,这些工具提供了很多的功能.今天,我们将会专注于JavaScript控制台. 在我编程的过程中,这个控制台为我提供了大量的帮助. 如果你正在电脑端阅读这篇文章,你可以在 ...
- 使用Olami SDK 语音控制一个支持HomeKit的智能家居的iOS程序
前言 HomeKit是苹果发布的智能家居平台.通过HomeKit组件,用户可以通过iphone.iPad和ipod Touch来控制智能灯泡,风扇.空调等支持HomeKit的智能家居,尤其是可以通过S ...
- Chrome 开发者控制台使用技巧
Chrome 有内置的开发者工具.它拥有丰富的特性,比如元素(Elements).网络(Network)和安全(Security).今天,我们主要关注一下 JavaScript 控制台. 当我最初写代 ...
- 【转】天啦噜!原来Chrome自带的开发者工具还能这么用!(提升JS调试能力的10个技巧)
天啦噜!原来Chrome自带的开发者工具还能这么用! (提升JS调试能力的10个技巧) Chrome自带开发者工具.它的功能十分丰富,包括元素.网络.安全等等.今天我们主要介绍JavaScript ...
- 天啦噜!原来Chrome自带的开发者工具能这么用你知道么!
Chrome自带开发者工具.它的功能十分丰富,包括元素.网络.安全等等.今天我们主要介绍JavaScript控制台部分的功能. 我最早写代码的时候,也就是在JS控制台里输出一些服务器返回的内容,或者一 ...
随机推荐
- curl_setopt GET的方法
$ch ") ; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; curl_setopt($ch, CURLOPT_BINARYTRANSF ...
- 安装SQLserver2008时出现的错误
1.SQLserver2008提示必须重新启动计算机才干够继续安装.解决方法例如以下: 在開始->执行中输入regedit,到HKEY_LOCAL_MACHINE\SYSTEM\CurrentC ...
- Linux下kill命令的学习,(主要根据man手册进行的翻译)
名字 kill -终止一个进程 格式 kill [-s signal | -p] [--] pid .. ...
- Spark调研笔记第3篇 - Spark集群相应用的调度策略简单介绍
Spark集群的调度分应用间调度和应用内调度两种情况,下文分别进行说明. 1. 应用间调度 1) 调度策略1: 资源静态分区 资源静态分区是指整个集群的资源被预先划分为多个partitions,资源分 ...
- 契约式设计 契约式编程 Design by contract
Design by contract - Wikipedia https://en.wikipedia.org/wiki/Design_by_contract What is the use of & ...
- ACTION 中 单表查询语句 SQL写法
JSP页面 <tr> <td class="STYLE1"> <div align="center"> // 单击事件 调用 ...
- hibernate 的缓存机制
这是面试中经常问到的一个问题,楼主可以按照我的思路回答,准你回答得很完美,首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,最后可以举个具 ...
- linux下修改apache,nginx服务端口号
一.linux下修改apache端口号 yum安装后,apache配置文件: /etc/httpd/conf/httpd.conf 找到apache目录下的 httpd.conf, 使用vi 打开,找 ...
- sum=1+2+3+…+100
sum = 1 for i in range(0,101): # sum = sum + i sum += i print(sum) sum +=i 等于 sum = sum + i
- python创建文件
创建文件: 1. os.mknod(“test.txt”) 创建空文件 2. open(“test.txt”,w) 直接打开一个文件,如果文件不存在则创建文件 import os def mkdir_ ...