编程静默 OUT!
弗朗索瓦,这难道不美妙吗?自从我还是个小男孩,甚至在我想到开这家餐厅之前,我就想要这样的东西。我记得看2001: 太空漫游,听着 HAL 9000 的声音,心想,“这就是我需要的。一台会说话的电脑。” 多年后,我突然意识到我仍然没有我的会说话的电脑。好吧,今天,mon ami(我的朋友),我们将要改变这一切。
什么?我们的客人到了?欢迎,mes amis(我的朋友们),来到 Chez Marcel。我很高兴您今天能来。我们的菜单上为已经编程了一切的程序员准备了一些很棒的菜品。请坐,弗朗索瓦会给您拿些酒来。弗朗索瓦,去酒窖拿一瓶1996年的澳大利亚 Hill of Grace 酒。
请随意,mes amis(我的朋友们)。您会喜欢这款酒的。啊,merci(谢谢),弗朗索瓦。请给我们的客人倒酒。
我刚才在和弗朗索瓦说,我们现在应该到处都有会说话的电脑了,但我的 Linux 工作站却一直保持沉默。出于我无法理解的原因,我系统上的任何软件似乎都没有启用语音功能。因此,对于今天的所有菜谱,您都需要在系统中安装声卡,并正确配置,以及一个麦克风。
苏格兰爱丁堡大学的语音技术研究中心 (CSTR) 正好拥有我开始构建自己的会说话的电脑所需的东西。通过访问这个地址 http://www.cstr.ed.ac.uk/projects/festival/,您会找到一个名为 Festival 的有趣项目。
Festival 是一个多语言语音合成系统。它能够使用多种声音进行文本到语音的工作。凭借其 API 设计,它可以集成到许多其他程序和应用程序中。当我们探索这个软件包时,您就会明白我的意思。
获取 Festival 很简单。访问该站点,单击下载按钮并获取软件包的最新版本。当您在那里时,请获取 speech_tools 软件包,因为 Festival 依赖于它的存在。因此,它是我们首先要构建的东西
tar -xzvf speech_tools-1.2.1.tar.gz cd speech_tools cp config/config-dist config/config chmod +w config/config
此时,您可能需要考虑是否要使用共享库,因为默认情况下不使用共享库。在这种情况下,您必须通过删除单词 “SHARED” 前面的井号标记来取消注释 config/config 文件中的以下行:#SHARED=1。
这实际上是现在推荐的选项。无论您是否选择这样做,我们现在都可以继续构建
make info make make install
现在是放松的好时机,尝尝鹅肝(它真的非常棒,non(不是吗)?)并再喝一口酒。当 speech_tools 构建完成后,就该创建 Festival 系统了。使用命令 tar -xzvf festival-1.4.1.tar.gz 将 Festival 的源代码解压到您选择的目录中。
所有这些文件将展开到一个名为 /festival 的目录中。在您执行任何其他操作之前,请解压语言词典和语音数据库。我首先抓取了以下文件
festlex_CMU.tar.gz festlex_POSLEX.tar.gz festvox_kallpc16k.tar.gz
CMU 文件是所有英语语音的字典文件,而 POSLEX 文件包含所有英语使用者也通用的语音部分。最后,我们有一个美式语音的语音数据库,采样率为 16k。不同的读者无疑会想要不同的声音,无论是男声、女声、英式英语还是(bien sûr(当然))法语。有关您可能需要的内容的详细信息,请查看网站发行目录中的 README 文件。
当您解压这些文件时,它们也会展开到同一个 /festival 目录中。从这里开始,该过程与我们对 speech_tools 所做的过程相同,一直到从 config-dist 复制 config 文件,当然,除了我们将它复制到 /festival 目录。
完成所有这些操作后,在安装目录中键入 bin/festival。您应该看到类似这样的内容
bin/festival Festival Speech Synthesis System 1.4.1: release November 1999 Copyright (C) University of Edinburgh, 1996-1999. All rights reserved. For details type `(festival_warranty)' festival>
您准备好听到您的电脑说话了吗?那么,在 festival> 提示符下,键入以下内容(括号和引号很重要):(SayText "Franiçois. Vite. More wine.")。
如果一切顺利,您应该听到扬声器中发出 “François. Vite. More wine” 的声音。这是一个命令式的声音,non(不是吗)?我喜欢播放这句台词,因为它会让我的忠实服务员感到不安。当然,由于我使用的是英语语音和数据库,因此发音可以说是很有趣。在这里键入 control-d 将使您退出 Festival 命令模式。您也可以键入 (quit)。再次强调,这里的括号很重要。让我们尝试一些更有趣的东西。通过使用 --tts 标志,我们可以指定文本文件的路径名,并让 Festival 为我们读取它。例如,我有一个 cron 作业,它通过运行 fortune 程序每晚更改每日消息。因此,要读取每日消息,我可以这样做
bin/festival --tts /etc/motd
如果您省略文件名,您可以直接开始键入。完成后,您需要按 control-d 终止输入,Festival 将退出。这里还有一件事要尝试。只需将命令的输出通过管道传递给 Festival 程序。想听听对日期的相当有趣的解释吗?试试这个,date | bin/festival --tts。
您也可以运行 Fortune 程序来获得一些合成的智慧:/usr/games/fortune | bin/festival --tts。
Festival 也可以作为服务器运行,供其他程序通过运行带有 --server 标志的程序来传递文本信息。例如,您可以编写一个应用程序,该应用程序写入 Festival 套接字(默认情况下,这在端口 1314 上运行)。列表 1 是我专门为此场合编写的一个小型 Perl 脚本。它并不令人兴奋,但您可以将其视为您自己的应用程序的起点。请记住,您可能需要更改第一行中 Perl 可执行文件的路径。
Darxus 编写的 speechd 程序是这个想法的一个绝妙示例。此软件包实现了一个名为 /dev/speech 的设备文件,您可以向其中写入任何您喜欢的文本。将输出重定向到此设备,Festival 系统(在服务器模式下运行时)将拾取并说出来。这也是一个 Perl 脚本,可以从 Speech IO 站点下载,http://www.SpeechIO.org/。
首先解压发行版到一个临时目录中。然后,运行后面的简单构建
tar -xzvf speechd-0.54.tar.gz cd speechd make make install
要以守护进程方式运行程序,只需键入命令的路径:/usr/local/bin/speechd。
在我继续之前,我应该告诉您,我在这里遇到了一些问题。我的 Red Hat 系统的 /etc/hosts 文件有一个 localhost 条目,内容如下
127.0.0.1 localhost.localdomain localhost
您的也可能如此。
为了使事情正常工作,我必须更改它,以便像这样切换两个 localhost 定义
127.0.0.1 localhost localhost.localdomain
如果 Festival 服务器恰巧没有运行,speechd 将尝试启动它。不幸的是,如果您从源代码构建 Festival,您可能必须修改 speechd 脚本以使用可执行文件的完整路径。另一种选择是将 Festival 二进制文件复制到 /usr/local/bin。
那么,您可以用它做什么呢?好吧,使用我最初的 fortune 程序示例,我可以简单地使用命令 /usr/games/fortune > /dev/speech 将输出重定向到 /dev/speech。
将其实现到您的脚本中非常容易。这是另一个例子。我可以有一个脚本每隔几分钟运行一次,检查新邮件,计算邮件数量,并通过语音设备告诉我。(请注意,单引号实际上是反引号。)
echo "You have `frm | wc -l` messages in your mailbox" /dev/speech
现在我们的 Linux 系统可以和我们说话了,在我看来,似乎只缺少一件事。我们需要让我们的系统倾听我们并按照我们的指示行事,non(不是吗)?我们需要语音识别软件。为了实现这一点,我访问了 Daniel Kiecza 的主页,并获取了最新的 cvoicecontrol 的源代码,这是一个在 GPL 下发行的出色软件包。
有了 cvoicecontrol,我们可以开始创建我们梦想中的全自动化系统。当然,这现在意味着我们应该注意我们说什么,non(不是吗)?
tar -xzvf cvoicecontrol-0.9alpha.tar.gz cd cvoicecontrol-0.9alpha ./configure make make install
生成的文件将出现在您的 /usr/local/bin 目录中。您需要了解三个文件。一个是 cvoicecontrol 程序本身。在您可以开始使用它之前,您需要校准麦克风并创建模型文件。这是通过 microphone_config 和 model_editor 程序完成的。
从 microphone_config 程序开始,并完成问答会话。这一切都很好地以菜单驱动的方式进行。您的默认混音器和音频设备应自动检测到,因此这部分应该已经填写完毕。我的显示为 /dev/mixer 和 /dev/dsp。下一步是调整混音器级别,设置录音阈值并创建配置文件。可能整个步骤中最难的部分是必须大声说话,以便程序有时间获得其级别。我现在告诉您,mes amis(我的朋友们),这比听起来要困难得多。默认位置是 $HOME/.cvoicecontrol/config。
接下来是有趣的部分。启动 model_editor。您将看到一个菜单,您可以在其中加载、编辑、保存或创建新的扬声器模型。请看图 1 查看程序的运行情况。
模型就是您,mes amis(我的朋友们)。由于这里还没有任何内容,请点击 “新建扬声器模型”,然后选择 “编辑”。将出现另一个菜单,您可以在其中录制单词并指定这些声音将生成的事件。这里的一切都是一个按键操作。按 “a” 添加新项目。该项目将以通用项目形式显示在列表中,未指定任何命令。现在,按 Enter 键编辑项目,并将标签更改为有意义的名称。例如,我创建了一个名为 “启动 Mozilla” 的项目,我为 Mozilla 启动命令输入了 /usr/local/mozilla/mozilla &。
请注意,我在命令末尾放了一个 & 符号,以将其放入后台。我这样做是因为我希望能够在启动此命令后启动其他语音命令。完成此操作后,您需要输入一些您的声音样本。您至少需要四个样本。清晰地说出您的命令,等待并添加另一个样本。当您有四个样本后,您可以退出(按 “b”)并保存您的扬声器模型。您可以随意命名它,只需记住您把它放在哪里。
那么,现在我们已经配置了麦克风,并且至少有一个命令与等效的语音命令相关联。顺便说一句,要启动 Mozilla,您可以像您的语音命令一样轻松地说 “browser”,但通常使用命令名称更有意义,non(不是吗)?剩下的唯一一件事就是启动 cvoicecontrol:cvoicecontrol speakermodel.cvc。
由于我将我的扬声器模型保存为 chefmarcel.svc(扩展名不是必需的),因此我通过键入 cvoicecontrol chefmarcel.svc 启动了语音识别软件。
现在,如果我说 “Mozilla” 这个词,浏览器就会启动。我还为我最喜欢的编辑器 vi 以及几个游戏创建了命令。
Tux,请打开餐厅的门。有了今天菜单上的这些工具,您就可以朝着拥有未来的电脑迈进一大步。您已经运行了 Linux,所以您已经快到了。
好吧,mes amis(我的朋友们),时钟,它在告诉我时间不多了,我们很快就必须关门了。不过,太早关门也没什么意义。弗朗索瓦,您能再给我们的客人倒一杯酒吗?Merci(谢谢),mon ami(我的朋友)。您知道吗,弗朗索瓦,您的内置语音识别软件运行得非常好。当然,弗朗索瓦,我知道您是人而不是机器。别那么伤心。这只是一个小玩笑,non(不是吗)?
Mes amis(我的朋友们),我必须再次感谢您的到来。下次再见,请来 Chez Marcel。您的餐桌将恭候您的光临。
A votre santé! Bon appétit!
