cvoicecontrol project overview
cvoicecontrol original home page http://www.kiecza.net/daniel/linux/index.html
- cvoicecontrol maps speech to unix commands
- you say 'star trek' and cvoicecontrol executes the defined unix command 'vlc /home/me/startrek/*.avi'
- as of 5/2010, no alternative package exists to map custom speech to custom unix commands
- gnome-voice-control hard-codes the speech commands as well as the unix commands.
- i.e., with gnome-voice-control, changing 'star trek' to 'make it so' requires a src change
- cvoicecontrol defines the map (speech, unix-command) in configuration, and is specifically designed to update the map quickly and easily (cool!)
cvoicecontrol is currently not in service...
- Why cvoicecontrol is not used widely as of 5/2010:
- cvoicecontrol was written in 2000 by Daniel Kiecza
- bugs/problems have blocked potential users of cvoicecontrol for years
- looks like no one has used it since at least 2007
Overview of cvoicecontrol architecture
- cvoicecontrol compiles three binaries:
- microphone_config - one-time microphone setup, outputs config file
- model_editor - manager of (speech, unix command) maps, each map stored in distinct *.cvc file
- cvoicecontrol - actual voice control daemon, loads a single *.cvc file, usage ./cvoicecontrol my-voice-commands.cvc
- voice recognition works as follows:
- model_editor stores four or more samples of your voice for the same voice command
- i.e. to have "make it so" launch your startrek dvd, you will record "make it so" four times in model_editor
- cvoicecontrol matches utterances with the voice samples you recorded in model_editor, and then executes the associated unix command
- the whole voice recognition process relies on the microphone config file generated by microphone_config
- model_editor stores four or more samples of your voice for the same voice command
Problems preventing release of cvoicecontrol-0.9alpha
- bug in microphone_config binary causes hard crash:
- after finishing configuration, microphone_config writes a config file out. this fails.
- in microphone_config.c:1155, the implementation constructing a valid path, "$HOME/.cvoiceconfig/config", to write out the file, causes a hard crash
- temporary fix: comment this code out and write the config file out to /tmp
- because microphone_config is run once-per-microphone, moving the config file manually from /tmp to "$HOME/.cvoiceconfig/" is ok-for-now
- depends on ncurses4. Ubuntu 10.04 ships with ncurses5
- libncurses4 and libncurses4-dev install ok with libncurses5 present
possible issue with symlink, that may interfere with ncurses5: /usr/lib/libncurses.so -> /lib/libncurses.so.4
- microphone_config and model_editor binaries, both which use libncurses, work in the rxvt terminal. xterm and Eterm do not work at all.
Happy Path to building and getting cvoicecontrol working
- !!! NOTE: this does not include the aforementioned changes to microphone_config.c, therefore microphone_config will crash when it attempts to write config file !!!
- building:
- install libncurses4 and libncurses4-dev (available from http debian package repository)
- ./configure
- edit cvoicecontrol-0.9alpha/cvoicecontrol/Makefile:
- note, this is *not* the root Makefile located at cvoicecontrol-0.9alpha/Makefile
- search LIBNCURSES,
old < LIBNCURSES =
new > LIBNCURSES = -lncurses
- make
- all three binaries should now be located in cvoicecontrol-0.9alpha/cvoicecontrol/
- voice commands setup:
see documentation for all stages of this process at the original project website http://www.kiecza.net/daniel/linux/index.html
- install rxvt
- run rxvt, run microphone_config
- proceed through microphone configuration
- Select Audio Device, /dev/dsp1 is generally your usb headset
- Write Configuration, this step will fail and hard crash unless you make the changes to microphone_config.c mentioned above
- exit microphone_config, mv the config file to $HOME/.cvoiceconfig/config
- run model_editor, see original documentation mentioned above
- in model_editor, Load/Save Speaker Model, be sure to include the .cvc extension in the file name
- running the cvoicecontrol daemon:
- cvoicecontrol your-voice-map.cvc
- at this point, mine "just worked". I spoke "play music" and my vlc unix command was executed. Note I had to speak very loudly because my generated microphone_config file tells cvoicecontrol to wait until I speak loudly :-P.
Runtime Gotchas
if your unix command does not terminate immediately, i.e. if you launch vlc, you must postfix the fork & ampersand on the unix command when specifying it in model_editor. Failure to do this will cause cvoicecontrol to wait for the child process to terminate before continuing to process voice commands.
i.e. my voice command map contains ("play music", "/home/me/bin/music-start&"), and music-start is a script which launches vlc
- the speach matching is pretty liberal, and may (especially during initial configuration) accidentally execute the incorrect unix command. Only use transient read-only unix commands with cvoicecontrol (no rm : - ).
model_editor requires absolute paths for unix commands. ~/bin/flashing-lights -> /home/me/bin/flashing-lights