我最近在当地的一次活动上看到 Amazon Echo 正在讲话,感到非常有趣,然后我便买了一件作为自己的生日礼物。Star Trek Computer 经常会把 Echo 描述为一件有趣的设备,然而它还比较新,有一些限制。
在为 2016 年首次物联网路演制作演示时,我决定更新我们为开发人员提供的配合 Edison 使用的配件件,因为大量 2015 年的项目可能已经构建了 Arduino 和 WiFi Shield。
因此,受到该网络研讨会和 Echo 的启发,我决定添加 USB 音频功能,而 espeak 是一个相当合适的选择。使用 Plantronics USB 耳机几乎能够即插即用,快速开始讲话,甚至还能使用苏格兰口音。 我在此处为我的 YouTube 链接添加了一个占位符,但是稍后可能需要再进行发布/编辑。 这是一个实时文档,因而请进行订阅以便于更新。
事实证明,接入一组 USB 互联扬声器,使用一个单独的麦克风,准备能够在路演时轻松复制 20 次的材料一点都不轻松。
我使用 Edison 固件版本 149 进行开发。您可以使用以下的控制台命令查看一下您的开发。
$ configure_edison --version
接下来是使用一个在线指南,更新 opkg 报告的数据,添加为大家强烈推荐的 AlexT 的报告。 这不仅支持您添加下方的程序,还支持您添加 nano,该编辑器较之 vi 更为简单。 讽刺的是,您需要使用 vi 来更新报告,才可以安装 nano。
Stephanie Moyerman 撰写的一本开发书籍中包含了许多指令,可实现在初始示例中使用耳机,但是除了在混合路演中添加音频硬件之外,我还决定添加 USB 网络摄像头,我在摄像头上使用麦克风录制音频。 为了增强视频效果,您在安装音频包的同时,可能还需要添加 OpenCV。 为您的系统配备与我的演示相同的配置能够带来额外优势。 许多网站表示,Linux 音频过分讲究,这绝非无中生有,所以我强 烈建议大家采用业经认可的配置。
$ opkg install python-opencv espeak alsa-utils
寻找设备和验证硬件并不是凭感觉而为的事情(即过分讲究),基于我的个人经验,以下几种方法较为有效。
1:$ lsusb 查看是否已识别设备,
如果没有,则需要重启,完全断开电源。 我发现,在添加设备时试用数值,可能会锁定 USB 扬声器,导致驱动程序崩溃等。 此时,控制台上可能会,也可能不会出现消息。
2: 使用(有源) USB 集线器: “有源”特性是 Stephanie 的书中的建议。
当我演示该特性时,总是使用集线器,这样我便可插入摄像头和扬声器了。 该硬件缓冲器似乎能够让扬声器“不 受”软件问题的影响,至少根据我的经验,设备“看上去”更稳定,正常运行时间更长。 大家可以在自己的使用过程中诊断一下是否如此。
每个 ALSA 程序命令行程序似乎都有自己的语法,一些程序称呼设备的“名称”,而一些程序则不识别该名称,一些程 序更倾向于称其为“卡”(这是从主板和插件声卡继承而来的叫法),还有一些程序称其为“设备编号 ”。 即使 Linux 文件系统似乎都是这么称呼。 插入几个 USB 设备,了解 /cat/proc/asound 目录结构。 您会看到名称、 卡、卡 1、卡 2,以及其他一些重复或更改的目录。 采用这么多的方式来称呼同一种硬件,难怪下面的章节看上去有些混乱。
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 (format) -c (channels) -D (device) 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 便非常简单了。 下面的文件可设置音量,然后创建两个语句 (phrase)。
$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 ,但是 ALSA 除外。
音频录制和播 放有许多内容可以探索,尤其在用户界面和语音识别方面,以下的参数可以为大家提供很好的起点。
如果您已经阅 读了全文,那么苏格兰语音正向您招手,或者您也可以在 espeak 中使用 -v 命令选项。 这可设置语音选项,在本案例中命名为 english-scottish (en-sc) 选项。恕我直言,en-rp 太过英式,但是您还可以尝试许多其他的语言。 添加一个修饰符, 如 -v en-sc+f2(表示女声 2)可生成一个非常奇怪的机器人式的苏格兰女声。
-----------------------
PocketSphinx :离线语音识别引擎:
https://software.intel.com/en-us/blogs/2015/11/24/register-today-solvin…- challenges-with-the-intel-iot-developer-kit-webinar
IBM Watson Speech to Text https://speech- to-text-demo.mybluemix.net/
Amazon Echo https://developer.amazon.com/public/solutions/alexa/alexa-voice-service
采用 Python 编写的谷歌语音识别 https://pypi.python.org/pypi/SpeechRecognition/