lrcReader[typing-tube.net]

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

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

  1. // ==UserScript==
  2. // @name lrcReader[typing-tube.net]
  3. // @namespace http://tampermonkey.net/lrcReader
  4. // @version 0.31
  5. // @description Add buttons to load the .lrc format file on the edit screen on typing-tube.net.
  6. // @author Spacia
  7. // @match https://typing-tube.net/movie/edit?videoid=*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11.  
  12. //This is the Entry point.
  13. (function() {
  14. 'use strict';
  15.  
  16. AddLrcReaderElements();
  17. })();
  18.  
  19.  
  20. function AddLrcReaderElements(){
  21.  
  22. // Add a div element to be container to the bottom of the navigation menu "edit".
  23. var elDiv = document.createElement("div");
  24. elDiv.classList.add('row');
  25. elDiv.classList.add('ml-2');
  26. elDiv.classList.add('w-100');
  27. elDiv.id = "ContainerOflrcReader";
  28. var elEdit = document.getElementById("edit");
  29. elEdit.appendChild(elDiv);
  30. var elDevId = document.getElementById("ContainerOflrcReader");
  31.  
  32. // Add a button for uploading .lrc format file in container created by former code.
  33. var elTextDiv = document.createElement("div");
  34. elTextDiv.classList.add("col-2");
  35. elTextDiv.innerHTML = "lrcファイルを参照";
  36. elDevId.appendChild(elTextDiv);
  37.  
  38. var elForm = document.createElement("form");
  39. elForm.classList.add("col-6");
  40. elForm.innerHTML = "<div><input name='lrcFile' type='file' accept='.lrc'></div>";
  41. elForm.addEventListener('change', onLoadLrc);
  42. elDevId.appendChild(elForm);
  43.  
  44. // Add radio buttons to select English or Kana.
  45. var elForm2 = document.createElement("form");
  46. elForm2.classList.add("col-4");
  47. 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>";
  48. elDevId.appendChild(elForm2);
  49.  
  50. }
  51.  
  52.  
  53. function onLoadLrc(event){
  54. SetTimeEvent();
  55.  
  56. var _file = event.target.files[0];
  57. if(_file){
  58. var fr = new FileReader();
  59. fr.onload = function(e) {
  60.  
  61. // A file was loaded.
  62. SetLinesOfLyricsToTimelineTable(fr.result.split('\n'));
  63.  
  64. }
  65. fr.readAsText(_file);
  66. }else{
  67. alert("Failed to load file formated .lrc");
  68. }
  69. }
  70.  
  71.  
  72.  
  73. var isKanaMode; //load mode of kana or english
  74. var lineidx = 0;
  75. var time;
  76. var editedLine;
  77. var lines;
  78. var timeEventFlag;
  79.  
  80. function SetTimeEvent(){
  81.  
  82. setTimeout(() => {
  83. if(document.getElementById("kana").value.length != 0){
  84. hoge();
  85. }
  86. if(timeEventFlag){
  87. SetTimeEvent();
  88. }
  89. }, 20);
  90.  
  91. }
  92.  
  93. function SetLinesOfLyricsToTimelineTable(_lines) {
  94.  
  95. isKanaMode = document.getElementById('lrcConverTypeKana').checked;
  96. lineidx = 0;
  97. lines = _lines;
  98. timeEventFlag = true;
  99.  
  100. retriveLineInfo();
  101. }
  102.  
  103.  
  104. function retriveLineInfo(){
  105.  
  106. var line = lines[lineidx++];
  107.  
  108. //if empty line then check next line.
  109. var ptnOfTimeTag = /\[\d\d:\d\d:\d\d\]/g;
  110. if(ptnOfTimeTag.test(line) == false){
  111. if(lineidx < lines.length){
  112. retriveLineInfo();
  113. }else{
  114. timeEventFlag = false;
  115. }
  116. return;
  117. }
  118.  
  119. //get time for this line.
  120. var ptnOfTwoDigidTime = /\d\d/g;
  121. var timesStr = line.match(ptnOfTwoDigidTime);
  122. var minute = parseFloat(timesStr[0]);
  123. var second = parseFloat(timesStr[1]);
  124. var centiSec = parseFloat(timesStr[2]);
  125. time = minute * 60 + second + centiSec * 0.01;
  126. //console.log(time);
  127.  
  128. //get line of text.
  129. editedLine = line.replace(ptnOfTimeTag,"").trim();
  130. //console.log(editedLine);
  131.  
  132. //Add time and lineLyrics to the timeline Table in the navigation menu "edit".
  133. document.getElementById("time").value = time;
  134. document.getElementById("words").value = editedLine;
  135.  
  136. if(isKanaMode){
  137. command_kakasi();
  138. }else{
  139. command_kakasi_en();
  140. }
  141. }
  142.  
  143.  
  144. function hoge(){
  145. console.log("hoge");
  146. if( document.getElementById("kana").value.length != 0){
  147. command_add();
  148. if(lineidx < lines.length){
  149. retriveLineInfo();
  150. }else{
  151. timeEventFlag = false;
  152. }
  153. }
  154. }