Greasy Fork is available in English.

Typing Tube MOD official

try to take over the world!

Version vom 26.05.2020. Aktuellste Version

    // ==UserScript==

//タイピングワード表示の処理高速化のため

//playheadupdate()、keydownfunc(event)、keypressfunc_kana()、keydownfunc_kana()
//hiraganaToRomaArray()、checkNextChar()、update_status()

//以上の7つの関数を書き換えています。書き換えているコード内に解説を記載しています
//このスクリプトの適応時は書き換えた関数が発動しているので注意をお願いします


// @name         Typing Tube MOD official
// @namespace    https://typing-tube.net/
// @version      11.5.6
// @description  try to take over the world!
// @author       Toshi
// @match        https://typing-tube.net/movie/show/*?test=test
// @match        https://typing-tube.net/movie/typing/*?test=test
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @noframes
// @run-at document-end


// ==/UserScript==
var next_kpm = 0;//次のラインの必要kpm
var line_remaining_time = 0;//ラインの残り時間
let latency = (0).toFixed(3)
var line_playing_time = 0;//現在ラインの入力時間(ライン切替時0になる)
var past_playing_time = 0;//過去のラインの合計入力時間
var playing_time_current = 0;//入力時間(累計)
var movie_time;
var movie_mm;
var movie_ss;
var line_typingspeed = 0;//ラインの打鍵速度
var line_typingspeed_rkpm = 0;//初速を無視したライン打鍵速度
var typing_speed = 0;//累計打鍵速度

var clear_percent=0
var clear_gauge1=0
var clear_gauge2=0
var clear_linecounter=0
var difficulty_average = 0;
var difficulty_average_kana = 0;
var difficulty = []
var difficulty_kana = []
var ranking_array = [];
var escape_word_length = "";
var total_notes = 0;
var total_notes_kana_mode = 0;
var kana_score_per_char = 0;

var latencylog = ["0"]
var kpmlog=["0"]
var rkpmlog=["0"]
var nokorimoji_log=["0"]
var inputline_counter=[]
var misstyping_count_save = 0
var line_misscount =["0"]
var initial_diff=0.0
var initial_speed=[]
var initial_speed1=1.0
var initial_speed2=1.0
var initial_speed3=1.0
var initial_speed4=1.0
var initial_speed5=1.0

let miss_limit_color="gold"
let line_counter;
let logcount =0
let count_save = -1;//ライン切替時、ライン数を取得する。フラグ用
let typing_count_save = 0;//ライン切替時、現在の打鍵数を取得する
let ending = false;
let game_clear = false
let practice_failure=false
let clear_sound_flag = false;
let combo100 = false;
let ranking = false;
let latency_flag = false
let countdown_anime = false//カウントダウンアニメのフラグ

 $(document.head).append(`<style>
.combo_animated {
	animation-duration: 0.6s;
	animation-fill-mode: both;
}


@keyframes combo_anime {
	0% {
		transform:scale(1.1,1.2);
	} 2% {
		transform:scale(1.1,1.3);
	} 9% {
		transform:scale(1,1);
	}
}

#combo_anime {
	animation-name: combo_anime;
}

.count_animated {
	-webkit-animation-duration: 1s;
	animation-duration: 1s;
	-webkit-animation-fill-mode: both;
	animation-fill-mode: both;
}


@keyframes countdown_animation {
	from {
		opacity: 1;
	} to {
		opacity: 0.0;
	} 10% {
		opacity: 0.9;
	} 20% {
		opacity: 0.8;
	} 30% {
		opacity: 0.7;
	} 40% {
		opacity: 0.6;
	} 50% {
		opacity: 0.5;
	} 60% {
		opacity: 0.4;
	} 70% {
		opacity: 0.3;
	} 80% {
		opacity: 0.2;
	} 90% {

		opacity: 0.1;
	}
}

.countdown_animation {
	-webkit-animation-name: countdown_animation;
	animation-name: countdown_animation;
	-webkit-transform-origin: center center;
	transform-origin: center center;
}

/*タブのスタイル*/
.tab_item {
  width: calc(100%/4);
  height: 30px;
  line-height: 30px;

  font-size: 16px;
  text-align: center;
  color: #565656;
  display: block;
  float: left;
  text-align: center;
  transition: all 0.2s ease;
margin:0px!important;
    border-left: 1px solid #fff;
    border-top: 1px solid #fff;

border-bottom:2px solid #aaa;

}
.colorChooser {

    top: -130px;
zoom:80%;
}
.tab_item:hover{
    border-left: 1px solid #ffcd05!important;
    border-top: 1px solid #ffcd05!important;

  color: #ffcd05!important;
}
[for="etc"]{
    border-right: 1px solid #fff;
}
[for="etc"]:hover{
    border-right: 1px solid #ffcd05!important;

}
[for="all"]:hover~[for="design"],
[for="design"]:hover~[for="playcolor"],
[for="playcolor"]:hover~[for="etc"],
[for="etc"]:hover~.solid
{
    border-left: 1px solid #ffcd05!important;

}
.tab_content_description{
border-bottom:1px solid #fff;
border-left:1px solid #fff;
border-right:1px solid #fff;
}
.tab_content_description h6{
margin-left: 10px;
}
.tab_content_description label {
margin-left: 10px;
}
.tab_content_description label input {
margin-right: 5px;
margin-left: 5px;
}
form#mod_setting p {
    margin-bottom: 0;
}
/*ラジオボタンを全て消す*/
input[name="tab_item"] {
  display: none;
}

/*タブ切り替えの中身のスタイル*/
.tab_content {
  display: none;
  clear: both;

}

.tab_content h6{
margin-bottom:0;
padding-top: 10px;
margin-right: 10px;
}.tab_content h6:nth-child(n+5){
border-top-style: inset;
}

/*選択されているタブのコンテンツのみを表示*/
#all:checked ~ #all_content,
#design:checked ~ #design_content,
#playcolor:checked ~ #playcolor_content,
#etc:checked ~ #etc_content {
  display: block;
}

/*選択されているタブのスタイルを変える*/
input:checked + .tab_item {
border-bottom:hidden;

  color: #fff!important;
}
#modal-overlay{
z-index:888;display:none;position:fixed;top:0;left:0;width:100%;height:120%;
}
#mod_setting .btn{
padding-top:0px;
padding-bottom:0px;
}
</style>`);
//設定を追加
$('<form id="mod_setting" style="color:#fff; z-index:9999;display:none;position:fixed;word-break: break-all;width:580px;max-height: 900px;background-color: rgba(0,0,0,0.96);">'+
'<input id="all" type="radio" name="tab_item" checked><label class="tab_item" for="all">プレイ設定</label><input id="design" type="radio" name="tab_item"><label class="tab_item" for="design">エフェクト設定</label><input id="playcolor" type="radio" name="tab_item"><label class="tab_item" for="playcolor">配色設定</label><input id="etc" type="radio" name="tab_item"><label class="tab_item" for="etc">ステータス設定</label>'+
'<div class="tab_content" id="all_content"><div class="tab_content_description"><p class="c-txtsp">'+
'<h6>入力モード設定</h6><label title="かな表示モードは大文字ローマ字。ローマ字表示モードはかな表示が表示されます。"><input type="checkbox" name=chk_sample value="sub"checked>ローマ字orひらがなも表示</input></label><br><label title="2文字以上ある英数字・記号を先頭の文字色とアンダーラインでハイライトさせます。"><input type="checkbox" name=chk_sample value="eng_highlight">英数字をハイライト(かな表示のみ)</input></label><br><label title="タイピングワードが一行に収まるように表示され、指定した文字数入力するとワードがスクロールされていきます。"><input type="checkbox" name=chk_sample value="letter_scroll">タイピングワードをスクロール表示</input></label><br><span class="scroll_amount"><label><input type="number"name="letter_scroll_kana"min="0" max="30">かな表示スクロール数</input></label><label><input type="number"name="letter_scroll_roma"min="0" max="30">ローマ字表示スクロール数</input></label></span><label title="歌詞があっても入力が不要なラインだった場合は[次の歌詞]部に歌詞が表示されなくなります。装飾譜面などに有効です。"><input type="checkbox" name=chk_sample value="next_lyric_hidden">入力しない歌詞は[次の歌詞]には表示しない</input></label><label title="促音→「った」を[ltuta.xtuta]。拗音→「しゃ」を[silya,sixya]。等の手間がかかる入力パターンを無効化します。少ない打鍵数で入力したい方におすすめです。"><input type="checkbox" value="mizumasi">「促音・拗音」を分けて入力するパターンを無効化</label><label title="全角チルダ記号「~」を全角長音記号「ー」に置き換えます。ページ更新後に有効になります"><input type="checkbox" value="chiruda_chouoxn" checked>「~」記号を「ー」として扱う</label>'+
'<h6>制限モード</h6><label title="次の歌詞とライン経過時間を隠します。いきなり現れた文字を瞬時に入力するスキルを鍛えることができます。"><input type="checkbox" name=chk_sample value="line_hidden">初速測定モード</input></label><br><label title="正確率に制限をかけるモードです。指定した正確率より下回ると動画が強制終了します。タイピングの正確性を上げる目標設定です。"><input type="checkbox" name=chk_sample value="perfect_mode">ミス制限モード</input></label><label class="miss_limit">目標正確率<input type="number"name="miss_limit" value=95 min="0" max="100">%</input><label title="目標正確率を下回った瞬間にゲームオーバーになります。玄人向け"><input type="radio" name=miss_limit_mode value="keep_corrent">正確率を維持</input></label><label title="目標正確率を達成する為のライフがstatusに表示されます。タイピングワードを逃す程ライフが減り、1ミスすると-1点されます。ライフがマイナスになると、目標正確率は達成不可能になりゲームオーバーになります。"><input type="radio" name=miss_limit_mode value="life_corrent" checked>ライフ制</input></label><label title="ゲームオーバーすると効果音が鳴るようになります。"><input type="checkbox" name=chk_sample value="gameover_sound" checked>ゲームオーバー音</input></label><label><input type="number"name="effect_volume_gameover"min="0" max="100"></input></label></label>'+
'<h6>効果音・音量</h6><label title="正解打鍵をした時に効果音がなるようになります。"><input type="checkbox" name=chk_sample value="type_sound">打鍵音</input></label><label><input type="number"name="effect_volume_type"min="0" max="100"></input></label><label title="ミス打鍵をした時に効果音がなるようになります。"><input type="checkbox" name=chk_sample value="miss_sound">ミス音</input></label><label><input type="number"name="effect_volume_miss"min="0" max="100"></input></label><br><label title="ライン中のタイピングワードをすべて入力した時に効果音がなるようになります。"><input type="checkbox" name=chk_sample value="clear_sound">クリア音</input></label><label><input type="number"name="effect_volume_clear"min="0" max="100"></input></label><label title="100コンボ以上コンボが続いている時にミスをすると、効果音が鳴るようになります"><input type="checkbox" name=chk_sample value="combo_break_sound">100コンボ以上のミス音</input></label><label><input type="number"name="effect_volume_combo_break"min="0" max="100"></input></label><br><label title="動画音量に合わせて効果音音量も変更されます。無効にすると効果音毎で個別に音量指定ができます。"><input type="checkbox" name=chk_sample value="Interlocking_volume"checked>曲音量と効果音音量を連動</input></label>'+
'<h6>打鍵速度表示</h6><label title="打鍵速度の表記を変更します。打/秒は1秒間に入力できる正解打鍵数を表します。"><input type="radio" name=chk_sample value="sec"checked>打/秒</input></label><label title="打鍵速度の表記を変更します。kpmは1分間に入力できる正解打鍵数を表します。"><input type="radio" name=chk_sample value="kpm">kpm</input></label>'+
'<br></p></div></div>'+
'<div class="tab_content" id="design_content"><div class="tab_content_description"><p class="c-txtsp">'+
'<h6>エフェクト設定</h6><label title="ミスをした文字の上に「・」マークが表示されます。"><input type="checkbox" name=chk_sample value="miss_on"checked>ミスエフェクト</label><label><input class="color" value="#FF3554" name="miss_color">色で表示</label><br><label title="3・2・1・GO!のカウントダウンが表示されます。間奏中にも歌詞がある場合は表示されません。"><input type="checkbox" name=chk_sample value="anime_count" checked>間奏終了前にカウントダウン</label><label><input class="color" value="rgba(255,255,255,0.9)" name="countdown_color">色で表示</label><label title="カウントダウンが秒数ごとにフィードアウトされるようになります。"><input type="checkbox" name=chk_sample value="count_animation" checked>アニメーション</label><br><label title="スキップ可能な時に「Type ~ key to skip. ⏩」と表示されるようになります。表示されているときにスペースキー又はEnterキーを押すとライン切り替わり1秒前にスキップします。"><input type="checkbox" name=chk_sample value="skip_guide" checked>任意スキップ</label><label><input class="color" value="rgba(255,255,255,0.53)" name="skipguide_color">色で表示</label><label title="スキップ機能で使用するキーをスペースキーにします。"><input type="radio" name=skip_button value="skip_space" checked>スペースキー</label><label title="スキップ機能で使用するキーをEnterキーにします。" style="margin-left:0;"><input type="radio" name=skip_button value="skip_enter">Enterキー</label><br><label title="タイピングワードの上部に現在コンボを表示します。この機能を有効にし、ステータス設定のコンボ表示をOFFにするのもおすすめです"><input type="checkbox" name=chk_sample value="combo_display">現在コンボを表示</label><label><input class="color" value="#FFFFFF" name="combo_color">色で表示</label><label><select name="combo_position"><option value="center">中央</option><option value="left">左寄せ</option></select></label><label title="コンボアニメーションを有効にすると、タイピングワードの文字色を変更した際にワードの文字が細くなることがあります">※<input type="checkbox" name=chk_sample value="combo_animation">アニメーション</label><br><label title="動画下にラインクリア率ゲージを表示します。達成したクリア率に応じた色のトロフィーも表示されます。"><input type="checkbox" name=chk_sample value="gauge" >ラインクリア率ゲージを表示(デモ)</input></label><br><button style="margin:10px" type="button" onclick="effectcolor_reset()">エフェクトの色をリセット</button>'+
'<h6>フォント設定</h6><label title="タイピングワード部分のフォントを游ゴシックフォントに変更します。游ゴシックフォントがPCにインストールされていない場合は変更されません。"><input type="checkbox" name=chk_sample value="font_Gothic"checked>游ゴシックフォントを使用</input></label><label title="タイピングワードのフォントを太く表示します。この設定は好みが分かれると思います。"><input type="checkbox" name=chk_sample value="bolding"checked>フォントを太く表示</input></label><label title="タイピングワードの文字間隔を広くします。少し見やすくなる効果が期待できます。"><input type="checkbox" name=chk_sample value="character_spacing">入力歌詞の文字間隔を広げる</input></label><br>'+
'<label><input type="number"name="font_size_kana"min="1" max="25" step="0.5">かな表示フォントサイズ</input></label><label><input type="number"name="font_size_roma"min="0" max="25" step="0.5">ローマ字表示フォントサイズ</input></label>'+
'<br><h6>歌詞の色</h6><label>入力後<input class="color" value="#0099CC" name="correctword_color"></label><label>ラインクリア<input class="color" value="#1eff52" name="lineclear_color"></label><label>先頭の文字<input class="color" value="#FFFFFF" name="first_color"></label><label>未入力<input class="color" value="#FFFFFF" name="word_color"></label><br><label>歌詞<input class="color" value="#FFFFFF" name="lyric_color"></label><label>次の歌詞<input class="color" value="rgba(255,255,255,.7)" name="next_lyrics_color"></label>'+
'<br><select style="margin:10px" name="color_theme"><option value="プリセット">プリセットから色変更</option><option value="デフォルト">デフォルト</option><option value="先頭の文字を赤く強調">先頭の文字を赤く強調</option></select>'+
'<br></p></div></div>'+
'<div class="tab_content" id="playcolor_content"><div class="tab_content_description"><p class="c-txtsp">'+
'<h6>背景カラー</h6><label><input class="color" value="transparent" name="playarea_color"></label><label><input type="number" name="playarea_radius" min="0" max="30" value="0"step="0.5">px</input>縁を丸める</label><br>'+
'<label>縁取り線<select name="futidori_theme"><option value="none">なし</option><option value="solid">1本線</option><option value="double">2本線</option><option value="groove">立体線(窪む)</option><option value="ridge">立体線(隆起)</option><option value="outset">立体線(影)</option><option value="dashed">破線</option><option value="dotted">点線</option></select></label><label>縁の色<input class="color" value="#FFFFFF" name="futidori_color"></label><label>太さ<select name="futidori_border-width"><option value="medium">普通</option><option value="thin">細い</option><option value="thick">太い</option></select></label><br><button type="button" onclick="playareacolor_reset()" class="m-3">背景カラーをリセット</button><br>'+
'<h6>ラインカラー</h6><label>ラインゲージ<input class="color" value="#17a2b8" name="line_color"></label><label>empty<input class="color" value="#f5f5f5" name="line_empty_color"></label><br><label>ラインゲージ2<input class="color" value="#ffc107" name="line_color2"></label><label>empty<input class="color" value="#f5f5f5" name="line_empty_color2"></label><br><button type="button" onclick="linecolor_reset()" class="m-3">ラインカラーをリセット</button>'+
'<h6>ステータス/コントロール文字色</h6><label>ステータス<input class="color" value="#FFFFFF" name="status_color"></label><label>自分の色<input class="color" value="#20c997" name="me_color"></label><br><label>コントロール<input class="color" value="rgba(255,255,255,.85);" name="control_color"></label><br><button type="button" onclick="subtextcolor_reset()" class="m-3">ステータス/コントロール文字色をリセット</button>'+
'<br></p></div></div>'+
'<div class="tab_content" id="etc_content"><div class="tab_content_description"><p class="c-txtsp">'+
'<h6>初期値設定</h6><label title="プレイ中に変更できる時間調整の初期値を変更します。打ち始めのタイミングが合わないときは、+0.1~+0.2程タイミングを早めるのもおすすめです">時間調整オフセット<span class="btn btn-link" title="タイミングが遅くなります" style="cursor: pointer"onclick="initial_diff_minus()">-</span><span id="initial_diff">'+initial_diff+'</span><span class="btn btn-link" title="タイミングが早くなります" style="cursor: pointer"onclick="initial_diff_plus()">+</span></label><button type="button" onclick="initial_diff_reset()">初期値に戻す</button>'+
'<br><label title="プレイ開始前に決める挑戦速度の初期値を変更します。この値を変更するとLv1の挑戦速度が変更されます。">Lv1の挑戦速度<span class="btn btn-link" title="Lv1の動画が遅くなります" style="cursor: pointer"onclick="initial_speed1_down()">-</span><span id="initial_speed1">'+initial_speed1+'</span><span class="btn btn-link" title="Lv1の動画が速くなります" style="cursor: pointer"onclick="initial_speed1_up()">+</span></label>'+
'<br><label title="プレイ開始前に決める挑戦速度の初期値を変更します。この値を変更するとLv2の挑戦速度が変更されます。">Lv2の挑戦速度<span class="btn btn-link" title="Lv2の動画が遅くなります" style="cursor: pointer"onclick="initial_speed2_down()">-</span><span id="initial_speed2">'+initial_speed2+'</span><span class="btn btn-link" title="Lv2の動画が速くなります" style="cursor: pointer"onclick="initial_speed2_up()">+</span></label>'+
'<br><label title="プレイ開始前に決める挑戦速度の初期値を変更します。この値を変更するとLv3の挑戦速度が変更されます。">Lv3の挑戦速度<span class="btn btn-link" title="Lv3の動画が遅くなります" style="cursor: pointer"onclick="initial_speed3_down()">-</span><span id="initial_speed3">'+initial_speed3+'</span><span class="btn btn-link" title="Lv3の動画が速くなります" style="cursor: pointer"onclick="initial_speed3_up()">+</span></label>'+
'<br><label title="プレイ開始前に決める挑戦速度の初期値を変更します。この値を変更するとLv4の挑戦速度が変更されます。">Lv4の挑戦速度<span class="btn btn-link" title="Lv4の動画が遅くなります" style="cursor: pointer"onclick="initial_speed4_down()">-</span><span id="initial_speed4">'+initial_speed4+'</span><span class="btn btn-link" title="Lv4の動画が速くなります" style="cursor: pointer"onclick="initial_speed4_up()">+</span></label>'+
'<br><label title="プレイ開始前に決める挑戦速度の初期値を変更します。この値を変更するとLv5の挑戦速度が変更されます。">Lv5の挑戦速度<span class="btn btn-link" title="Lv5の動画が遅くなります" style="cursor: pointer"onclick="initial_speed5_down()">-</span><span id="initial_speed5">'+initial_speed5+'</span><span class="btn btn-link" title="Lv5の動画が速くなります" style="cursor: pointer"onclick="initial_speed5_up()">+</span></label><br><button type="button" class="m-3" onclick="initial_speed_reset()">初期値に戻す</button>'+
'<h6>status表示設定</h6><label><input type="checkbox" name=chk_sample value="score"checked>スコア</input></label><br><label><input type="checkbox" name=chk_sample value="miss"checked>ミス</input></label>-<label><input type="checkbox" name=chk_sample value="acc"checked>正確率</input></label><br><label><input type="checkbox" name=chk_sample value="combo_counter"checked>コンボ</input></label><br><label><input type="checkbox" name=chk_sample value="type_counter"checked>正解打鍵</input></label><br><label><input type="checkbox" name=chk_sample value="clear_counter"checked>ラインクリア[残りライン]</input></label>'+
'<h6>リザルト設定</h6><label><input type="checkbox" name=chk_sample value="word_result"checked>ミスをした箇所を赤く表示</input></label><br><label><input type="checkbox" name=chk_sample value="word_result_real">ミスをした文字も詳細に表示</input></label>'+
'<br></p></div></div>'+
'<button type="button" onclick="setting_reset()" style="position:absolute;right:10px;bottom:10px;">設定をリセット</button></form>').insertAfter('.share')


$('<a class="btn" style="font-size:24px;"><i class="zmdi-hc-fw zmdi fas fa-cog" title="オプション"></i></a>').insertBefore('.twitter:eq(0)')


$('<div class="esckey">Escキー / 動画をクリックして開始</div>').insertBefore('#playBotton1')
$('#playBotton1 > .col-6').eq(0).html('<label style="margin-bottom:0!important;"><input  type="radio" name=mode_select value="kana_type"checked>Play - かな表示</label>')
$('#playBotton2 > .col-6').eq(0).html('<label style="margin-bottom:0!important;"><input  type="radio" name=mode_select value="roma_type">Play - ローマ字表示</label>')
$('#playBotton4 > .col-6').eq(0).html('<label style="margin-bottom:0!important;"><input  type="radio" name=mode_select value="kanamode_type">Play - かな入力<span style="font-size:50%">(106/109)</span></label>')
$('#playBotton5 > .col-6').eq(0).html('<label style="margin-bottom:0!important;"><input  type="radio" name=mode_select value="kanamode_mac_type">Play - かな入力<span style="font-size:50%">(Mac用JIS)</span></label>')

function initial_diff_reset(){
initial_diff=0
$('#initial_diff').html(initial_diff)
localStorage.setItem('diff_storage', Number(initial_diff))
}
function initial_diff_minus(){
if(initial_diff != -4){
initial_diff=(initial_diff-0.1).toFixed(1)
}else if(initial_diff == -4){
initial_diff=-4
}
$('#initial_diff').html(initial_diff)
localStorage.setItem('diff_storage', Number(initial_diff))
}
function initial_diff_plus(){
if(initial_diff != 4){
initial_diff=(Number(initial_diff)+0.1).toFixed(1)
}else if(initial_diff == 4){
initial_diff=4
}
$('#initial_diff').html(initial_diff)
localStorage.setItem('diff_storage', Number(initial_diff))
}
function initial_speed_reset(){
initial_speed1=1.0
initial_speed2=1.0
initial_speed3=1.0
initial_speed4=1.0
initial_speed5=1.0
$('#initial_speed1,#initial_speed2,#initial_speed3,#initial_speed4,#initial_speed5').html(initial_speed1)
}
function initial_speed1_down(){
if(initial_speed1 != 0.25){
initial_speed1=(initial_speed1-0.25)
}else if(initial_speed1 == 0.25){
initial_speed1=0.25

}
$('#initial_speed1').html(initial_speed1.toFixed(2))
initial_speed=[initial_speed1,initial_speed2,initial_speed3,initial_speed4,initial_speed5]
localStorage.setItem('initial_speed',JSON.stringify(initial_speed))

}
function initial_speed1_up(){
if(initial_speed1 != 2){
initial_speed1=(initial_speed1+0.25)
}else if(initial_speed1 == 2){
initial_speed1=2.00

}
$('#initial_speed1').html(initial_speed1.toFixed(2))
initial_speed=[initial_speed1,initial_speed2,initial_speed3,initial_speed4,initial_speed5]
localStorage.setItem('initial_speed',JSON.stringify(initial_speed))
}
function initial_speed2_down(){
if(initial_speed2 != 0.25){
initial_speed2=(initial_speed2-0.25)
}else if(initial_speed2 == 0.25){
initial_speed2=0.25
}
$('#initial_speed2').html(initial_speed2.toFixed(2))
initial_speed=[initial_speed1,initial_speed2,initial_speed3,initial_speed4,initial_speed5]
localStorage.setItem('initial_speed',JSON.stringify(initial_speed))
}
function initial_speed2_up(){
if(initial_speed2 != 2){
initial_speed2=(initial_speed2+0.25)
}else if(initial_speed2 == 2){
initial_speed2=2
}
$('#initial_speed2').html(initial_speed2.toFixed(2))
initial_speed=[initial_speed1,initial_speed2,initial_speed3,initial_speed4,initial_speed5]
localStorage.setItem('initial_speed',JSON.stringify(initial_speed))
}
function initial_speed3_down(){
if(initial_speed3 != 0.25){
initial_speed3=(initial_speed3-0.25)
}else if(initial_speed3 == 0.25){
initial_speed3=0.25
}
$('#initial_speed3').html(initial_speed3.toFixed(2))
initial_speed=[initial_speed1,initial_speed2,initial_speed3,initial_speed4,initial_speed5]
localStorage.setItem('initial_speed',JSON.stringify(initial_speed))
}
function initial_speed3_up(){
if(initial_speed3 != 2){
initial_speed3=(initial_speed3+0.25)
}else if(initial_speed3 == 2){
initial_speed3=2
}
$('#initial_speed3').html(initial_speed3.toFixed(2))
initial_speed=[initial_speed1,initial_speed2,initial_speed3,initial_speed4,initial_speed5]
localStorage.setItem('initial_speed',JSON.stringify(initial_speed))
}
function initial_speed4_down(){
if(initial_speed4 != 0.25){
initial_speed4=(initial_speed4-0.25)
}else if(initial_speed4 == 0.25){
initial_speed4=0.25
}
$('#initial_speed4').html(initial_speed4.toFixed(2))
initial_speed=[initial_speed1,initial_speed2,initial_speed3,initial_speed4,initial_speed5]
localStorage.setItem('initial_speed',JSON.stringify(initial_speed))
}
function initial_speed4_up(){
if(initial_speed4 != 2){
initial_speed4=(initial_speed4+0.25)
}else if(initial_speed4 == 2){
initial_speed4=2
}
$('#initial_speed4').html(initial_speed4.toFixed(2))
initial_speed=[initial_speed1,initial_speed2,initial_speed3,initial_speed4,initial_speed5]
localStorage.setItem('initial_speed',JSON.stringify(initial_speed))
}
function initial_speed5_down(){
if(initial_speed5 != 0.25){
initial_speed5=(initial_speed5-0.25)
}else if(initial_speed5 == 0.25){
initial_speed5=0.25
}
$('#initial_speed5').html(initial_speed5.toFixed(2))
initial_speed=[initial_speed1,initial_speed2,initial_speed3,initial_speed4,initial_speed5]
localStorage.setItem('initial_speed',JSON.stringify(initial_speed))
}
function initial_speed5_up(){
if(initial_speed5 != 2){
initial_speed5=(initial_speed5+0.25)
}else if(initial_speed5 == 2){
initial_speed5=2
}
$('#initial_speed5').html(initial_speed5.toFixed(2))
initial_speed=[initial_speed1,initial_speed2,initial_speed3,initial_speed4,initial_speed5]
localStorage.setItem('initial_speed',JSON.stringify(initial_speed))
}



