Web音声合成API “vds” を使う

vds はWebアプリケーションから使える音声合成APIです。

チュートリアルはこちら。

無償版ではコールバック関数が用意されていませんが、isSpeaking というメソッドを使って同等のことができます。
このメソッドは音声出力中に 1、停止中には 0 を返します。ただし VoiceDelivery.speak() を呼んだあと、実際に読み上げが始まるまでには少し間があります。
テキストを読み上げてコールバック関数を呼ぶプログラムは次のようになります。

var vdsp;
var vds;

window.onload = function() {
    try {
        // vdsを初期化
        vdsp = new VoiceDeliveryPlayer("vdsp");
        vds = new VoiceDelivery(vdsp, "vds");
        
        // 声の種類を選択
        vds.setCast("KeikoJPf");
        
        // しゃべらす
        vds_speak("こんにちは", function() {
            alert("再生完了!");
        });
    }
    catch(e) {
        alert("vdsの調子がわるいみたいです");
        vds = vdsp = null;
    }
};

function vds_speak(text, callback, thisObject) {
    if (!vds || !vdsp) {
        return false;
    }
    
    vds.speak(text);
    switch (vds.getServerError()) {
        case -301:
            alert("残念ながら、1ヶ月あたりの再生文字数が規定数を超えました。");
            return false;
        case -501:
            alert("ページをリロードして、もう一度再生ボタンを押してみてください。");
            return false;
    }
    
    var prevState = 0;
    var tid = setInterval(function() {
        var state = vdsp.isSpeaking();
        if (prevState == 1 && state == 0) {
            clearInterval(tid);
            callback && callback.apply(thisObject || this);
        }
        prevState = state;
    }, 50);
    
    return true;
}