控制:我们一定要学会控制

尤达大师(电影《星球大战》)有话:的关键在于控制。这本故事书是一个字一个字读出来,我愿意为它添加两个button,音调和语速,以便我们能够调整语音合成实时的时候。

还是 RWTPageViewController.m,在nextSpeechIndex 属性后声明下列属性:

;

, , , , , , , , , , , , , , , ;

// 1

utterance.pitchMultiplier = self.currentPitchMultiplier;

// 2

utterance.rate = self.currentRate;

[self.synthesizer speakUtterance:utterance];

}

}

假设你点击了 lower/raise button。则新设置的值将在下一句朗读中得到应用。

编译执行。例如以下图所看到的:

触摸或点击这些button,然后注意发音的变化。

尤达确实非常厉害,哪怕你不是杰迪也能够成为大师(AVSpeechSynthesizer 方面的)。

结尾

这里能够下载 完整的项目代码

希望本文能成为激发你开发自己的有声书的动力。假设你想知道很多其它的关于怎样对合成语音进行调优的技巧,请看以下:

最佳有声书WhirlySquirrelly.plist竞赛

说明:请尝试进一步调优 WhirlySquirrelly.plist,并上传至论坛或者本文留言里。

我们会评出当中的优胜者,并在评论中加以褒扬。

同意用户选择图书

说明: 加入一个“Choose Book” button。并在 UIPopoverController中显示一个可选的图书列表。当用户选择某本图书,在 RWTPageViewController 中重置 book 对象并显示新书。

从 Web 上下载图书

说明:将书籍以 plist 格式存储在 webserver或者提供相似 AWS S3 或者 Heroku 的服务。server先要提供一个 url列表。列出全部图书,然后再提供一个能够下载某本书的服务。

在前一个功能中,将图书的链接加入进去。

念到词高亮显示

提示: 使用AVSpeechSynthesizerDelegate 托付中的方法

在 speechSynthesizer:didStartSpeechUtterance:方法中。高亮指定的 utterance。

在 speechSynthesizer:didFinishSpeechUtterance:方法中。将高亮的 utterance 去高亮。你能够用 pageTextLable 的 attributedText 属性,通过NSAttributedString 设置不同的背景色和字体属性以实现加亮效果。

在第一页显示书名

Addthe Ability to Display a Title Page Before All Other Pages

说明:在 RWTPageViewController 之前加入额外的 viewController,并设置 Main.storyboard 新的属性已启用viewcontroller。他们俩 ViewController 随着 UINavigationController 经营。 为此,您可以更改 Page 类的设计,并分成声 Page 和沉默 Page,然后换 RWTPageViewController 我们可以用这两种不同的处理Page。

如何使用 iOS 7 的 AVSpeechSynthesizer 国家有声读物(4)的更多相关文章

  1. 怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(1)

    原文: http://www.raywenderlich.com/64623/make-narrated-book-using-avspeechsynthesizer-ios-7 随着 PageVie ...

  2. 怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(3)

    plist 中的每一页 utteranceSting 我们都创建了一个RWTPage.displayText.因此,每页的文本会一次性地显示出来. 由于 You've constructedeach ...

  3. 怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(2)

    切分语句 软件project的一条定律是数据和代码分离.这样做会使代码更易于測试,即使输入的数据发生改变,你的代码也能够同意.甚至于,程序能在执行中实时下载新的数据.假设程序能在执行中下载新书岂不是更 ...

  4. Unity3D开发之“获取IOS设备所在的国家代码"

    原地址:http://dong2008hong.blog.163.com/blog/static/469688272014021025578/ 在前一段时间游戏开发中需要实现获取IOS设备所在的国家代 ...

  5. 一个Android音频文本同步的英文有声读物App的开发过程

    转发: http://segmentfault.com/a/1190000003498111 “新概念英语”.“可可英语”.“亚马逊的audible有声书”.“扇贝听力”是我目前所知道的实现英文语音和 ...

  6. DS1515+

    DS1515+ 2021年05月02日 0 2.4k aahk   DS1515+ 2021年05月02日 这篇文章用于记录.改进.提高.分享我在使用群晖DS1515+网络存储服务器过程中的具体操作. ...

  7. [转]App Store 审核、限时免费、排行、推荐机制技巧精华汇总

    在 App Store 上,什么样的应用会得到推荐? 这个问题问的非常大,而且编辑推荐很多个人元素在里面,我试着用推荐Ovi Store应用的思路来回答一下: 关于应用: 1.首先这个应用最基本的功能 ...

  8. 自然语言处理NLP快速入门

    自然语言处理NLP快速入门 https://mp.weixin.qq.com/s/J-vndnycZgwVrSlDCefHZA [导读]自然语言处理已经成为人工智能领域一个重要的分支,它研究能实现人与 ...

  9. 微信小程序个人/企业开放服务类目一览表

    微信小程序个人/企业开放服务类目一览表   微信小程序个人开放服务类目表 服务类目 类目分类一 类目分类二 引导描述 出行与交通 代驾 / / 生活服务 家政.丽人.摄影/扩印.婚庆服务.环保回收/废 ...

随机推荐

  1. Mongodb数据备份恢复

    Mongodb数据备份恢复 一.MongoDB数据库导入导出操作 1.导出数据库 twangback为备份的文件夹 命令: mongodump -h 127.0.0.1[服务器IP] -d advie ...

  2. C++ 在字符串中插入子串+推断字符串是否由空格组成

    // Example3.cpp : 定义控制台应用程序的入口点. #include "StdAfx.h" #include <string> #include < ...

  3. WPF换肤之六:酷炫的时区浏览小精灵

    原文:WPF换肤之六:酷炫的时区浏览小精灵 由于工作需要,经常要查看到不同地区的 当前时间,以前总是对照着时区表来进行加减运算,现在有了这个小工具以后,感觉省心了不少.下面是软件的截图: 效果图赏析 ...

  4. OUI-67076 : OracleHomeInventory was not able to create a lock file&quot; in Unix

    Symptoms The command "opatch lsinventory" reports the error: OUI-67076:OracleHomeInventory ...

  5. hdu4585 &amp; BestCoder Round #1 项目管理(vector应用)

    主题链接:pid=4858">http://acm.hdu.edu.cn/showproblem.php?pid=4858 项目管理 Time Limit: 2000/1000 MS ...

  6. poj 2253 Frogger (最长路中的最短路)

    链接:poj 2253 题意:给出青蛙A,B和若干石头的坐标,现青蛙A想到青蛙B那,A可通过随意石头到达B, 问从A到B多条路径中的最长边中的最短距离 分析:这题是最短路的变形,曾经求的是路径总长的最 ...

  7. android贴士Toast

    转载请注明出处:http://blog.csdn.net/droyon/article/details/42009015 我们可以用androd提供toast控制,但在使用过程中,给我们发了很多Toa ...

  8. 重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree

    原文:重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree [源码下载] 重新想象 ...

  9. cocos2d-x学习过程中的疑问

    1.一个Scene中不同的层或者有几层Layer是在什么时候设置的? 2.helloWord中init()函数是有谁来调用的? 答:HelloWorld的init函数是在create函数调用后才会调用 ...

  10. Java获得正则表达式

    t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,wid ...