测试有分隔符的英文歌曲 love story
本帖最后由 马黑黑 于 2022-9-27 07:16 编辑 <br /><br /><style>#papa { left: -214px; width: 1024px; height: 640px; background: #ccc url('/data/attachment/forum/202209/26/233915ut0bssd5tdbxbxm0.jpg') no-repeat center/cover; box-shadow: 3px 3px 20px #000; display: grid; place-items: center; user-select: none; position: relative; z-index: 1; }
#mplayer { position: absolute; bottom: 0; width: 300px; height: 80px; display: grid; place-items: center; cursor: pointer; }
#mplayer:hover #btnwrap, #mplayer:hover #prog { transform: translateY(var(--yy)); }
#mplayer:hover #btnwrap { background: linear-gradient(to top right, red, green); border-radius: 50%; opacity: .75; }
#btnwrap, #prog { position: absolute; display: grid; place-items: center; transition: .5s; }
#btnwrap { --yy: -15px; width: 40px; height: 40px; transform: rotate(45deg); border: 1px solid tan; border-radius: 6px; opacity: .25; }
#btnplay { width: 20px; height: 20px; transform: translateX(3px); background: #eee; clip-path: polygon(0 0, 0% 100%, 100% 50%); }
#btnpause { width: 2px; height: 20px; border-style: solid; border-width: 0px 4px; border-color: transparent #eee; display: none; }
#prog { --yy: 20px; width: 300px; height: 16px; border-radius: 10px; background: linear-gradient(90deg, orange, red 100%, transparent 0); border: 1px solid gray; font: normal 14px / 16px sans-serif; color: #333; opacity: .75; }
#lrc { position: absolute; left: 20px; top: 10px; font: bold 2em sans-serif; color: rgba(255,255,255,.95); text-shadow: 1px 1px 1px #000; --motion: cover2; --tt: 1s; --state: running; }
#lrc::before { position: absolute; content: attr(data-lrc); width: 0; height: 100%; left: 0; top: 0; color: rgba(160,200,40,.8); overflow: hidden; white-space: nowrap; animation: var(--motion) var(--tt) linear forwards; animation-play-state: var(--state); }
@keyframes cover1 { from { width: 0; } to { width: 100%; } }
@keyframes cover2 { from { width: 0; } to { width: 100%; } }
</style>
<div id="papa">
<div id="lrc" data-lrc="花潮论坛lrc在线">花潮论坛lrc在线</div>
<div id="mplayer">
<div id="btnwrap"><span id="btnplay"></span><span id="btnpause"></span></div>
<div id="prog">00:00 | 00:00</div>
</div>
</div>
<script>
let mKey = 0, mSeek = false, mFlag = true, aud = new Audio();
let lrcAr = [
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
];
aud.src = 'https://music.163.com/song/media/outer/url?id=569734247.mp3';
aud.autoplay = true;
aud.loop = true;
btnwrap.onclick = () => aud.paused ? aud.play() : aud.pause();
prog.onclick = (e) => aud.currentTime = aud.duration * e.offsetX / prog.offsetWidth;
aud.addEventListener('pause', () => mState());
aud.addEventListener('play', () => mState());
aud.addEventListener('seeked', () => calcKey());
aud.addEventListener('timeupdate', () => {
prog.style.background= 'linear-gradient(90deg, green, red ' + aud.currentTime / aud.duration * 100 + '%, snow 0)';
prog.innerText = toMin(aud.currentTime) + ' | ' + toMin(aud.duration);
for(j=0; j<lrcAr.length; j++) {
if(aud.currentTime >= lrcAr) {
if(mKey === j) showLrc(lrcAr);
else continue;
}
}
});
let mState = () => aud.paused ? (btnplay.style.display = 'block', btnpause.style.display = 'none', lrc.style.setProperty('--state', 'paused')) : (btnplay.style.display = 'none', btnpause.style.display = 'block', lrc.style.setProperty('--state', 'running'));
let showLrc = (time) => {
let name = mFlag ? 'cover1' : 'cover2';
lrc.innerHTML = lrc.dataset.lrc = lrcAr;
lrc.style.setProperty('--motion', name);
lrc.style.setProperty('--tt', time + 's');
lrc.style.setProperty('--state', 'running');
mKey += 1;
mFlag = !mFlag;
};
let calcKey = () => {
for(j = 0; j < lrcAr.length; j ++) {
if(aud.currentTime <= lrcAr) {
mKey = j - 1;
break;
}
}
if(mKey <0) mKey = 0;
if(mKey > lrcAr.length - 1) mKey = lrcAr.length - 1;
let time = lrcAr - (aud.currentTime - lrcAr);
showLrc(time);
};
let toMin = (val)=> {
if (!val) return '00:00';
val = Math.floor(val);
let min = parseInt(val / 60), sec = parseFloat(val % 60);
if(min < 10) min = '0' + min;
if(sec < 10) sec = '0' + sec;
return min + ':' + sec;
};
</script>
帖子中,歌词数组正常接受英文的分隔符('),不会出现故障。
用花潮LRC在线增强版做英文歌词时,分隔符也不会影响花潮格式lrc歌词的制作,但分隔符可能会被吃掉,如是,做法有两个方式:一是做好后补上,而是做前先将分隔符替换成其他的符号(事实上,很多现成的歌词都已经将 ' 换成了 `),完了再换回来。 小角符号 ',其实就是小角单引号。在HTML、CSS和JS中,大量使用这两个符号,尤其是JS,小角单引号、双引号不得不用,所以会和英文输入状态下的 ' 冲突,常常解析出错。花潮LRC在线前版本专门考虑过这个问题,对歌词中出现的分隔符做过转义,现在的增强版因为歌词字串使用小角双引号,所以对分隔符取消了转义,但不会影响制作和帖子对有分隔符歌词的使用。 黑黑朋友早晨好!欣赏异域歌曲另有一种风情。 黑黑辛苦,还专门做了测试。不过,事实证明这个歌词同步能完美涵盖英文歌词呢{:4_199:} 图片选得很有趣,这个制作虽然是用于测试的,倒很漂亮呢{:4_199:} 黑黑是全方位的测试运用,效果同样棒棒的{:4_178:} 黑黑辛苦,考虑总那么的周到,鸟语小辣椒玩的少{:4_170:} 小辣椒 发表于 2022-9-27 12:25
黑黑辛苦,考虑总那么的周到,鸟语小辣椒玩的少
现在有去英文化的趋势,至少会对学生减少学习量。不完鸟语也罢{:4_170:} 红影 发表于 2022-9-27 09:55
黑黑辛苦,还专门做了测试。不过,事实证明这个歌词同步能完美涵盖英文歌词呢
额,是那个,醉美,说用我的程序做一个英文歌帖,本地测试完好,发到论坛不行。所处专测一下,虽然我知道程序没问题。 小辣椒 发表于 2022-9-27 12:24
黑黑是全方位的测试运用,效果同样棒棒的
还行还行 红影 发表于 2022-9-27 09:55
图片选得很有趣,这个制作虽然是用于测试的,倒很漂亮呢
过得去 马黑黑 发表于 2022-9-27 12:29
还行还行
就是就是{:4_170:} 小辣椒 发表于 2022-9-27 12:31
就是就是
自我安慰一级棒{:4_173:} 马黑黑 发表于 2022-9-27 12:38
自我安慰一级棒
绝对的,特级棒{:4_177:} 小辣椒 发表于 2022-9-27 12:44
绝对的,特级棒
{:4_196:}
你的歌词问题没去看看?
5.2];
5.2 表示唱完这句歌词的用时,用时掐的准,就不会出现你说的问题 马黑黑 发表于 2022-9-27 12:46
你的歌词问题没去看看?
;
我试了掐准了,那后面的过门怎么掐?不算这句,后面一句也是会提早出来, 好听好看。制作棒棒的。{:4_199:} 本帖最后由 马黑黑 于 2022-9-27 13:16 编辑
小辣椒 发表于 2022-9-27 12:54
我试了掐准了,那后面的过门怎么掐?不算这句,后面一句也是会提早出来,
下一句歌词提早出来?那是头掐不准。这个结构,你懂了,什么都能解释了:
26.00,"歌词", 5.3
起唱时间, "歌词", 歌词唱完所用秒数