-
Notifications
You must be signed in to change notification settings - Fork 100
安装和调整µSpeech
µSpeech 是个语音识别软件为8bit微控制器来做的。µSpeech不是完美:有时候µSpeech会发出错的音素。
警告:µSpeech是很难用的。
安装 µSpeech 是很简单。 从这个网站下载 µSpeech 4.1.1. 让后从 Arduino IDE 内选址你刚刚下载的文件或把下载的文件取消归档在你的arduino/libraries夹内。
你开始用µSpeech的时后要先把你的微控制器的麦克风调整。这是应为每一个麦克风和放大机有它自己的特点。从最基本的方面不同麦克风和放大机会发出不同的电压。你的arduino会把你的放大机的电压翻译到一个号码从0(0v)到1023(5v)。uSpeech会用这些来算一些东西。第一个东西是声音的力量是多大。所以,我在signal
类内加了这个成员:
int minVolume;
如果声音比int minVolume;
uSpeech会返回' '。 这是因为声音太小了,所以uSpeech不会处理其他东西。你可以用 debug_uspeech
来查你的麦克风的音量。你会看到如果你不说什么, debug_uspeech
会发出比较小的号码。如果在你麦克风前面说东西,你会看到 debug_uspeech
发出的号码都是比较大的。 int minVolume;
应该在那些大的号码和小的号码中间。例如说我没说什么东西 debug_uspeech
会发出500-900和我在麦克风面前说东西的时候 ```debug_uspeech`` `会发出1500-2000, 我就应该在我Arduino Sketch的前面写这些东西:
#include <uspeech.h>
signal voice(A0)//如果你是用其他的analog_in针脚,那就把A0改变整你自己的analog_in针脚。
void setup(){
voice.minVolume = 1200; //在900-1500的中间。
}
µSpeech可以检测六种音素:/f/,/s/,/e/,/sh/,/z/,/v/。 如果有其它的音素, signal.getPhoneme();
会返回'o'。signal.getPhoneme();
的算法会用一些阈值把音素分成对的团体。每一个 signal
对象内有这些成员:
int econstant; /*!< This is the threshold for /ee/, /i/, configure it yourself */
int aconstant; /*!< This is the threshold for /a/ /o/ /r/ /l/, configure it yourself */
int vconstant; /*!< This is the threshold for /z/ /v/ /w/, configure it yourself */
int shconstant; /*!< This is the threshold for /sh/ /ch/, above this everything else is regarded as /s/ */
如果声音的力量是比——大, uSpeech会算一个东西交"coeff"。"coeff"会代表你说的音素。如果你说/e/,"coeff" 会比 int econstant;
小,如果有别的音素“coeff”会比 int econstant;
大。你可以用debug_uspeech
来检查“coeff”。例如我说/e/的时候“coeff”是1-2和我说其他东西的时候“coeff”是2-3,int econstant;
应该是2。所以应该在void setup()
加这些东西:
#include <uspeech.h>
signal voice(A0)//如果你是用其他的analog_in针脚,那就把A0改变整你自己的analog_in针脚。
void setup(){
voice.minVolume = 1200; //在900-1500的中间。
//这些号码是你自己调整的。
voice.econstant = 2;
}
如果你想检测/sh/,/z/,/v/, /a/你要调整其他的成员。如果你把int shconstant;
调整好了,那就可以检测/sh/和/s/。调整上面说过的阈值是跟调整int econstant;
一样。如果你要调整int shconstant;
,用debug_uspeech
来检查“coeff”。你说/sh/的时候“coeff”会比一个号码小,如果你说/s/那“coeff”应该比这个号码大。你调整好了“coeff”以后,你的void setup()
应该像:
#include <uspeech.h>
signal voice(A0)//如果你是用其他的analog_in针脚,那就把A0改变整你自己的analog_in针脚。
void setup(){
voice.minVolume = 1200; //在900-1500的中间。
//这些数字是你自己调整的。
voice.econstant = 2;
voice.aconstant = 3;
voice.vconstant = 4;
voice.shconstant = 5;
}
如果要用为/f/做的算法,你要用debug_uspeech
来检查“f algorithm”。这是因为/f/的算法会用一个低通滤波器。 /f/的算法不会用“coeff”。你说/f/的时候debug_uspeech
会发出比较高的数字。 我说/f/的时候这些数字是在370-500内。我说其他的东西,这些号码是在400低下,所以:
#include <uspeech.h>
signal voice(A0)//如果你是用其他的analog_in针脚,那就把A0改变整你自己的analog_in针脚。
void setup(){
voice.minVolume = 1200; //在900-1500的中间。
//这些数字是你自己调整的。
voice.econstant = 2;
voice.aconstant = 3; //必须比voice.econstant大。
voice.vconstant = 4; //必须比voice.aconstant大。
voice.shconstant = 5; //必须比voice.vconstant大。
voice.fconstant = 400;
}
为了/f/的算法不是很正确,所以uspeech会把它关掉。如果你想把它开,你要在void setup()
在加一行 voice.f_enabled = true;
。现在你的void setup()
应该是这样的:
#include <uspeech.h>
signal voice(A0)//如果你是用其他的analog_in针脚,那就把A0改变整你自己的analog_in针脚。
void setup(){
voice.minVolume = 1200; //在900-1500的中间。
//这些数字是你自己调整的。
voice.econstant = 2;
voice.aconstant = 3;
voice.vconstant = 4;
voice.shconstant = 5;
voice.fconstant = 400;
voice.f_enabled = true;
}
这是一个小程序你可以用来检查好多东西。这个程序的源代码是在installation/examples
夹内。你开始用µSpeech的时候都要用debug_uspeech
来调整µSpeech。 你用debug_uspeech
的时候要从 Arduino IDE 内编译和上转到你的微控制器上,让后要开Arduino IDE的串行控制台。串行控制台上你会看到这些选项:
uSpeech debug tool--------
Press 'a' if you wish to calibrate/check the f algorithm
Press 'b' if you wish to calibrate/check the getPhoneme
Press 'c' if you wish to calibrate/check the volume of your microphone
Press 'd' if you wish to calibrate/check the coeff
用你的键盘来选你要用的东西。