104 lines
3.3 KiB
JavaScript
104 lines
3.3 KiB
JavaScript
|
$voise = null;
|
||
|
$voiseName = 'Google 日本語';
|
||
|
$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()
|
||
|
$synthes.rate=localStorage.getItem("voice_speed");
|
||
|
$synthes.pitch=localStorage.getItem("voice_pitch");
|
||
|
$synthes.volume=localStorage.getItem("voice_vol");
|
||
|
function say(msg){
|
||
|
msg=voiceParse(msg);
|
||
|
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]){
|
||
|
$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 = 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()
|
||
|
$("#sta-voice-" + tlid).text("Off");
|
||
|
$("#sta-voice-" + tlid).css("color",'red');
|
||
|
parseColumn();
|
||
|
} else {
|
||
|
localStorage.setItem("voice_" + tlid, "true");
|
||
|
$("#sta-voice-" + tlid).text("On");
|
||
|
$("#sta-voice-" + tlid).css("color",'#009688');
|
||
|
parseColumn();
|
||
|
}
|
||
|
}
|
||
|
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{
|
||
|
$synthes.text = $("#voicetxt").val();
|
||
|
$synthes.rate = $("#voicespeed").val()/10;
|
||
|
$synthes.pitch = $("#voicepitch").val()/50;
|
||
|
$synthes.volume = $("#voicevol").val()/100;
|
||
|
speechSynthesis.speak($synthes);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function voiceSettings(){
|
||
|
localStorage.setItem("voice_speed", $("#voicespeed").val()/10);
|
||
|
localStorage.setItem("voice_pitch", $("#voicepitch").val()/50);
|
||
|
localStorage.setItem("voice_vol", $("#voicevol").val()/100);
|
||
|
Materialize.toast("音声読み上げ設定を更新しました。", 3000);
|
||
|
}
|
||
|
function voiceSettingLoad(){
|
||
|
var speed=localStorage.getItem("voice_speed");
|
||
|
var pitch=localStorage.getItem("voice_pitch");
|
||
|
var vol=localStorage.getItem("voice_vol");
|
||
|
if(speed){
|
||
|
$("#voicespeed").val(speed*10);
|
||
|
}
|
||
|
if(pitch){
|
||
|
$("#voicepitch").val(pitch*50);
|
||
|
}
|
||
|
if(vol){
|
||
|
$("#voicevol").val(vol*100);
|
||
|
}
|
||
|
}
|