function setting_change() {
if(!finished){
if($("[value=kana_type]").prop("checked")||$("[value=roma_type]").prop("checked")){
    if($("[value=sec]").prop("checked")){
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+((difficulty_average/difficulty.length)*$("#speed").text()).toFixed(2)+'打/秒, 最高'+(Math.max.apply(null, difficulty)*$("#speed").text()).toFixed(2)+'打/秒</span>')
}else{
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+(((difficulty_average/difficulty.length)*$("#speed").text())*60).toFixed(0)+'kpm, 最高'+((Math.max.apply(null, difficulty)*$("#speed").text())*60).toFixed(0)+'kpm</span>')
}
}else if($("[value=kanamode_type]").prop("checked")||$("[value=kanamode_mac_type]").prop("checked")){
    if($("[value=sec]").prop("checked")){
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes_kana_mode + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+((difficulty_average_kana/difficulty_kana.length)*$("#speed").text()).toFixed(2)+'打/秒, 最高'+(Math.max.apply(null, difficulty_kana)*$("#speed").text()).toFixed(2)+'打/秒</span>')
}else{
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes_kana_mode + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+(((difficulty_average_kana/difficulty_kana.length)*$("#speed").text())*60).toFixed(0)+'kpm, 最高'+((Math.max.apply(null, difficulty_kana)*$("#speed").text())*60).toFixed(0)+'kpm</span>')
}
}
}
if($("[name=futidori_theme]").val() =="none"){
    localStorage.setItem('futidori_theme','none')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});
}else if($("[name=futidori_theme]").val() =="solid"){
    localStorage.setItem('futidori_theme','solid')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});
}else if($("[name=futidori_theme]").val() =="double"){
    localStorage.setItem('futidori_theme','double')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});
}else if($("[name=futidori_theme]").val() =="dashed"){
    localStorage.setItem('futidori_theme','dashed')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});

}else if($("[name=futidori_theme]").val() =="dotted"){
    localStorage.setItem('futidori_theme','dotted')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});

}else if($("[name=futidori_theme]").val() =="outset"){
    localStorage.setItem('futidori_theme','outset')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});

}else if($("[name=futidori_theme]").val() =="groove"){
    localStorage.setItem('futidori_theme','groove')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});

}else if($("[name=futidori_theme]").val() =="ridge"){
    localStorage.setItem('futidori_theme','ridge')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});

}
if($("[name=futidori_border-width]").val() =="medium"){
    localStorage.setItem('futidori_border-width','medium')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});

}else if($("[name=futidori_border-width]").val() =="thin"){
    localStorage.setItem('futidori_border-width','thin')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});

}else if($("[name=futidori_border-width]").val() =="thick"){
    localStorage.setItem('futidori_border-width','thick')
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});

}


if($("[name=color_theme]").val() =="デフォルト"){
color_default()
$("[name=color_theme]").val('プリセット').prop('selected', true);
}else if($("[name=color_theme]").val() =="先頭の文字を赤く強調"){
letter_red()
$("[name=color_theme]").val('プリセット').prop('selected', true);

}
//チェックボックス設定保存 判別(サーバーに保存する機能ができ次第削除)ここから
if($("[value=sub]").prop("checked")){
    localStorage.setItem('sub',1)
}else{
    localStorage.setItem('sub',0)
}
if($("[value=eng_highlight]").prop("checked")){
    localStorage.setItem('eng_highlight',1)
}else{
    localStorage.setItem('eng_highlight',0)
}
if($("[value=letter_scroll]").prop("checked")){
    localStorage.setItem('letter_scroll',1)
}else{
    localStorage.setItem('letter_scroll',0)
}if($("[value=next_lyric_hidden]").prop("checked")){
    localStorage.setItem('next_lyric_hidden',1)
}else{
    localStorage.setItem('next_lyric_hidden',0)
}if($("[value=chiruda_chouoxn]").prop("checked")){
    localStorage.setItem('chiruda_chouoxn',1)
}else{
    localStorage.setItem('chiruda_chouoxn',0)
}if($("[value=mizumasi]").prop("checked")){
    localStorage.setItem('mizumasi',1)
}else{
    localStorage.setItem('mizumasi',0)
}if($("[value=line_hidden]").prop("checked")){
    localStorage.setItem('line_hidden',1)
}else{
    localStorage.setItem('line_hidden',0)
}if($("[value=type_sound]").prop("checked")){
    localStorage.setItem('type_sound',1)
}else{
    localStorage.setItem('type_sound',0)
}if($("[value=miss_sound]").prop("checked")){
    localStorage.setItem('miss_sound',1)
}else{
    localStorage.setItem('miss_sound',0)
}if($("[value=clear_sound]").prop("checked")){
    localStorage.setItem('clear_sound',1)
}else{
    localStorage.setItem('clear_sound',0)
}if($("[value=combo_break_sound]").prop("checked")){
    localStorage.setItem('combo_break_sound',1)
}else{
    localStorage.setItem('combo_break_sound',0)
}if($("[value=Interlocking_volume]").prop("checked")){
    localStorage.setItem('Interlocking_volume',1)
}else{
    localStorage.setItem('Interlocking_volume',0)
}if($("[value=gameover_sound]").prop("checked")){
    localStorage.setItem('gameover_sound',1)
}else{
    localStorage.setItem('gameover_sound',0)
}if($("[value=sec]").prop("checked")){
    localStorage.setItem('sec_kpm',1)
}else if($("[value=kpm]").prop("checked")){
    localStorage.setItem('sec_kpm',0)
}if($("[value=miss_on]").prop("checked")){
    localStorage.setItem('miss_on',1)
}else{
    localStorage.setItem('miss_on',0)
}if($("[value=anime_count]").prop("checked")){
    localStorage.setItem('anime_count',1)
}else{
    localStorage.setItem('anime_count',0)
}if($("[value=count_animation]").prop("checked")){
    localStorage.setItem('count_animation',1)
}else{
    localStorage.setItem('count_animation',0)
}if($("[value=skip_guide]").prop("checked")){
    localStorage.setItem('skip_guide',1)
}else{
    localStorage.setItem('skip_guide',0)
}if($("[value=skip_space]").prop("checked")){
    localStorage.setItem('skip_key',1)
}else if($("[value=skip_enter]").prop("checked")){
    localStorage.setItem('skip_key',0)
}if($("[value=bolding]").prop("checked")){
    localStorage.setItem('bolding',1)
}else{
    localStorage.setItem('bolding',0)
}if($("[value=character_spacing]").prop("checked")){
    localStorage.setItem('character_spacing',1)
}else{
    localStorage.setItem('character_spacing',0)
}if($("[value=font_Gothic]").prop("checked")){
    localStorage.setItem('font_Gothic',1)
}else{
    localStorage.setItem('font_Gothic',0)
}if($("[value=word_result]").prop("checked")){
    localStorage.setItem('word_result',1)
}else{
    localStorage.setItem('word_result',0)
}if($("[value=word_result_real]").prop("checked")){
    localStorage.setItem('word_result_real',1)
}else{
    localStorage.setItem('word_result_real',0)
}if($("[value=perfect_mode]").prop("checked")){
    localStorage.setItem('perfect_mode',1)
}else{
    localStorage.setItem('perfect_mode',0)
}if($("[value=life_corrent]").prop("checked")){
    localStorage.setItem('miss_limit_mode',1)
}else if($("[value=keep_corrent]").prop("checked")){
    localStorage.setItem('miss_limit_mode',0)
}if($("[value=gauge]").prop("checked")){
    localStorage.setItem('gauge',1)
}else{
    localStorage.setItem('gauge',0)
}if($("[value=combo_display]").prop("checked")){
    localStorage.setItem('combo_display',1)
}else{
    localStorage.setItem('combo_display',0)
$("#combo_stat2").html("")

}if($("[value=combo_animation]").prop("checked")){
    localStorage.setItem('combo_animation',1)
}else{
    localStorage.setItem('combo_animation',0)
}if($("[value=score]").prop("checked")){
    localStorage.setItem('score1',"display:block;")
}else{
    localStorage.setItem('score1',"display:none;")
}if($("[value=miss]").prop("checked")){
    localStorage.setItem('miss1',"display:block;")
}else if(!$("[value=miss]").prop("checked")){
    localStorage.setItem('miss1',"display:none;")
}if($("[value=acc]").prop("checked") && $("[value=miss]").prop("checked")){
    localStorage.setItem('acc1',".acc{display:block;line-height:0;margin-bottom:15.5px;font-size:95%;font-weight:normal;}")
}else if($("[value=acc]").prop("checked") && !$("[value=miss]").prop("checked")){
    localStorage.setItem('acc1',".acc{display:block;font-size:110%;}")
}else if(!$("[value=acc]").prop("checked")){
    localStorage.setItem('acc1',".acc{display:none;}")
}if($("[value=combo_counter]").prop("checked")){
    localStorage.setItem('combo_counter1',"display:block;")
}else{
    localStorage.setItem('combo_counter1',"display:none;")
}if($("[value=type_counter]").prop("checked")){
    localStorage.setItem('type_counter1',"display:block;")
}else{
    localStorage.setItem('type_counter1',"display:none;")
}if($("[value=clear_counter]").prop("checked")){
    localStorage.setItem('clear_counter1',"display:block;")
}else{
    localStorage.setItem('clear_counter1',"display:none;")
}
if(mode=="kana"){
$('#status_setting').html(".score{"+localStorage.getItem('score1')+"}.miss{"+localStorage.getItem('miss1')+"}"+localStorage.getItem('acc1')+".combo_counter{"+localStorage.getItem('combo_counter1')+"}.type_counter{"+localStorage.getItem('type_counter1')+"}.clear_counter{"+localStorage.getItem('clear_counter1')+"}#kashi_roma{font-size:"+localStorage.getItem('font_size_kana')+"px;}#kashi_sub{font-size:"+localStorage.getItem('font_size_roma')+"px;}")
}else if(mode=="roma"){
$('#status_setting').html(".score{"+localStorage.getItem('score1')+"}.miss{"+localStorage.getItem('miss1')+"}"+localStorage.getItem('acc1')+".combo_counter{"+localStorage.getItem('combo_counter1')+"}.type_counter{"+localStorage.getItem('type_counter1')+"}.clear_counter{"+localStorage.getItem('clear_counter1')+"}#kashi_roma{font-size:"+localStorage.getItem('font_size_roma')+"px;}#kashi_sub{font-size:"+localStorage.getItem('font_size_kana')+"px;}")
}
if($("[value=kana_type]").prop("checked")){
    localStorage.setItem('mode_select',0)
}else if($("[value=roma_type]").prop("checked")){
    localStorage.setItem('mode_select',1)
}else if($("[value=kanamode_type]").prop("checked")){
    localStorage.setItem('mode_select',2)
}else if($("[value=kanamode_mac_type]").prop("checked")){
    localStorage.setItem('mode_select',3)
}
//チェックボックス設定保存 判別(サーバーに保存する機能ができ次第削除)ここまで
if(is_played){
updateLineView();
update_status()
}
}
$("#mod_setting,.col-6,[name=mode_select]").change(setting_change)
$("[value=type_sound]").change(function(){
if($("[value=type_sound]").prop("checked")){
key_type_play()
}})
$("[value=miss_sound]").change(function(){
if($("[value=miss_sound]").prop("checked")){
miss_type_play()
}})
$("[value=clear_sound]").change(function(){
if($("[value=clear_sound]").prop("checked")){
clear_type_play()
}})
$("[value=combo_break_sound]").change(function(){
if($("[value=combo_break_sound]").prop("checked")){
    combo_break.play();
}
})

$("[value=combo_break_sound]").change(function(){
if($("[value=combo_break_sound]").prop("checked")){
    combo_break.play();
}
})
$("[value=gameover_sound]").change(function(){
if($("[value=gameover_sound]").prop("checked")){
    gameover_sound.play();
}
})
function add_css(){
var stylesheet = document.styleSheets.item(0)
    stylesheet.insertRule("[data-kana]{    position: relative;}", 1);
    stylesheet.insertRule(".missmark::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -2px;right: 0;margin: auto;font-size: 1.4em;}",3);
    stylesheet.insertRule(".missmark1::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -3.2px;right: 0;margin: auto;font-size: 1.4em;}", 4);
    stylesheet.insertRule(".missmark2::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -5.4px;right: 0;margin: auto;font-size: 1.4em;}", 5);
    stylesheet.insertRule(".missmark3::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -5.9px;right: 0;margin: auto;font-size: 1.4em;}", 6);
    stylesheet.insertRule(".missmark4::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -6.2px;right: 0;margin: auto;font-size: 1.4em;}", 7);
    stylesheet.insertRule(".missmark5::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -6.7px;right: 0;margin: auto;font-size: 1.4em;}", 8);
    stylesheet.insertRule(".missmark6::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -7.7px;right: 0;margin: auto;font-size: 1.4em;}", 9);
    stylesheet.insertRule(".missmark7::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -8.2px;right: 0;margin: auto;font-size: 1.4em;}", 10);
    stylesheet.insertRule(".missmark8::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -8.5px;right: 0;margin: auto;font-size: 1.4em;}", 11);
    stylesheet.insertRule(".missmark9::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -9.2px;right: 0;margin: auto;font-size: 1.4em;}", 12);
    stylesheet.insertRule(".missmark10::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -2.8px;right: 0;margin: auto;font-size: 1.4em;}", 13);
    stylesheet.insertRule(".missmark11::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -4px;right: 0;margin: auto;font-size: 1.4em;}", 14);
    stylesheet.insertRule(".missmark12::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -5.3px;right: 0;margin: auto;font-size: 1.4em;}", 15);
    stylesheet.insertRule(".missmark13::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -5.8px;right: 0;margin: auto;font-size: 1.4em;}", 16);
    stylesheet.insertRule(".missmark14::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -4.7px;right: 0;margin: auto;font-size: 1.4em;}", 17);
    stylesheet.insertRule(".missmark15::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -7.3px;right: 0;margin: auto;font-size: 1.4em;}", 18);
    stylesheet.insertRule(".missmark16::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -5px;right: 0;margin: auto;font-size: 1.4em;}", 19);
    stylesheet.insertRule(".missmark17::before{    content: attr(data-kana);position: absolute;top: -.49em;left:-5.5px;right: 0;margin: auto;font-size: 1.4em;}", 20);
    stylesheet.insertRule(".missmark18::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -2.7px;right: 0;margin: auto;font-size: 1.4em;}", 21);
    stylesheet.insertRule(".missmark19::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -7.9px;right: 0;margin: auto;font-size: 1.4em;}", 22);
    stylesheet.insertRule(".missmark20::before{    content: attr(data-kana);position: absolute;top: -.49em;left: -4.4px;right: 0;margin: auto;font-size: 1.4em;}", 23);
    stylesheet.insertRule("#kashi_roma:after{content:'\u200b';}", 24);
    stylesheet.insertRule("#kashi_sub:after{content:'\u200b';}", 25);
    stylesheet.insertRule(".fa-cog:hover{transform:rotate(90deg);}", 26);
    stylesheet.insertRule('.gothicfont{font-family:"游ゴシック", "Yu Gothic"!important;}',27);
    stylesheet.insertRule('#kashi_area{cursor:none!important;user-select: none !important;-ms-user-select: none !important;-moz-user-select: none !important;-webkit-user-select: none !important;}',29);
    stylesheet.insertRule("[onclick='submit_score()']:after{content:'Enterキーでランキング送信';}", 30);
    stylesheet.insertRule(".letter_space{letter-spacing: 0.7px;}", 31);
    stylesheet.insertRule(".letter_bold{font-weight:600;}", 32);
    stylesheet.insertRule(".letter_nomal{font-weight:500!important;}", 33);
    stylesheet.insertRule(".kashi_hidden{visibility: hidden;}", 34);
    stylesheet.insertRule(".line_hidden{visibility: hidden;}", 35);
    stylesheet.insertRule(".letter_scroll{white-space: nowrap;position:relative;height:25.7px;overflow:hidden;}", 36);
  stylesheet.insertRule("#kashi_roma,#kashi_sub{word-break: break-all;}", 37);
    stylesheet.insertRule(".progress{margin-bottom: 0!important;}", 38);
    stylesheet.insertRule(".sub_margin{margin-top: 0.5rem!important;}", 39);
    stylesheet.insertRule(".next_hidden{visibility: hidden!important;white-space: nowrap;overflow:hidden;}", 40);
    stylesheet.insertRule("#mod_setting label,.col-6 label{cursor: pointer;}", 41);
    stylesheet.insertRule("#mod_setting label{margin-right: 5px;}", 42);
    stylesheet.insertRule("#skip_guide:after{content:'\u200b';}", 43);
    stylesheet.insertRule("#kashi_next:after{content:'\u200b';}", 44);
    stylesheet.insertRule("#next_kpm:after{content:'\u200b';}", 45);
    stylesheet.insertRule('#kashi_next{margin-top:0px!important;}',46);
    stylesheet.insertRule('#modal-open:hover{  cursor: pointer;text-decoration : underline;}',47);
    stylesheet.insertRule('#controlbox .col-6{padding-right: 0!important;}',48);
    stylesheet.insertRule('#controlbox{margin-left:0px!important;}',49);
    stylesheet.insertRule('#status,#rank{font-size:1.4rem;white-space: nowrap;letter-spacing: 0.8px;font-weight:600;filter: blur(0);}',50);
    stylesheet.insertRule('#status{line-height:31px!important;margin-bottom: 8px;margin-top: 2px;}',50);
    stylesheet.insertRule('.progress2{margin-bottom: 0.5vw; -webkit-box-shadow: inset 0 0.1vw 0.2vw rgba(0,0,0,.1);box-shadow: inset 0 0.1vw 0.2vw rgba(0,0,0,.1);border-radius: 0;display: flex;font-size: .75rem;line-height: 3px;text-align: center;background-color: rgba(255,255,255,.1);}',51);
    stylesheet.insertRule('#gauge1{position:relative;top:5px;border-top:thin solid;border-bottom:thin solid;border-left:thin solid;height: 5px;}',52);
    stylesheet.insertRule('#gauge2{height:13px!important;border-top:thin #FFEB3B solid;border-right:thin #FFEB3B solid;border-bottom:thin #FFEB3B solid;}',53);
    stylesheet.insertRule('.col-4{padding-top:4px;}',54);
    stylesheet.insertRule('div#gauge {width: 75%;padding-left: 10px;}',55);
    stylesheet.insertRule('.combo_padding{padding-top:6px;}',56);
    stylesheet.insertRule('.combo_center{width:100%;}',57);
    stylesheet.insertRule('.combo_filter{filter: blur(0);}',58);
    stylesheet.insertRule('.under_line{text-decoration: underline;}',59);
    stylesheet.insertRule('.status .nav-fill{cursor:pointer;}',60);
    stylesheet.insertRule('#playBotton1 a:hover,#playBotton2 a:hover,#playBotton4 a:hover,#playBotton5 a:hover{text-decoration: underline;}',61);





}

//設定関連の処理
function read_localstorage(){

//正当音ボリューム
if(!localStorage.getItem('ef_volume_type')){
    $('[name="effect_volume_type"]').val('70')
    localStorage.setItem('ef_volume_type',70)
}else if(localStorage.getItem('ef_volume_type')){
$('[name="effect_volume_type"]').val(localStorage.getItem('ef_volume_type'))
}

//ミス音個別ボリューム
if(!localStorage.getItem('ef_volume_miss')){
    $('[name="effect_volume_miss"]').val('70')
    localStorage.setItem('ef_volume_miss',70)
}else if(localStorage.getItem('ef_volume_miss')){
$('[name="effect_volume_miss"]').val(localStorage.getItem('ef_volume_miss'))
}

//ラインクリア音個別ボリューム
if(!localStorage.getItem('ef_volume_clear')){
    $('[name="effect_volume_clear"]').val('70')
    localStorage.setItem('ef_volume_clear',70)
}else if(localStorage.getItem('ef_volume_clear')){
$('[name="effect_volume_clear"]').val(localStorage.getItem('ef_volume_clear'))
}

//ラインクリア音個別ボリューム
if(!localStorage.getItem('ef_volume_combo_break')){
    $('[name="effect_volume_combo_break"]').val('70')
    localStorage.setItem('ef_volume_combo_break',70)
}else if(localStorage.getItem('ef_volume_combo_break')){
$('[name="effect_volume_combo_break"]').val(localStorage.getItem('ef_volume_combo_break'))
}

//ゲームオーバー音ボリューム
if(!localStorage.getItem('effect_volume_gameover')){
    $('[name="effect_volume_gameover"]').val('70')
    localStorage.setItem('effect_volume_gameover',70)
}else if(localStorage.getItem('effect_volume_gameover')){
$('[name="effect_volume_gameover"]').val(localStorage.getItem('effect_volume_gameover'))
}

//BGMボリューム
if(!localStorage.getItem('volume_storage')){
    localStorage.setItem('volume_storage',70)
    $('#volume').html(localStorage.getItem('volume_storage'));

}else if (localStorage.getItem('volume_storage')) {
    $('#volume').html(localStorage.getItem('volume_storage'));

var volume_change = setInterval(function(){
if (typeof lyrics_array !== 'undefined') {
    player.setVolume(localStorage.getItem('volume_storage'));
    clearInterval(volume_change);
}
})
}
if(!localStorage.getItem('diff_storage')){
    localStorage.setItem('diff_storage',0)
}else if (localStorage.getItem('diff_storage')) {
    $('#time_diff').html(Number(localStorage.getItem('diff_storage')).toFixed(1));
    $('#initial_diff').html(Number(localStorage.getItem('diff_storage')).toFixed(1));

var diff_change = setInterval(function(){
if (typeof lyrics_array !== 'undefined' && player.getPlayerState() == 1) {
player.difftime = Number(localStorage.getItem('diff_storage'))
    clearInterval(diff_change);
}
})
}
if (localStorage.getItem('initial_speed')) {

var initial_speed_change = setInterval(function(){
if (typeof lyrics_array !== 'undefined' && $('#initial_speed1')[0]) {
let initial_speed_array = localStorage.getItem('initial_speed');
initial_speed_array = JSON.parse(initial_speed_array);
initial_speed1=initial_speed_array[0]
initial_speed2=initial_speed_array[1]
initial_speed3=initial_speed_array[2]
initial_speed4=initial_speed_array[3]
initial_speed5=initial_speed_array[4]

$('#initial_speed1').html(initial_speed_array[0].toFixed(2))
$('#initial_speed2').html(initial_speed_array[1].toFixed(2))
$('#initial_speed3').html(initial_speed_array[2].toFixed(2))
$('#initial_speed4').html(initial_speed_array[3].toFixed(2))
$('#initial_speed5').html(initial_speed_array[4].toFixed(2))
if($('.movietitle span').eq(0).text().replace(/[^0-9^\.]/g,"") == 1){
       play_speed = initial_speed_array[0];
       player.setPlaybackRate(initial_speed_array[0]);
       $('#playspeed').html(initial_speed_array[0].toFixed(2)+"倍速");
       $('#speed').html(initial_speed_array[0].toFixed(2));
       $('#default_speed').html(initial_speed_array[0].toFixed(2)+"倍速");
}else if($('.movietitle span').eq(0).text().replace(/[^0-9^\.]/g,"") == 2){
       play_speed = initial_speed_array[1];
       player.setPlaybackRate(initial_speed_array[1]);
       $('#playspeed').html(initial_speed_array[1].toFixed(2)+"倍速");
       $('#speed').html(initial_speed_array[1].toFixed(2));
       $('#default_speed').html(initial_speed_array[1].toFixed(2)+"倍速");
}else if($('.movietitle span').eq(0).text().replace(/[^0-9^\.]/g,"") == 3){
       play_speed = initial_speed_array[2];
       player.setPlaybackRate(initial_speed_array[2]);
       $('#playspeed').html(initial_speed_array[2].toFixed(2)+"倍速");
       $('#speed').html(initial_speed_array[2].toFixed(2));
       $('#default_speed').html(initial_speed_array[2].toFixed(2)+"倍速");
}else if($('.movietitle span').eq(0).text().replace(/[^0-9^\.]/g,"") == 4){
       play_speed = initial_speed_array[3];
       player.setPlaybackRate(initial_speed_array[3]);
       $('#playspeed').html(initial_speed_array[3].toFixed(2)+"倍速");
       $('#speed').html(initial_speed_array[3].toFixed(2));
       $('#default_speed').html(initial_speed_array[3].toFixed(2)+"倍速");
}else if($('.movietitle span').eq(0).text().replace(/[^0-9^\.]/g,"") == 5){
       play_speed = initial_speed_array[4];
       player.setPlaybackRate(initial_speed_array[4]);
       $('#playspeed').html(initial_speed_array[4].toFixed(2)+"倍速");
       $('#speed').html(initial_speed_array[4].toFixed(2));
       $('#default_speed').html(initial_speed_array[4].toFixed(2)+"倍速");
}
    clearInterval(initial_speed_change);
}
})
}
/*
//hiddenモード隠す文字数
if(!localStorage.getItem('hide_letter')){
    $('[name="hide_letter"]').val(3)
        localStorage.setItem('hide_letter',3)

}else if(localStorage.getItem('hide_letter')){
    $('[name="hide_letter"]').val(localStorage.getItem('hide_letter'))
}
*/

//かな表示スクロール文字数
if(!localStorage.getItem('letter_scroll_kana')){
    $('[name="letter_scroll_kana"]').val(10)
        localStorage.setItem('letter_scroll_kana',10)

}else if(localStorage.getItem('letter_scroll_kana')){
    $('[name="letter_scroll_kana"]').val(localStorage.getItem('letter_scroll_kana'))
}

//ローマ字表示スクロール文字数
if(!localStorage.getItem('letter_scroll_roma')){
    $('[name="letter_scroll_roma"]').val(16)
        localStorage.setItem('letter_scroll_roma',16)

}else if(localStorage.getItem('letter_scroll_roma')){
    $('[name="letter_scroll_roma"]').val(localStorage.getItem('letter_scroll_roma'))
}
if(!localStorage.getItem('miss_limit')){
    $('[name="miss_limit"]').val(95)
        localStorage.setItem('miss_limit',95)

}else if(localStorage.getItem('miss_limit')){
    $('[name="miss_limit"]').val(localStorage.getItem('miss_limit'))
}
if(!localStorage.getItem('font_size_kana')){
    $('[name="font_size_kana"]').val(17.5)
        localStorage.setItem('font_size_kana',17.5)

}else if(localStorage.getItem('font_size_kana')){
    $('[name="font_size_kana"]').val(localStorage.getItem('font_size_kana'))
}
if(!localStorage.getItem('font_size_roma')){
    $('[name="font_size_roma"]').val(17.5)
        localStorage.setItem('font_size_roma',17.5)

}else if(localStorage.getItem('font_size_roma')){
    $('[name="font_size_roma"]').val(localStorage.getItem('font_size_roma'))
}

//ミスエフェクト色
if(!localStorage.getItem('miss_color')){
    localStorage.setItem('miss_color',"#FF3554")
}else if(localStorage.getItem('miss_color')){
$('[name="miss_color"]').val(localStorage.getItem('miss_color'))
}

if(!localStorage.getItem('countdown_color')){
    localStorage.setItem('countdown_color',"rgba(255,255,255,0.9)")
}else if(localStorage.getItem('countdown_color')){
$('[name="countdown_color"]').val(localStorage.getItem('countdown_color'))
}

if(!localStorage.getItem('skipguide_color')){
    localStorage.setItem('skipguide_color',"rgba(255,255,255,0.53)")
}else if(localStorage.getItem('skipguide_color')){
$('[name="skipguide_color"]').val(localStorage.getItem('skipguide_color'))
}

if(!localStorage.getItem('combo_color')){
    localStorage.setItem('combo_color',"#FFFFFF")
}else if(localStorage.getItem('combo_color')){
$('[name="combo_color"]').val(localStorage.getItem('combo_color'))
}


//先頭の文字を強調する色
if(!localStorage.getItem('first_color1')){
    localStorage.setItem('first_color1',"#FFFFFF")
}else if(localStorage.getItem('first_color1')){
$('[name="first_color"]').val(localStorage.getItem('first_color1'))
}

if(!localStorage.getItem('playarea_color')){
    localStorage.setItem('playarea_color',"transparent")
}else if(localStorage.getItem('playarea_color')){
$('[name="playarea_color"]').val(localStorage.getItem('playarea_color'))
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});

}

if(!localStorage.getItem('playarea_radius')){
    localStorage.setItem('playarea_radius',0)
}else if(localStorage.getItem('playarea_radius')){
$('[name="playarea_radius"]').val(localStorage.getItem('playarea_radius'))
}

if(!localStorage.getItem('futidori_theme')){
    localStorage.setItem('futidori_theme','none')
}else if(localStorage.getItem('futidori_theme')){
$($("[name=futidori_theme]").val(localStorage.getItem('futidori_theme'))).prop('selected', true);
}

if(!localStorage.getItem('futidori_border-width')){
    localStorage.setItem('futidori_border-width','medium')
}else if(localStorage.getItem('futidori_border-width')){
$($("[name=futidori_border-width]").val(localStorage.getItem('futidori_border-width'))).prop('selected', true);
}

if(!localStorage.getItem('futidori_color')){
    localStorage.setItem('futidori_color',"#FFFFFF")
}else if(localStorage.getItem('futidori_color')){
$('[name="futidori_color"]').val(localStorage.getItem('futidori_color'))
}

if(!localStorage.getItem('correctword_color')){
    localStorage.setItem('correctword_color',"#0099CC")
}else if(localStorage.getItem('correctword_color')){
$('[name="correctword_color"]').val(localStorage.getItem('correctword_color'))
}

