录音

设置了语音驱动,机器人就会开始录音。一旦开始,那机器人只要工作着,就一直录音。

录音依靠麦克风。对不同产家麦克风,即使同一句话,并且说话人和机器人一样距离,它们产生的录音音量也可能不一样。对机器人制造商或开发者,可能需要知道在不同距离说话时,麦克风大概音量。这时可用launcher提供的“录音”窗口。

视频1 录音

一、查看波形、保存

在录音窗口,左上角显示录音用的声音格式。目前在用格式是单声道、16K赫兹、16位PCM。中间大窗口显示从麦克风录到的实时声音波形。…[说句“中国有多少人”]…。因为音量超过人声阈值,这段声音会立即送去识别,对应Basic驱动就是送去科大讯飞。成功识别后,左下角会显示识别结果。

右上角有个“保存”按钮。作用是保存一段声音到文件。要注意,一旦声音数据超过1M字节,会自动结束保存。对单声道、16K赫兹、16位PCM格式,1M字节大概30秒。……。声音保存在一个叫speech.wav的文件,格式wav。用远程桌面,可以把文件复制到电脑,然后用一些工具软件查看波形细节,进行你想需要的调试。……。

中间窗口有四条横线。最上面红色是最大值,因为声音格式是16位有符号数,最大值是32678。中间暗红色是中间值16339,即32678除以2。最下面是0值。另有一条白线,它指示人声阈值,值是2000。

按下右上角“显示负值”。由于振动的性质,麦克风输出是有正负的,这时把负数表示出来了。此时,中间绿线是值0。最大值32768、最小值-32768则分别是上、下两条。……。虽然值是负数,那只是电压方向而已,音量大小看的是绝对值。既然只看绝对值,就是不显示负数。因为只看绝对值更直观,一旦进入录音,默认不显示负数。

 

二、人声阈值

对语音驱动,一个工作是要从声音流中提取片断,送去语音识别。考虑到效率,不可能把整段语音都送去识别,像一直是静音。这里引入个概念:人声阈值。当有音量超过这个阈值,意味着可能要把接下一段声音送去识别了。

语音识别是语音驱动的任务,是语音驱动在修改、并使用人声阈值。打开Basic小程序,切到“语音”,修改人声阈值到5000。回到“录音”,可以看到,此时表示人声阈值的白线改变位置了。…[说话]…。虽然说了和之前差不多音量话,但人声阈值过大,导致整段声音没送去识别。为容易识别,去Basic,重新把阈值设回2000。

有音量超过人声阈值,语音驱动才会考虑送接下声音去语音识别,那怎么截取?…[说话]…。会看到有一段声音位在人声阈值上,那是不是就把这段送去识别呢?这取决于语音驱动怎么写。对Basic小程序,是除它外,还会加上前、后250毫秒声音。

访问C洼,打开文章“语音驱动”,看“提取声音片断送去语音识别”。可以认为“voice_len2”就是那段位在人声阈值上声音,绿色标示的voice_len_则要送去识别,它是在“voice_len2”基础上,前、后各加一段。前面不超过250毫秒,后面固定250毫秒。至于原因,“人说话时,不大可能一出声,音量就超过人声;同样的,要停止时,音量不大可能一下从超过人声就变0。为识别第一个和最后一个字,须要给人声前、后多送一段”。

这样,对送去识别的声音,可分为三段,第一段是第一个人声样本前的空白,最长不超过250毫秒。第二段是第一个人声和最后一个人声之间的声音。第三段是最后一个人声样本后的空白,固定250毫秒。

回到“录音”。当有声音超过人声阈值时,右上角会显示个“触发”图标。或是发去识别,或是丢掉,一旦处理完了这条声音片断,图标消失。

全部评论: 0

    写评论: