latest log

酩酊状態で書いたエンジニアポエムです。酩酊状態で読んでください。

Use SpeechSynthesis and SpeechRecognition on Browser

Web Speech API を使えば、ブラウザ上で音声合成音声認識が出来る時代らしいです。

SafariChrome音声合成が利用できます。Chrome ならさらに音声認識も利用できます。

手軽に利用できるように、WebModule ベースの Speech.js Module を作ってみました。

iOS Safari Chrome for Android PC Chrome Electron NW.js
音声合成 OK OK OK OK OK
音声認識 OK OK OK OK

こんな感じで使います (ボイスコマンド部分は3分で実装した感じのアレなコードです)

var speech = new Speech().load({ name: /Kyoko/i, lang: /ja/i }); // ボイスのロード
var recognizer = new Speech().createRecognizer(); // 音声認識

// この辺は適当に
var voiceCommandMap = {
    "clear":    _clearBuffer,
    "stop":     _stopRecognition,
    "クリア":   _clearBuffer,
    "ストップ": _stopRecognition,
    "終了":     _stopRecognition,
    "しゅうりょう": _stopRecognition,
};

function _startRecognition() {
    console.info("start");
    if (speech.ready) { speech.say("お話しください"); }

    recognizer.start(function(event) {
        switch (event.type) {
        case "result":
            if (this.ended) {
                console.log("ok: ", this.result.join(","));
                _processVoiceCommand(this.result[this.result.length - 1].trim(), voiceCommandMap);
                alert(this.result.join(","));
            } else {
                console.log("...", this.buffer.join(","));
            }
            break;
        }
    });
}

function _processVoiceCommand(command, voiceCommandMap) {
    for (var keyword in voiceCommandMap) {
        if (keyword === command) {
            var fn = voiceCommandMap[keyword];
            if (fn) {
                fn();
            }
        }
    }
}

function _stopRecognition() {
    if (speech.ready) { speech.say("音声認識を終了しました"); }
    recognizer.stop();
    console.info("stopped");
}

function _clearBuffer() {
    if (speech.ready) { speech.say("バッファをクリアしました"); }
    recognizer.clear();
    console.info("buffer cleared");
}

夢が広がりますね。