if(!localStorage.getItem('lineclear_color')){
    localStorage.setItem('lineclear_color',"#1eff52")
}else if(localStorage.getItem('lineclear_color')){
$('[name="lineclear_color"]').val(localStorage.getItem('lineclear_color'))
}

if(!localStorage.getItem('word_color')){
    localStorage.setItem('word_color',"#FFFFFF")
}else if(localStorage.getItem('word_color')){
$('[name="word_color"]').val(localStorage.getItem('word_color'))
}


if(!localStorage.getItem('lyric_color')){
    localStorage.setItem('lyric_color',"#FFFFFF")
}else if(localStorage.getItem('lyric_color')){
$('[name="lyric_color"]').val(localStorage.getItem('lyric_color'))
$(".playButton,.esckey").css({'cssText':'color:'+localStorage.getItem('lyric_color')+';'});


}if(!localStorage.getItem('combo_position')){
    localStorage.setItem('combo_position','center')
}else if(localStorage.getItem('combo_position')){
$($("[name=combo_position]").val(localStorage.getItem('combo_position'))).prop('selected', true);
}

if(!localStorage.getItem('next_lyrics_color')){
    localStorage.setItem('next_lyrics_color',"rgba(255,255,255,.7)")
}else if(localStorage.getItem('next_lyrics_color')){
$('[name="next_lyrics_color"]').val(localStorage.getItem('next_lyrics_color'))
}

if(!localStorage.getItem('line_color')){
    localStorage.setItem('line_color',"#17a2b8")
}else if(localStorage.getItem('line_color')){
$('[name="line_color"]').val(localStorage.getItem('line_color'))
}

if(!localStorage.getItem('line_color2')){
    localStorage.setItem('line_color2',"#ffc107")
}else if(localStorage.getItem('line_color2')){
$('[name="line_color2"]').val(localStorage.getItem('line_color2'))
}

if(!localStorage.getItem('line_empty_color')){
    localStorage.setItem('line_empty_color',"#f5f5f5")
}else if(localStorage.getItem('line_empty_color')){
$('[name="line_empty_color"]').val(localStorage.getItem('line_empty_color'))
}

if(!localStorage.getItem('line_empty_color2')){
    localStorage.setItem('line_empty_color2',"#f5f5f5")
}else if(localStorage.getItem('line_empty_color')){
$('[name="line_empty_color2"]').val(localStorage.getItem('line_empty_color2'))
}

if(!localStorage.getItem('status_color')){
    localStorage.setItem('status_color',"#FFFFFF")
}else if(localStorage.getItem('status_color')){
$('[name="status_color"]').val(localStorage.getItem('status_color'))
}

if(!localStorage.getItem('me_color')){
    localStorage.setItem('me_color',"#20c997")
}else if(localStorage.getItem('me_color')){
$('[name="me_color"]').val(localStorage.getItem('me_color'))
}

if(!localStorage.getItem('control_color')){
    localStorage.setItem('control_color',"rgba(255,255,255,.85)")
}else if(localStorage.getItem('line_empty_color')){
$('[name="control_color"]').val(localStorage.getItem('control_color'))
}


 $(document.head).append(`<style id="line_color_styles">
.bg-info {
    background-color:`+localStorage.getItem('line_color')+`!important;
}
#bar_input_base {
    background-color:`+localStorage.getItem('line_empty_color')+`!important;
}

.bg-warning {
    background-color:`+localStorage.getItem('line_color2')+`!important;
}

#bar_base {
    background-color:`+localStorage.getItem('line_empty_color2')+`!important;
}

#controlbox .text-teal {
    color:`+localStorage.getItem('me_color')+`!important;
}

#controlbox .col-4,
#controlbox .col-4 a,
#controlbox .col-4 .h4,
#line_remaining_time,
#rank,
#total_time{
    color:`+localStorage.getItem('status_color')+`!important;}

#controlbox .control {
    color:`+localStorage.getItem('control_color')+`!important;}

</style>`);
//ここからチェックボックス保存(サーバーで保存される機能実装までの仮実装)

if(localStorage.getItem('sub') == 0){$("[value=sub]").prop('checked', false);}
if(localStorage.getItem('eng_highlight') == 1){$("[value=eng_highlight]").prop('checked', true);}
if(localStorage.getItem('letter_scroll') == 1){$("[value=letter_scroll]").prop('checked', true);}
if(localStorage.getItem('next_lyric_hidden') == 1){$("[value=next_lyric_hidden]").prop('checked', true);}
if(localStorage.getItem('line_hidden') == 1){$("[value=line_hidden]").prop('checked', true);}
if(localStorage.getItem('type_sound') == 1){$("[value=type_sound]").prop('checked', true);}
if(localStorage.getItem('miss_sound') == 1){$("[value=miss_sound]").prop('checked', true);}
if(localStorage.getItem('clear_sound') == 1){$("[value=clear_sound]").prop('checked', true);}
if(localStorage.getItem('combo_break_sound') == 1){$("[value=combo_break_sound]").prop('checked', true);}
if(localStorage.getItem('gameover_sound') == 0){$("[value=gameover_sound]").prop('checked', false);}
if(localStorage.getItem('Interlocking_volume') == 0){$("[value=Interlocking_volume]").prop('checked', false);}
if(localStorage.getItem('chiruda_chouoxn') == 0){$("[value=chiruda_chouoxn]").prop('checked', false);}
if(localStorage.getItem('mizumasi') == 1){$("[value=mizumasi]").prop('checked', true);}
if(localStorage.getItem('sec_kpm') == 0){$("[value=kpm]").prop('checked', true);}
if(localStorage.getItem('miss_on') == 0){$("[value=miss_on]").prop('checked', false);}
if(localStorage.getItem('anime_count') == 0){$("[value=anime_count]").prop('checked', false);}
if(localStorage.getItem('count_animation') == 0){$("[value=count_animation]").prop('checked', false);}
if(localStorage.getItem('skip_guide') == 0){$("[value=skip_guide]").prop('checked', false);}
if(localStorage.getItem('skip_key') == 0){$("[value=skip_enter]").prop('checked', true);}
if(localStorage.getItem('font_Gothic') == 0){$("[value=font_Gothic]").prop('checked', false);}
if(localStorage.getItem('bolding') == 0){$("[value=bolding]").prop('checked', false);}
if(localStorage.getItem('character_spacing') == 1){$("[value=character_spacing]").prop('checked', true);}
if(localStorage.getItem('word_result') == 0){$("[value=word_result]").prop('checked', false);}
if(localStorage.getItem('word_result_real') == 1){$("[value=word_result_real]").prop('checked', true);}
if(localStorage.getItem('perfect_mode') == 1){$("[value=perfect_mode]").prop('checked', true);}
if(localStorage.getItem('miss_limit_mode') == 0){$("[value=keep_corrent]").prop('checked', true);}
if(localStorage.getItem('gauge') == 1){$("[value=gauge]").prop('checked', true);}
if(localStorage.getItem('combo_display') == 1){$("[value=combo_display]").prop('checked', true);}
if(localStorage.getItem('combo_animation') == 1){$("[value=combo_animation]").prop('checked', true);}

if(!localStorage.getItem('score1')){
    localStorage.setItem('score1',"display:block;")
}else if(localStorage.getItem('score1') == "display:none;"){
$("[value=score]").prop('checked', false);
}if(!localStorage.getItem('miss1')){
    localStorage.setItem('miss1',"display:display:block;")
}else if(localStorage.getItem('miss1') == "display:none;"){
$("[value=miss]").prop('checked', false);
}if(!localStorage.getItem('acc1')){
    localStorage.setItem('acc1',".acc{display:block;line-height:0;margin-bottom:15.5px;font-size:95%;font-weight:normal;}")
}else if(localStorage.getItem('acc1') == ".acc{display:none;}"){
$("[value=acc]").prop('checked', false);
}if(!localStorage.getItem('combo_counter1')){
    localStorage.setItem('combo_counter1',"display:block;")
}else if(localStorage.getItem('combo_counter1') == "display:none;"){
$("[value=combo_counter]").prop('checked', false);
}if(!localStorage.getItem('type_counter1')){
    localStorage.setItem('type_counter1',"display:block;")
}else if(localStorage.getItem('type_counter1') == "display:none;"){
$("[value=type_counter]").prop('checked', false);
}if(!localStorage.getItem('clear_counter1')){
    localStorage.setItem('clear_counter1',"display:block;")
}else if(localStorage.getItem('clear_counter1') == "display:none;"){
$("[value=clear_counter]").prop('checked', false);
}

if(localStorage.getItem('mode_select') == 1){
$("[value=roma_type]").prop('checked', true);
}else if(localStorage.getItem('mode_select') == 2){
$("[value=kanamode_type]").prop('checked', true);
}else if(localStorage.getItem('mode_select') == 3){
$("[value=kanamode_mac_type]").prop('checked', true);
}
//チェックボックス保存ここまで(サーバー保存の機能ができ次第削除)
 $(document.head).append(`<style id="status_setting">
.score {
`+localStorage.getItem('score1')+`
}
.miss {
`+localStorage.getItem('miss1')+`
}

`+localStorage.getItem('acc1')+`

.combo_counter {
`+localStorage.getItem('combo_counter1')+`
}

.type_counter {
`+localStorage.getItem('type_counter1')+`
}
.clear_counter {
`+localStorage.getItem('clear_counter1')+`
}
</style>`);
}
function localstrage_save(){

if(!document.webkitHidden){
if(localStorage.getItem('ef_volume_type') != $('[name="effect_volume_type"]').val()){
    localStorage.setItem('ef_volume_type',$('[name="effect_volume_type"]').val())
}
if(localStorage.getItem('ef_volume_miss') != $('[name="effect_volume_miss"]').val()){
    localStorage.setItem('ef_volume_miss',$('[name="effect_volume_miss"]').val())
}
if(localStorage.getItem('ef_volume_clear') != $('[name="effect_volume_clear"]').val()){
    localStorage.setItem('ef_volume_clear',$('[name="effect_volume_clear"]').val())
}
if(localStorage.getItem('ef_volume_combo_break') != $('[name="effect_volume_combo_break"]').val()){
    localStorage.setItem('ef_volume_combo_break',$('[name="effect_volume_combo_break"]').val())
}

if(localStorage.getItem('effect_volume_gameover') != $('[name="effect_volume_gameover"]').val()){
    localStorage.setItem('effect_volume_gameover',$('[name="effect_volume_gameover"]').val())
}
/*
if(localStorage.getItem('hide_letter') != $('[name="hide_letter"]').val()){
    localStorage.setItem('hide_letter',$('[name="hide_letter"]').val())
}
*/
if(localStorage.getItem('volume_storage') != $('#volume').text() && !finished){
    localStorage.setItem('volume_storage', $('#volume').text())
}
if(localStorage.getItem('miss_limit') != $('[name="miss_limit"]').val()){
    localStorage.setItem('miss_limit', $('[name="miss_limit"]').val())
}
if(localStorage.getItem('letter_scroll_kana') != $('[name="letter_scroll_kana"]').val()){
    localStorage.setItem('letter_scroll_kana',$('[name="letter_scroll_kana"]').val())
    updateLineView();
}
if(localStorage.getItem('letter_scroll_roma') != $('[name="letter_scroll_roma"]').val()){
    localStorage.setItem('letter_scroll_roma',$('[name="letter_scroll_roma"]').val())
    updateLineView();
}
if(localStorage.getItem('font_size_kana') != $('[name="font_size_kana"]').val()){
    localStorage.setItem('font_size_kana',$('[name="font_size_kana"]').val())
    updateLineView();
}
if(localStorage.getItem('font_size_roma') != $('[name="font_size_roma"]').val()){
    localStorage.setItem('font_size_roma',$('[name="font_size_roma"]').val())
    updateLineView();
}
if(localStorage.getItem('miss_color') != $('[name="miss_color"]').val()){
    localStorage.setItem('miss_color', $('[name="miss_color"]').val())
    updateLineView();
}
if(localStorage.getItem('countdown_color') != $('[name="countdown_color"]').val()){
    localStorage.setItem('countdown_color', $('[name="countdown_color"]').val())
}
if(localStorage.getItem('skipguide_color') != $('[name="skipguide_color"]').val()){
    localStorage.setItem('skipguide_color', $('[name="skipguide_color"]').val())
}

if(localStorage.getItem('combo_color') != $('[name="combo_color"]').val()){
    localStorage.setItem('combo_color', $('[name="combo_color"]').val())
if($("[value=combo_display]").prop("checked")){

if(combo>=1 && next_char[1]){
$("#combo_stat2").html("<div style='color:"+localStorage.getItem('combo_color')+";' class='combo_anime combo_animated'>"+combo+"</div>")
}
else if(combo==0 && typing_count>=1){
$("#combo_stat2").html("<div style='color:"+localStorage.getItem('combo_color')+";'>"+0+"</div>")
}}
}

if(localStorage.getItem('first_color1') != $('[name="first_color"]').val()){
    localStorage.setItem('first_color1', $('[name="first_color"]').val())
    updateLineView();

}
if(localStorage.getItem('playarea_color') != $('[name="playarea_color"]').val()){
    localStorage.setItem('playarea_color', $('[name="playarea_color"]').val())
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});
}

if(localStorage.getItem('playarea_radius') != $('[name="playarea_radius"]').val()){
    localStorage.setItem('playarea_radius', $('[name="playarea_radius"]').val())
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});
}

if(localStorage.getItem('futidori_color') != $('[name="futidori_color"]').val()){
    localStorage.setItem('futidori_color', $('[name="futidori_color"]').val())
$("#controlbox").css({'cssText':'background:'+localStorage.getItem("playarea_color")+';border-radius:'+localStorage.getItem('playarea_radius')+'px;border:'+localStorage.getItem('futidori_theme')+';border-color:'+localStorage.getItem('futidori_color')+';border-width:'+localStorage.getItem('futidori_border-width')+';padding-bottom:6px;'});
}

if(localStorage.getItem('correctword_color') != $('[name="correctword_color"]').val()){
    localStorage.setItem('correctword_color', $('[name="correctword_color"]').val())
    updateLineView();

}

if(localStorage.getItem('lineclear_color') != $('[name="lineclear_color"]').val()){
    localStorage.setItem('lineclear_color', $('[name="lineclear_color"]').val())
    updateLineView();

}
if(localStorage.getItem('word_color') != $('[name="word_color"]').val()){
    localStorage.setItem('word_color', $('[name="word_color"]').val())
    updateLineView();

}

if(localStorage.getItem('lyric_color') != $('[name="lyric_color"]').val()){
    localStorage.setItem('lyric_color', $('[name="lyric_color"]').val())
$("#kashi").css({'cssText':'margin-top:0!important;color:'+localStorage.getItem('lyric_color')+';'});
$(".playButton,.esckey").css({'cssText':'color:'+localStorage.getItem('lyric_color')+';'});

}
if(localStorage.getItem('next_lyrics_color') != $('[name="next_lyrics_color"]').val()){
    localStorage.setItem('next_lyrics_color', $('[name="next_lyrics_color"]').val())
$("#kashi_next").css({'cssText':'margin-bottom:0!important;color:'+localStorage.getItem('next_lyrics_color')+';'});
$("#kpm_color").css({'cssText':'color:'+localStorage.getItem('next_lyrics_color')+';'});
}

if(localStorage.getItem('line_color') != $('[name="line_color"]').val()){
    localStorage.setItem('line_color', $('[name="line_color"]').val())
$('#line_color_styles').html(".bg-info {background-color:"+localStorage.getItem('line_color')+"!important;}#bar_input_base {background-color:"+localStorage.getItem('line_empty_color')+"!important;}"+
".bg-warning {background-color:"+localStorage.getItem('line_color2')+"!important;}#bar_base {background-color:"+localStorage.getItem('line_empty_color2')+"!important;}"+
"#controlbox .text-teal {color:"+localStorage.getItem('me_color')+"!important;}#controlbox .col-4,#controlbox .col-4 a,#controlbox .col-4 .h4,#line_remaining_time,#rank,#total_time{color:"+localStorage.getItem('status_color')+"!important;}#controlbox .control {color:"+localStorage.getItem('control_color')+"!important;}}")
}
if(localStorage.getItem('line_color2') != $('[name="line_color2"]').val()){
    localStorage.setItem('line_color2', $('[name="line_color2"]').val())
$('#line_color_styles').html(".bg-info {background-color:"+localStorage.getItem('line_color')+"!important;}#bar_input_base {background-color:"+localStorage.getItem('line_empty_color')+"!important;}"+
".bg-warning {background-color:"+localStorage.getItem('line_color2')+"!important;}#bar_base {background-color:"+localStorage.getItem('line_empty_color2')+"!important;}"+
"#controlbox .text-teal {color:"+localStorage.getItem('me_color')+"!important;}#controlbox .col-4,#controlbox .col-4 a,#controlbox .col-4 .h4,#line_remaining_time,#rank,#total_time{color:"+localStorage.getItem('status_color')+"!important;}#controlbox .control {color:"+localStorage.getItem('control_color')+"!important;}}")
}

if(localStorage.getItem('line_empty_color') != $('[name="line_empty_color"]').val()){
    localStorage.setItem('line_empty_color', $('[name="line_empty_color"]').val())
$('#line_color_styles').html(".bg-info {background-color:"+localStorage.getItem('line_color')+"!important;}#bar_input_base {background-color:"+localStorage.getItem('line_empty_color')+"!important;}"+
".bg-warning {background-color:"+localStorage.getItem('line_color2')+"!important;}#bar_base {background-color:"+localStorage.getItem('line_empty_color2')+"!important;}"+
"#controlbox .text-teal {color:"+localStorage.getItem('me_color')+"!important;}#controlbox .col-4,#controlbox .col-4 a,#controlbox .col-4 .h4,#line_remaining_time,#rank,#total_time{color:"+localStorage.getItem('status_color')+"!important;}#controlbox .control {color:"+localStorage.getItem('control_color')+"!important;}}")
}

if(localStorage.getItem('line_empty_color2') != $('[name="line_empty_color2"]').val()){
    localStorage.setItem('line_empty_color2', $('[name="line_empty_color2"]').val())
$('#line_color_styles').html(".bg-info {background-color:"+localStorage.getItem('line_color')+"!important;}#bar_input_base {background-color:"+localStorage.getItem('line_empty_color')+"!important;}"+
".bg-warning {background-color:"+localStorage.getItem('line_color2')+"!important;}#bar_base {background-color:"+localStorage.getItem('line_empty_color2')+"!important;}"+
"#controlbox .text-teal {color:"+localStorage.getItem('me_color')+"!important;}#controlbox .col-4,#controlbox .col-4 a,#controlbox .col-4 .h4,#line_remaining_time,#rank,#total_time{color:"+localStorage.getItem('status_color')+"!important;}#controlbox .control {color:"+localStorage.getItem('control_color')+"!important;}}")
}
if(localStorage.getItem('status_color') != $('[name="status_color"]').val()){
    localStorage.setItem('status_color', $('[name="status_color"]').val())
$('#line_color_styles').html(".bg-info {background-color:"+localStorage.getItem('line_color')+"!important;}#bar_input_base {background-color:"+localStorage.getItem('line_empty_color')+"!important;}"+
".bg-warning {background-color:"+localStorage.getItem('line_color2')+"!important;}#bar_base {background-color:"+localStorage.getItem('line_empty_color2')+"!important;}"+
"#controlbox .text-teal {color:"+localStorage.getItem('me_color')+"!important;}#controlbox .col-4,#controlbox .col-4 a,#controlbox .col-4 .h4,#line_remaining_time,#rank,#total_time{color:"+localStorage.getItem('status_color')+"!important;}#controlbox .control {color:"+localStorage.getItem('control_color')+"!important;}}")
}if(localStorage.getItem('me_color') != $('[name="me_color"]').val()){
    localStorage.setItem('me_color', $('[name="me_color"]').val())
$('#line_color_styles').html(".bg-info {background-color:"+localStorage.getItem('line_color')+"!important;}#bar_input_base {background-color:"+localStorage.getItem('line_empty_color')+"!important;}"+
".bg-warning {background-color:"+localStorage.getItem('line_color2')+"!important;}#bar_base {background-color:"+localStorage.getItem('line_empty_color2')+"!important;}"+
"#controlbox .text-teal {color:"+localStorage.getItem('me_color')+"!important;}#controlbox .col-4,#controlbox .col-4 a,#controlbox .col-4 .h4,#line_remaining_time,#rank,#total_time{color:"+localStorage.getItem('status_color')+"!important;}#controlbox .control {color:"+localStorage.getItem('control_color')+"!important;}}")
}if(localStorage.getItem('control_color') != $('[name="control_color"]').val()){
    localStorage.setItem('control_color', $('[name="control_color"]').val())
$('#line_color_styles').html(".bg-info {background-color:"+localStorage.getItem('line_color')+"!important;}#bar_input_base {background-color:"+localStorage.getItem('line_empty_color')+"!important;}"+
".bg-warning {background-color:"+localStorage.getItem('line_color2')+"!important;}#bar_base {background-color:"+localStorage.getItem('line_empty_color2')+"!important;}"+
"#controlbox .text-teal {color:"+localStorage.getItem('me_color')+"!important;}#controlbox .col-4,#controlbox .col-4 a,#controlbox .col-4 .h4,#line_remaining_time,#rank,#total_time{color:"+localStorage.getItem('status_color')+"!important;}#controlbox .control {color:"+localStorage.getItem('control_color')+"!important;}}")
}
}
}

$("#playBotton1 a,#playBotton2 a").click(function(){
kana_mode = false
})

function checkbox_check(){
if(!is_played && play_mode == "normal"){
if($("[value=kana_type]").prop("checked")){
kana_mode = false
mode='kana'
keyboard='normal';
$('#playBotton1 > .col-6 label').eq(0).addClass("under_line");
$('#playBotton2 > .col-6 label').eq(0).removeClass("under_line");
$('#playBotton4 > .col-6 label').eq(0).removeClass("under_line");
$('#playBotton5 > .col-6 label').eq(0).removeClass("under_line");
}else if($("[value=roma_type]").prop("checked")){
kana_mode = false
mode='roma'
keyboard='normal';
$('#playBotton2 > .col-6 label').eq(0).addClass("under_line");
$('#playBotton1 > .col-6 label').eq(0).removeClass("under_line");
$('#playBotton4 > .col-6 label').eq(0).removeClass("under_line");
$('#playBotton5 > .col-6 label').eq(0).removeClass("under_line");

}else if($("[value=kanamode_type]").prop("checked")){
kana_mode = true
mode='kana'
keyboard='normal';
$('#playBotton4 > .col-6 label').eq(0).addClass("under_line");
$('#playBotton1 > .col-6 label').eq(0).removeClass("under_line");
$('#playBotton2 > .col-6 label').eq(0).removeClass("under_line");
$('#playBotton5 > .col-6 label').eq(0).removeClass("under_line");
}else if($("[value=kanamode_mac_type]").prop("checked")){
kana_mode = true
mode='kana'
keyboard='mac';
$('#playBotton5 > .col-6 label').eq(0).addClass("under_line");
$('#playBotton2 > .col-6 label').eq(0).removeClass("under_line");
$('#playBotton4 > .col-6 label').eq(0).removeClass("under_line");
$('#playBotton1 > .col-6 label').eq(0).removeClass("under_line");
}
}
if($("[value=Interlocking_volume]").prop("checked")){
if($('#volume').text()){
    combo_break.volume = ($('#volume').text()/100)
    gameover_sound.volume = ($('#volume').text()/100)

}}
    else{
    combo_break.volume = $('[name="effect_volume_miss"]').val()/100
    gameover_sound.volume = $('[name="effect_volume_gameover"]').val()/100

}
if($('#ranking:visible').length >= 1){
$(".status .nav-item").eq(1).addClass("under_line");
$(".status .nav-item").eq(0).removeClass("under_line");
}else if($('#status:visible').length >= 1){
$(".status .nav-item").eq(1).removeClass("under_line");
$(".status .nav-item").eq(0).addClass("under_line");
}

//游ゴシック体表示


if($("[value=font_Gothic]").prop("checked")){
$('#kashi_roma,#kashi_sub').addClass('gothicfont')
}else{
$('#kashi_roma,#kashi_sub').removeClass('gothicfont')
}

//ボリューム連動ONで個別ボリューム設定を変更不可にする
if($("[value=Interlocking_volume]").prop("checked")){
$('[name*="effect_volume"]').attr('disabled',true)
$('[name*="effect_volume"]').css({'cssText':'display:none;'});

}else{
$('[name*="effect_volume"]').attr('disabled',false)
$('[name*="effect_volume"]').css({'cssText':'display:block;'});
}

//入力歌詞の文字間隔を開ける
if($("[value=character_spacing]").prop("checked")){
$( "#kashi_sub,#kashi_roma" ).addClass("letter_space")
}else{
$( "#kashi_sub,#kashi_roma" ).removeClass("letter_space")
}
if($("[value=combo_display]").prop("checked")){
$( "#controlbox" ).addClass("combo_padding")
if($("[value=combo_animation]").prop("checked")){
$( "#kashi_area" ).addClass("combo_filter")
}else if(!$("[value=combo_animation]").prop("checked")){
$( "#kashi_area" ).removeClass("combo_filter")
}
if($("[name=combo_position]").val() =="center"){
localStorage.setItem('combo_position','center')
$( "#combo_stat2" ).addClass("combo_center")

}else if($("[name=combo_position]").val() =="left"){
localStorage.setItem('combo_position','left')
$( "#combo_stat2" ).removeClass("combo_center")

}
}
    else{
$( "#controlbox" ).removeClass("combo_padding")
$( "#kashi_area" ).removeClass("combo_filter")


}
if($("[value=perfect_mode]").prop("checked")){

$(".miss_limit").css({'cssText':'display:block;'})
if(miss_limit_color!="#FF4B00"){
miss_limit_color="gold"
}
if(count && !finished){
if($("[value=keep_corrent]").prop("checked")){
//parseFloat($('span .acc:visible').text().replace(/[^0-9^\.]/g,"")))は現在の正確率
//$('[name=miss_limit]').val()は目標正確率
if( ($('[name=miss_limit]').val()-parseFloat($('#correct_percent').text().replace(/[^0-9^\.]/g,""))) >=-0.001 ){
gameover()
miss_limit_color="#FF4B00"
}
}else if($("[value=life_corrent]").prop("checked")){
if( Number(((total_notes-escape_word_length)-((total_notes-escape_word_length) * ($('[name=miss_limit]').val()/100)))-typing_miss_count).toFixed(1) < 0 ){
gameover()
miss_limit_color="#FF4B00"
}
}
}
}else{
$(".miss_limit").css({'cssText':'display:none;'})
}
//太字設定
if($("[value=bolding]").prop("checked")){
$( "#kashi_sub,#kashi_roma" ).addClass("letter_bold")
.removeClass("letter_nomal")
}else{
$( "#kashi_sub,#kashi_roma" ).removeClass("letter_bold")
.addClass("letter_nomal")
}if($("[value=line_hidden]").prop("checked")){
$( "#kashi_next,#next_kpm" ).addClass("kashi_hidden")
}else{
$( "#kashi_next,#next_kpm" ).removeClass("kashi_hidden")
}if($("[value=line_hidden]").prop("checked")){
$(".bg-info").addClass("line_hidden")
}else{
$(".bg-info").removeClass("line_hidden")
}if($("[value=letter_scroll]").prop("checked")){
$('.scroll_amount').css({'cssText':'display:block;'});
$("#kashi_roma,#kashi_sub").addClass("letter_scroll")
    .removeClass("mt-2")
$("#kashi_sub").addClass("sub_margin")
}else{
$('.scroll_amount').css({'cssText':'display:none;'});
$("#kashi_roma,#kashi_sub").removeClass("letter_scroll")
    .addClass("mt-2")
$("#kashi_sub").removeClass("sub_margin")
}
    if($("[value=gauge]").prop("checked")){
$('#gauge').css({'cssText':'display:block;'});

    }else{
$('#gauge').css({'cssText':'display:none;'});
}
if (typeof lyrics_array !== 'undefined' && $('#difficult > span').text() == "" &&((difficulty_average/difficulty.length)*player.getPlaybackRate()) >= 0) {
 $('.share').prepend('<div id="difficult" style="color: #fd5;font-weight: 600;"><span style="border-radius: 16px;padding: 3px;background-color: rgba(0,0,0,.60);" id="modal-open" class="button-link"></span></div>')
typing_lyric_open()
movie_time = parseInt(lyrics_array[lyrics_array.length-1][0])/$("#speed").text()
movie_mm =("00" + parseInt(parseInt(movie_time) / 60)).slice(-2)
movie_ss = ("00" +(parseInt(movie_time) - movie_mm * 60)).slice(-2)

if(!kana_mode){
    if($("[value=sec]").prop("checked")){
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+((difficulty_average/difficulty.length)*$("#speed").text()).toFixed(2)+'打/秒, 最高'+(Math.max.apply(null, difficulty)*$("#speed").text()).toFixed(2)+'打/秒</span>')
}else{
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+(((difficulty_average/difficulty.length)*$("#speed").text())*60).toFixed(0)+'kpm, 最高'+((Math.max.apply(null, difficulty)*$("#speed").text())*60).toFixed(0)+'kpm</span>')
}
}else if(kana_mode){
    if($("[value=sec]").prop("checked")){
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes_kana_mode + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+((difficulty_average_kana/difficulty_kana.length)*$("#speed").text()).toFixed(2)+'打/秒, 最高'+(Math.max.apply(null, difficulty_kana)*$("#speed").text()).toFixed(2)+'打/秒</span>')
}else{
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes_kana_mode + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+(((difficulty_average_kana/difficulty_kana.length)*$("#speed").text())*60).toFixed(0)+'kpm, 最高'+((Math.max.apply(null, difficulty_kana)*$("#speed").text())*60).toFixed(0)+'kpm</span>')
}
}

}

}

