Last active
July 20, 2024 10:47
-
-
Save salmon-meuniere/bf909d15cd60aa97297db0f1fef1f810 to your computer and use it in GitHub Desktop.
プチリリ Web歌詞メーカー LRCインポートユーザースクリプト(ブラウザにTamperMonkeyを導入してご利用ください)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name PetitLyrics Web Maker LRC Import | |
// @namespace http://tampermonkey.net/ | |
// @version 0.1 | |
// @author Salmon Meuniere | |
// @match https://petitlyrics.com/mypage/maker/line_input* | |
// @description プチリリのWeb版の同期歌詞メーカーで、LRC形式を扱えるようになるスクリプトです。 | |
// @grant none | |
// ==/UserScript== | |
function parseLRC(txt) { | |
var lines = txt.split(/\r\n|\n/); | |
var times = []; | |
var text = ''; | |
for(var i = 0; i < lines.length; i++) { | |
var e = lines[i]; | |
var timeExp = /\[(\d{2,})\:(\d{2})[\:|\.](\d{2,3})?\]/; | |
if (e.match(/^[\s]*$/) === null) { | |
var time = timeExp.exec(e); | |
if(time === null) { | |
alert('LRCファイルの形式が正しくありません'); | |
return false; | |
} else { | |
var ms; | |
var g = time[3].toString(); | |
if(g.length == 2) { | |
ms = g + '0'; | |
} else if(g.length == 3) { | |
ms = g; | |
} else { | |
ms = g; | |
} | |
ms = parseFloat(ms); | |
times[i] = {}; | |
times[i].min = parseInt(time[1]); | |
times[i].sec = parseInt(time[2]); | |
times[i].msec = ms; | |
text += e.replace(timeExp, '').replace(/(^\s*|\s*$)/m, '') + "\n"; | |
} | |
} | |
} | |
return [text, times]; | |
} | |
var audio = document.getElementById('myMusic'); | |
var cp = document.getElementById('main_window2'); | |
cp.insertAdjacentHTML('afterend', '<div id="plHelperInsert" style="margin-top: 1.2rem;"><p><b>•LRC読込(テキスト部分半角32, 全角16文字以内)</b><br><b>読み込み後、自動入力を開始します。途中でほかの操作を行わないでください。</b><br>先に音楽を読み込んでください</p><div style="width: 100%"> <input type="file" accept="*.lrc" name="plHplrc" id="plHplrc" disabled> </div></div>'); | |
var mf = document.getElementById('musicfile'); | |
var lrcInput = document.getElementById('plHplrc'); | |
var lyricsTextInput = document.getElementById('lyricsfileConv'); | |
var lyricsTextReload = document.getElementsByName('lyricsfileConvBtn')[0]; | |
mf.addEventListener('change', function(){ | |
lrcInput.removeAttribute('disabled'); | |
lrcInputReload.removeAttribute('disabled'); | |
}); | |
lrcInput.addEventListener('change', function(){ | |
var file = this.files; | |
var reader = new FileReader(); | |
try{ | |
reader.readAsText(file[0]); | |
reader.addEventListener('load', function(){ | |
var rsl = this.result; | |
var lrcArray = parseLRC(rsl); | |
console.log(lrcArray); | |
var res = lrcArray[0]; | |
lyricsTextInput.setAttribute("disabled", "disabled"); | |
lyricsTextReload.setAttribute("disabled", "disabled"); | |
try{ | |
//プチリリのコードを拝借 | |
var line_no = 0; | |
var lyrics_text = res; | |
var lyrics_text_array = lyrics_text.split('\n'); | |
lyrics_text_array.map(function(readline) { | |
line_no++; | |
if(getByte($.trim(readline)) > 32){ | |
alert(String(line_no) + "行目が32バイトを超えています"); | |
return; | |
} | |
}); | |
clearRow(); | |
line_no = 0; | |
lyrics_text_array.map(function(readline) { | |
line_no++; | |
var tmpData = { | |
line_no: line_no, | |
start_time: "", | |
lyrics_text: $.trim(readline) | |
}; | |
$("#list").addRowData(undefined, tmpData); | |
}); | |
//ラジオボタンを先頭に移動 | |
document.getElementById("rbtn" + String(1)).checked = true; | |
//先頭の行IDを取得 | |
var rowid = getRowID(1); | |
//現在行を先頭に移動 | |
$("#list").jqGrid('setSelection', rowid); | |
//プチリリここまで | |
document.getElementById("setStartTimeBtn").setAttribute("disabled", "disabled"); | |
alert("読み込みが完了しました。\nOKを押すと、開始します。\n音源コントローラーには触れないでください。"); | |
for(var i = 0; i < lrcArray[1].length; i++) { | |
var timeD = lrcArray[1][i]; | |
var ct = ((timeD.min)*60) + timeD.sec + (timeD.msec/1000) + 0.1; //0.1秒、プチリリ側で補正が入っている | |
console.log(ct); | |
audio.currentTime = ct; | |
setStartTime(); | |
} | |
alert("完了しました。"); | |
audio.currentTime = 0; | |
} catch(e) { | |
alert("予期せぬエラーが発生しました。"); | |
console.log(e); | |
} | |
}); | |
} catch(e){ | |
alert("予期せぬエラーが発生しました。"); | |
console.log(e); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment