如何让 Edison 用苏格兰口音发出语音
因此,受此次网络研讨会和 Echo 的启发,我决定添加 USB 音频功能,而 espeak 是一个相对简单的选择。使用 Plantronics USB 耳机几乎是即插即用的,很快它就开始说话,甚至还带着苏格兰口音。
获取新的 Intel® 物联网开发者套件,这是一个完整的软硬件解决方案,使开发者能够使用 Intel® Galileo 和 Intel® Edison 板创建激动人心的新解决方案。请访问 Intel® 物联网开发者中心。
在最近的本地 活动上看到 Amazon Echo 演示后,我在生日时买了一个。Echo 是一个有趣的设备,通常被描述为《星际迷航》中的电脑,但它仍然很新,并且有其局限性。
在为 2016 年首次物联网路演开发演示时,我决定需要更新我们提供给开发者的 Edison 配件,因为 2015 年的大量项目都可以用 Arduino 和 WiFi 盾牌来构建。
因此,受此次 网络研讨会和 Echo 的启发,我决定添加 USB 音频功能,而 espeak 是一个相对简单的选择。使用 Plantronics USB 耳机几乎是即插即用的,很快它就开始说话,甚至还带着苏格兰口音。我在 YouTube 链接处留下了一个占位符,但以后可能需要发布/编辑。这显然是一个实时文档,所以请订阅以获取更新。
将 USB 连接的扬声器和独立的麦克风换上,并使其易于在路演中复制 20 次,这需要做更多的工作。
入门指南在 Intel 开发者中心随处可见,而这个 链接将让你眼花缭乱。
由于这些指南的普及和历史,我将打破 Edison 社区的传统,实际告诉你,我的开发是从 Edison 固件版本 149 开始的。你可以使用以下控制台命令检查你的版本。
$ configure_edison --version
下一步是使用在线指南之一更新 opkg 仓库,以添加强烈推荐的 AlexT 的仓库。这将允许你不仅添加下面的程序,还可以添加 nano,一个比 **vi** 更容易的编辑器。讽刺的是,你需要使用 vi 来更新仓库以安装 nano。
Stephanie Moyerman 的《Make》书中有关于使用耳机运行原始示例的良好说明,但除了将音频硬件添加到路演组合之外,我还决定添加 USB 网络摄像头,并利用相机上的麦克风录制音频。要快速启动视频部分,在安装音频包的同时,你也可以安装 OpenCV。这还有一个额外的优点,就是让你的系统与我的演示配置相同。许多网站都说 Linux 音频是 棘手的,他们不是在开玩笑,所以从一个已知的配置开始强烈推荐。
$ opkg install python-opencv espeak alsa-utils
查找设备和验证硬件并不直观(即棘手),但以下方法对我有用。
1: **$ lsusb** 检查设备是否被识别。
如果不在,则重启,完全断电。我发现我在尝试值时会锁定 USB 扬声器,导致驱动程序崩溃等。你可能会或可能不会在控制台中收到消息。
2: 使用(带电源的)USB 集线器:“带电源”功能是 Stephanie 书中的建议。
当我演示此功能时,我总是使用集线器,这样我就可以插入相机和扬声器。这些硬件缓冲似乎可以“隔离”扬声器免受软件问题的影响。至少根据我的经验,设备“似乎”更稳定,工作得更频繁。我将把这部分诊断留给用户练习。
ALSA 程序命令行程序似乎都有自己的语法,有些按 **名称** 调用设备,有些不识别该名称,有些偏好 **卡**(主板和插入式声卡的遗留物),有些偏好 **设备号**。甚至 Linux 文件系统似乎也这样工作。插入几个 USB 设备并探索 **/cat/proc/asound** 目录结构。你会看到设备 **名称、卡、card1、card2**,以及几个重复或备用的目录。这些寻址同一硬件的多种方式导致了下一节中一些看似混乱的原因。
**Alsamixer** 是一个图形界面,用于操作声音设备,通过选择正确的设备和修改音量,我可以听到音频,无论是通过 wav 文件还是使用 espeak。不幸的是,作为音频设备命令行界面的 **amixer** 并不那么配合,我不得不尝试多种不同的变体才使其工作。最终,我决定使用卡/设备编号来确保我能够运行我的演示,但这使得它在一定程度上依赖于 USB 安装顺序。
为了使设备号与实际设备对齐,请使用以下命令
$ cat /proc/asound/pcm
00-00: Loopback PCM : Loopback PCM : playback 8 : capture 8
00-01: Loopback PCM : Loopback PCM : playback 8 : capture 8
01-00: 14 : : playback 1 : capture 1
01-01: ((null)) : : playback 1 : capture 1
01-02: ((null)) : : playback 1 : capture 1
02-00: USB Audio : USB Audio : playback 1
03-00: USB Audio : USB Audio : capture 1
设备 02-00 是扬声器,即播放设备,设备 03-00 是 USB 网络摄像头中的麦克风。要从麦克风录制,我使用 **arecord** 命令。经过大量的实验,以及阅读博客和维基,以下语法对这个演示有效。
命令格式是
**arecord** **-f** (格式) **-c** (声道) **-D** (设备) filename.wav。ALSA 有一些预定义的格式,我选择了 CD 质量。这本身就意味着立体声,毕竟音频 CD 是立体声的,并且 USB 相机中没有立体声麦克风,所以我用 **-c** (声道) 来覆盖它,并选择 1 作为单声道。 **-D** (设备) 号来自上面 **$cat /proc/asound/pcm** 命令的输出,在本例中是 hw:3,0,即捕获设备。因此,要从 USB 网络摄像头录制单声道录音到名为 mono.wav 的文件中,请使用以下命令。
$arecord -f CD -c 1 -D hw:3,0 mono.wav
要收听音频,**$aplay mono.wav** 将允许你收听录音。如果你听不到录音,请使用 **alsamixer** 检查音量。
在初始设置得到验证后,使用 **espeak** 就非常直接了。以下文件设置音量,然后创建两个短语。
$amixer -q -c 2 set PCM,0 5000 unmute
$espeak -a 200 -s 120 -v en-sc " Sean Connery, Haggis, Loch Ness Monster,Whisky "
$espeak -a 200 -s 120 -v en-sc " HELLO, THIS IS EDISON, WELCOME TO OUR AUSTIN ROADSHOW"
**amixer** 的语法与 **arecord** 格式没有任何相似之处,但经过大量尝试后,确定上述设置可用于设置扬声器音量,在本例中为 5000。其他参数是 **-q** 用于安静,**-c 2** 用于两个声道(立体声),而 **PCM,0** 类似于 **arecord** 命令中的 **hw:3,0** 参数。如果存在一致性,我应该可以使用 **hw:2,0** 作为扬声器,**hw:3,0** 作为麦克风,但 alas ALSA。
音频录制和播放还有很多内容可以探索,尤其是在用户界面和语音识别领域,下面的参考资料是一个很好的起点。
如果你一直读到这里,那么获得苏格兰口音的方法就是邀请我去你的聚会,或者在 espeak 中使用 **-v** 命令选项。这会设置 **语音选项**,在本例中为有些奇怪命名的 **english-scottish** (en-sc) 选项。我认为 en-rp 是非常英式的,但有很多语言可以尝试。添加一个修饰符,例如 **-v en-sc+f2**(表示女性 2)会产生一个奇怪的机械苏格兰少女。
-----------------------
PocketSphinx:一个离线语音识别引擎
IBM Watson 语音转文本 https://speech-to-text-demo.mybluemix.net/
Amazon Echo https://developer.amazon.com/public/solutions/alexa/alexa-voice-service
使用 Python 进行 Google 语音识别 https://pypi.python.org/pypi/SpeechRecognition/
在 Twitter @intel_stewart 上关注我,或查看 #intelmaker 标签以获取更新。