语音播报实时天气 的实现

.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);

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android Studio中实现语音播报天气预报,您需要使用以下步骤: 1. 获取天气预报数据:您可以使用第三方API(例如OpenWeatherMap)来获取天气预报数据。API将返回JSON格式的数据,您可以使用JSON解析器将其转换为Java对象。 2. 实现TTS:Android提供了TextToSpeech(TTS)API,该API允许您将文本转换为语音。您需要在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.BROADCAST_SMS" /> <uses-permission android:name="android.permission.BROADCAST_WAP_PUSH" /> <uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" /> <uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" /> <uses-permission android:name="android.permission.BROADCAST_SMS" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> ``` 3. 将预报信息传递给TTS:使用TTS API将天气预报信息转换为语音,然后播放它。您可以使用以下代码来实现此操作: ``` TextToSpeech tts = new TextToSpeech(this, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { int result = tts.setLanguage(Locale.US); if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e("TTS", "This Language is not supported"); } else { String text = "The weather forecast for today is " + forecast; tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); } } else { Log.e("TTS", "Initialization Failed!"); } } }); ``` 请注意,您需要在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> ``` 以上是在Android Studio中实现语音播报天气预报的基本步骤。您可以根据自己的需求进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值