var observer = new MutationObserver(function(){
movie_time = parseInt(lyrics_array[lyrics_array.length-1][0])/$("#speed").text()
movie_mm =("00" + parseInt(parseInt(movie_time) / 60)).slice(-2)
movie_ss = ("00" +(parseInt(movie_time) - movie_mm * 60)).slice(-2)
if(!kana_mode){
    if($("[value=sec]").prop("checked")){
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+((difficulty_average/difficulty.length)*$("#speed").text()).toFixed(2)+'打/秒, 最高'+(Math.max.apply(null, difficulty)*$("#speed").text()).toFixed(2)+'打/秒</span>')
}else{
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+(((difficulty_average/difficulty.length)*$("#speed").text())*60).toFixed(0)+'kpm, 最高'+((Math.max.apply(null, difficulty)*$("#speed").text())*60).toFixed(0)+'kpm</span>')
}
}else if(kana_mode){
    if($("[value=sec]").prop("checked")){
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes_kana_mode + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+((difficulty_average_kana/difficulty_kana.length)*$("#speed").text()).toFixed(2)+'打/秒, 最高'+(Math.max.apply(null, difficulty_kana)*$("#speed").text()).toFixed(2)+'打/秒</span>')
}else{
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes_kana_mode + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+(((difficulty_average_kana/difficulty_kana.length)*$("#speed").text())*60).toFixed(0)+'kpm, 最高'+((Math.max.apply(null, difficulty_kana)*$("#speed").text())*60).toFixed(0)+'kpm</span>')
}
}
});
/** 監視対象の要素オブジェクト */
const elem = document.getElementById('speed');

/** 監視時のオプション */
const config = {
  attributes: true,
  childList: true,
  characterData: true
};
/** 要素の変化監視をスタート */
observer.observe(elem, config);

//歌詞のend処理と同じ処理。ミス制限モードで使われる
function gameover(){
gameover_sound.play()
finished = true;
stop_movie();
return;
}

//lyrics_arrayを読み込んで「歌詞を見る」を作成
function lyricsarray_reading(){
//lyrics_array変数が読み込まれたとき
var load_lyric = setInterval(function(){
if(typeof lyrics_array !== 'undefined'){

const lyrics_length = lyrics_array.length
var number_lyrics = 1
let typing_lyric = "<h5 style='margin-top:5px;'>タイピングワード一覧</h5>"
const line_length = typing_array_roma.filter( v => !!( '' + v )).length
let kana_line_word_length=0
let kana_daku_handaku_length=0
let kana_daku_handaku_total_notes=0
$('<div id="typing_lyrics" style="border:2px solid #aaa;z-index:9999;display:none;font-size:120%;position:fixed;word-break: break-all;overflow: scroll; max-height: 500px;background-color: rgba(0,0,0,4.33);font-weight: 600;user-select: none !important;-ms-user-select: none !important;-moz-user-select: none !important;-webkit-user-select: none !important;">').insertAfter('.movietitle')

//lyrics_arrayを参照
for (let j = 0; j < lyrics_length; j++){

//lyrics_array[?][1]の先頭に空のルビタグを挿入(ルビあり時⇔ルビなし時の表示ズレ修正)
if(logcount == 0 && lyrics_array[j][2]){
logcount = j+1
}

//lyrics_array[?][2]から[入力歌詞を見る]を生成
//譜面の平均打鍵速度を生成
if(lyrics_array[j][2] && lyrics_array[j][1] != 'end'){
kana_line_word_length=typing_array_kana[j].join('').length
kana_daku_handaku_length= (typing_array_kana[j].join('').match( /[ゔ||が||ぎ||ぐ||げ||ご||ざ||じ||ず||ぜ||ぞ||だ||ぢ||づ||で||ど||ば||び||ぶ||べ"||ぼ||ぱ||ぴ||ぷ||ぺ||ぽ]/g ) || [] ).length
difficulty.push((typing_array_roma[j].join('').length/(lyrics_array[j+1][0]-lyrics_array[j][0])).toFixed(2))
difficulty_kana.push( ((kana_line_word_length+kana_daku_handaku_length)/(lyrics_array[j+1][0]-lyrics_array[j][0])).toFixed(2))
difficulty_average += (typing_array_roma[j].join('').length/(lyrics_array[j+1][0]-lyrics_array[j][0]))
difficulty_average_kana += ((kana_line_word_length+kana_daku_handaku_length)/(lyrics_array[j+1][0]-lyrics_array[j][0]))
typing_lyric += (number_lyrics +"/<span class='type_length'>"+line_length+"</span> ["+(typing_array_roma[j].join('').length/((lyrics_array[j+1][0]-lyrics_array[j][0])*player.getPlaybackRate())).toFixed(2)+'打/秒]('+(((typing_array_roma[j].join('').length/((lyrics_array[j+1][0]-lyrics_array[j][0])*player.getPlaybackRate())))*60).toFixed(0)+'kpm)<br><span>'+lyrics_array[j][2]+"</span><br><span style='text-transform:uppercase;'>"+typing_array_roma[j].join('')+"</span><br><br>")
number_lyrics = number_lyrics +1
total_notes_kana_mode += kana_line_word_length
kana_daku_handaku_total_notes += kana_daku_handaku_length
}
}
//lyrics_arrayを参照 ここまで

//生成した入力歌詞を表示
$('#typing_lyrics').append(typing_lyric)
total_notes = (200000 / score_per_char).toFixed(0)
kana_score_per_char = (200000 / total_notes_kana_mode)
total_notes_kana_mode= total_notes_kana_mode+kana_daku_handaku_total_notes
line_counter = $("#typing_lyrics .type_length:eq(0)").text()
clearInterval(load_lyric);
}
})
}
    $('<div id="gauge"style="display:none;"><div class="progress2" id="gauge1" style="width: 80%;float: left;height:8px;"><div id="clear_gauge"></div></div><div class="progress2" id="gauge2" style="width: 20%;background: #4E3701;height:12px;"><span style="height: 5px;border-left: thin #FFEB3B solid;"></span><div id="clear_gauge2"></div></div><div id="clear_percent" style="font-weight: normal;color: #fff;text-align: right;width: 0px;float: right;position: relative;top: -26px;left: 3px;font-size: 1.4rem;font-family: sans-serif;">0%</div></div>').insertBefore('#controlbox')
//プレイ開始時に各機能で必要なDOMを追加
function play_preparation(){
var play_start = setInterval(function(){

    if (is_played) {
if(mode=="kana"){
$('#status_setting').html(".score{"+localStorage.getItem('score1')+"}.miss{"+localStorage.getItem('miss1')+"}"+localStorage.getItem('acc1')+".combo_counter{"+localStorage.getItem('combo_counter1')+"}.type_counter{"+localStorage.getItem('type_counter1')+"}.clear_counter{"+localStorage.getItem('clear_counter1')+"}#kashi_roma{font-size:"+localStorage.getItem('font_size_kana')+"px;}#kashi_sub{font-size:"+localStorage.getItem('font_size_roma')+"px;}")
}else if(mode=="roma"){
$('#status_setting').html(".score{"+localStorage.getItem('score1')+"}.miss{"+localStorage.getItem('miss1')+"}"+localStorage.getItem('acc1')+".combo_counter{"+localStorage.getItem('combo_counter1')+"}.type_counter{"+localStorage.getItem('type_counter1')+"}.clear_counter{"+localStorage.getItem('clear_counter1')+"}#kashi_roma{font-size:"+localStorage.getItem('font_size_roma')+"px;}#kashi_sub{font-size:"+localStorage.getItem('font_size_kana')+"px;}")
}
            $('div .esckey,#retry').remove()
if(!kana_mode){
    if($("[value=sec]").prop("checked")){
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+((difficulty_average/difficulty.length)*$("#speed").text()).toFixed(2)+'打/秒, 最高'+(Math.max.apply(null, difficulty)*$("#speed").text()).toFixed(2)+'打/秒</span>')
}else{
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+(((difficulty_average/difficulty.length)*$("#speed").text())*60).toFixed(0)+'kpm, 最高'+((Math.max.apply(null, difficulty)*$("#speed").text())*60).toFixed(0)+'kpm</span>')
}
}else if(kana_mode){
    if($("[value=sec]").prop("checked")){
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes_kana_mode + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+((difficulty_average_kana/difficulty_kana.length)*$("#speed").text()).toFixed(2)+'打/秒, 最高'+(Math.max.apply(null, difficulty_kana)*$("#speed").text()).toFixed(2)+'打/秒</span>')
}else{
$('#difficult > span').html('<span title="打鍵数"><i class="fas fa-drum" style="backgroundcolor=:#441188; border-radius: 16px;"></i> '+total_notes_kana_mode + '打</span> <span title="ライン数"><i class="fas fa-scroll" style=""></i>'+$("#typing_lyrics .type_length:eq(0)").text()+'ライン</span> <span title="長さ"><i class="far fa-clock" style=""></i>'+movie_mm+':'+movie_ss+'</span> <span title="必要入力スピード"><i class="fas fa-tachometer-alt" style=""></i>平均'+(((difficulty_average_kana/difficulty_kana.length)*$("#speed").text())*60).toFixed(0)+'kpm, 最高'+((Math.max.apply(null, difficulty_kana)*$("#speed").text())*60).toFixed(0)+'kpm</span>')
}
}
    $('<div id="next_kpm" style="font-size:12.5px;font-weight: 500;text-align:left;"></div><div id="total_time" style="font-weight: 600;color: #fff;text-align: right;height: 0px;font-family: sans-serif;"></div><div id="skip_guide" style="font-weight:400;text-align:left;">&nbsp;</div>').insertAfter('#kashi_next')


$('<span id="combo_stat2" style="display: inline-block;text-align: center;font-weight:600;position: absolute;top: -7px;font-size: 20px;font-family: sans-serif;"></span><div id="line_remaining_time" style="font-family: sans-serif;padding-top:5px;font-size: 13px;font-weight: 600;color: #fff;text-align: right;"></div>').insertBefore('#bar_input_base')
$('<div id="rank" style="font-weight: 600;color: #fff;position:relative;top:-4px;"></div>').insertAfter('#status')
$('<div id="count_anime" style="font-size:45px;font-weight: 600;text-align:center;height: 0px;position:relative;top:-15px;"></div>').insertBefore('#kashi')//カウントダウンDOM追加
$("#line_remaining_time").html("&nbsp;")
$('.mt-3,#bar_base,#bar_input_base').css({'cssText':'margin-top:0!important;'})
$("#kashi").removeClass('text-white').css({'cssText':'margin-top:0!important;color:'+localStorage.getItem('lyric_color')+';'});
$("#kashi_next").removeClass('text-muted').css({'cssText':'margin-bottom:0!important;color:'+localStorage.getItem('next_lyrics_color')+';'});


if(kana_mode){
total_notes = total_notes_kana_mode
score_per_char = kana_score_per_char
if(play_mode == "practice"){
$("#kashi_roma").css({'cssText':'margin-bottom: 0 !important;'+'visibility:visible!important;'});
}
}
$("#controlbox .col-8").css({'cssText':'flex: 0 0 75.66667%;'+'max-width: 75.66667%;'});
$("#controlbox .col-4").css({'cssText':'flex: 0 0 24.33333%;'+'max-width: 24.33333%;'});
    player.setVolume(localStorage.getItem('volume_storage'));

clearInterval(play_start);
}
})
}

