這是 Tavis Rudd 在 2013 年 Python 大會上的演講,展示瞭如何使用語音進行程式設計。他在手部肌肉麻木後無法順利敲鍵盤,於是利用語音識別工具來寫程式碼。一開始很慢,後來熟練後,速度比敲鍵盤還快。
提要
“兩年前我開發一個叫Emacs Pinkie的專案時重複性勞損(Repetitive Strain Injury, RSI)嚴重,結果我的手變得發麻,我不能再打字或者工作了。絕望之中,我嘗試用語言識別。起初我寫程式碼慢得要命,但因為不能打字,我只好堅持下來。經過幾個月的詞彙調整,還有磕巴地用Python和Emacs Lisp程式設計,我做出了這個能讓我用語音程式設計的系統,比我曾經用手寫更快更有效率。
在一個快放了的實況演示裡,我會用Python建立一個小系統,並且加了點其他的語言作為額外贈送,然後不碰鍵盤將它部署。演示裡的神會在預先安排下露面。我希望能說服你,語音識別不再只是殘疾人的幫手,不再只是做平凡無奇的事情。現在它成為一種高效的工具,能造福所有程式設計師。”
Tavis Rudd 的工作臺(伯樂線上配圖)
[youku id=”XNTk2MTAyMjQ0″]
第一個演示,用語音編寫 Emacs Lisp 程式碼,從 9:00 開始。
如果你缺乏耐心,這裡列下了視訊概要:
- 他使用微軟Windows下的 Dragon NaturallySpeaking 語言識別軟體。(他說他沒能夠讓Linux的 CMU Sphnix 工作起來。)(儘管他使用Mac,但顯然在用Virtual Box跑WIndows。)
- Dragon軟體是用Python開發的。他改了一下,用了Christo Butcher寫的Python Speech識別擴充套件庫DragonFly。見 https://pypi.python.org/pypi/dragonfly/0.6.5。所以他現在可以定義自己的語音命令。(輸入些什麼,或者移動滑鼠到程式碼的某個位置,或者鍵盤快捷鍵,切換應用程式等等。)
- 他建立了許多簡短的特殊/唯一的母音表示式來做不同的事情。例如插入換行,切換Emacs緩衝區,啟動終端等。所以當他在語音程式設計時,你會聽到“twip, chirp, slap, derp / 踢,削,拉,打……”,很有意思。
- 他做了大概2千多種命令。
- 他說他系統做的所有事情都是在Vim或者Emacs裡。(在他的演示中,用的好像都是Emacs,作為做其他操作的介面。頻繁使用了Emacs的各種特性,包括模板,自動完成,Emacs裡的shell。)
- 他演示了用它來寫Emacs Lisp,Python程式,在Emacs,終端下工作。如此高效,比一般程式設計師用手在鍵盤上寫都快。
- 他花了3到6個月來習慣這個系統。
- 他的重複性勞損(Repetitive Strain Injury RSI)目前已經完全康復,但他說他仍然在用語音程式設計,大概佔了40%到60%的時間。
- 他說他會在4個月內釋出程式碼。關注他的twitter或github。https://github.com/tavisrudd,https://twitter.com/tavisrudd
他推薦的一款麥克風是 Audix OM-7 Microphone,比較貴,198美元。
我在2010年用過幾個月微軟的語音識別系統。微軟Windows 7自帶。對於正常的說話很好,但是不太可能用來程式設計(即裝即用)。在普通的Windows應用程式上工作得很好,尤其是來自微軟的應用例如Office,但是在Emacs上行不通。
另外一個有趣的語音技術,見《英譯漢的實時機器語音翻譯》。