---
title: "移动应用程序的文本转语音功能"
date: "2017-08-28"
categories: 
  - "mobile"
  - "mobile-development"
  - "mobiletogether"
  - "tools"
tags: 
  - "mobile-development"
  - "mobiletogether"
  - "software-tools"
description: 探索如何利用 Altova MobileTogether 将文本转语音功能集成到跨平台移动应用程序中，从而通过语音信息来提升用户体验。
---
Status: #blog

Tags:  #mobile-development #mobiletogether #software-tools

Categories: [mobile-development](/blog/zh/category/mobile-development.md) | [low-code+no-code](/blog/zh/category/low-codeno-code.md) 
# 移动应用程序的文本转语音功能

Altova MobileTogether 支持文本转语音功能，适用于 [跨平台移动应用程序](https://www.altova.com/zh/mobiletogether), 赋予开发者能力，使其能够加入语音功能，并构建丰富多媒体的用户体验。

语音功能可以与文本完全集成，并在应用程序的任何位置发挥作用。例如，像“Parcel Delivery MobileTogether”这样的应用程序可以通过朗读下一个送货地址来增强功能——尤其是在司机遇到交通拥堵时！或者，移动设备也可以朗读其他信息框中的文本内容。

我们首先制作了一个简单的演示程序，用于测试移动应用中文本转语音功能的可用性，然后将文本转语音功能添加到“包裹配送”应用程序中。

![移动应用程序的文本转语音功能](/blog/images/shutterstock_1615112031.jpg)

<!--more-->

这个非常简单的文本转语音演示应用具有以下四个功能：

- 一个输入字段控件允许用户输入任意文本，或者选择并朗读一些预设的默认文本
- “Speak” 按钮可以将输入的文本转化为语音输出
- 静音按钮在语音正在播放时会停止作用
- “退出”按钮会弹出一个消息框，其中包含语音提示以及一个退出应用程序的选项

以下是在安卓设备上运行的应用程序，其中输入框中显示了文本：

![移动应用中的文本转语音功能：一个简单的Android设备演示](/blog/images/new-android-shot-1-small.png)

应用程序中的文本可能来自多个不同的来源，包括移动设备的复制/粘贴功能。在下面的截图中，一位iPhone用户删除了默认文本（该文本是从Altova网站复制的），然后将其粘贴到输入框中：

![移动应用中的文本转语音功能：iPhone上的简单演示](/blog/images/replacement-iPhone-shot-small.png)

选中“多行输入”属性后，文本框会自动调整大小，以适应粘贴的文本。

输入框中收集的文本会被存储在应用程序数据树中的一个元素中。点击“说话”按钮后，会触发设备内置的文本转语音引擎，从而朗读该文本。

这个在“MobileTogether 操作”对话框中定义的单个操作，无论应用程序运行在 Android、iOS 还是 Windows 手机上，或者在 Windows 10 电脑上，甚至是在其他设备的网页浏览器中，都能正常工作。

![移动应用程序中的文本转语音功能](/blog/images/text-to-speech-action.png)

我们将“文本转语音”功能直接分配给了“说话”按钮的操作。但它也可以用于操作组。我们为“退出”按钮使用了操作组。当用户点击“退出”时，我们希望同时显示消息框并朗读消息，就像在安卓手机上看到的那样：

![移动应用中的文本转语音简单示例。退出消息](/blog/images/exit-message-capture.png)

以下是“退出”按钮所定义的各项操作：

![移动应用中的文本转语音功能：已定义“退出”按钮的操作](/blog/images/message-box-action-group.png)

“您确定要退出此应用程序吗？”这句话存储在数据树中，并被用于文本转语音功能的高亮显示操作以及其下方的消息框的XPath表达式中。

当用户点击“确定”按钮后，一个循环操作会等待“文本转语音”功能完成，然后才会关闭应用程序。

### 为移动应用程序更新包裹配送应用，增加文本转语音功能

“包裹配送”示例应用程序最初是为了演示如何在 MobileTogether 中处理地理位置数据。在这个模拟中，用户扮演一家快递公司的司机，负责将包裹从新泽西州的仓库运送到纽约市的各个目的地。

当每个新的目的地被分配时，应用程序会显示一个“配送”页面，该页面会显示地址以及当前距离目的地的距离，如图所示，这是在Android手机的MobileTogether模拟器上显示的界面：

![在 MobileTogether 模拟器中查看的包裹配送示例应用程序](/blog/images/Delivery-Page-in-simulator.png)

我们希望在驾驶员行驶过程中，为每个新的目的地和距离添加语音播报功能。

首先，我们可以在“配置”页面添加一个新的用户设置，使用一个开关控件来启用或禁用文本转语音功能。以下是在iPhone上运行的修改后的“配置”页面：

![包裹配送移动应用演示版，在模拟器中查看的配置页面](/blog/images/new-configuration.png)

在设计器中的“交付”页面，我们可以看到目的地、当前位置以及到目的地的距离，这些信息都来源于 XPath 表达式

![包裹配送移动端演示应用，其“配送”页面在 MobileTogether 设计器中展示](/blog/images/Delivery-Page-in-Designer.png)

这些相同的表达方式可以应用于文本转语音功能。我们首先创建了一个动作组，用于朗读每个新的目的地。下图蓝色区域显示了文本转语音的动作。我们使用了字符串函数“concat”，在原有内容的基础上添加了一些额外的词语，从而构建了一个更自然的对话式表达，其中包含了地址和起始距离：

![包裹配送移动应用演示版——操作组用于语音播报下一个目的地](/blog/images/destination-action-group.png)

当驾驶员继续行驶前往目的地时，地理位置信息会定期更新，并且与目的地的距离也会实时刷新。我们创建了一个新的操作组，用于播报更新后的距离：

![移动应用程序中的文本转语音功能示例](/blog/images/new-distance-action-group.png)

顶部的循环结构类似于我们前面描述的演示应用程序中“退出”按钮的功能。在这种情况下，它防止新的文本转语音功能在之前的文本转语音功能尚未完成时被触发。否则，如果地理位置更新发生在之前的语音播放完成之前，就可能发生这种情况。

我们的文本转语音功能组必须在应用程序运行时被调用。首先，我们可以将“Vocalize Next Destination”（语音播报下一目的地）功能组放置在“Delivery”（配送）页面的“OnPageLoad”（页面加载）动作序列中：

![包裹配送移动应用演示版——第一个目的地操作组的布局](/blog/images/new-page-load-actions.png)

首次配送时，会加载“配送”页面。对于第二次及后续的配送，我们可以将操作组添加到现有的“继续前往下一个目的地”操作组中：

![包裹配送移动应用演示版——用于显示下一个目的地的操作组位置](/blog/images/insert-first-vocalization.png)

 

我们现在只需要将“Vocalize New Distance”操作组添加到“Delivery Page”页面的“OnPageRefresh”动作中即可

![包裹配送移动应用演示版——刷新“配送”页面操作](/blog/images/new-page-refresh-actions.png)

现在，无论该应用程序是在MobileTogether模拟器中运行，还是在任何移动设备上运行，驾驶员都会收到语音提示，无需将视线从道路上移开！

您可以尝试为移动应用程序创建文本转语音功能。为此，您可以[下载免费的 MobileTogether Designer 软件](https://www.altova.com/zh/download/mobiletogether.html)。该软件内置了帮助文档、教程以及许多示例应用程序，包括包裹配送应用。

本文中描述的解决方案可以在以下链接下载：[https://github.com/altova/MobileTogether-TTS](https://github.com/altova/MobileTogether-TTS)

在 MobileTogether Designer 中，打开任意一个 .mtd 文件，以了解其构建方式，然后在 MobileTogether 模拟器中运行该文件。

连接到您设备的应用程序商店，[下载 MobileTogether 移动应用程序。](https://www.altova.com/zh/download/mobiletogether.html) 然后，连接到 MobileTogether 演示服务器，以运行更多演示应用程序。 安装了 MobileTogether 移动应用程序后，您还可以使用 MobileTogether Designer 作为服务器，在自己的设备上尝试移动应用程序的文本转语音功能。