//時間計算・時間を利用した機能
function time_calculation(){
if(typeof is_played !== 'undefined'){

if(is_played && player.getPlayerState() == 1){
if(!finished){


/**
*@時間計算
*/
const now_time = headtime/player.getPlaybackRate()
const mm =("00" + parseInt(parseInt(now_time) / 60)).slice(-2)
const ss = ("00" +(parseInt(now_time) - mm * 60)).slice(-2)

if($("#total_time").text() != String(mm + ':' + ss + " / " + movie_mm+':'+movie_ss))
//曲の経過時間を[分:秒]で表示
$("#total_time").html(mm + ':' + ss + " / " + movie_mm+':'+movie_ss)


/**
*@ライン経過時間計算
*/

//打鍵時間計測
if(count >= 1 && !completed){
//ライン経過時間
line_playing_time = Number(((time_buf - lyrics_array[count - 1][0])/player.getPlaybackRate()).toFixed(3))
if(next_char[0] || playing_time_current == 0){
//全体の経過時間
playing_time_current = Number(line_playing_time + past_playing_time)
}
}

//latency計測
if(next_char && !completed){
if(!latency_flag){
latency = line_playing_time
}
}else if(next_char=='' && !completed){
latency = (0).toFixed(3)
}

//次のラインの必要打鍵速度を計算
if(lyrics_array[count +1]){//曲終了前のライン以外
if(!kana_mode){
next_kpm = Number(((typing_array_roma[count].join("").length) / (lyrics_array[count+1][0]-lyrics_array[count][0]))*player.getPlaybackRate())
}else if(kana_mode){
next_kpm = Number(((typing_array_kana[count].join('').length+( typing_array_kana[count].join('').match( /[ゔ||が||ぎ||ぐ||げ||ご||ざ||じ||ず||ぜ||ぞ||だ||ぢ||づ||で||ど||ば||び||ぶ||べ"||ぼ||ぱ||ぴ||ぷ||ぺ||ぽ]/g ) || [] ).length) / (lyrics_array[count+1][0]-lyrics_array[count][0]))*player.getPlaybackRate())
}
}

//ライン打鍵速度、初速抜き、平均打鍵速度計算
line_typingspeed = (typing_count-typing_count_save)/line_playing_time
line_typingspeed_rkpm = (typing_count-typing_count_save)/ (line_playing_time-latency)
typing_speed = typing_count/playing_time_current

line_remaining_time =Number((lyrics_array[count][0] - headtime)/player.getPlaybackRate()).toFixed(1)
//全体打鍵速度を表示
//DOMに打鍵時間を表示
//打/秒表示
if(line_remaining_time>=0){
if($("[value=sec]").prop("checked")){
if($("#rank").text() != String((ranking_array.length +1) + "位[" +typing_speed.toFixed(2) + "打/秒]")){
$("#rank").html((ranking_array.length +1) + "<span style='font-size:80%;'>位</span>[" +typing_speed.toFixed(2) + "<span style='font-size:80%;'>打/秒</span>]")
}
if($("[value=line_hidden]").prop("checked")){
if($("#line_remaining_time").text() != String(line_typingspeed.toFixed(2) + "打/秒 / latency: " +latency.toFixed(3)+ "ms")){
$("#line_remaining_time").html(line_typingspeed.toFixed(2) + "打/秒 / latency: " +latency.toFixed(3)+ "ms")
}
}else{
if($("#line_remaining_time").text() != String(line_typingspeed.toFixed(2) + "打/秒 / 残り" +line_remaining_time +"秒")){
$("#line_remaining_time").html(line_typingspeed.toFixed(2) + "打/秒 / 残り" +line_remaining_time +"秒")
}
}

//next打鍵速度表示
if(lyrics_array[count][2] && lyrics_array[count+1] && next_kpm.toFixed(2) != $(".next_kpm_value").text()){
$("#next_kpm").html("<span id='kpm_color' style='color:"+localStorage.getItem('next_lyrics_color')+";'>NEXT:<span class='next_kpm_value'>"+next_kpm.toFixed(2)+"</span>打/秒</span>")
}
//次のライン入力する文字が無かったらnext速度を表示しない
else if((!lyrics_array[count][2] || !lyrics_array[count+1]) && $("#next_kpm").text() != "&nbsp;"){
$("#next_kpm").html("&nbsp;")
}
}

//kpm表示
else {
if($("#rank").text() != String((ranking_array.length +1) + "位["  +((typing_speed)*60).toFixed(0) + "kpm]")){
$("#rank").html((ranking_array.length +1) + "<span style='font-size:80%;'>位</span>[" +((typing_speed)*60).toFixed(0) + "kpm]")
}
if($("[value=line_hidden]").prop("checked")){
if($("#line_remaining_time").text() != String(((line_typingspeed)*60).toFixed(0) + "kpm / latency: " +latency.toFixed(3)+ "ms")){
$("#line_remaining_time").html(((line_typingspeed)*60).toFixed(0) + "kpm / latency: " +latency.toFixed(3)+ "ms")
}
}else{
if($("#line_remaining_time").text() != String(((line_typingspeed)*60).toFixed(0) + "kpm / 残り"+line_remaining_time+"秒")){
$("#line_remaining_time").html(((line_typingspeed)*60).toFixed(0) + "kpm / 残り"+line_remaining_time+"秒")
}
}
if(lyrics_array[count][2] && lyrics_array[count+1] && (next_kpm*60).toFixed(0) != $(".next_kpm_value").text()){
$("#next_kpm").html("<span id='kpm_color' style='color:"+localStorage.getItem('next_lyrics_color')+";'>NEXT:<span class='next_kpm_value'>"+(next_kpm*60).toFixed(0)+"</span>kpm</span>")
}

else if((!lyrics_array[count][2] || !lyrics_array[count+1]) && $("#next_kpm").text() != "&nbsp;"){
$("#next_kpm").html("")
}
}
}
}

}
}
}


function line_clear_process(){
//クリア時は現在のライン経過時間を加算
past_playing_time += line_playing_time
//クリアゲージ
clear_percent=(complete_count / line_counter) * 100.0;
if((Math.floor(parseInt(score)/20)/100).toFixed(2) < 50){
$("#clear_percent").html(clear_percent.toFixed(0)+"%")
}else if((Math.floor(parseInt(score)/20)/100).toFixed(2) >= 50 && clear_percent.toFixed(0)<80){
$("#clear_percent").html(clear_percent.toFixed(0)+"%<i style='width: 0px;display: contents!important;color:#FFF;' class='fa fa-trophy'></i>")
}else if(clear_percent.toFixed(0)>=80 && clear_percent.toFixed(0)!=100){
$("#clear_percent").html(clear_percent.toFixed(0)+"%<i style='width: 0px;display: contents!important;color:#8B4513;' class='fa fa-trophy'></i>")
}else if(clear_percent.toFixed(0)==100 && (Math.floor(parseInt(score)/20)/100).toFixed(2) < 99.99){
$("#clear_percent").html(clear_percent.toFixed(0)+"%<i style='width: 0px;display: contents!important;color:#C0C0C0;' class='fa fa-trophy'></i>")
}else if((Math.floor(parseInt(score)/20)/100).toFixed(2) >= 99.99){
$("#clear_percent").html(clear_percent.toFixed(0)+"%<i style='width: 0px;display: contents!important;color:#FFD700;' class='fa fa-trophy'></i>")
}

clear_gauge1=(complete_count / line_counter) * 200.0
if(!game_clear){
$("#clear_gauge").css({'cssText':'width:'+(clear_gauge1/1.6)+'%;background:#fff;'});
}
if(game_clear){
clear_gauge2=(clear_gauge2+1)
$("#clear_gauge2").css({'cssText':'width:'+(clear_gauge2/clear_linecounter)*100+'%;background:#FFEB3B;'});
}

if(!game_clear&& clear_percent.toFixed(0)>=80){
clear_linecounter=line_counter*((100-Number($("#clear_percent").text().replace( '%', '' )))/100)
clear_gauge2=((Number($("#clear_percent").text().replace( '%', '' ))-80)/10)
game_clear=true
//$("#clear_gauge").css({'cssText':'width:100%;background:#F8F800;'});
$("#clear_gauge").css({'cssText':'width:100%;background:#fff;'});
$("#clear_percent").css({'cssText':'font-weight: 600;color: #FFEB3B;text-align: right;width: 0px;float: right;position: relative;top: -26px;left: 3px;font-size: 1.4rem;"'});

$("#clear_gauge2").css({'cssText':'width:'+(((clear_gauge2/clear_linecounter)*100)+0.5)+'%;background:#FFEB3B;'});
$("#gauge2 > span").css({'cssText':''});
}
}

function line_update(){

if($("[value=next_lyric_hidden]").prop("checked")){
if(lyrics_array[count+1][1] != 'end' && !lyrics_array[count+1][2]){
$('#kashi_next').addClass('next_hidden')
}else if(lyrics_array[count+1][2] || lyrics_array[count+1][1] == 'end'){
$('#kashi_next').removeClass('next_hidden')
}
}else if(!$("[value=next_lyric_hidden]").prop("checked")){
$('#kashi_next').removeClass('next_hidden')
}
$("#count_anime").html("")
$("span").removeClass("missmark");
if(countdown_anime){
countdown_anime = false //間奏でのカウントダウンフラグOFF
}
if(count >= 1){//2ライン目以降

if(lyrics_array[count-1][2] && typing_count_save == typing_count && count > logcount){
inputline_counter.push(count-1)
}
if(!kana_mode){
if(already_input == "" && lyrics_array[count-1][2] == ''){
    kpmlog.push(kpmlog[kpmlog.length-1])
    rkpmlog.push(rkpmlog[rkpmlog.length-1])
    nokorimoji_log.push(nokorimoji_log[nokorimoji_log.length-1])
    line_misscount.push(line_misscount[line_misscount.length-1])
    latencylog.push(latencylog[latencylog.length-1])
}else if(already_input == "" && lyrics_array[count-1][2] != ''){
    kpmlog.push(0)
    rkpmlog.push(0)
    nokorimoji_log.push(String(next_char[1]+line_input_roma.join('')).replace('undefined',''))
    line_misscount.push((typing_miss_count-misstyping_count_save))
    latencylog.push('null')
}
    else if(already_input != "" && lyrics_array[count-1][2] != '' && !practice_failure){
    kpmlog.push((line_typingspeed).toFixed(2))
    rkpmlog.push((line_typingspeed_rkpm).toFixed(2))
    nokorimoji_log.push(String(next_char[1]+line_input_roma.join('')).replace('undefined',''))
    line_misscount.push((typing_miss_count-misstyping_count_save))
    latencylog.push(latency)
}
}else if(kana_mode){
if(already_input == "" && lyrics_array[count-1][2] == ''){
    kpmlog.push(kpmlog[kpmlog.length-1])
    rkpmlog.push(rkpmlog[rkpmlog.length-1])
    nokorimoji_log.push(nokorimoji_log[nokorimoji_log.length-1])
    line_misscount.push(line_misscount[line_misscount.length-1])
    latencylog.push(latencylog[latencylog.length-1])
}else if(already_input == "" && lyrics_array[count-1][2] != ''){
    kpmlog.push(0)
    rkpmlog.push(0)
    nokorimoji_log.push(String(next_char[0]+line_input_kana.join('')).replace('undefined',''))
    line_misscount.push((typing_miss_count-misstyping_count_save))
    latencylog.push('null')
}
    else if(already_input != "" && lyrics_array[count-1][2] != '' && !practice_failure){
    kpmlog.push((line_typingspeed).toFixed(2))
    rkpmlog.push((line_typingspeed_rkpm).toFixed(2))
    nokorimoji_log.push(String(next_char[0]+line_input_kana.join('')).replace('undefined',''))
    line_misscount.push((typing_miss_count-misstyping_count_save))
    latencylog.push(latency)
}
}
latency_flag=false
practice_failure=false
latency_flag=false
clear_sound_flag=false
misstyping_count_save = typing_miss_count
typing_count_save = typing_count //現在ラインの打鍵数を出す

if(lyrics_array[count - 1][2]){
if(!completed){//③ラインクリア失敗時
past_playing_time += Number(((lyrics_array[count - 0][0]-lyrics_array[count - 1][0])/player.getPlaybackRate()).toFixed(3))//ライン時間を加算
if(!kana_mode){
escape_word_length=Number(escape_word_length) + (next_char[1]+line_input_roma.join('')).length
}else if(kana_mode){
escape_word_length=Number(escape_word_length) + (next_char[0]+line_input_kana.join('')).length
}
}
}

}





}



function spacekey_skipguide(){
//スキップ案内を表示
if(next_char=='' && $("[value=skip_guide]").prop("checked")){
if($("[value=skip_space]").prop("checked")){
if(completed &&line_remaining_time > 3.0 && $("#skip_guide").text() != "Type Space key to skip. ⏩"){
$("#skip_guide").html("<span style='color:"+localStorage.getItem('skipguide_color')+";'><i>Type Space key to skip. ⏩</i></span>")
}else if(!completed && line_remaining_time > 4.4 && line_playing_time >= 0.5 && $("#skip_guide").text() != "Type Space key to skip. ⏩"){//入力する文字がなかった時
$("#skip_guide").html("<span style='color:"+localStorage.getItem('skipguide_color')+";'><i>Type Space key to skip. ⏩</i></span>")
}else if(next_char=='' && line_remaining_time <= 3.0 && completed && $("#skip_guide").text() == "Type Space key to skip. ⏩"){
$("#skip_guide").html("")//スキップできなくなるタイミングで案内非表示(ラインクリア時は3秒)
}else if(next_char=='' && line_remaining_time <= 1.2 && !completed && $("#skip_guide").text() == "Type Space key to skip. ⏩"){
$("#skip_guide").html("")//スキップできなくなるタイミングで案内非表示
}else if(next_char=='' && countdown_anime && 4.4 >= line_remaining_time && $("#skip_guide").text() == "Type Space key to skip. ⏩"){
$("#skip_guide").html("")//カウントダウンが表示されたタイミングで案内非表示
}
}else if($("[value=skip_enter]").prop("checked")){
if(completed &&line_remaining_time > 3.0 && $("#skip_guide").text() != "Type Enter key to skip. ⏩"){
$("#skip_guide").html("<span style='color:"+localStorage.getItem('skipguide_color')+";'><i>Type Enter key to skip. ⏩</i></span>")
}else if(!completed && line_remaining_time > 4.4 && line_playing_time >= 0.5 && $("#skip_guide").text() != "Type Enter key to skip. ⏩"){//入力する文字がなかった時
$("#skip_guide").html("<span style='color:"+localStorage.getItem('skipguide_color')+";'><i>Type Enter key to skip. ⏩</i></span>")
}else if(next_char=='' && line_remaining_time <= 3.0 && completed && $("#skip_guide").text() == "Type Enter key to skip. ⏩"){
$("#skip_guide").html("")//スキップできなくなるタイミングで案内非表示(ラインクリア時は3秒)
}else if(next_char=='' && line_remaining_time <= 1.2 && !completed && $("#skip_guide").text() == "Type Enter key to skip. ⏩"){
$("#skip_guide").html("")//スキップできなくなるタイミングで案内非表示
}else if(next_char=='' && countdown_anime && 4.4 >= line_remaining_time && $("#skip_guide").text() == "Type Enter key to skip. ⏩"){
$("#skip_guide").html("")//カウントダウンが表示されたタイミングで案内非表示
}
}
}else if($("#skip_guide").text() == "Type Enter key to skip. ⏩" || $("#skip_guide").text() != "Type Enter key to skip. ⏩"){
$("#skip_guide").html("")
}
}
function sec_countdownanime(){
if(count){
if(next_char=='' && line_remaining_time >= 1.3 && !countdown_anime && !completed && (!lyrics_array[count-1][1] || lyrics_array[count-1][1]=="") && lyrics_array[count][2] && lyrics_array[count+1] && $("[value=anime_count]").prop("checked")){//4秒以上の間奏中、次のラインに入力する文字が存在する時
countdown_anime = true
}

if(countdown_anime){
if($("[value=count_animation]").prop("checked")){
if(4.0 >= line_remaining_time && line_remaining_time > 3.0 && $('#count_anime').text() != "3"){//間奏ラインの残り時間大体3秒ぐらいのとき
$("#count_anime").html("<span style='color:"+localStorage.getItem('countdown_color')+";' class='countdown_animation count_animated'><i>3</i></span>")//残り時間を整数で歌詞エリアに表示
}else if(3.0 >= line_remaining_time && line_remaining_time > 2.0 && $('#count_anime').text() != "2"){//間奏ラインの残り時間大体3秒ぐらいのとき
$("#count_anime").html("<span style='color:"+localStorage.getItem('countdown_color')+";'class='countdown_animation count_animated'><i>2</i></span>")//残り時間を整数で歌詞エリアに表示
}else if(2.0 >= line_remaining_time && line_remaining_time > 1.0 && $('#count_anime').text() != "1" && $('#count_anime').text() != ""){//間奏ラインの残り時間大体3秒ぐらいのとき
$("#count_anime").html("<span style='color:"+localStorage.getItem('countdown_color')+";'class='countdown_animation count_animated'><i>1</i></span>")//残り時間を整数で歌詞エリアに表示
}else if(line_remaining_time <= 1 && $('#count_anime').text() != "GO!" && $('#count_anime').text() != ""){////間奏ラインの残り時間大体1秒ぐらいのとき
$("#count_anime").html("<span style='color:"+localStorage.getItem('countdown_color')+";'class='countdown_animation count_animated'><i>GO!</i></span>")//歌詞エリアにGO!と表示する
}
}else if(!$("[value=count_animation]").prop("checked")){
if(4.0 >= line_remaining_time && line_remaining_time > 3.0 && $('#count_anime').text() != "3"){//間奏ラインの残り時間大体3秒ぐらいのとき
$("#count_anime").html("<span style='color:"+localStorage.getItem('countdown_color')+";'><i>3</i></span>")//残り時間を整数で歌詞エリアに表示
}else if(3.0 >= line_remaining_time && line_remaining_time > 2.0 && $('#count_anime').text() != "2"){//間奏ラインの残り時間大体3秒ぐらいのとき
$("#count_anime").html("<span style='color:"+localStorage.getItem('countdown_color')+";'><i>2</i></span>")//残り時間を整数で歌詞エリアに表示
}else if(2.0 >= line_remaining_time && line_remaining_time > 1.0 && $('#count_anime').text() != "1" && $('#count_anime').text() != ""){//間奏ラインの残り時間大体3秒ぐらいのとき
$("#count_anime").html("<span style='color:"+localStorage.getItem('countdown_color')+";'><i>1</i></span>")//残り時間を整数で歌詞エリアに表示
}else if(line_remaining_time <= 1 && $('#count_anime').text() != "GO!" && $('#count_anime').text() != ""){////間奏ラインの残り時間大体1秒ぐらいのとき
$("#count_anime").html("<span style='color:"+localStorage.getItem('countdown_color')+";'><i>GO!</i></span>")//歌詞エリアにGO!と表示する
}
}
}}
}
//プレイリザルト
function typing_result_generator(){
if(typeof lyrics_array !== 'undefined'){
if(!lyrics_array[count+1] && next_char=='' || finished){
if(!ending){
$('#kashi_sub').html("")
update_status()
let typinglog_save = typinglog.concat()
let houti
let word_result = ""
let word_result_real = ""
let word_result_out=""
let word_result_real_out=""
let Typing_Result = '';
let start3 = false;

    number_lyrics = 1
    ending = true
$('<h1 id="result_head" style ="font-size:20px;background-color: rgba(0,0,0,.33);margin:0px!important;padding-bottom: 5px;">Typing Result</h1><div id="typingloglog" style="word-break: break-all;overflow: scroll; max-height: 700px;font-size: 120%;background-color: rgba(0,0,0,.33);font-weight: 600;user-select: none !important;-ms-user-select: none !important;-moz-user-select: none !important;-webkit-user-select: none !important;"></div><br>').insertAfter('#controlbox')

if(typinglog_save.length == 0){
typinglog_save.splice(lyrics_array.length-1, 0, ["1", "", "0", lyrics_array.length-1, 0, 2]);
houti=true
}else if(typinglog_save.length != 0 && lyrics_array[count-1][2] && typing_count_save == typing_count && lyrics_array[count][1] =='end' && finished){
inputline_counter.push(count)
}

for(let m = 0; m < (typinglog_save.length+(inputline_counter.length)); m++){
if(inputline_counter == ''){
if(houti && !lyrics_array[count-1][2]){
typinglog_save.pop()
houti=false
}
break
}
if(!typinglog_save[m]){//ライン番号取得
typinglog_save.splice(m, 0, ["0", "", "0", inputline_counter[0], 0, 2]);
inputline_counter.shift()
}
if(typinglog_save[m][3] > inputline_counter[0]){//ライン番号取得
typinglog_save.splice(m, 0, ["0", "", "0", inputline_counter[0], 0, 2]);
inputline_counter.shift()
}
}

if(!start3){
Typing_Result += (number_lyrics+'/'+line_counter+' '+lyrics_array[logcount-1][2])
start3 = true
number_lyrics = (number_lyrics+1)
}

for(let i = 0; i < typinglog_save.length; i++){//入力した文字の数繰り返す

if(logcount < typinglog_save[i][3] && i >= 1){//ライン番号取得
logcount = typinglog_save[i][3]
if(play_mode == 'normal'){

if(typinglog_save[i-1][5] == 1){
if($("[value=word_result]").prop("checked")){
word_result_out="<br>"+word_result+nokorimoji_log[typinglog_save[i][3]-1]
}
if($("[value=word_result_real]").prop("checked")){
word_result_real_out ="<br>"+word_result_real+nokorimoji_log[typinglog_save[i][3]-1]
}
}else if(typinglog_save[i-1][5] == 0){
if($("[value=word_result]").prop("checked")){
word_result_out="<br>"+word_result+nokorimoji_log[typinglog_save[i][3]-1].replace(/(.)(.*)/,'<span style="color:red;">$1</span>$2')
}
if($("[value=word_result_real]").prop("checked")){
word_result_real_out ="<br>"+word_result_real+nokorimoji_log[typinglog_save[i][3]-1]
}
}

if($("[value=sec]").prop("checked")){

if(nokorimoji_log[typinglog_save[i-1][3]]!=""){
if(typinglog_save[i-1][5] == 0){
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;">' + word_result_out  + word_result_real_out + '</span><br>latency: '+latencylog[typinglog_save[i][3]-1]+', 打/秒: ' +kpmlog[typinglog_save[i][3]-1]+ ' 初速抜き: '+rkpmlog[typinglog_save[i][3]-1]+', miss: '+line_misscount[typinglog_save[i][3]-1]+'<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}else if(typinglog_save[i-1][5] == 1){
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[typinglog_save[i][3]-1]+', 打/秒: '+kpmlog[typinglog_save[i][3]-1]+ ' 初速抜き: '+rkpmlog[typinglog_save[i][3]-1]+', miss: '+line_misscount[typinglog_save[i][3]-1]+'<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}else if(typinglog_save[i-1][5] == 2){
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;"><br>' + nokorimoji_log[typinglog_save[i][3]-1] +'</span><br>latency: null, 打/秒: 0 初速抜き: 0, miss: 0<br><br><span>'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}
}else{
if(typinglog_save[i-1][5] == 1){
Typing_Result += ('<span class="seikou" style="color:#FFFF00;">'+' clear</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[typinglog_save[i][3]-1]+', 打/秒: '+kpmlog[typinglog_save[i][3]-1]+ ' 初速抜き: '+rkpmlog[typinglog_save[i][3]-1]+', miss: '+line_misscount[typinglog_save[i][3]-1]+'<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}else{
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;"><br>' + nokorimoji_log[typinglog_save[i-1][3]] +'</span><br>latency: null, 打/秒: 0 初速抜き: 0, miss: 0<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}
}

}else{

if(nokorimoji_log[typinglog_save[i-1][3]]!=""){
if(typinglog_save[i-1][5] == 0){
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[typinglog_save[i][3]-1]+', kpm: '+(kpmlog[typinglog_save[i][3]-1]*60).toFixed(0)+', rkpm: '+(rkpmlog[typinglog_save[i][3]-1]*60).toFixed(0)+', miss: '+line_misscount[typinglog_save[i][3]-1]+'<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}else if(typinglog_save[i-1][5] == 1){
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[typinglog_save[i][3]-1]+', kpm: '+(kpmlog[typinglog_save[i][3]-1]*60).toFixed(0)+', rkpm: '+(rkpmlog[typinglog_save[i][3]-1]*60).toFixed(0)+', miss: '+line_misscount[typinglog_save[i][3]-1]+'<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}else if(typinglog_save[i-1][5] == 2){
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;"><br>' + nokorimoji_log[typinglog_save[i][3]-1] +'</span><br>latency: null, kpm: 0, rkpm: 0, miss: 0<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}
}else{
if(typinglog_save[i-1][5] == 1){
Typing_Result += ('<span class="seikou" style="color:#FFFF00;">'+' clear</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[typinglog_save[i][3]-1]+', kpm: '+(kpmlog[typinglog_save[i][3]-1]*60).toFixed(0)+', rkpm: '+(rkpmlog[typinglog_save[i][3]-1]*60).toFixed(0)+', miss: '+line_misscount[typinglog_save[i][3]-1]+'<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}else{
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;"><br>' + nokorimoji_log[typinglog_save[i-1][3]] +'</span><br>latency: null, kpm: 0, rkpm: 0, miss: 0<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}
}

}

}else if(play_mode == 'practice'){

if($("[value=word_result]").prop("checked")){
word_result_out="<br>"+word_result
}
if($("[value=word_result_real]").prop("checked")){
word_result_real_out ="<br>"+word_result_real
}

if($("[value=sec]").prop("checked")){

if(nokorimoji_log[typinglog_save[i-1][3]]!=""){
if(typinglog_save[i-1][5] == 1){
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;">' + word_result_out  + word_result_real_out  + '</span><br>latency: '+latencylog[typinglog_save[i][3]-1]+', 打/秒: '+kpmlog[typinglog_save[i][3]-1]+ ' 初速抜き: '+rkpmlog[typinglog_save[i][3]-1]+', miss: '+line_misscount[typinglog_save[i][3]-1]+'<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}
}else{
if(typinglog_save[i-1][5] == 1){
Typing_Result += ('<span class="seikou" style="color:#FFFF00;">'+' clear</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[typinglog_save[i][3]-1]+', 打/秒: '+kpmlog[typinglog_save[i][3]-1]+ ' 初速抜き: '+rkpmlog[typinglog_save[i][3]-1]+', miss: '+line_misscount[typinglog_save[i][3]-1]+'<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}
}

}else{
if(nokorimoji_log[typinglog_save[i-1][3]]!=""){
if(typinglog_save[i-1][5] == 1){
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;">' + word_result_out  + word_result_real_out  + '</span><br>latency: '+latencylog[typinglog_save[i][3]-1]+', kpm: '+(kpmlog[typinglog_save[i][3]-1]*60).toFixed(0)+', rkpm: '+(rkpmlog[typinglog_save[i][3]-1]*60).toFixed(0)+', miss: '+line_misscount[typinglog_save[i][3]-1]+'<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}
}else{
if(typinglog_save[i-1][5] == 1){
Typing_Result += ('<span class="seikou" style="color:#FFFF00;">'+' clear</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[typinglog_save[i][3]-1]+', kpm: '+(kpmlog[typinglog_save[i][3]-1]*60).toFixed(0)+', rkpm: '+(rkpmlog[typinglog_save[i][3]-1]*60).toFixed(0)+', miss: '+line_misscount[typinglog_save[i][3]-1]+'<br><br><span class="result_lyric">'+number_lyrics+'/'+line_counter+' '+lyrics_array[typinglog_save[i][3]-1][2]+'</span>')
}
}

}


}
number_lyrics = (number_lyrics+1)
word_result = ""
word_result_real=""
}


if($("[value=word_result]").prop("checked")){
if(typinglog_save[i][5] == 1){//正当していたときの処理
if(i >= 1 && logcount == typinglog_save[i-1][3] && typinglog_save[i-1][5] == 0){//ミスをしていたら
if(!kana_mode){
if(typinglog_save[i][1] != undefined){
word_result += ('<span style="color:red">'+typinglog_save[i][1].replace(' ', '⎽')+'</span>')
}
}else if(kana_mode){
if(typinglog_save[i][1].length >= 2){
word_result += ('<span style="color:red">'+
typinglog_save[i][1][1].replace('ー', 'ろ').replace('\'', 'ゃ').replace('\]', 'む').replace('#', 'ぁ').replace('$', 'ぅ').replace('%', 'ぇ').replace('&', 'ぉ').replace('^', 'へ')+
'</span>')
}else if(typinglog_save[i][1].length == 1){
word_result += ('<span style="color:red">'+typinglog_save[i][1]+'</span>')
}
}

}else{//してなかったら
if(!kana_mode){
if(typinglog_save[i][1] != undefined){
word_result +=('<span style="color:#60d7ff">'+typinglog_save[i][1].replace(' ', '⎽')+'</span>')
}
}else if(kana_mode){
if(typinglog_save[i][1].length >= 2){
word_result +=('<span style="color:#60d7ff">'+
typinglog_save[i][1][1].replace('ー', 'ろ').replace('\'', 'ゃ').replace('\]', 'む').replace('#', 'ぁ').replace('$', 'ぅ').replace('%', 'ぇ').replace('&', 'ぉ').replace('^', 'へ')+
'</span>')
}else if(typinglog_save[i][1].length == 1){
word_result +=('<span style="color:#60d7ff">'+typinglog_save[i][1]+'</span>')
}
}

}
}
}

if($("[value=word_result_real]").prop("checked")){
if(logcount == typinglog_save[i][3] && typinglog_save[i][5] == 0){//ミス
if(!kana_mode){
if(typinglog_save[i][1] != undefined){
word_result_real += ('<span style="color:red">'+typinglog_save[i][1].replace(' ', '⎽')+'</span>')
}
}else if(kana_mode){
if(typinglog_save[i][1].length >= 2){
word_result_real += ('<span style="color:red">'+
typinglog_save[i][1][1].replace('ー', 'ろ').replace('\'', 'ゃ').replace('\]', 'む').replace('#', 'ぁ').replace('$', 'ぅ').replace('%', 'ぇ').replace('&', 'ぉ').replace('^', 'へ')+
'</span>')
}else if(typinglog_save[i][1].length == 1){
word_result_real += ('<span style="color:red">'+typinglog_save[i][1]+'</span>')
}
}
}else if(logcount == typinglog_save[i][3] && typinglog_save[i][5] == 1){//正当
if(!kana_mode){
if(typinglog_save[i][1] != undefined){
word_result_real +=('<span style="color:#60d7ff">'+typinglog_save[i][1].replace(' ', '⎽')+'</span>')
}
}else if(kana_mode){
if(typinglog_save[i][1].length >= 2){
word_result_real +=('<span style="color:#60d7ff">'+
typinglog_save[i][1][1].replace('ー', 'ろ').replace('\'', 'ゃ').replace('\]', 'む').replace('#', 'ぁ').replace('$', 'ぅ').replace('%', 'ぇ').replace('&', 'ぉ').replace('^', 'へ')+
'</span>')
}else if(typinglog_save[i][1].length == 1){
word_result_real +=('<span style="color:#60d7ff">'+typinglog_save[i][1]+'</span>')
}
}
}
}


if(i+1 == typinglog_save.length){

if($("[value=sec]").prop("checked")){
if(next_char==''){

if(completed){//次の行がend時、ラインクリア
if($("[value=word_result]").prop("checked")){word_result_out="<br>"+word_result}
if($("[value=word_result_real]").prop("checked")){word_result_real_out ="<br>"+word_result_real}
Typing_Result += ('<span class="seikou" style="color:#FFFF00;">'+' clear</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latency.toFixed(3)+', 打/秒: '+line_typingspeed.toFixed(2)+' 初速抜き: '+line_typingspeed_rkpm.toFixed(2)+', miss: '+(typing_miss_count-misstyping_count_save))
}else if(!completed){//次の行がend時、失敗
if(nokorimoji_log[nokorimoji_log.length-1].length != 0){
if($("[value=word_result]").prop("checked")){word_result_out="<br>"+word_result + nokorimoji_log[nokorimoji_log.length-1]}
if($("[value=word_result_real]").prop("checked")){word_result_real_out ="<br>"+word_result_real + nokorimoji_log[nokorimoji_log.length-1]}
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[nokorimoji_log.length-1]+", 打/秒: "+kpmlog[nokorimoji_log.length-1]+' 初速抜き: ' +rkpmlog[nokorimoji_log.length-1]+ ', miss: '+line_misscount[nokorimoji_log.length-1])
}else{
if($("[value=word_result]").prop("checked")){word_result_out="<br>"+word_result}
if($("[value=word_result_real]").prop("checked")){word_result_real_out ="<br>"+word_result_real}
Typing_Result += ('<span class="seikou" style="color:#FFFF00;">'+' clear</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[nokorimoji_log.length-1]+", 打/秒: "+kpmlog[nokorimoji_log.length-1]+' 初速抜き: ' +rkpmlog[nokorimoji_log.length-1]+ ', miss: '+line_misscount[nokorimoji_log.length-1])
}
}
}else if(!completed && next_char!=''){
if(!kana_mode){
if($("[value=word_result]").prop("checked")){word_result_out="<br>"+word_result + (String(next_char[1]+line_input_roma.join('')).replace('undefined',''))}
if($("[value=word_result_real]").prop("checked")){word_result_real_out ="<br>"+word_result_real + (String(next_char[1]+line_input_roma.join('')).replace('undefined',''))}
}else if(kana_mode){
if($("[value=word_result]").prop("checked")){word_result_out="<br>"+word_result + (String(next_char[0]+line_input_kana.join('')).replace('undefined',''))}
if($("[value=word_result_real]").prop("checked")){word_result_real_out ="<br>"+word_result_real + (String(next_char[0]+line_input_kana.join('')).replace('undefined',''))}
}
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out +'</span><br>latency: '+(latency).toFixed(3)+', 打/秒: '+line_typingspeed.toFixed(2)+' 初速抜き: '+line_typingspeed_rkpm.toFixed(2)+', miss: '+(typing_miss_count-misstyping_count_save))
}
}else{
if(next_char==''){
if(completed){//次の行がend時、ラインクリア
if($("[value=word_result]").prop("checked")){word_result_out="<br>"+word_result}
if($("[value=word_result_real]").prop("checked")){word_result_real_out ="<br>"+word_result_real}
Typing_Result += ('<span class="seikou" style="color:#FFFF00;">'+' clear</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latency.toFixed(3)+', kpm: '+(line_typingspeed.toFixed(2)*60).toFixed(0)+', rkpm: '+(line_typingspeed_rkpm.toFixed(2)*60).toFixed(0)+', miss: '+(typing_miss_count-misstyping_count_save))
}else if(!completed){//次の行がend時、失敗
if(nokorimoji_log[nokorimoji_log.length-1].length != 0){
if($("[value=word_result]").prop("checked")){word_result_out="<br>"+word_result + nokorimoji_log[nokorimoji_log.length-1]}
if($("[value=word_result_real]").prop("checked")){word_result_real_out ="<br>"+word_result_real + nokorimoji_log[nokorimoji_log.length-1]}
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[nokorimoji_log.length-1]+", kpm: "+(kpmlog[nokorimoji_log.length-1]*60).toFixed(0) + ', rkpm:' +(line_typingspeed_rkpm*60).toFixed(0)+ ', miss: '+line_misscount[nokorimoji_log.length-1])
}else{
if($("[value=word_result]").prop("checked")){word_result_out="<br>"+word_result}
if($("[value=word_result_real]").prop("checked")){word_result_real_out ="<br>"+word_result_real}
Typing_Result += ('<span class="seikou" style="color:#FFFF00;">'+' clear</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out + '</span><br>latency: '+latencylog[nokorimoji_log.length-1]+", kpm: "+(kpmlog[nokorimoji_log.length-1]*60).toFixed(0) + ', rkpm:' +(rkpmlog[nokorimoji_log.length-1]*60).toFixed(0)+ ', miss: '+line_misscount[nokorimoji_log.length-1])
}
}
}else if(!completed && next_char != ''){
if(!kana_mode){
if($("[value=word_result]").prop("checked")){word_result_out="<br>"+word_result + (String(next_char[1]+line_input_roma.join('')).replace('undefined',''))}
if($("[value=word_result_real]").prop("checked")){word_result_real_out ="<br>"+word_result_real + (String(next_char[1]+line_input_roma.join('')).replace('undefined',''))}
}else if(kana_mode){
if($("[value=word_result]").prop("checked")){word_result_out="<br>"+word_result + (String(next_char[0]+line_input_kana.join('')).replace('undefined',''))}
if($("[value=word_result_real]").prop("checked")){word_result_real_out ="<br>"+word_result_real + (String(next_char[0]+line_input_kana.join('')).replace('undefined',''))}
}
Typing_Result += ('<span class="sippai" style="color:#F12FFF;">'+' failure</span><span style="text-transform:uppercase;">' + word_result_out + word_result_real_out +'</span><br>latency: '+(latency).toFixed(3)+', kpm: '+(line_typingspeed.toFixed(2)*60).toFixed(0)+', rkpm: '+(line_typingspeed_rkpm.toFixed(2)*60).toFixed(0)+', miss: '+(typing_miss_count-misstyping_count_save))
}
}
}
if(i+2 == typinglog_save.length+1){
$('#typingloglog').append(Typing_Result)
$('<h6 style ="font-size:130%;background-color: rgba(0,0,0,.33);margin:0px!important;padding-bottom: 5px;">Score Penalty<br>Missd: '+ (-typing_miss_count*(((parseInt(score_per_char)/20)/100)/4)).toFixed(2)+'<br>Escape: '+(((Math.floor(parseInt(score)/20)/100)+(typing_miss_count*(((parseInt(score_per_char)/20)/100)/4)))-100).toFixed(2).replace(/^[-]?(\d*|0)(\.01)?$/,'0.00')+'</h6>').insertAfter('#result_head')
$('<h5 style ="background-color: rgba(0,0,0,.33);margin:0px!important;padding-bottom: 5px;">'+'<span style="color:#FFFF00;">'+$('#typingloglog').find('.seikou').length+' clear</span> / <span style="color:#FFFF00;"><span style="color:#F12FFF;">'+$('#typingloglog').find('.sippai').length+' failure</span></h5>').insertAfter('#result_head')
}
}
}
}
}
}
//関数を適用
$(function(){
mod_setting_open()
load_sound()
add_css()
read_localstorage()
lyricsarray_reading()
play_preparation()

//interval 50msで更新する機能
setInterval(function (){
checkbox_check()
time_calculation()
localstrage_save()

if(typeof is_played !== 'undefined'){
typing_result_generator()

if(is_played && player.getPlayerState() == 1){
if(!finished){
spacekey_skipguide()
sec_countdownanime()
}
}
}
},50);
});

const ranking_length = $(".list-group ").find(".player_ranking").length

$(window).on('load', function () {
//スコアランキングから登録者数とスコアを抽出
for (let i = 0;i<ranking_length; i++) {
 ranking_array.unshift(Number($(".p-2 > .player_ranking")[i].textContent.replace( ':', '' )))
}
})

//関数名の変更はNG
function updateLineView() {
if (!$("#kashi_sub")[0]) {
// DOM要素がない場合は初期化
        $("#kashi_roma").after($("<div>").attr('id', 'kashi_sub'));
        // モードによって出力を変更
        // わかりにくいけど #kashi_roma = main #kashi_sub = sub
}

if(!kana_mode) {
if (mode == 'roma') {
$("#kashi_roma").addClass("roma_input_dom");

if($("[value=sub]").prop("checked")){
$("#kashi_sub").addClass("kana_input_dom");
}else if(!$("[value=sub]").prop("checked")){
$("#kashi_sub").removeClass("kana_input_dom");
$("#kashi_sub").html("")
}

}else if(mode == 'kana'){
$("#kashi_roma").addClass("kana_input_dom");
$("#kashi_sub").css({'cssText':'text-transform:uppercase;'});

if($("[value=sub]").prop("checked")){
$("#kashi_sub").addClass("roma_input_dom");
}else if(!$("[value=sub]").prop("checked")){
$("#kashi_sub").removeClass("roma_input_dom");
$("#kashi_sub").html("")

}
}
}

//////////////////////////////////////////////////////////////////////////////


let kashi_kana_html
let kashi_roma_html

//かな入力モードの表示(かな表示のみ)
if(kana_mode){
if($("[value=letter_scroll]").prop("checked")){
$("#kashi_roma").html("<span style='position: absolute;bottom: 0;'><span class='correct_input' style='color:"+(next_char.length == 0 ? localStorage.getItem('lineclear_color') : localStorage.getItem('correctword_color'))+";'>"+already_input.replace(/ /g, '⎽').substr(-localStorage.getItem('letter_scroll_kana'),localStorage.getItem('letter_scroll_kana'))+"</span><span style='color:"+localStorage.getItem('first_color1')+";'><span class='input_letter' data-kana='・' style='color:"+localStorage.getItem('miss_color')+"!important;'></span>" + String(next_char[0] || []) + "</span><span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>" + String(line_input_kana.join('')+ "</span></span>")).toLowerCase();
if($("[value=eng_highlight]").prop("checked")){
if(next_char.length != 0 && typeof lyrics_array[count-1] !== 'undefined' && ((/.*[ぁ-ん|ヴ|ゔ|ー|、|。|゛]$/.test(already_input)||already_input=='') && (/^[ぁ-ん|ヴ|ゔ|ー|、|。|゛].*/.test(line_input_kana[0]) || line_input_kana[0] == undefined)) == false ){
if(/^(?!\s)[^ぁ-ん|ヴ|ゔ|ー|、|。|゛|\s][a-zA-Z0-9|%|'|!|\?|\,|\.|"|&|\-]*/.test(next_char + line_input_kana.join(''))){
$("#kashi_roma").html("<span style='position: absolute;bottom: 0;'><span class='correct_input' style='color:"+(next_char.length == 0 ? localStorage.getItem('lineclear_color') : localStorage.getItem('correctword_color'))+";'>"+already_input.replace(/ /g, '⎽').substr(-localStorage.getItem('letter_scroll_kana'),localStorage.getItem('letter_scroll_kana'))+"</span><span style='color:"+localStorage.getItem('first_color1')+";text-decoration: underline;'><span class='input_letter' data-kana='・' style='color:"+localStorage.getItem('miss_color')+"!important;'></span>" + String(next_char[0] || []) + "</span><span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>" + String(line_input_kana.join('')).replace(/([a-zA-Z0-9|%|'|!|\?|\,|\.|"|&|\-]*)(.*)/,"<span style='color:"+localStorage.getItem('first_color1')+";text-decoration: underline;'>$1</span>$2") + "</span></span>").toLowerCase();
}
}
}
}else{
$("#kashi_roma").html("<span><span class='correct_input' style='color:"+(next_char.length == 0 ? localStorage.getItem('lineclear_color') : localStorage.getItem('correctword_color'))+";'>"+already_input.replace(/ /g, '⎽')+"</span><span style='color:"+localStorage.getItem('first_color1')+";'><span class='input_letter' data-kana='・' style='color:"+localStorage.getItem('miss_color')+"!important;'></span>" + String(next_char[0] || []) + "</span><span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>" + String(line_input_kana.join('')+ "</span></span>")).toLowerCase();
if($("[value=eng_highlight]").prop("checked")){
if(next_char.length != 0 && typeof lyrics_array[count-1] !== 'undefined' && ((/.*[ぁ-ん|ヴ|ゔ|ー|、|。|゛]$/.test(already_input)||already_input=='') && (/^[ぁ-ん|ヴ|ゔ|ー|、|。|゛].*/.test(line_input_kana[0]) || line_input_kana[0] == undefined)) == false ){
if(/^(?!\s)[^ぁ-ん|ヴ|ゔ|ー|、|。|゛|\s][a-zA-Z0-9|%|'|!|\?|\,|\.|"|&|\-]*/.test(next_char + line_input_kana.join(''))){
$("#kashi_roma").html("<span><span class='correct_input' style='color:"+(next_char.length == 0 ? localStorage.getItem('lineclear_color') : localStorage.getItem('correctword_color'))+";'>"+already_input.replace(/ /g, '⎽')+"</span><span style='color:"+localStorage.getItem('first_color1')+";text-decoration: underline;'><span class='input_letter' data-kana='・' style='color:"+localStorage.getItem('miss_color')+"!important;'></span>" + String(next_char[0] || []) + "</span><span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>" + String(line_input_kana.join('')).replace(/([a-zA-Z0-9|%|'|!|\?|\,|\.|"|&|\-]*)(.*)/,"<span style='color:"+localStorage.getItem('first_color1')+";text-decoration: underline;'>$1</span>$2") + "</span></span>").toLowerCase();
}
}
}
}

//ローマ字モードの表示(ローマ・かな表示両方)
}else if(!kana_mode){

//スクロールモード
if($("[value=letter_scroll]").prop("checked")){
kashi_kana_html = ("<span style='position: absolute;bottom: 0;'><span class='correct_input' style='color:"+(next_char[0].length == 0 ? localStorage.getItem('lineclear_color') : localStorage.getItem('correctword_color'))+";'>"+already_input.replace(/ /g, '⎽').substr(-localStorage.getItem('letter_scroll_kana'),localStorage.getItem('letter_scroll_kana'))+"</span><span style='color:"+localStorage.getItem('first_color1')+";'><span class='input_letter' data-kana='・' style='color:"+localStorage.getItem('miss_color')+"!important;'></span>" + String(next_char[0] || []) + "</span><span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>" + String(line_input_kana.join('')+ "</span></span>")).toLowerCase();
kashi_roma_html = "<span style='position: absolute;bottom: 0;'><span class='correct_input' style='color:"+(next_char[0].length == 0 ? localStorage.getItem('lineclear_color') : localStorage.getItem('correctword_color'))+";'>"+already_input_roma.replace(/ /g, '⎽').substr(-localStorage.getItem('letter_scroll_roma'),localStorage.getItem('letter_scroll_roma'))+"</span>" + String(next_char[1] || '').replace(/(.)(\S*)/, "<span style='color:"+localStorage.getItem('first_color1')+";'><span class='input_letter' data-kana='・' style='color:"+localStorage.getItem('miss_color')+"!important;'></span>$1</span><span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>$2</span>") + "<span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>" + String(line_input_roma.join('')+ "</span></span>");

//英単語をハイライトするモード
if($("[value=eng_highlight]").prop("checked")){
if(next_char[0].length != 0 && typeof lyrics_array[count-1] !== 'undefined' && ((/.*[ぁ-ん|ヴ|ゔ|ー|、|。|゛]$/.test(already_input)||already_input=='') && (/^[ぁ-ん|ヴ|ゔ|ー|、|。|゛].*/.test(line_input_kana[0]) || line_input_kana[0] == undefined)) == false ){
if(/^(?!\s)[^ぁ-ん|ヴ|ゔ|ー|、|。|\s][a-zA-Z0-9|%|'|!|\?|\,|\.|"|&|\-]*/.test(next_char[0] + line_input_kana.join(''))){
kashi_kana_html =("<span style='position: absolute;bottom: 0;'><span class='correct_input' style='color:"+(next_char[0].length == 0 ? localStorage.getItem('lineclear_color') : localStorage.getItem('correctword_color'))+";'>"+already_input.replace(/ /g, '⎽').substr(-localStorage.getItem('letter_scroll_kana'),localStorage.getItem('letter_scroll_kana'))+"</span><span style='color:"+localStorage.getItem('first_color1')+";text-decoration: underline;'><span class='input_letter' data-kana='・' style='color:"+localStorage.getItem('miss_color')+"!important;'></span>" + String(next_char[0] || []) + "</span><span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>" + String(line_input_kana.join('')).replace(/([a-zA-Z0-9|%|'|!|\?|\,|\.|"|&|\-]*)(.*)/,"<span style='color:"+localStorage.getItem('first_color1')+";text-decoration: underline;'>$1</span>$2") + "</span></span>").toLowerCase();
}
}
}
//非スクロールモード
}else if(!$("[value=letter_scroll]").prop("checked")){
kashi_kana_html = ("<span><span class='correct_input' style='color:"+(next_char[0].length == 0 ? localStorage.getItem('lineclear_color') : localStorage.getItem('correctword_color'))+";'>"+already_input.replace(/ /g, '⎽')+"</span><span style='color:"+localStorage.getItem('first_color1')+";'><span class='input_letter' data-kana='・' style='color:"+localStorage.getItem('miss_color')+"!important;'></span>" + String(next_char[0] || []) + "</span><span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>" + String(line_input_kana.join('')+ "</span></span>")).toLowerCase();
kashi_roma_html = "<span><span class='correct_input' style='color:"+(next_char[0].length == 0 ? localStorage.getItem('lineclear_color') : localStorage.getItem('correctword_color'))+";'>"+already_input_roma.replace(/ /g, '⎽')+"</span>" + String(next_char[1] || '').replace(/(.)(\S*)/, "<span style='color:"+localStorage.getItem('first_color1')+";'><span class='input_letter' data-kana='・' style='color:"+localStorage.getItem('miss_color')+"!important;'></span>$1</span><span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>$2</span>") + "<span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>" + String(line_input_roma.join('')+ "</span>");

//英単語をハイライトするモード
if($("[value=eng_highlight]").prop("checked")){
if(next_char[0].length != 0 && typeof lyrics_array[count-1] !== 'undefined' && ((/.*[ぁ-ん|ヴ|ゔ|ー|、|。|゛]$/.test(already_input)||already_input=='') && (/^[ぁ-ん|ヴ|ゔ|ー|、|。|゛].*/.test(line_input_kana[0]) || line_input_kana[0] == undefined)) == false ){
if(/^(?!\s)[^ぁ-ん|ヴ|ゔ|ー|、|。|\s][a-zA-Z0-9|%|'|!|\?|\,|\.|"|&|\-]*/.test(next_char[0] + line_input_kana.join(''))){
kashi_kana_html =("<span><span class='correct_input' style='color:"+(next_char[0].length == 0 ? localStorage.getItem('lineclear_color') : localStorage.getItem('correctword_color'))+";'>"+already_input.replace(/ /g, '⎽')+"</span><span style='color:"+localStorage.getItem('first_color1')+";text-decoration: underline;'><span class='input_letter' data-kana='・' style='color:"+localStorage.getItem('miss_color')+"!important;'></span>" + String(next_char[0] || []) + "</span><span class='typing_word' style='color:"+localStorage.getItem('word_color')+";'>" + String(line_input_kana.join('')).replace(/([a-zA-Z0-9|%|'|!|\?|\,|\.|"|&|\-]*)(.*)/,"<span style='color:"+localStorage.getItem('first_color1')+";text-decoration: underline;'>$1</span>$2") + "</span></span>").toLowerCase();
}
}
}

}

//DOMにタイピングワードを表示
$(".roma_input_dom").html(kashi_roma_html);
$(".kana_input_dom").html(kashi_kana_html);
}
}


function shortcut_key_esc_enter(){
//ショートカットキー
if(event.keyCode == 27){//Escでポーズ・再生(プレイ開始のショートカットキーとしても使用可)
event.preventDefault();
if(!is_played){
player.playVideo()
}else if(is_played) {
if(player.getPlayerState() == 1){
    player.pauseVideo()
}else{
    player.playVideo()
}
}
}
if(finished && event.keyCode == 13 && !ranking && play_mode=="normal"){//曲終了、Enterキーで記録送信
            submit_score();
            ranking = true;
}
}

$("<span>(F10)</span>").insertAfter('#speed')
function shortcut_key_playing(){
    if(event.keyCode ==121) {//F10で倍速
            speedup();
            event.preventDefault();
    }else if(event.keyCode ==9) {//TABキー、Firefoxのクイック検索ショートカットキーを無効化
        event.preventDefault();
        }
if(player.getPlayerState() == 1){
    if(event.keyCode == 32 && $("#skip_guide").text() == "Type Space key to skip. ⏩"){//スペースキーでスキップ
toggle_skip();
window.setTimeout(toggle_skip, 25);
}else  if(event.keyCode == 13 && $("#skip_guide").text() == "Type Enter key to skip. ⏩"){//Enterキーでスキップ
toggle_skip();
window.setTimeout(toggle_skip, 25);
}
}
}

function miss_effect(){
if($("[value=combo_display]").prop("checked")){
$("#combo_stat2").html("<div style='color:"+localStorage.getItem('combo_color')+";'>"+0+"</div>")
}
if($("[value=miss_sound]").prop("checked")) {//ミス音
if(!combo100){//ミス音

miss_type_play()

}else if(combo100){//100 combo以上でミスするとcombo break音
if($("[value=combo_break_sound]").prop("checked")){
    combo_break.play();
}
miss_type_play()
    combo100 = false;//フラグOFF
}
}
    if($("[value=miss_on]").prop("checked")){//ミス表示を追加
        if (mode == 'kana') {//かな表示専用のミス表示
if(/[\u3042\u3044\u3046\u3048\u304a-\u3062\u3064-\u3082\u3084\u3086\u30F4\u3088-\u3094\u0025\u30FC\uFF5E\uFF20\uFF03\uFF05\uFF08\uFF09\uFF5B\uFF5D\u300C\u300D\uFF1C\uFF1E\u30F0\u3090]+$/.test(next_char[0][0][0])){//全角全角数字%ヴ@#%(){}「」<>
            $("#kashi_roma .input_letter").addClass("missmark");
}else if(/[\u3041\u3043\u3045\u3047\u3049\u3063\u3083\u3085\u3087\u0023\u0040\uFF41-\uFF5A\uFF21-\uFF3A\uFF01\uFF1F\u30FB\uFF04\uFF06\uFF0A\uFF0B\uFF1A\uFF1B\uFF3F\uFF5C\uFFE5\uFF1D\u3091\u30F1]+$/.test(next_char[0][0][0])){//ぁぃぅぇぉっゃゅょ#@全角英字大文字小文字!?・$&*+_|=¥
            $("#kashi_roma .input_letter").addClass("missmark1");
}else if(/[\u006E\u0070\u0071\u0075\u0026\u0067\u006B\u003C\u003E]+$/.test(next_char[0][0][0])){//npqu&gk<>
            $("#kashi_roma .input_letter").addClass("missmark2");
}else if(/[\u0063\u0064\u0065\u006F\u0068\u0062\u0054\u002B]+$/.test(next_char[0][0][0])){//cdeogT+
            $("#kashi_roma .input_letter").addClass("missmark3");
}else if(/[\u0078\u0079\u0061\u0024\u005F\u005C]+$/.test(next_char[0][0][0])){//xya$_\
            $("#kashi_roma .input_letter").addClass("missmark4");
}else if(/[\u003F\u0076\u0072\u0073\u007A]+$/.test(next_char[0][0][0])){//?vsrz
            $("#kashi_roma .input_letter").addClass("missmark5");
}else if(/[\u006A\u0066\u0074\u005E\u002A]+$/.test(next_char[0][0][0])){//jft^*
            $("#kashi_roma .input_letter").addClass("missmark6");
}else if(/[\u0021]+$/.test(next_char[0][0][0])){//!
            $("#kashi_roma .input_letter").addClass("missmark7");
}else if(/[\u002C\u002E\s\u3001\u3002\u201D\u2019\uFF3E\uFF40\u0028\u0029\u007B\u007D\u005B\u005D\u0060\u003A\u003B\u007C]+$/.test(next_char[0][0][0])){//,.半角スペース、。”’`^(){}[]:;
            $("#kashi_roma .input_letter").addClass("missmark8");
}else if(/[\u0027\u0069\u006C]+$/.test(next_char[0][0][0])){//'il
            $("#kashi_roma .input_letter").addClass("missmark9");
}else if(/[\u006D\uFF10-\uFF19]+$/.test(next_char[0][0][0])){//全角数字m
            $("#kashi_roma .input_letter").addClass("missmark10");
}else if(/[\u0077\u004D]+$/.test(next_char[0][0][0])){//wM
            $("#kashi_roma .input_letter").addClass("missmark11");
}else if(/[\u0041-\u0044\u004B\u004C\u0052\u0055]+$/.test(next_char[0][0][0])){//ABCDKLRU
            $("#kashi_roma .input_letter").addClass("missmark12");
}else if(/[\u0045\u0046\u0050\u0059\u005A\u0030-\u0039]+$/.test(next_char[0][0][0])){//EFYZ半角01234566789
            $("#kashi_roma .input_letter").addClass("missmark13");
}else if(/[\u0047\u0048\u004E\u0051]+$/.test(next_char[0][0][0])){//GHNQ
            $("#kashi_roma .input_letter").addClass("missmark14");
}else if(/[\u0049\u004A\u0022]+$/.test(next_char[0][0][0])){//IJ"
            $("#kashi_roma .input_letter").addClass("missmark15");
}else if(/[\u004F]+$/.test(next_char[0][0][0])){//O
            $("#kashi_roma .input_letter").addClass("missmark16");
}else if(/[\u0053\u0056\u0058\u002F]+$/.test(next_char[0][0][0])){//SVX/
            $("#kashi_roma .input_letter").addClass("missmark17");
}else if(/[\u0057]+$/.test(next_char[0][0][0])){//W
            $("#kashi_roma .input_letter").addClass("missmark18");
}else if(/[\u002D]+$/.test(next_char[0][0][0])){//-
            $("#kashi_roma .input_letter").addClass("missmark19");
}else if(/[\u003D\u007E]+$/.test(next_char[0][0][0])){//=~
            $("#kashi_roma .input_letter").addClass("missmark20");
}
}else if (mode == 'roma') {//ローマ字表示専用のミス表示
if(/[\u3042\u3044\u3046\u3048\u304a-\u3062\u3064-\u3082\u3084\u3086\u30F4\u3088-\u3094\u0025\u30FC\uFF5E\uFF20\uFF03\uFF05\uFF08\uFF09\uFF5B\uFF5D\u300C\u300D\uFF1C\uFF1E\u30F0\u3090]+$/.test(next_char[1][0][0])){//全角全角数字%ヴ@#%(){}「」<>
            $("#kashi_roma .input_letter").addClass("missmark");
}else if(/[\u3041\u3043\u3045\u3047\u3049\u3063\u3083\u3085\u3087\u0023\u0040\uFF41-\uFF5A\uFF21-\uFF3A\uFF01\uFF1F\u30FB\uFF04\uFF06\uFF0A\uFF0B\uFF1A\uFF1B\uFF3F\uFF5C\uFFE5\uFF1D\u3091\u30F1]+$/.test(next_char[1][0][0])){//ぁぃぅぇぉっゃゅょ#@全角英字大文字小文字!?・$&*+_|=¥
            $("#kashi_roma .input_letter").addClass("missmark1");
}else if(/[\u006E\u0070\u0071\u0075\u0026\u0067\u006B\u003C\u003E]+$/.test(next_char[1][0][0])){//npqu&gk<>
            $("#kashi_roma .input_letter").addClass("missmark2");
}else if(/[\u0063\u0064\u0065\u006F\u0068\u0062\u0054\u002B]+$/.test(next_char[1][0][0])){//cdeogT+
            $("#kashi_roma .input_letter").addClass("missmark3");
}else if(/[\u0078\u0079\u0061\u0024\u005F\u005C]+$/.test(next_char[1][0][0])){//xya$_\
            $("#kashi_roma .input_letter").addClass("missmark4");
}else if(/[\u003F\u0076\u0072\u0073\u007A]+$/.test(next_char[1][0][0])){//?vsrz
            $("#kashi_roma .input_letter").addClass("missmark5");
}else if(/[\u006A\u0066\u0074\u005E\u002A]+$/.test(next_char[1][0][0])){//jft^*
            $("#kashi_roma .input_letter").addClass("missmark6");
}else if(/[\u0021]+$/.test(next_char[1][0][0])){//!
            $("#kashi_roma .input_letter").addClass("missmark7");
}else if(/[\u002C\u002E\s\u3001\u3002\u201D\u2019\uFF3E\uFF40\u0028\u0029\u007B\u007D\u005B\u005D\u0060\u003A\u003B\u007C]+$/.test(next_char[1][0][0])){//,.半角スペース、。”’`^(){}[]:;
            $("#kashi_roma .input_letter").addClass("missmark8");
}else if(/[\u0027\u0069\u006C]+$/.test(next_char[1][0][0])){//'il
            $("#kashi_roma .input_letter").addClass("missmark9");
}else if(/[\u006D\uFF10-\uFF19]+$/.test(next_char[1][0][0])){//全角数字m
            $("#kashi_roma .input_letter").addClass("missmark10");
}else if(/[\u0077\u004D]+$/.test(next_char[1][0][0])){//wM
            $("#kashi_roma .input_letter").addClass("missmark11");
}else if(/[\u0041-\u0044\u004B\u004C\u0052\u0055]+$/.test(next_char[1][0][0])){//ABCDKLRU
            $("#kashi_roma .input_letter").addClass("missmark12");
}else if(/[\u0045\u0046\u0050\u0059\u005A\u0030-\u0039]+$/.test(next_char[1][0][0])){//EFYZ半角01234566789
            $("#kashi_roma .input_letter").addClass("missmark13");
}else if(/[\u0047\u0048\u004E\u0051]+$/.test(next_char[1][0][0])){//GHNQ
            $("#kashi_roma .input_letter").addClass("missmark14");
}else if(/[\u0049\u004A\u0022]+$/.test(next_char[1][0][0])){//IJ"
            $("#kashi_roma .input_letter").addClass("missmark15");
}else if(/[\u004F]+$/.test(next_char[1][0][0])){//O
            $("#kashi_roma .input_letter").addClass("missmark16");
}else if(/[\u0053\u0056\u0058\u002F]+$/.test(next_char[1][0][0])){//SVX/
            $("#kashi_roma .input_letter").addClass("missmark17");
}else if(/[\u0057]+$/.test(next_char[1][0][0])){//W
            $("#kashi_roma .input_letter").addClass("missmark18");
}else if(/[\u002D]+$/.test(next_char[1][0][0])){//-
            $("#kashi_roma .input_letter").addClass("missmark19");
}else if(/[\u003D\u007E]+$/.test(next_char[1][0][0])){//=~
            $("#kashi_roma .input_letter").addClass("missmark20");
}
}
    }
}

function typesound(){
if(already_input_roma.length == 1 ||already_input.length == 1){
latency_flag=true
}
if($("[value=combo_display]").prop("checked")){
if(combo>=1 && $("[value=combo_animation]").prop("checked")){
$("#combo_stat2").html("<div style='color:"+localStorage.getItem('combo_color')+";' class='combo_animated'id='combo_anime'>"+combo+"</div>")
}else if(combo>=1 && !$("[value=combo_animation]").prop("checked")){
$("#combo_stat2").html("<div style='color:"+localStorage.getItem('combo_color')+";'>"+combo+"</div>")
}
}

if (!completed){//combo継続中
latency_flag=true
$("span").removeClass("missmark");//ミス表示削除
if ($("[value=type_sound]").prop("checked")) {//打鍵音
key_type_play()
}
}else if(!clear_sound_flag){
line_clear_process()
clear_sound_flag=true
if($("[value=combo_display]").prop("checked")){
if($("[value=combo_animation]").prop("checked")){
$("#combo_stat2").html("<div style='color:"+localStorage.getItem('combo_color')+";' class='combo_animated'id='combo_anime'>"+combo+"</div>")
}else if(!$("[value=combo_animation]").prop("checked")){
$("#combo_stat2").html("<div style='color:"+localStorage.getItem('combo_color')+";'>"+combo+"</div>")
}
}
if($("[value=clear_sound]").prop("checked")){
clear_type_play()
}else if(!$("[value=clear_sound]").prop("checked") && $("[value=type_sound]").prop("checked")){
key_type_play()
}
}
if(combo >= 100){//100combo以上のフラグON
    combo100 = true;
}
}


$(window).keydown(function(e){
shortcut_key_esc_enter()
if(is_played && !finished){
shortcut_key_playing()

if(player.getPlayerState() == 1 || play_mode=="practice"){


//ランキングのスコアを抜かした時の処理
if((parseInt(score)/20)/100 >= ranking_array[0]){//次の目標スコアを超えた時

for(let i = 0; i < ranking_length; i++){//現在の自分のスコアより下のスコアを削除
ranking_array.shift();
    if((parseInt(score)/20)/100 < ranking_array[0]){//目標スコアが自分のスコアより高くなったらループ終わり
        break;
    }
}
}

if(!kana_mode){
if(play_mode=="practice"){
if(player.getPlayerState() == 2 && !practice_failure){
    kpmlog.push((line_typingspeed).toFixed(2))
    rkpmlog.push((line_typingspeed_rkpm).toFixed(2))
    nokorimoji_log.push(next_char[1]+line_input_roma.join(''))
    line_misscount.push((typing_miss_count-misstyping_count_save))
    latencylog.push(latency.toFixed(3))
practice_failure=true
         }
}
}else if(kana_mode){
if(play_mode=="practice"){
if(player.getPlayerState() == 2 && !practice_failure){
    kpmlog.push((line_typingspeed).toFixed(2))
    rkpmlog.push((line_typingspeed_rkpm).toFixed(2))
    nokorimoji_log.push(next_char[0]+line_input_kana.join(''))
    line_misscount.push((typing_miss_count-misstyping_count_save))
    latencylog.push(latency.toFixed(3))
practice_failure=true
         }
}

         }

}}
})


/**
*@プレイ中の処理変更 ここまで---
*/
/////////////////////////////////////////////////////////////////////////////////////////////////
var combo_break;
var gameover_sound
//効果音ロード
function load_sound(){
    combo_break = new Audio();
    combo_break.src = "/sounds/combo_break.mp3";
    combo_break.preload

gameover_sound= new Audio();
    gameover_sound.src = "/sounds/gameover.mp3";
    gameover_sound.preload
}
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var key_type = new AudioContext();
var miss_type = new AudioContext();
var clear_type = new AudioContext();

key_type_load();
function key_type_load(){
var request_key_type = new XMLHttpRequest();
request_key_type.open('GET', "/sounds/key_type.mp3", true);
request_key_type.responseType = 'arraybuffer';
request_key_type.onload = function() {
        key_type.decodeAudioData(request_key_type.response, function(buffer) {
                audio_buffer_key_type = buffer;
        }, function(){
                //エラー
        }
        );
};
request_key_type.send();
}
function key_type_play(){
var key_type_gain = key_type.createGain();
var key_type_source = key_type.createBufferSource();
key_type_source.buffer = audio_buffer_key_type;
key_type_source.connect(key_type_gain);
key_type_gain.connect(key_type.destination);
if (is_played && !finished) {
if($("[value=Interlocking_volume]").prop("checked")){
if($('#volume').text()){
key_type_gain.gain.value = ($('#volume').text()/100)
}}
    else{
key_type_gain.gain.value = $('[name="effect_volume_type"]').val()/100
}}
key_type_source.start(0);
}
miss_type_load();
function miss_type_load(){
var request_miss_type = new XMLHttpRequest();
request_miss_type.open('GET', "/sounds/miss_type.mp3", true);
request_miss_type.responseType = 'arraybuffer';
request_miss_type.onload = function() {
        miss_type.decodeAudioData(request_miss_type.response, function(buffer) {
                audio_buffer_miss_type = buffer;
        }, function(){
                //エラー
        }
        );
};
request_miss_type.send();
}
function miss_type_play(){
var miss_type_gain = miss_type.createGain();
var miss_type_source = miss_type.createBufferSource();
miss_type_source.buffer = audio_buffer_miss_type;
miss_type_source.connect(miss_type_gain);
miss_type_gain.connect(miss_type.destination);
if (is_played && !finished) {
if($("[value=Interlocking_volume]").prop("checked")){
if($('#volume').text()){
miss_type_gain.gain.value = ($('#volume').text()/100)
}}
    else{
miss_type_gain.gain.value = $('[name="effect_volume_type"]').val()/100
}}
miss_type_source.start(0);
}
clear_type_load();
function clear_type_load(){
var request_clear_type = new XMLHttpRequest();
request_clear_type.open('GET', "/sounds/clear_type.mp3", true);
request_clear_type.responseType = 'arraybuffer';
request_clear_type.onload = function() {
        clear_type.decodeAudioData(request_clear_type.response, function(buffer) {
                audio_buffer_clear_type = buffer;
        }, function(){
                //エラー
        }
        );
};
request_clear_type.send();
}
function clear_type_play(){
var clear_type_gain = clear_type.createGain();
var clear_type_source = clear_type.createBufferSource();
clear_type_source.buffer = audio_buffer_clear_type;
clear_type_source.connect(clear_type_gain);
clear_type_gain.connect(clear_type.destination);
if (is_played && !finished) {
if($("[value=Interlocking_volume]").prop("checked")){
if($('#volume').text()){
clear_type_gain.gain.value = ($('#volume').text()/100)
}}
    else{
clear_type_gain.gain.value = $('[name="effect_volume_type"]').val()/100
}}
clear_type_source.start(0);
}

//設定リセット関数
function setting_reset(){
    var res = confirm("チェックボックス・効果音音量・スクロール量を初期設定に戻します。よろしいですか?");
    if( res == true ) {
$("[value=skip_space],[value=miss_on],[value=chiruda_chouoxn],[value=gameover_sound],[value=anime_count],[value=font_Gothic],[value=bolding],[value=default],[value=sub],[value=Interlocking_volume],[value=sec],[value=skip_guide],[value=score],[value=miss],[value=acc],[value=combo_counter],[value=type_counter],[value=clear_counter]").prop('checked', true);
$("[value=mizumasi],[value=perfect_mode],[value=combo_animation],[value=next_lyric_hidden],[value=next_lyric_hidden],[value=character_spacing],[value=letter_scroll],[value=line_hidden],[value=eng_highlight],[value=type_sound],[value=miss_sound],[value=clear_sound],[value=combo_break_sound],[value=combo_display]").prop('checked', false);
$("[name=effect_volume_type],[name=effect_volume_miss],[name=effect_volume_clear]").val(70)
$('[name="letter_scroll_roma"]').val(16)
$('[name="letter_scroll_kana"]').val(10)
$('[name="font_size_kana"],[name="font_size_roma"]').val(17.5)

setting_change()
    }

}
function effectcolor_reset(){
    var res = confirm("エフェクト色をデフォルトに戻します。よろしいですか?");
    if( res == true ) {
$("[name=miss_color]").val("#FF3554")
$("[name=miss_color]").css({'cssText':'background-color: rgb(255, 53, 84); color: rgb(255, 255, 255);'});
$("[name=countdown_color]").val("rgba(255,255,255,0.9)")
$("[name=countdown_color]").css({'cssText':'background-color:rgba(255,255,255,0.9); color: rgb(0, 0, 0);'});
$("[name=skipguide_color]").val("rgba(255,255,255,0.53)")
$("[name=skipguide_color]").css({'cssText':'background-color:rgba(255,255,255,0.53); color: rgb(0, 0, 0);'});
$("[name=combo_color]").val("#FFFFFF")
$("[name=combo_color]").css({'cssText':'background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);'});
}
}
function playareacolor_reset(){
    var res = confirm("背景カラーをデフォルトに戻します。よろしいですか?");
    if( res == true ) {
$("[name=playarea_color]").val("rgba(255,255,255,0)")
$("[name=miss_color]").css({'cssText':'background-color: transparent; color: rgb(0, 0, 0);'});
$('[name="playarea_radius"]').val(0)
$("[name=futidori_theme]").val("none").prop('selected', true)
$("[name=futidori_color]").val("#FFFFFF")
$("[name=futidori_color]").css({'cssText':'background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);'});
$("[name=futidori_border-width]").val('medium').prop('selected', true);
    localStorage.setItem('futidori_theme','none')

}
}
function linecolor_reset(){
    var res = confirm("ラインカラーをデフォルトに戻します。よろしいですか?");
    if( res == true ) {
$("[name=line_color]").val("#17a2b8")
$("[name=line_color]").css({'cssText':'background-color: rgb(23, 162, 184); color: rgb(255, 255, 255);'});
$("[name=line_color2]").val("#ffc107")
$("[name=line_color2]").css({'cssText':'background-color: rgb(255, 193, 7); color: rgb(0, 0, 0);'});
$("[name=line_empty_color],[name=line_empty_color2]").val("#f5f5f5")
$("[name=line_empty_color],[name=line_empty_color2]").css({'cssText':'background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);'});
}
}

function subtextcolor_reset(){
    var res = confirm("ステータス/コントロール文字色をデフォルトに戻します。よろしいですか?");
    if( res == true ) {
$("[name=status_color]").val("#FFFFFF")
$("[name=status_color]").css({'cssText':'background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);'});
$("[name=me_color]").val("#20c997")
$("[name=me_color]").css({'cssText':'background-color: rgb(32, 201, 151); color: rgb(255, 255, 255);'});
$("[name=control_color]").val("rgba(255,255,255,.85);")
$("[name=control_color]").css({'cssText':'background-color: rgba(255, 255, 255, 0.85); color: rgb(0, 0, 0);'});
}
}

function color_default(){
$("[name=first_color],[name=lyric_color],[name=word_color]").val("#FFFFFF")
$("[name=first_color],[name=lyric_color],[name=word_color]").css({'cssText':'background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);'});
$("[name=correctword_color]").val("#0099CC")
$("[name=correctword_color]").css({'cssText':'background-color: rgb(0, 153, 204); color: rgb(255, 255, 255);'});
$("[name=lineclear_color]").val("#1eff52")
$("[name=lineclear_color]").css({'cssText':'background-color: rgb(30, 255, 82); color: rgb(255, 255, 255);'});
$("[name=next_lyrics_color]").val("rgba(255,255,255,.7)")
$("[name=next_lyrics_color]").css({'cssText':'background-color: rgba(255, 255, 255, 0.7); color: rgb(0, 0, 0);'});
}
function letter_red(){
$("[name=first_color]").val("#FF0000")
$("[name=first_color]").css({'cssText':'background-color: rgb(255, 0, 0);color: rgb(255, 255, 255);'});
$("[name=lyric_color],[name=word_color]").val("#FFFFFF")
$("[name=lyric_color],[name=word_color]").css({'cssText':'background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);'});
$("[name=correctword_color]").val("#919395")
$("[name=correctword_color]").css({'cssText':'background-color: rgb(145, 147, 149); color: rgb(255, 255, 255);'});
$("[name=lineclear_color]").val("#919395")
$("[name=lineclear_color]").css({'cssText':'background-color: rgb(145, 147, 149); color: rgb(255, 255, 255);'});
$("[name=next_lyrics_color]").val("rgba(255,255,255,.7)")
$("[name=next_lyrics_color]").css({'cssText':'background-color: rgba(255, 255, 255, 0.7); color: rgb(0, 0, 0);'});
}



//設定・「歌詞を見る」を選択したときに出るwindow
function mod_setting_open() {
//モーダルウィンドウを出現させるクリックイベント
$(".fa-cog").click( function () {

    //キーボード操作などにより、オーバーレイが多重起動するのを防止する
    $( this ).blur();  //ボタンからフォーカスを外す

    //オーバーレイを出現させる
$("body").append('<div id="modal-overlay"></div>');
    $( "#modal-overlay" ).fadeIn( "fast" );

    //コンテンツをセンタリングする
    centering();

    //コンテンツをフェードインする
    $("#mod_setting").fadeIn( "fast" );
    //[#modal-overlay]、をクリックしたら#mod_settingを閉じる
    $( "#modal-overlay,#modal-close" ).unbind().click( function () {
        $( "#mod_setting,#modal-overlay" ).fadeOut( "fast" , function () {
            //[#modal-overlay]を削除する
            $('#modal-overlay').remove();
        });
    });
});

$( window ).resize( centering );
    //センタリングを実行する関数
    function centering() {

        //画面(ウィンドウ)の幅、高さを取得
        var w = $( window ).width();
        var h = $( window ).height();

        // コンテンツ(#mod_setting)の幅、高さを取得
        var cw = $("#mod_setting").outerWidth();
        var ch = $("#mod_setting").outerHeight();

        //センタリングを実行する

            $("#mod_setting").css( {"left": ((w - cw))+ "px","top": ((h - ch)/4.4) + "px"} );
    }
}
function typing_lyric_open(){
    $(function(){

//モーダルウィンドウを出現させるクリックイベント
$("#modal-open").click( function(){

    //キーボード操作などにより、オーバーレイが多重起動するのを防止する
    $( this ).blur() ;  //ボタンからフォーカスを外す
    if( $( "#modal-overlay" )[0] ) return false ;      //新しくモーダルウィンドウを起動しない (防止策1)
    //if($("#modal-overlay")[0]) $("#modal-overlay").remove() ;     //現在のモーダルウィンドウを削除して新しく起動する (防止策2)

    //オーバーレイを出現させる
$("body").append('<div id="modal-overlay" style="background-color:rgba(0,0,0,.8);"></div>');
    $( "#modal-overlay" ).fadeIn( "nomal" ) ;

    //コンテンツをセンタリングする
    centeringModalSyncer() ;

    //コンテンツをフェードインする
    $( "#typing_lyrics" ).fadeIn( "nomal" ) ;

    //[#modal-overlay]、または[#modal-close]をクリックしたら…
    $( "#modal-overlay" ).unbind().click( function(){

        //[#modal-content]と[#modal-overlay]をフェードアウトした後に…
        $( "#typing_lyrics,#modal-overlay" ).fadeOut( "nomal" , function(){

            //[#modal-overlay]を削除する
            $('#modal-overlay').remove() ;

        } ) ;

    } ) ;

} ) ;

//リサイズされたら、センタリングをする関数[centeringModalSyncer()]を実行する
$( window ).resize( centeringModalSyncer ) ;

    //センタリングを実行する関数
    function centeringModalSyncer() {

        //画面(ウィンドウ)の幅、高さを取得
        var w = $( window ).width() ;
        var h = $( window ).height() ;

        // コンテンツ(#modal-content)の幅、高さを取得
        // jQueryのバージョンによっては、引数[{margin:true}]を指定した時、不具合を起こします。
//      var cw = $( "#modal-content" ).outerWidth( {margin:true} );
//      var ch = $( "#modal-content" ).outerHeight( {margin:true} );
        var cw = $( "#typing_lyrics" ).outerWidth();
        var ch = $( "#typing_lyrics" ).outerHeight();

        //センタリングを実行する

        $( "#typing_lyrics" ).css( {"left": ((w - cw)/2) + "px","top": ((h - ch)/2) + "px"} ) ;
        }
} ) ;
}

//#status変更(update_status関数を上書き)

update_status = function(){
let correct = typing_count / (typing_miss_count + typing_count) * 100.0;
if (isNaN(correct)) {
          correct = 100;
}
if($("[value=perfect_mode]").prop("checked")){
if($("[value=keep_corrent]").prop("checked")){
if(!lyrics_array[count+1] && next_char=='' || finished){
$("#status").html(
(Math.floor(parseInt(score)/20)/100).toFixed(2)+"<br>"+
typing_miss_count + "miss<span style='display:block;line-height:0;margin-bottom:15.5px;font-size:95%;font-weight:normal;color:"+miss_limit_color+";' ><span style='font-size:75%;'>正確率</span><span style='font-size:85%;'>:"+(correct.toFixed(1)).replace(".0","")+"%["+(correct-$('[name=miss_limit]').val()).toFixed(1).replace(".0","")+"%]</span></span>"+
"<span style='margin-top:1.5px;'><span style='position:relative;top:-1.5px;'>"+combo+"</span><span style='position:relative;top:1.5px;font-size:80%;'>/"+max_combo+"<span style='font-size: 110%;'>combo</span></span></span><br>"+
"<span style='margin-top:1.5px;'><span style='position:relative;top:-1.5px;'>"+typing_count + "</span><span style='position:relative;top:1.5px;font-size:80%;'>/" + total_notes + "</span><span style='position:relative;top:0.5px;font-size:105%;'>打</span></span><br>"+
complete_count + "<span style='font-size:90%;'>clear</span>["+(line_counter-(failer_count+complete_count))+"]<span style='font-size:90%;'>line</span>");
}else{
$("#status").html(
"<span class='score'>"+(Math.floor(parseInt(score)/20)/100).toFixed(2)+"</span>"+
"<span class='miss'>"+typing_miss_count + "miss</span><span class='acc' style='color:"+miss_limit_color+";'><span style='font-size:75%;font-weight:normal;'>正確率</span><span style='font-size:85%;' id='correct_percent'>:"+(correct.toFixed(1)).replace(".0","")+"%["+(correct-$('[name=miss_limit]').val()).toFixed(1).replace(".0","")+"%]</span></span>"+
"<span class='combo_counter'>"+combo+"combo</span>"+
"<span class='type_counter' style='margin-top:1.5px;'><span style='position:relative;top:-1.5px;margin-top:1.5px;'>"+typing_count + "</span><span style='position:relative;top:1.5px;font-size:80%;'>/" + total_notes + "</span><span style='position:relative;top:0.5px;font-size:105%;'>打</span></span>"+
"<span class='clear_counter'>"+complete_count + "<span style='font-size:90%;'>clear</span>["+(line_counter-(failer_count+complete_count))+"]<span style='font-size:90%;'>line</span></span>");
}
}else if($("[value=life_corrent]").prop("checked")){
if(!lyrics_array[count+1] && next_char=='' || finished){
$("#status").html(
(Math.floor(parseInt(score)/20)/100).toFixed(2)+"<br>"+
typing_miss_count + "miss<span style='font-size:90%;color:"+miss_limit_color+";'> ["+Number(((total_notes-escape_word_length)-((total_notes-escape_word_length) * ($('[name=miss_limit]').val()/100)))-typing_miss_count).toFixed(1)+"]life</span><span style='display:block;line-height:0;margin-bottom:15.5px;font-size:95%;font-weight:normal;' ><span style='font-size:75%;'>正確率</span><span style='font-size:85%;'>:"+(correct.toFixed(1)).replace(".0","")+"%["+(correct-$('[name=miss_limit]').val()).toFixed(1).replace(".0","")+"%]</span></span>"+
"<span style='margin-top:1.5px;'><span style='position:relative;top:-1.5px;'>"+combo+"</span><span style='position:relative;top:1.5px;font-size:80%;'>/"+max_combo+"<span style='font-size: 110%;'>combo</span></span></span><br>"+
"<span style='margin-top:1.5px;'><span style='position:relative;top:-1.5px;'>"+typing_count + "</span><span style='position:relative;top:1.5px;font-size:80%;'>/" + total_notes + "</span><span style='position:relative;top:0.5px;font-size:105%;'>打</span></span><br>"+
complete_count + "<span style='font-size:90%;'>clear</span>["+(line_counter-(failer_count+complete_count))+"]<span style='font-size:90%;'>line</span>");
}else{
$("#status").html(
"<span class='score'>"+(Math.floor(parseInt(score)/20)/100).toFixed(2)+"</span>"+
"<span class='miss'>"+typing_miss_count + "miss<span style='font-size:90%;color:"+miss_limit_color+";'> ["+Number(((total_notes-escape_word_length)-((total_notes-escape_word_length) * ($('[name=miss_limit]').val()/100)))-typing_miss_count).toFixed(1)+"]life</span></span><span class='acc'><span style='font-size:75%;font-weight:normal;'>正確率</span><span style='font-size:85%;'>:"+(correct.toFixed(1)).replace(".0","")+"%["+(correct-$('[name=miss_limit]').val()).toFixed(1).replace(".0","")+"%]</span></span>"+
"<span class='combo_counter'>"+combo+"combo</span>"+
"<span class='type_counter' style='margin-top:1.5px;'><span style='position:relative;top:-1.5px;margin-top:1.5px;'>"+typing_count + "</span><span style='position:relative;top:1.5px;font-size:80%;'>/" + total_notes + "</span><span style='position:relative;top:0.5px;font-size:105%;'>打</span></span>"+
"<span class='clear_counter'>"+complete_count + "<span style='font-size:90%;'>clear</span>["+(line_counter-(failer_count+complete_count))+"]<span style='font-size:90%;'>line</span></span>");
}
}
}else{
if(!lyrics_array[count+1] && next_char=='' || finished){
$("#status").html(
(Math.floor(parseInt(score)/20)/100).toFixed(2)+"<br>"+
typing_miss_count + "miss<span style='display:block;line-height:0;margin-bottom:15.5px;font-size:95%;font-weight:normal;' ><span style='font-size:75%;'>正確率</span><span style='font-size:85%;'>:"+(correct.toFixed(1)).replace(".0","")+"%</span></span>"+
"<span style='margin-top:1.5px;'><span style='position:relative;top:-1.5px;'>"+combo+"</span><span style='position:relative;top:1.5px;font-size:80%;'>/"+max_combo+"<span style='font-size: 110%;'>combo</span></span></span><br>"+
"<span style='margin-top:1.5px;'><span style='position:relative;top:-1.5px;'>"+typing_count + "</span><span style='position:relative;top:1.5px;font-size:80%;'>/" + total_notes + "</span><span style='position:relative;top:0.5px;font-size:105%;'>打</span></span><br>"+
complete_count + "<span style='font-size:90%;'>clear</span>["+(line_counter-(failer_count+complete_count))+"]<span style='font-size:90%;'>line</span>");
}else{
$("#status").html(
"<span class='score'>"+(Math.floor(parseInt(score)/20)/100).toFixed(2)+"</span>"+
"<span class='miss'>"+typing_miss_count + "miss</span><span class='acc'><span style='font-size:75%;font-weight:normal;'>正確率</span><span style='font-size:85%;'>:"+(correct.toFixed(1)).replace(".0","")+"%</span></span>"+
"<span class='combo_counter'>"+combo+"combo</span>"+
"<span class='type_counter' style='margin-top:1.5px;'><span style='position:relative;top:-1.5px;margin-top:1.5px;'>"+typing_count + "</span><span style='position:relative;top:1.5px;font-size:80%;'>/" + total_notes + "</span><span style='position:relative;top:0.5px;font-size:105%;'>打</span></span>"+
"<span class='clear_counter'>"+complete_count + "<span style='font-size:90%;'>clear</span>["+(line_counter-(failer_count+complete_count))+"]<span style='font-size:90%;'>line</span></span>");
}
}
update_skip();

}


//playheadUpdate()書き換え箇所全6箇所

//書き換え箇所①headtime変数をグローバル変数化
//time_calculation() (打鍵速度計算や経過時間計算を行う関数)にて
//headtime変数が使える箇所が多いのでグローバルで使えるようにしたいです
//時間計算の処理は重いので、なるべく流用していきたい
var headtime = 0;
playheadUpdate = function () {
        if(finished) { return; }
        player.f.blur();
//書き換え箇所②headtime変数をグローバル化したので
//var宣言を外しました
        headtime = player.getCurrentTime() + player.difftime;
        $("#bar").css("width", parseInt((headtime / player.getDuration())*100)+"%");

//書き換え箇所③分岐条件をlyrics_array[count].length >= 2に変更
//元はif(lyrics_array[count].length == 3 && time_buf != headtime && !completed){
//昔作られたタイピングデータは必ずしもlyrics_array[count].length == 3ではないため
//打鍵速度計算にtime_buf変数を使用しているのでlyrics_array[count].length == 2があるタイピングデータでは打鍵速度がバグってしまうので修正

        if(lyrics_array[count].length >= 2 && time_buf != headtime && !completed){
          playing_sec = headtime - time_buf;
          time_buf = headtime;
        }
        if(skip != false && (completed || lyrics_array[count-1][2] == '' || !lyrics_array[count-1][2])){
          if(lyrics_array[count][0] - headtime > skip && seeked_count != count) {
            player.seekTo(parseFloat(lyrics_array[count][0]) + player.difftime - skip);
            seeked_count = count;
            stop_count = 0;
            playheadUpdate();
          }
        }
        if(count > 0){
          var t1 = ((headtime - lyrics_array[count-1][0]) / (lyrics_array[count][0] - lyrics_array[count-1][0]))*100.0;
          if(t1 > 100) { t1=100;};
          if((count % 2) == 0) {
            if (Math.abs($("#bar_input0")[0].per === undefined || Math.abs($("#bar_input0")[0].per - t1)) > 2) {
              $("#bar_input0").css("width", (t1)+"%").show();
              $("#bar_input1").css("width", "0%").hide();
              $("#bar_input1")[0].per = 0;
              $("#bar_input0")[0].per = t1;
            }
          } else {
            if (Math.abs($("#bar_input1")[0].per === undefined || Math.abs($("#bar_input1")[0].per - t1)) > 2) {
              $("#bar_input1").css("width", (t1)+"%").show();
              $("#bar_input0").css("width", "0%").hide();
              $("#bar_input0")[0].per = 0;
              $("#bar_input1")[0].per = t1;
            }
          }
        }
        if(play_mode == 'practice' && count > 0 && lyrics_array[count-1].length > 2 && lyrics_array[count-1][2].length != 0  && lyrics_array[count][0] - 0.5 <= headtime) {
          if(!completed) {
            if(player.getPlayerState() == 1) {
              createjs.Ticker.removeEventListener('tick');
              player.pauseVideo();
            }
            return;
          }
        }
        if(lyrics_array[count][0] <= headtime){

          if(lyrics_array[count][1] == "end") {
            finished = true;
            stop_movie();
            return;
          }
//書き換え箇所③、line_update()を追加
//主な処理はTyping_Result生成に使われるlogを蓄積&ライン上で行われる処理のフラグ削除

//解説:今まではcount=count+1されたタイミングでlogを蓄積していましたが
//ローマ字入力モードとかな入力モードではcount=count+1の処理が行われるタイミングが違うのでTyping Result機能をかな入力に対応不可でした
//このタイミングで蓄積することでローマ入力&かな入力に対応できます
line_update()
          if(count > 0 && lyrics_array[count].length == 3) {

//書き換え箇所④、if文にnext_char == ''を追加
//元はif(line_input.length == 0 || completed) {

//解説:ラインの最後の一文字を残してもfailer_countがカウントされないバグが有りました
//最後の1文字になる状況では、既にline_input.length == 0になっており
//next_char変数に配列が格納されているので、next_charが空かどうかを見ることでfailer_countが正常にカウントされるようになりました
            if(next_char == '' && line_input.length == 0 || completed) {
              //complete_count = complete_count + 1;
            } else {
              failer_count = failer_count + 1;
            }
            clearForNextString();
          }

//書き換え箇所⑤、$("#kashi")$("#kashi_next")の歌詞表示に<ruby>&#8203;<rt>&#8203;</rt></ruby>を追加
//空のルビタグをつけることで、ルビタグがある歌詞⇔ルビタグがない歌詞の切替時に起きていた歌詞の表示ズレを無くすことができます

          $("#kashi").html('<ruby>&#8203;<rt>&#8203;</rt></ruby>&nbsp;'+lyrics_array[count][1]);
          $("#kashi_next").html('<ruby>&#8203;<rt>&#8203;</rt></ruby>&nbsp;'+lyrics_array[count+1][1]);
          if(lyrics_array[count].length == 3) {
            line_input = typing_array[count];
            line_input_kana = typing_array_kana[count];
            if(kana_mode) {
              line_input_kana = line_input_kana.join('').split('');
            }
            line_input_roma = typing_array_roma[count];
            if(line_input.length > 0) {
              next_char = line_input.shift(1);
              next_char.unshift(line_input_kana.shift(1));
              line_input_roma.shift(1);

//書き換え箇所⑥、next_pointを決める処理に!kana_modeとkana_modeの分岐を追加
            if(!kana_mode) {
              next_point = next_char[1].length * score_per_char;
if($("[value=mizumasi]").prop("checked")){
                if(next_char[0].length >= 2 && /^(?!(っゃ|っゅ|っょ|っぁ|っぃ|っぅ|っぇ|っぉ|っっ|っゎ|っヵ|っヶ))[ぁ-ん]/.test(next_char[0])) {
next_char=next_char.filter(function(value) { return value.match(/^(?!.*(x|l)).*$/)})
}
}
            }else if(kana_mode) {
              next_point = score_per_char;
            }
/*
                if(next_char[0] == "ん") {
                  if(["あ", "い", "う", "え", "お", "な", "に", "ぬ", "ね", "の", "や", "ゆ", "よ", "n"].indexOf(line_input_kana[0]) == -1) {
                    flag_nn = true;
                  } else {
                    flag_nn = false;
                    next_char = ["ん", "nn", "xn"];
                  }
                }
*/
            }else{
              next_char = [""];
              flag_nn = false;
            }
          } else {
            line_input = [];
            line_input_kana = [];
            line_input_roma = [];
            already_input = "";
            already_input_roma = "";
            next_char = [""];
            flag_nn = false;
          }

//書き換え箇所⑦、各モードの$("#kashi_roma")の表示処理をupdateLineView()関数から行うように変更

          if(kana_mode) {
updateLineView()
          } else if(mode == 'roma') {
updateLineView()
//            $("#kashi_roma").html("<span style='color:"+(next_char[0].length == 0 ? '#1e90ff' : '#09c')+"'>"+already_input_roma+"</span>" + String(next_char[1] || '') +String(line_input_roma.join('')));
          } else {
updateLineView()
//            $("#kashi_roma").html("<span style='color:"+(next_char[0].length == 0 ? '#1e90ff' : '#09c')+"'>"+already_input+"</span>" + String(next_char[0] || '')+String(line_input_kana.join('')));
          }
          count = count + 1;
          completed = false;
          time_buf = headtime;
          if(score > 199999){
            score = 200000;
          }
          update_status();
        }
      }

//keydownfunc()書き換え箇所全④箇所
keydownfunc = function (event) {
        var volume = 0;

//書き換え箇所①、headtime変数をグローバル化したのでheadtime変数を削除
//        var headtime = player.getCurrentTime();

        var chars = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
          if(event.shiftKey && event.keyCode == 38){
            skip = 2;
            update_skip();
            if (event.preventDefault) {
              event.preventDefault();
            }
          } else if(event.shiftKey && event.keyCode == 40){
            skip = false;
            update_skip();
            if (event.preventDefault) {
              event.preventDefault();
            }
          } else if(
          event.keyCode == 32 ||//スペース
         (event.keyCode >= 48 && event.keyCode <= 57) ||//数字上段
         (event.keyCode >= 65 && event.keyCode <= 90) ||//A-Z
         (event.keyCode >= 96 && event.keyCode <= 111) ||//テンキー
          event.keyCode == 173 ||//-
         (event.keyCode >= 186 && event.keyCode <= 192) ||//;:,.-/@キー SHIFTで*+<>=?`キー
         (event.keyCode >= 219 && event.keyCode <= 222) ||//[]\^キー SHIFTで{}|~キー
          event.keyCode == 226//\キー SHIFTで_キー
){
          if(next_char.length > 1){
            var c = "";
            keymap = {
                32: function() { return " " },

                48: function() { return "0" },
                49: function() { return "1" },
                50: function() { return "2" },
                51: function() { return "3" },
                52: function() { return "4" },
                53: function() { return "5" },
                54: function() { return "6" },
                55: function() { return "7" },
                56: function() { return "8" },
                57: function() { return "9" },
                //テンキー
                96: function() { return "0" },
                97: function() { return "1" },
                98: function() { return "2" },
                99: function() { return "3" },
                100: function() { return "4" },
                101: function() { return "5" },
                102: function() { return "6" },
                103: function() { return "7" },
                104: function() { return "8" },
                105: function() { return "9" },
                106: function() { return "\*" },
                107: function() { return "\+" },
                109: function() { return "-" },
                110: function() { return "." },
                111: function() { return "/" },

                173: function() { return "-" },

                186: function() { return ":" },
                187: function() { return ";" },
                188: function() { return "," },
                189: function() { return "-" },
                190: function() { return "." },
                191: function() { return "/" },
                192: function() { return "@" },

                219: function() { return "[" },
                220: function() { return "\\" },
                221: function() { return "]" },
                222: function() { return "^" },

                226: function() { return "\\" }
            }
            shift_keymap = {
                49: function() { return "!" },
                50: function() { return "\"" },
                51: function() { return "#" },
                52: function() { return "$" },
                53: function() { return "%" },
                54: function() { return "&" },
                55: function() { return "'" },
                56: function() { return "\(" },
                57: function() { return "\)" },

                186: function() { return "\*" },
                187: function() { return "\+" },
                188: function() { return "<" },
                189: function() { return "=" },
                190: function() { return ">" },
                191: function() { return "?" },
                192: function() { return "`" },

                219: function() { return "\{" },
                220: function() { return "\|" },
                221: function() { return "\}" },
                222: function() { return "~" },
                226: function() { return "\_" }
            }
            if(event.shiftKey && shift_keymap[event.keyCode]) {
              c = shift_keymap[event.keyCode]();
            } else if(keymap[event.keyCode]) {
              c = keymap[event.keyCode]();
            } else {
                c = chars[event.keyCode - 65];
            }
              if(c != "" && checkNextChar(c)){

//書き換え箇所②、各モードの$("#kashi_roma")の表示処理をupdateLineView()関数から行うように変更
updateLineView()

                if(score > 199999) {
                  score = 200000;
                }
                $("#combo_stat").html("");
                miss_combo = 0;
                typing_count = typing_count + 1;
                type_per_min = (typing_count / (playing_sec * 60));
                combo = combo + 1;
                typinglog.push([player.getCurrentTime().toFixed(3), c, score.toFixed(), count, completed ? 1 : 0, 1]);
                if(combo > 15) {
                  $("#combo").html("combo "+combo);
                }
                if(max_combo < combo) {
                  max_combo = combo;
                }
//書き換え箇所③、打鍵音とラインクリア音を鳴らす処理
//今まではcomboが1以上の時をif文で見ていましたが、ローマ字入力モード、かな入力モードでcombo=combo+1の処理が行われるタイミングが違うので
//かな入力で効果音を付加することができませんでした。keydownfunc(),keypressfunc_kana(),keydownfunc_kana()内で効果音を鳴らす処理を行えば、効果音を各モードに対応できます
typesound()
              } else if(!completed) {
                if(flag_nn && c == 'n')  {
                  flag_nn = false;
                  typinglog.push([player.getCurrentTime().toFixed(3), c, score.toFixed, count, completed ? 1 : 0, 2]);
                } else {
                  flag_nn = false;
                  if(score > 0) {
                    score = score - (score_per_char / 4);
                  }
                  typing_miss_count = typing_miss_count + 1;
                  typinglog.push([player.getCurrentTime().toFixed(3), c, score.toFixed(), count, completed ? 1 : 0, 0]);
                  combo = 0;
                  $("#combo").html("");
                  miss_combo = miss_combo + 1;
//書き換え箇所④、ミス音・ミスエフェクトを表示する処理
miss_effect()
                }
              }
            update_status()

            }
          } else if(event.keyCode == 40) {
            volume = player.getVolume();
            volume = volume - 10;
            if(volume < 0) {
              volume = 0;
            }
            player.setVolume(volume);
            $('#volume').html(volume);
            if (event.preventDefault) {
              event.preventDefault();
            }
          } else if(event.keyCode == 38){
            volume = player.getVolume();
            volume = volume + 10;
            if(volume > 100) {
              volume = 100;
            }
            player.setVolume(volume);
            $('#volume').html(volume);
            if (event.preventDefault) {
              event.preventDefault();
            }
          } else if(event.keyCode == 37) {
            var difftime = player.difftime;
            difftime = difftime - 0.1;
            if(difftime < -4.0) {
              difftime = -4.0;
            }
            player.difftime = difftime;
            $('#time_diff').html(difftime.toFixed(2));
            if (event.preventDefault) {
              event.preventDefault();
            }
          } else if(event.keyCode == 39){
            var difftime = player.difftime;
            difftime = difftime + 0.1;
            if(difftime > 4.0) {
              difftime = 4.0;
            }
            player.difftime = difftime;
            $('#time_diff').html(difftime.toFixed(2));
            if (event.preventDefault) {
              event.preventDefault();
            }
          }
          if(event.keyCode == 32) {
            event.returnValue = false;
            if (event.preventDefault) {
              event.preventDefault();
            }
          }
          if(event.keyCode == 999) {
            if(mode == "kana") {
              mode = "roma";
            } else {
              mode = "kana";
            }
          }
          //if (event.preventDefault) {
          //  event.preventDefault();
          //}
          return false;

      }

//keypressfunc_kana()書き換え箇所全4箇所
keypressfunc_kana = function (event) {
       if(event.keyCode==721){
         console.log(888);
         return false;
       }
       var volume = 0;

//書き換え箇所①、headtime変数をグローバル化したのでheadtime変数を削除
//       var headtime = player.getCurrentTime();
       if(next_char.length >= 1 && next_char[0] != ""){
         var c = "";
         if(keyboard == 'mac') {
           kana_keymap = {
              165: function() { return ["ー"] },
              49: function() { return ["1", "ぬ"] },
              33: function() { return ["!", "ぬ"] },
              50: function() { return ["2", "ふ", "ぶ", "ぷ"] },
              34: function() { return ["ふ", "ぶ", "ぷ"] },
              51: function() { return ["3", "あ"] },
              52: function() { return ["4", "う", "ゔ"] },
              53: function() { return ["5", "え"] },
              54: function() { return ["6", "お"] },
              55: function() { return ["7", "や"] },
              56: function() { return ["8", "ゆ"] },
              57: function() { return ["9", "よ"] },
              45: function() { return ["-", "ほ", "ぼ", "ぽ"] },
              61: function() { return ["=", "ほ", "ぼ", "ぽ"] },
              94: function() { return ["へ", "べ", "ぺ" ]},
              126: function() { return ["へ", "べ", "ぺ"] },
              113: function() { return ["q", "た", "だ"] },
              81: function() { return ["q", "た", "だ"] },
              119: function() { return ["w", "て", "で"] },
              87: function() { return ["w", "て", "で"] },
              101: function() { return ["e", "い"] },
              69: function() { return ["e", "い"] },
              114: function() { return ["r", "す", "ず"] },
              82: function() { return ["r", "す", "ず"] },
              116: function() { return ["t", "か", "が"] },
              84: function() { return ["t", "か", "が"] },
              121: function() { return ["y", "ん"] },
              89: function() { return ["y", "ん"] },
              117: function() { return ["u", "な"] },
              85: function() { return ["u", "な"] },
              105: function() { return ["i", "に"] },
              73: function() { return ["i", "に"] },
              111: function() { return ["o", "ら"] },
              79: function() { return ["o", "ら"] },
              112: function() { return ["p", "せ", "ぜ"] },
              80: function() { return ["p", "せ", "ぜ"] },
              97: function() { return ["a", "ち", "ぢ"] },
              65: function() { return ["a", "ち", "ぢ"] },
              115: function() { return ["s", "と", "ど"] },
              83: function() { return ["s", "と", "ど"] },
              100: function() { return ["d", "し", "じ"] },
              68: function() { return ["d", "し", "じ"] },
              102: function() { return ["f", "は", "ば", "ぱ"] },
              70: function() { return ["f", "は", "ば", "ぱ"] },
              103: function() { return ["g", "き", "ぎ"] },
              71: function() { return ["g", "き", "ぎ"] },
              104: function() { return ["h", "く", "ぐ"] },
              72: function() { return ["h", "く", "ぐ"] },
              106: function() { return ["j", "ま"] },
              74: function() { return ["j", "ま"] },
              107: function() { return ["k", "の"] },
              75: function() { return ["k", "の"] },
              108: function() { return ["l", "り"] },
              76: function() { return ["l", "り"] },
              59: function() { return [";", "れ"] },
              43: function() { return ["+", "れ"] },
              58: function() { return [":", "け", "げ"] },
              42: function() { return ["*", "け", "げ"] },
              93: function() { return ["]", "む"] },
              125: function() { return ["}", "む"] },
              122: function() { return ["z", "つ", "づ"] },
              90: function() { return ["z", "つ", "づ"] },
              120: function() { return ["x", "さ", "ざ"] },
              88: function() { return ["x", "さ", "ざ"] },
              99: function() { return ["c", "そ", "ぞ"] },
              67: function() { return ["c", "そ", "ぞ"] },
              118: function() { return ["v", "ひ", "び", "ぴ"] },
              86: function() { return ["v", "ひ", "び", "ぴ"] },
              98: function() { return ["b", "こ", "ご"] },
              66: function() { return ["b", "こ", "ご"] },
              110: function() { return ["n", "み"] },
              78: function() { return ["n", "み"] },
              109: function() { return ["m", "も"] },
              77: function() { return ["m", "も"] },
              44: function() { return [",", "ね"] },
              60: function() { return ["<", "、"] },
              46: function() { return [".", "る"] },
              62: function() { return [">", "。"] },
              47: function() { return ["/", "め"] },
              63: function() { return ["?", "・"] },
              95: function() { return ["_", "ろ"] },
              64: function() { return ["@", "゛"] },
              96: function() { return ["`", "゛"] },
              91: function() { return ["[", "゜"] },
              123: function() { return ["「", "゜"] },
              35: function() { return ["ぁ","#"] },
              36: function() { return ["ぅ","$"] },
              37: function() { return ["ぇ","%"] },
              38: function() { return ["ぉ","&"] },
              39: function() { return ["ゃ", "'"] },
              40: function() { return ["(", "ゅ"] },
              41: function() { return [")", "ょ"] },
              69: function() { return ["e", "ぃ"] },
              90: function() { return ["z", "っ"] }
          }
            daku = false;
            daku_kana_list = ["ゔ","が","ぎ","ぐ","げ","ご","ざ","じ","ず","ぜ","ぞ","だ","ぢ","づ","で","ど","ば","び","ぶ","べ","ぼ"];
            handaku = false;
            handaku_kana_list = ["ぱ","ぴ","ぷ","ぺ","ぽ"];
          } else {
             windows_keymap = {
              192: function() { return "゛" },
              39: function() { return ["ゃ", "'"] },
              94: function() { return ["へ", "^", "べ", "ぺ"] },
              126: function() { return ["へ", "~", "べ", "ぺ"] },
              38: function() { return ["ぉ", "&"] },
              40: function() { return ["(", "ゅ"] },
              41: function() { return [")", "ょ"] },
              92: function() { return ["ろ", "ー", "-"] },
              95: function() { return "ろ" },
              61: function() { return ["=", "ほ", "ぼ", "ぽ"] },
              43: function() { return ["+", "れ"] },
              59: function() { return [";", "れ"] },
              34: function() { return ["ふ", "ぶ", "ぷ"] },
              124: function() { return ["|", "」"] },
              64: function() { return ["@", "゛"] },
              96: function() { return "゛" },
              38: function() { return ["ぉ", "&"] },
              93: function() { return ["む", "]"] },
              125: function() { return ["}", "「"] },
              91: function() { return ["[", "゜"] },
              123: function() { return ["{", "゛"] },
              58: function() { return [":", "け", "げ"] },
              42: function() { return ["*", "け", "げ"] }
             }
             mac_keymap = {
              94: function() { return ["ぉ","^"] },
              38: function() { return ["ゃ", "&"] },
              42: function() { return ["ゅ", "*"] },
              40: function() { return ["ょ", "("] },
              41: function() { return ["を", ")"] },
              95: function() { return ["_", "ほ", "ぼ", "ぽ"] },
              45: function() { return ["-", "ほ", "ぼ", "ぽ"] },
              61: function() { return ["=", "へ", "べ", "ぺ"] },
              43: function() { return ["+", "へ", "べ", "ぺ"] },
              59: function() { return [";", "れ"] },
              58: function() { return [":", "れ"] },
              39: function() { return ["'", "け", "げ"] },
              34: function() { return ["け", "げ"] },
              92: function() { return "む" },
              165: function() { return "-", "ー" },
              124: function() { return "|" },
              91: function() { return ["[", "゛"] },
              123: function() { return ["{", "゛"] },
              125: function() { return ["}", "「"] },
              93: function() { return ["]", "゜"] },
              64: function() { return ["ふ", "@", "ぶ", "ぷ"] },
              126: function() { return ["-", "~"] },
             }
             kana_keymap = {
              49: function() { return ["1", "ぬ"] },
              33: function() { return ["!", "ぬ"] },
              50: function() { return ["2", "ふ", "ぶ", "ぷ"] },
              51: function() { return ["3", "あ"] },
              52: function() { return ["4", "う", "ゔ"] },
              53: function() { return ["5", "え"] },
              54: function() { return ["6", "お"] },
              55: function() { return ["7", "や"] },
              56: function() { return ["8", "ゆ"] },
              57: function() { return ["9", "よ"] },
              45: function() { return ["-", "ほ", "ぼ", "ぽ"] },
              113: function() { return ["q", "た", "だ"] },
              81: function() { return ["q", "た", "だ"] },
              119: function() { return ["w", "て", "で"] },
              87: function() { return ["w", "て", "で"] },
              101: function() { return ["e", "い"] },
              69: function() { return ["e", "い"] },
              114: function() { return ["r", "す", "ず"] },
              82: function() { return ["r", "す", "ず"] },
              116: function() { return ["t", "か", "が"] },
              84: function() { return ["t", "か", "が"] },
              121: function() { return ["y", "ん"] },
              89: function() { return ["y", "ん"] },
              117: function() { return ["u", "な"] },
              85: function() { return ["u", "な"] },
              105: function() { return ["i", "に"] },
              73: function() { return ["i", "に"] },
              111: function() { return ["o", "ら"] },
              79: function() { return ["o", "ら"] },
              112: function() { return ["p", "せ", "ぜ"] },
              80: function() { return ["p", "せ", "ぜ"] },
              97: function() { return ["a", "ち", "ぢ"] },
              65: function() { return ["a", "ち", "ぢ"] },
              115: function() { return ["s", "と", "ど"] },
              83: function() { return ["s", "と", "ど"] },
              100: function() { return ["d", "し", "じ"] },
              68: function() { return ["d", "し", "じ"] },
              102: function() { return ["f", "は", "ば", "ぱ"] },
              70: function() { return ["f", "は", "ば", "ぱ"] },
              103: function() { return ["g", "き", "ぎ"] },
              71: function() { return ["g", "き", "ぎ"] },
              104: function() { return ["h", "く", "ぐ"] },
              72: function() { return ["h", "く", "ぐ"] },
              106: function() { return ["j", "ま"] },
              74: function() { return ["j", "ま"] },
              107: function() { return ["k", "の"] },
              75: function() { return ["k", "の"] },
              108: function() { return ["l", "り"] },
              76: function() { return ["l", "り"] },
              59: function() { return [";", "れ"] },
              122: function() { return ["z", "つ", "づ"] },
              90: function() { return ["z", "つ", "づ"] },
              120: function() { return ["x", "さ", "ざ"] },
              88: function() { return ["x", "さ", "ざ"] },
              99: function() { return ["c", "そ", "ぞ"] },
              67: function() { return ["c", "そ", "ぞ"] },
              118: function() { return ["v", "ひ", "び", "ぴ"] },
              86: function() { return ["v", "ひ", "び", "ぴ"] },
              98: function() { return ["b", "こ", "ご"] },
              66: function() { return ["b", "こ", "ご"] },
              110: function() { return ["n", "み"] },
              78: function() { return ["n", "み"] },
              109: function() { return ["m", "も"] },
              77: function() { return ["m", "も"] },
              44: function() { return [",", "ね"] },
              60: function() { return ["<", "、"] },
              46: function() { return [".", "る"] },
              62: function() { return [">", "。"] },
              47: function() { return ["/", "め"] },
              63: function() { return ["?", "・"] },
              35: function() { return ["ぁ","#"] },
              36: function() { return ["ぅ","$"] },
              37: function() { return ["ぇ","%"] },
              69: function() { return "ぃ" },
              90: function() { return "っ" }
          }
            console.log(event.keyCode);
            if(navigator.userAgent.match(/Mac|PPC/)) {
              kana_keymap = $.extend(kana_keymap, mac_keymap);
            } else {
              kana_keymap = $.extend(kana_keymap, windows_keymap);
            }
            daku = false;
            daku_kana_list = ["ゔ","が","ぎ","ぐ","げ","ご","ざ","じ","ず","ぜ","ぞ","だ","ぢ","づ","で","ど","ば","び","ぶ","べ","ぼ"];
            handaku = false;
            handaku_kana_list = ["ぱ","ぴ","ぷ","ぺ","ぽ"];

            }
            if(kana_keymap[event.keyCode]) {
              c = kana_keymap[event.keyCode]();
              if($.inArray(next_char[0],daku_kana_list) > -1) {
                daku = true;
              } else if ($.inArray(next_char[0],handaku_kana_list) > -1) {
                handaku = true;
              }
            } else if(!event.shiftKey && event.keyCode == 48){
              c = ["0", "わ"];
            }

//書き換え箇所②、$("#kashi_roma")の表示処理をupdateLineView()関数から行うように変更
              if(c != "" && checkNextKana(c, daku, handaku)){
updateLineView()
//                $("#kashi_roma").html("<span style='color:"+(next_char.length == 0 ? '#1eff52' : '#09c')+"'>"+already_input+"</span>&nbsp;" + String(next_char[0] || []) + String(line_input_kana.join('')));
                if(score > 199999) {
                  score = 200000;
                }
                $("#combo_stat").html("");
                miss_combo = 0;
                typing_count = typing_count + 1;
                type_per_min = (typing_count / (playing_sec * 60));
                combo = combo + 1;
                typinglog.push([player.getCurrentTime().toFixed(3), c, score.toFixed(), count, completed ? 1 : 0, 1]);
                if(combo > 15) {
                  $("#combo").html("combo "+combo);
                }
                if(max_combo < combo) {
                  max_combo = combo;
                }
//書き換え箇所③ 打鍵音・ラインクリア音を鳴らす処理
typesound()

              } else if(!completed) {
                if(flag_nn && c == 'n')  {
                  flag_nn = false;
                  typinglog.push([player.getCurrentTime().toFixed(3), c, score.toFixed, count, completed ? 1 : 0, 2]);
                } else if(daku || handaku) {
                  typinglog.push([player.getCurrentTime().toFixed(3), c, score.toFixed, count, completed ? 1 : 0, 2]);
                } else {
                  flag_nn = false;
                  if(score > 0) {
                    score = score - (score_per_char / 4);
                  }
                  typing_miss_count = typing_miss_count + 1;
                  typinglog.push([player.getCurrentTime().toFixed(3), c, score.toFixed(), count, completed ? 1 : 0, 0]);
                  combo = 0;
                  $("#combo").html("");
                  miss_combo = miss_combo + 1;
//書き換え箇所④ ミス音・ミスエフェクトを表示する処理
miss_effect()
                }
              }
            update_status()

        }
        if(event.keyCode == 32) {
          event.returnValue = false;
          if (event.preventDefault) {
            event.preventDefault();
          }
        }
        return false;
      }


//keydownfunc_kana()書き換え箇所全3箇所
keydownfunc_kana=function (event) {
        c = "";
          if(navigator.userAgent.match(/Mac|PPC/)) {
            if(event.keyCode == 0) {
              c = ["ー", "-", "ろ"];
            } else if(event.shiftKey && event.keyCode == 48){
              c = ["を"];
            }
          } else {
            if(event.shiftKey && event.keyCode == 48){
              c = ["を"];
            }
          }
        if(c != "") {
              daku = false;
              handaku = false;

//書き換え箇所①、$("#kashi_roma")の表示処理をupdateLineView()関数から行うように変更
              if(checkNextKana(c, daku, handaku)){
updateLineView()
                if(score > 199999) {
                  score = 200000;
                }
                $("#combo_stat").html("");
                miss_combo = 0;
                typing_count = typing_count + 1;
                type_per_min = (typing_count / (playing_sec * 60));
                combo = combo + 1;
                typinglog.push([player.getCurrentTime().toFixed(3), c, score.toFixed(), count, completed ? 1 : 0, 1]);
                if(combo > 15) {
                  $("#combo").html("combo "+combo);
                }
                if(max_combo < combo) {
                  max_combo = combo;
                }
//書き換え箇所② 打鍵音・ラインクリア音を鳴らす処理
typesound()
              } else if(!completed) {
                if(flag_nn && c == 'n')  {
                  flag_nn = false;
                  typinglog.push([player.getCurrentTime().toFixed(3), c, score.toFixed, count, completed ? 1 : 0, 2]);
                } else {
                  flag_nn = false;
                  if(score > 0) {
                    score = score - (score_per_char / 4);
                  }
                  typing_miss_count = typing_miss_count + 1;
                  typinglog.push([player.getCurrentTime().toFixed(3), c, score.toFixed(), count, completed ? 1 : 0, 0]);
                  combo = 0;
                  $("#combo").html("");
                  miss_combo = miss_combo + 1;

//書き換え箇所③ ミス音・ミスエフェクトを表示する処理
miss_effect()
                }
              }
            update_status()
        }
        if(event.keyCode == 40) {
            volume = player.getVolume();
            volume = volume - 10;
            if(volume < 0) {
              volume = 0;
            }
            player.setVolume(volume);
            $('#volume').html(volume);
            if (event.preventDefault) {
              event.preventDefault();
            }
          } else if(event.keyCode == 38){
            volume = player.getVolume();
            volume = volume + 10;
            if(volume > 100) {
              volume = 100;
            }
            player.setVolume(volume);
            $('#volume').html(volume);
            if (event.preventDefault) {
              event.preventDefault();
            }
          } else if(event.keyCode == 37) {
            var difftime = player.difftime;
            difftime = difftime - 0.1;
            if(difftime < -4.0) {
              difftime = -4.0;
            }
            player.difftime = difftime;
            $('#time_diff').html(difftime.toFixed(2));
            if (event.preventDefault) {
              event.preventDefault();
            }
          } else if(event.keyCode == 39){
            var difftime = player.difftime;
            difftime = difftime + 0.1;
            if(difftime > 4.0) {
              difftime = 4.0;
            }
            player.difftime = difftime;
            $('#time_diff').html(difftime.toFixed(2));
            if (event.preventDefault) {
              event.preventDefault();
            }
          }
       return false;
     }

hiraganaToRomaArray = function (str) {

        var str_array = [];
        var kana_array = [];
        var roma_array = [];

//each処理の最後に変数sの値をs_logに代入します
        var s_log=0
        $.each(romaMap, function(index, roma){
          if(roma.length > 1){
            str = str.replace(RegExp(roma[0],"g"),"\t"+index+"\t");
          }
        });

        $.each(str.split(/\s+/), function(index, s){
          if(s != "") {
            if(s.length > 0 && romaMap[parseInt(s)]){
              kana_array.push(romaMap[parseInt(s)][0]);
              str_array.push(romaMap[parseInt(s)].slice(1));
              roma_array.push(romaMap[parseInt(s)][1]);

//「~」はハイフンで入力できる仕様なので「ー」に変換。設定で全角長音記号にも対応
if(localStorage.getItem('chiruda_chouoxn') == 0){
if(kana_array[kana_array.length-1]=="~"){
roma_array.splice(-1,1,'~')
str_array[str_array.length-1][0] = '~'
}
}else{
if(kana_array[kana_array.length-1]=="~"){
kana_array.splice(-1,1,'ー')
}
}

if(kana_array[kana_array.length-1]=="いぇ"){
str_array[str_array.length-1] = ["ye", "ile", "ixe"]
}

//「っ+小文字」の入力パターンを対応
if(kana_array[kana_array.length-2]=="っ" && /^(ゃ|ゅ|ょ|ぁ|ぃ|ぅ|ぇ|ぉ|っ|ゎ|ヵ|ヶ)/.test(kana_array[kana_array.length-1])){
kana_array.splice(-2,1,'っ'+kana_array[kana_array.length-1])
roma_array.splice(-2,1,'x'+roma_array[roma_array.length-1])
let str_bak_ltu = [].concat(str_array[str_array.length-1])
$.each(str_bak_ltu, function(l, na){
str_bak_ltu[l] = 'ltu'+na})
let str_bak_xtu = [].concat(str_array[str_array.length-1])
$.each(str_bak_xtu, function(l, na){
str_bak_xtu[l] = 'xtu'+na})
let str_bak_ltsu = [].concat(str_array[str_array.length-1])
$.each(str_bak_ltsu, function(l, na){
str_bak_ltsu[l] = 'ltsu'+na})
let str_bak_xtsu = [].concat(str_array[str_array.length-1])
$.each(str_bak_xtsu, function(l, na){
str_bak_xtsu[l] = 'xtsu'+na})

$.each(str_array[str_array.length-1], function(l, na){
str_array[str_array.length-1][l] = na[0][0]+na})
str_array[str_array.length-2]=str_array[str_array.length-1].concat(str_bak_ltu).concat(str_bak_xtu).concat(str_bak_ltsu).concat(str_bak_xtsu)
kana_array.pop()
str_array.pop()
roma_array.pop()
}
//579はromaMapの「ん」
//s_log=579のとき「あいうえお、なにぬねの」など打鍵パターンが変化する文字がkana_arrayに追加されたときに、前回追加した「n」を「nn」に置き換えます。
//正規表現にマッチする文字は[あ行、な行、や行、ん、アルファベット]
if(s_log==579 && /あ|い|う|え|お|な|に|ぬ|ね|の|や|ゆ|よ|ん|[a-zA-Za-zA-Z]/.test(kana_array[kana_array.length-1])){
roma_array.splice(-2,1,'nn')
str_array[str_array.length-2][0] = 'nn'
}else if(s_log==579 && kana_array[kana_array.length-1]){
str_array[str_array.length-1].splice(1, 0, 'n'+str_array[str_array.length-1][0])
}
s_log=parseInt(s)
            } else {
              kana_array.push([s]);
              str_array.push([s]);
              roma_array.push([s]);

//全角記号・三点リーダを対応
if(/[、|。|!|?|・|@|”|#|$|%|&|’|(|)|^|{|}|「|」|<|>|`|*|+|:|;|_|||¥|=|…|ヰ|ゐ|ゑ|ヱ]/.test(str_array[str_array.length-1][0])){
kana_array.splice(-1,1,[s
.replace(/…/g,"...")
.replace(/ヰ/g,"ヰ")
.replace(/ゐ/g,"ゐ")
.replace(/ヱ/g,"ヱ")
.replace(/ゑ/g,"ゑ")
])
str_array.splice(-1,1,[s
.replace(/、/g,",")
.replace(/。/g,".")
.replace(/!/g,"!")
.replace(/?/g,"?")
.replace(/・/g,"\/")
.replace(/@/g,"@")
.replace(/”/g,"\"")
.replace(/#/g,"#")
.replace(/$/g,"\$")
.replace(/%/g,"%")
.replace(/&/g,"&")
.replace(/’/g,"'")
.replace(/(/g,"\(")
.replace(/)/g,"\)")
.replace(/¥/g,"\\")
.replace(/|/g,"\|")
.replace(/「/g,"\[")
.replace(/」/g,"\]")
.replace(/{/g,"\{")
.replace(/}/g,"\}")
.replace(/`/g,"`")
.replace(/*/g,"\*")
.replace(/+/g,"\+")
.replace(/:/g,":")
.replace(/;/g,";")
.replace(/_/g,"_")
.replace(/</g,"<")
.replace(/>/g,">")
.replace(/=/g,"=")
.replace(/^/g,"\^")
.replace(/…/g,"...")
.replace(/ヰ/g,"wi")
.replace(/ゐ/g,"wi")
.replace(/ヱ/g,"we")
.replace(/ゑ/g,"we")
])
roma_array.splice(-1,1,[s
.replace(/、/g,",")
.replace(/。/g,".")
.replace(/!/g,"!")
.replace(/?/g,"?")
.replace(/・/g,"\/")
.replace(/@/g,"@")
.replace(/”/g,"\"")
.replace(/#/g,"#")
.replace(/$/g,"\$")
.replace(/%/g,"%")
.replace(/&/g,"&")
.replace(/’/g,"'")
.replace(/(/g,"\(")
.replace(/)/g,"\)")
.replace(/¥/g,"\\")
.replace(/|/g,"\|")
.replace(/「/g,"\[")
.replace(/」/g,"\]")
.replace(/{/g,"\{")
.replace(/}/g,"\}")
.replace(/`/g,"`")
.replace(/*/g,"\*")
.replace(/+/g,"\+")
.replace(/:/g,":")
.replace(/;/g,";")
.replace(/_/g,"_")
.replace(/</g,"<")
.replace(/>/g,">")
.replace(/=/g,"=")
.replace(/^/g,"\^")
.replace(/…/g,"...")
.replace(/ヰ/g,"wi")
.replace(/ゐ/g,"wi")
.replace(/ヱ/g,"we")
.replace(/ゑ/g,"we")
])
}
//ひらがなの直後のカンマ、ピリオドを句読点に変換(三点リーダは変換されない)
if(/[ぁ-ん|ヴ|ゔ|ー|゛]/.test(kana_array[kana_array.length-2]) && /^[\.](?![\.])/.test(kana_array[kana_array.length-1][0])){
kana_array.splice(-1,1,['。'])
}
if(/[ぁ-ん|ヴ|ゔ|ー|゛]/.test(kana_array[kana_array.length-2]) && /^[\,](?![\,])/.test(kana_array[kana_array.length-1][0])){
kana_array.splice(-1,1,['、'])
}
            }
          }
        });

//kana_array最後の文字が「ん」だった場合も[nn]に置き換えます。
if(kana_array[kana_array.length-1] == "ん"){
roma_array.splice(-1,1,'nn')
str_array[str_array.length-1][0] = 'nn'
}

return [str_array, kana_array, roma_array];
}


checkNextChar=function (c){
        if(flag_nn && c == "x") {
          flag_nn = false;
        }
        flag = false;
        flag_roma = false;

//cは入力中の文字が入る(ローマ字)
//?が打鍵されたときは正規表現では使えないのでスルー
if(c!='?'&&c!='\+'&&c!='\*'&&c!='\('&&c!='\)'){
//打鍵パターンを絞る正規表現
regexp_c = new RegExp('^('+c+'|[ぁ-ん|ヵ|ヶ]).*$')
}


$.each(next_char.slice(1), function(i, nc){

//ncは打鍵パターンが入る
//c==nc[0][0](先頭の文字が一致したときに正解の処理がされる)
          if(c==nc[0][0]){

//flag = true;より先に通常通り打鍵した文字をnext_charから削除する処理
            next_char[i+1] = nc.slice(1);

//かな表示の記号系を正解色にする
if(/[!-~|。|!|?|・|@|”|#|$|%|&|’|(|)|^|{|}|「|」|<|>|`|*|+|:|;|_|||¥|=|…|ヰ|ゐ|ゑ|ヱ]+/.test(next_char[0]) && next_char[0][0].length > 1){
already_input = already_input+next_char[0][0][0]
next_char[0][0] = next_char[0][0].slice(1);
}
if(c!='?'&&c!='\+'&&c!='\*'&&c!='\('&&c!='\)' &&nc.length>=2 && !flag){
flag = true;
//「っ+母音」の入力パターンを絞る
if(next_char[0][0]=='っ' && next_char[0].length > 1){
//「っ」が母音2打で入力されたらltu,xtuから打つパターンと、入力されていない別パターンffu⇔hhuなどをnext_charから削除する
if(c==nc[1][0] && /^(?!(っゃ|っゅ|っょ|っぁ|っぃ|っぅ|っぇ|っぉ|っっ|っゎ|っヵ|っヶ))/.test(next_char[0])){
next_char.splice(1,1,next_char[i+1])
next_char=next_char.filter(function(value) { return value.match(/^(?!(lt|xt)).*$/)})
next_char=next_char.filter(function(value) { return value.match(regexp_c)})

//母音2打のパターンは打ち初めに「っ」を正解色にする
already_input = already_input+next_char[0][0]
next_char[0] = next_char[0].slice(1);

//「っ」をltu,xtuで入力する場合、母音2打のパターンを削除

}else if(next_char[1].length >= 2){
if(c=='x'){
//xt...から始まる打鍵パターンのみに絞る
next_char=next_char.filter(function(value) { return value.match(/^(tu|xtu|xtsu|x|っ)/); });
}else if(c=='l'){
//lt...から始まる打鍵パターンのみに絞る
next_char=next_char.filter(function(value) { return value.match(/^(tu|ltu|ltsu|l|っ)/); });
}else if(c=='t'&&/^(っゃ|っゅ|っょ|っぁ|っぃ|っぅ|っぇ|っぉ|っっ|っゎ|っヵ|っヶ)/.test(next_char[0])){

next_char=next_char.filter(function(value) { return value.match(/^(u|tu|tsu|っ)/); });
//重複している打鍵パターンをfilterで削除
next_char=next_char.filter(function (x, m, self) {
            return self.indexOf(x) === m;
        });
next_char[1] = nc.slice(1);

//xとlのパターンに絞った配列で再度ループする(絞る前の配列でeachされているため)
$.each(next_char.slice(1), function(l, na){
          if(c==na[0][0]){
            next_char[l+1] = na.slice(1);
          }
            if(flag_roma == false) {
              already_input_roma = already_input_roma + c;
              flag_roma = true;
            }

})
//打鍵パターンが短い順にソート
next_char.sort(function(a, b) {return a.length - b.length;});
              return false;
}else if(c=='u'){
//ltu,xtuが確定したときltsu,xtsuのパターンを削除
if(next_char[0] != 'っす'){
next_char=next_char.filter(function(value) { return value.match(/^(?!(su|u)).*$/)})
}
//lt[u]、xt[u]まで入力されたら「っ」を正解色にする
already_input = already_input+next_char[0][0]
next_char[0] = next_char[0].slice(1);
}

if(c=='x'||c=='l'){
//重複している打鍵パターンをfilterで削除
next_char=next_char.filter(function (x, m, self) {
            return self.indexOf(x) === m;
        });

next_char[1] = nc.slice(1);

//xとlのパターンに絞った配列で再度ループする(絞る前の配列でeachされているため)
$.each(next_char.slice(1), function(l, na){
          if(c==na[0][0] && l>=1){
            next_char[l+1] = na.slice(1);
          }

            if(flag_roma == false) {
              already_input_roma = already_input_roma + c;
              flag_roma = true;
            }
})
//打鍵パターンが短い順にソート
next_char.sort(function(a, b) {return a.length - b.length;});
              return false;
}
}
//打鍵文字を見てnext_charから別パターンを削除
}else if(next_char.length >= 3){
next_char=next_char.filter(function(value) { return value.match(regexp_c)})
            next_char[1] = nc.slice(1);

if(/^(l|x)/.test(next_char[1]) && next_char.length >= 2 && /^(?!(っゃ|っゅ|っょ|っぁ|っぃ|っぅ|っぇ|っぉ|っっ|っゎ|っヵ|っヶ))/.test(next_char[0])){
already_input = already_input+next_char[0][0]
next_char[0] = next_char[0].slice(1);

}
}

          }
//next_charにemptyが存在するとバグるのでemptyを削除
next_char=next_char.filter(function (e) {  return e.length;});
flag = true;

            if(flag_roma == false) {
              already_input_roma = already_input_roma + c;
              flag_roma = true;
            }
            if(nc.length == 1) {
              already_input = already_input + next_char[0];
              next_char = line_input.shift(1) || [];
              line_input_roma.shift(1);
              next_char.unshift(line_input_kana.shift(1) || []);
              score = score + next_point;
              if(next_char[0].length == 0) {
                if(!completed) {
                  completed = true;
                  complete_count = complete_count + 1;
                  update_status();
                  if(play_mode == 'practice' && player.getPlayerState() == 2) {
                    player.playVideo();
                    createjs.Ticker.addEventListener("tick", playheadUpdate);
                    window.addEventListener('keydown',keydownfunc,true);
                    window.addEventListener('keyup',keyupfunc,true);
                  }
                }
              } else {
                next_point = next_char[1].length * score_per_char;
//ひらがな2文字の周りくどい入力方法ltuta,xtufu,silya,ltuteleなどを入力できなくする機能
if($("[value=mizumasi]").prop("checked")){
                if(next_char[0].length >= 2 && /^(?!(っゃ|っゅ|っょ|っぁ|っぃ|っぅ|っぇ|っぉ|っっ|っゎ|っヵ|っヶ))[ぁ-ん]/.test(next_char[0])) {
next_char=next_char.filter(function(value) { return value.match(/^(?!.*(x|l)).*$/)})
}
}
              }
              return false;
            }


}
        });
        if(flag) {
          if(score > 200000) {
            score = 200000;
          }
        }
        return flag;
      }