zoukankan      html  css  js  c++  java
  • 语音播报实时天气

    一、 让文本变成声音

         .Net里面自带了一个语音类库:System.Speech,调用系统的语音功能,就能实现string到语音的转换,很简单(记得先把电脑音量调大一下):
     //Add System.Speech reference first
     using System.Speech.Synthesis;
     
     var reader = new SpeechSynthesizer();
     reader.SpeakAsync("I'm a programer. Hello, world! ");

        Hello, world! 你听到了……这里我用了SpeakAsync方法,也就是异步执行,不会阻塞主线程。你也可以直接调用Speak()方法,也就是在一个线程里面——突然想到可以利用Speak()方法来调试程序,把断点或者Log换成Speak(): 当别人辛苦的翻阅数百行的日志--而你的电脑用悠扬的语音告诉你:“This user's entity is null, here is a bug!”,高端大气上档次呀!

    二、 获取本地实时天气

         园子里面有很多获取天气的API文章,这里就不介绍了,给一个CSDN链接,还算比较全:天气预报API接口大全

         我这里用的都是新浪的API,最简单快捷。获取本地的实时天气,分为两步:一、根据电脑公网IP 获取当前城市;二、根据城市获取天气信息。

     var webClient = new WebClient() { Encoding = Encoding.UTF8 };
     //Get location city
     var location = webClient.DownloadString("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json");
     var json = new JavaScriptSerializer().Deserialize<dynamic>(location);
     //Read city from utf-8 format
     var city = HttpUtility.UrlDecode(json["city"]);

       获取到的地理信息是json格式,反序列成dynamic动态类型,不需要再去创建个类去和json数据对应,C#获取json数据就和javascript中的操作差不多了,用了当然这样也就肯定没有VS的智能感知。取到的省市信息都是UTF-8编码的,所以要取出来的话,进行Decode。

     //Get weather data(xml format)
     string weather = webClient.DownloadString(string.Format(
             "http://php.weather.sina.com.cn/xml.php?city={0}&password=DJOYnieT8234jlsK&day=0",
             HttpUtility.UrlEncode(json["city"], Encoding.GetEncoding("GB2312"))));
     //Console.WriteLine(weather);
     var xml = new XmlDocument();
     xml.LoadXml(weather);

       这次取到的天气信息就是XML格式的了,也很方便。但需要注意的是此,构建URL的时候要把城市采用GB2312格式编码,WebClient需要指定UTF-8格式。天气信息取到了,下面就是编字符串,让它说话了,这里附上全部的代码,总共23行:

     1     //Initialize Speaker
     2     var reader = new SpeechSynthesizer();
     3     reader.Speak("I'm a programer,Hello, World! ");
     4 
     5     var webClient = new WebClient() { Encoding = Encoding.UTF8 };
     6     //Get location city
     7     var location = webClient.DownloadString("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json");
     8     var json = new JavaScriptSerializer().Deserialize<dynamic>(location);
     9     //Read city from utf-8 format
    10     var city = HttpUtility.UrlDecode(json["city"]);
    11     //Get weather data(xml format)
    12     string weather = webClient.DownloadString(string.Format(
    13         "http://php.weather.sina.com.cn/xml.php?city={0}&password=DJOYnieT8234jlsK&day=0",
    14         HttpUtility.UrlEncode(json["city"], Encoding.GetEncoding("GB2312"))));
    15     //Console.WriteLine(weather);
    16     var xml = new XmlDocument();
    17     xml.LoadXml(weather);
    18     //Get weather detail
    19     var root = xml.SelectSingleNode("/Profiles/Weather");
    20     var detail = root["status1"].InnerText + "" + root["direction1"].InnerText
    21                     + root["power1"].InnerText.Replace("-""") + "级,"
    22                     + root["gm_s"].InnerText + root["yd_s"].InnerText;
    23     reader.SpeakAsync("今天是" + DateTime.Now.ToShortDateString() + "" + city + " " + detail);
    Location Weather Detail Speaker
  • 相关阅读:
    10 个十分难得的 javascript 开发经验
    牛人推荐的跨浏览器兼容性总结
    不可不看!CSS3中三十一种选择器用法
    jQuery制作鼠标经过显示图片大图,生成图片tips效果
    解决IE6中 PNG图片透明的终极方案-八种方案!
    关于JavaScript代码的执行效率总结
    【我们开发有力量之二】利用javascript制作批量网络投票机器人(自动改IP)
    网页制作中最有用的免费Ajax和JavaScript代码库
    纯javascript代码实现浏览器图片选择预览、旋转、批量上传
    悲催的IE6 七宗罪大吐槽(带解决方法)第二部分
  • 原文地址:https://www.cnblogs.com/Hans2Rose/p/WeatherSpeaker.html
Copyright © 2011-2022 走看看