语音识别完成诗句的查询功能,iOS AVSpeechSynthesis语音输出结果的诗歌APP
前言
当前的APP的查询都是使用手动输入,不仅效率低,而且查询的语句的限制比较大,不能够方便的扩展。 如果能方便的扩展查询语句,那么APP的使用就会有很大的灵活性。可以设计各种问句和语句,可以方便的和用户进行交互。在这里使用了olami平台提供的语音平台接口,很方便的实现了查询语句的扩展,而且可以返回需要的结果。同时,Olami平台也提供了完整的语音识别功能,再结合iOS 提供的AVSpeechSynthesis接口,就可以实现一套类似Siri的智能语音查询诗句的APP
APP功能介绍
源码下载地址:https://github.com/lym-ay/Poem
这是一个查询《唐诗三百首》、《宋词三百首》、《元曲三百首》的诗歌学习APP,可以查询名字查询诗歌,可以通过诗人查询诗歌,可以通过诗词查询是哪一首,可以查询唐代有哪些诗人,这些诗人的代表作是什么。并通过语音读出来
通过诗人查询代表作,点击可以显示诗歌
通过诗歌名称查询
通过诗句查询诗歌
通过诗句查询诗人
功能的实现
语音识别和语义理解都是通过Olami平台来实现的。这个需要去Olami平台进行注册,然后就可以免费试用了。官网的地址https://olami.ai,网站上有丰富的教学资源具体的使用可以查看相关的文档,也可以查询我的前几篇博客
定义的语句大部分都是查询的:例如
落花时节又逢君出自哪首诗
你会背李白的诗吗
元代的诗人有哪些
唐朝有哪些诗人
唐朝诗人李白的主要作品有哪些
李商隐的诗
语音的读取是使用了苹果的AVSpeechSynthesis库进行的。这个库的使用也很简单。这个库是在AVFoundation中
#import<AVFoundation/AVFoundation.h>
使用了两个类
AVSpeechSynthesizer
AVSpeechUtterance
AVSpeechSynthesizer *av= [[AVSpeechSynthesizer alloc]init];
av.delegate=self;//挂上代理
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc]initWithString:@"你好!"];//需要转换的文字
utterance.rate=0.5;// 设置语速,范围0-1,注意0最慢,1最快;AVSpeechUtteranceMinimumSpeechRate最慢,AVSpeechUtteranceMaximumSpeechRate最快
AVSpeechSynthesisVoice*voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-TW"];//设置发音,这是中文普通话
utterance.voice= voice;
[av speakUtterance:utterance];//开始
AVSpeechSynthesizer定义了一些回调代理,可以侦测一些状态
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didStartSpeechUtterance:(AVSpeechUtterance*)utterance{
NSLog(@"---开始播放");
}
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance*)utterance{
NSLog(@"---完成播放");
}
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance*)utterance{
NSLog(@"---播放中止");
}
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance*)utterance{
NSLog(@"---恢复播放");
}
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance*)utterance{
NSLog(@"---播放取消");
}
语音识别完成诗句的查询功能,iOS AVSpeechSynthesis语音输出结果的诗歌APP的更多相关文章
- 通过维基API实现维基百科查询功能
通过英文维基的免费API,可以实现对维基百科的搜索查询或者标题全文查询等,尝试了一下通过title实现全文查询,返回的结果是wikitext格式,暂时不知道该如何应用,所以仅实现了查询功能,可以返回最 ...
- 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段
创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...
- MySQL 5.5开启慢查询功能
vim /etc/my.cnf [mysqld] slow-query-log = on # 开启慢查询功能 slow_query_log_file = /usr/local/mysql/data/s ...
- ASP.NET MVC系列:为视图添加查询功能
首先,在MoviesController里添加一个查询方法,代码如下 public ActionResult SearchIndex(string title) { //查询数据库中的电影表 var ...
- 完善ext.grid.panel中的查询功能(紧接上一篇)
今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...
- 033医疗项目-模块三:药品供应商目录模块——供货商药品目录t添加查询功能----------Dao层和Service层和Action层和调试
什么叫做供货商药品目录t添加查询功能?就是说我们前面的博客里面不是说供货商登录后看到了自己供应的药品了么如下: 现在供货商想要往里面添加别的药品,那么这个药品的来源就是卫生局提供的那个Ypxx表(药品 ...
- [Architecture Pattern] Repository实作查询功能
[Architecture Pattern] Repository实作查询功能 范例下载 范例程序代码:点此下载 问题情景 在系统的BLL与DAL之间,加入Repository Pattern的设计, ...
- RPM软件包管理的查询功能
以后大家升级rpm包的时候,不要用Uvh了! 我推荐用Fvh 前者会把没有安装过得包也给装上,后者只会更新已经安装的包 总结:未安装的加上小写p,已安装的不需要加p 查询q rpm {- ...
- 实现带查询功能的Combox控件
前言 ComBox 还可以实现查询功能,通过设置 ComBox 控件的 AutoCompleteSource 属性和 AutoCompleteMode 属性,可以实现从 Combox 控件中查询已存在 ...
随机推荐
- mac环境下安装mysql
一,下载mysql 官网"Community " 下会看到"MySQL Community Server"下方有一个"download"点击 ...
- 第四次作业 四则运算器在C++层面上的进一步思考
OOA(Object Oriented Analysis,面向对象分析) 从客观存在的事务和事务之间的关系,归纳出有关对象(包括对象的属性和行为)以及对象之间的联系,并将具有相同属性和行为的对象用一个 ...
- 结对编程1-基于GUI的四则运算生成器
201421123016郑怀勇 201421123017康建灿 程序代码 / 康建灿 一.需求分析 记录用户的对错总数. 程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算. 有 ...
- week2-结对编程【网页实现四则运算】
题目描述: 不知道大家是否尝试过这样一种开发模式:你有一个伙伴,你们坐在一起,并肩作战,面对着同一台显示器,使用着同一键盘,同一个鼠标,你们一起思考,一起分析,一起编程?这次,就让我们来体验一下结对编 ...
- 201521123006 《Java程序设计》第7周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 public boo ...
- 201521123077 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 多线程 Runnable类 表示任务的类,可以当作参数传入Thread的构造器来运行该任务 Thread类 ...
- 201521123097《Java程序设计》第十周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中fin ...
- 14.LINUX-platform机制实现驱动层分离(详解)
版权声明:本文为博主原创文章,未经博主允许不得转载. 本节目标: 学习platform机制,如何实现驱动层分离 1.先来看看我们之前分析输入子系统的分层概念,如下图所示: 如上图所示,分 ...
- IDEA用maven创建springMVC项目和配置
工具准备:IDEA2016.3 Java jdk 1.8 1.DEA创建项目 新建一个maven project,并且选择webapp原型. 然后点击next 这里的GroupId和Artifac ...
- 浅析强连通分量(Tarjan和kosaraju)
理解 在有向图G中,如果两点互相可达,则称这两个点强连通,如果G中任意两点互相可达,则称G是强连通图. 定理: 1.一个有向图是强连通的,当且仅当G中有一个回路,它至少包含每个节点一次. ...