现在的位置: 首页 > 综合 > 正文

语音播报实时天气

2018年02月18日 ⁄ 综合 ⁄ 共 2456字 ⁄ 字号 评论关闭

一、 让文本变成声音

    添加引用.Net里面自带的语音类库:System.Speech,调用系统的语音功能,就能实现string到语音的转换

  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,最简单快捷。获取本地的实时天气,分为两步:一、根据电脑公网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); //添加引用 System.Web.Extensions  页面引入using System.Web.Script.Serialization;
 //Read city from utf-8 format
 var city = HttpUtility.UrlDecode(json["city"]);   //添加引用System.Web
 获取到的地理信息是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格式。天气信息取到了,下面就是变成字符串,让它说话了,这里附上全部的代码:

//Initialize Speaker
    var reader = new SpeechSynthesizer();
    reader.Speak("I'm a programer,Hello, World! ");

    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"]);
    //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);
    //Get weather detail
    var root = xml.SelectSingleNode("/Profiles/Weather");
    var detail = root["status1"].InnerText + "," + root["direction1"].InnerText
                    + root["power1"].InnerText.Replace("-", "到") + "级,"
                    + root["gm_s"].InnerText + root["yd_s"].InnerText;
    reader.SpeakAsync("今天是" + DateTime.Now.ToShortDateString() + "," + city + " " + detail);Location Weather Detail Speaker

抱歉!评论已关闭.