lrcReader[typing-tube.net]

Add buttons to load the .lrc format file on the edit screen on typing-tube.net.

目前为 2019-10-13 提交的版本。查看 最新版本

// ==UserScript==
// @name         lrcReader[typing-tube.net]
// @namespace    http://tampermonkey.net/lrcReader
// @version      0.31
// @description  Add buttons to load the .lrc format file on the edit screen on typing-tube.net.
// @author       Spacia
// @match        https://typing-tube.net/movie/edit?videoid=*
// @grant        none
// ==/UserScript==


//This is the Entry point.
(function() {
    'use strict';

    AddLrcReaderElements();
    
})();


function AddLrcReaderElements(){

    // Add a div element to be container to the bottom of the navigation menu "edit".
    var elDiv = document.createElement("div");
    elDiv.classList.add('row');
    elDiv.classList.add('ml-2');
    elDiv.classList.add('w-100');
    elDiv.id = "ContainerOflrcReader";
    var elEdit = document.getElementById("edit");
    elEdit.appendChild(elDiv);
    var elDevId = document.getElementById("ContainerOflrcReader");

    // Add a button for uploading .lrc format file in container created by former code.
    var elTextDiv = document.createElement("div");
    elTextDiv.classList.add("col-2");
    elTextDiv.innerHTML = "lrcファイルを参照";
    elDevId.appendChild(elTextDiv);

    var elForm = document.createElement("form");
    elForm.classList.add("col-6");
    elForm.innerHTML = "<div><input name='lrcFile' type='file' accept='.lrc'></div>";
    elForm.addEventListener('change', onLoadLrc);
    elDevId.appendChild(elForm);

    // Add radio buttons to select English or Kana.
    var elForm2 = document.createElement("form");
    elForm2.classList.add("col-4");
    elForm2.innerHTML = "<span style='padding-right:20px;'><label><input id='lrcConverTypeKana' name='lrcConvertType' type='radio' value='kana' checked>かな </label></span><span><label><input name='lrcConvertType' type='radio' value='eng'>英語</label></span>";
    elDevId.appendChild(elForm2);

}


function onLoadLrc(event){
    SetTimeEvent();

    var _file = event.target.files[0];
    if(_file){
        var fr = new FileReader();
        fr.onload = function(e) {

            // A file was loaded.
            SetLinesOfLyricsToTimelineTable(fr.result.split('\n'));

        }
        fr.readAsText(_file);
    }else{
        alert("Failed to load file formated .lrc");
    }
}



var isKanaMode; //load mode of kana or english
var lineidx = 0;
var time;
var editedLine;
var lines;
var timeEventFlag;

function SetTimeEvent(){

    setTimeout(() => {
        if(document.getElementById("kana").value.length != 0){
            hoge();
        }
        if(timeEventFlag){
            SetTimeEvent();
        }
    }, 20);

}

function SetLinesOfLyricsToTimelineTable(_lines) {

    isKanaMode = document.getElementById('lrcConverTypeKana').checked;
    lineidx = 0;
    lines = _lines;
    timeEventFlag = true;

    retriveLineInfo();
}


function retriveLineInfo(){

    var line = lines[lineidx++];

    //if empty line then check next line.
    var ptnOfTimeTag = /\[\d\d:\d\d:\d\d\]/g;
    if(ptnOfTimeTag.test(line) == false){
        if(lineidx < lines.length){
            retriveLineInfo();
        }else{
             timeEventFlag = false;
        }
        return;
    }

    //get time for this line.
    var ptnOfTwoDigidTime = /\d\d/g;
    var timesStr = line.match(ptnOfTwoDigidTime);
    var minute = parseFloat(timesStr[0]);
    var second = parseFloat(timesStr[1]);
    var centiSec = parseFloat(timesStr[2]);
    time = minute * 60 + second + centiSec * 0.01;
    //console.log(time);

    //get line of text.
    editedLine = line.replace(ptnOfTimeTag,"").trim();
    //console.log(editedLine);

    //Add time and lineLyrics to the timeline Table in the navigation menu "edit".
    document.getElementById("time").value = time;
    document.getElementById("words").value = editedLine;

    if(isKanaMode){
        command_kakasi();
    }else{
        command_kakasi_en();
    }
}


function hoge(){
        console.log("hoge");
        if( document.getElementById("kana").value.length != 0){
            command_add();
            if(lineidx < lines.length){
                retriveLineInfo();
            }else{
             timeEventFlag = false;
            }
        }
    }