$voise = null;
isBouyomi = localStorage.getItem("voice_bouyomi");
$voiseName = lang.lang_speech;
$voices = speechSynthesis.getVoices();
$synthes = new SpeechSynthesisUtterance();
$voise = $.grep($voices, function (n, i) { return n.name == $voiseName })[0];
$synthes.voice = $voise;                  // 音声の設定
localStorage.removeItem("voicebank");
speechSynthesis.cancel()
if (!localStorage.getItem("voice_vol")) {
    localStorage.setItem("voice_vol", 1)
}
voiceRate = localStorage.getItem("voice_speed");
$synthes.rate = voiceRate
voicePitch = localStorage.getItem("voice_pitch");
$synthes.pitch = voicePitch
voiceVol = localStorage.getItem("voice_vol");
$synthes.volume = voiceVol
function say(msgr) {
    msg = voiceParse(msgr);
    var voice = localStorage.getItem("voicebank");
    var obj = JSON.parse(voice);
    if (!obj) {
        var json = JSON.stringify([msg]);
        localStorage.setItem("voicebank", json);
    } else {
        obj.push([msg]);
        var json = JSON.stringify(obj);
        localStorage.setItem("voicebank", json);
    }

}
$repeat = setInterval(function () {
    if (!speechSynthesis.speaking) {
        var voice = localStorage.getItem("voicebank");
        if (voice) {
            var obj = JSON.parse(voice);
            if (obj[0]) {
                if (localStorage.getItem("voice_bouyomi")) {
                    var delim = "<bouyomi>";
                    var thisVoiceRate = voiceRate * 10 + 70
                    var thisVoicePitch = voicePitch * 50 + 70
                    var thisVoiceVol = voiceVol * 100
                    console.log(thisVoiceRate, thisVoicePitch, thisVoiceVol)
                    var command = 0x0001;
                    var type = 0;
                    var sends = "" + command + delim + thisVoiceRate + delim + thisVoicePitch + delim + thisVoiceVol + delim + type + delim + obj[0];
                    bouyomiConnect(sends)
                } else {
                    $synthes.text = obj[0];
                    speechSynthesis.speak($synthes);
                }

                obj.splice(0, 1);
                var json = JSON.stringify(obj);
                localStorage.setItem("voicebank", json);
            }
        }
    }
}, 300);
function voiceParse(msg) {
    msg = $.strip_tags(msg);
    msg = msg.replace(/#/g, "");
    msg = msg.replace(/'/g, "");
    msg = msg.replace(/"/g, "");
    msg = msg.replace(/https?:\/\/[a-zA-Z0-9./-@_=?%&-]+/g, "");
    return msg;
}
function voiceToggle(tlid) {
    var voiceck = localStorage.getItem("voice_" + tlid);
    if (voiceck) {
        localStorage.removeItem("voice_" + tlid);
        speechSynthesis.cancel()
        if (localStorage.getItem("voice_bouyomi")) {
            var command = 0x0010;
            var sends = "" + command;
            bouyomiConnect(sends)
        }
        $("#sta-voice-" + tlid).text("Off");
        $("#sta-voice-" + tlid).css("color", 'red');
        parseColumn(tlid);
    } else {
        localStorage.setItem("voice_" + tlid, "true");
        $("#sta-voice-" + tlid).text("On");
        $("#sta-voice-" + tlid).css("color", '#009688');
        parseColumn(tlid);
    }
}
function voiceCheck(tlid) {
    var voiceck = localStorage.getItem("voice_" + tlid);
    if (voiceck) {
        $("#sta-voice-" + tlid).text("On");
        $("#sta-voice-" + tlid).css("color", '#009688');
    } else {
        $("#sta-voice-" + tlid).text("Off");
        $("#sta-voice-" + tlid).css("color", 'red');
    }
}
function voicePlay() {
    if (speechSynthesis.speaking) {
        speechSynthesis.cancel()
    } else {
        var text = $("#voicetxt").val();
        var rate = $("#voicespeed").val();
        var pitch = $("#voicepitch").val()
        var vol = $("#voicevol").val()
        if (localStorage.getItem("voice_bouyomi")) {
            var delim = "<bouyomi>";
            rate = rate * 1 + 70
            pitch = pitch * 1 + 70
            var command = 0x0001; // コマンドです。0x0001.読み上げ/0x0010.ポーズ/0x0020.再開/0x0030.スキップ
            /*var speed = 100; // 速度50-200。-1を指定すると本体設定
            var pitch = 100; // ピッチ50-200。-1を指定すると本体設定
            var volume = 100; // ボリューム0-100。-1を指定すると本体設定*/
            var type = 0; // 声質(0.本体設定/1.女性1/2.女性2/3.男性1/4.男性2/5.中性/6.ロボット/7.機械1/8.機械2)
            var sends = "" + command + delim + rate + delim + pitch + delim + vol + delim + type + delim + text;
            bouyomiConnect(sends)
        } else {
            $synthes.text = text
            $synthes.rate = rate / 10
            $synthes.pitch = pitch / 50
            $synthes.volume = vol / 100;
            speechSynthesis.speak($synthes);
        }
    }
}

function voiceSettings() {
    var awk = $("[name=bym]:checked").val();
    if (awk == "yes") {
        localStorage.setItem("voice_bouyomi", "yes");
        M.toast({ html: "Bouyomi Chan connection requires WebSocket Plugin", displayLength: 3000 })
    } else {
        localStorage.removeItem("voice_bouyomi");
    }
    localStorage.setItem("voice_speed", $("#voicespeed").val() / 10);
    localStorage.setItem("voice_pitch", $("#voicepitch").val() / 50);
    localStorage.setItem("voice_vol", $("#voicevol").val() / 100);
    M.toast({ html: lang.lang_speech_refresh, displayLength: 3000 })
}
function voiceSettingLoad() {
    var flag = localStorage.getItem("voice_bouyomi");
    if (flag) {
        $("#bym_yes").prop("checked", true);
    } else {
        $("#bym_no").prop("checked", true);
    }
    var speed = localStorage.getItem("voice_speed");
    var pitch = localStorage.getItem("voice_pitch");
    var vol = localStorage.getItem("voice_vol");
    if (speed) {
        $("#voicespeed").val(speed * 10);
        $("#voicespeedVal").text(speed * 10);
    }
    if (pitch) {
        $("#voicepitch").val(pitch * 50);
        $("#voicepitchVal").text(pitch * 50);
    }
    if (vol) {
        $("#voicevol").val(vol * 100);
        $("#voicevolVal").text(vol * 100);
    }
}
function bouyomiConnect(sends) {
    var socket = new WebSocket('ws://localhost:50002/');
    socket.onopen = function () {
        socket.send(sends);
    }

}