马黑黑 发表于 2022-9-26 23:41

测试有分隔符的英文歌曲 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>

马黑黑 发表于 2022-9-26 23:53

帖子中,歌词数组正常接受英文的分隔符('),不会出现故障。

用花潮LRC在线增强版做英文歌词时,分隔符也不会影响花潮格式lrc歌词的制作,但分隔符可能会被吃掉,如是,做法有两个方式:一是做好后补上,而是做前先将分隔符替换成其他的符号(事实上,很多现成的歌词都已经将 ' 换成了 `),完了再换回来。

马黑黑 发表于 2022-9-27 07:16

小角符号 ',其实就是小角单引号。在HTML、CSS和JS中,大量使用这两个符号,尤其是JS,小角单引号、双引号不得不用,所以会和英文输入状态下的 ' 冲突,常常解析出错。花潮LRC在线前版本专门考虑过这个问题,对歌词中出现的分隔符做过转义,现在的增强版因为歌词字串使用小角双引号,所以对分隔符取消了转义,但不会影响制作和帖子对有分隔符歌词的使用。

梦油 发表于 2022-9-27 09:29

黑黑朋友早晨好!欣赏异域歌曲另有一种风情。

红影 发表于 2022-9-27 09:55

黑黑辛苦,还专门做了测试。不过,事实证明这个歌词同步能完美涵盖英文歌词呢{:4_199:}

红影 发表于 2022-9-27 09:55

图片选得很有趣,这个制作虽然是用于测试的,倒很漂亮呢{:4_199:}

醉美水芙蓉 发表于 2022-9-27 11:47

小辣椒 发表于 2022-9-27 12:24

黑黑是全方位的测试运用,效果同样棒棒的{:4_178:}

小辣椒 发表于 2022-9-27 12:25

黑黑辛苦,考虑总那么的周到,鸟语小辣椒玩的少{:4_170:}

马黑黑 发表于 2022-9-27 12:27

小辣椒 发表于 2022-9-27 12:25
黑黑辛苦,考虑总那么的周到,鸟语小辣椒玩的少

现在有去英文化的趋势,至少会对学生减少学习量。不完鸟语也罢{:4_170:}

马黑黑 发表于 2022-9-27 12:29

红影 发表于 2022-9-27 09:55
黑黑辛苦,还专门做了测试。不过,事实证明这个歌词同步能完美涵盖英文歌词呢

额,是那个,醉美,说用我的程序做一个英文歌帖,本地测试完好,发到论坛不行。所处专测一下,虽然我知道程序没问题。

马黑黑 发表于 2022-9-27 12:29

小辣椒 发表于 2022-9-27 12:24
黑黑是全方位的测试运用,效果同样棒棒的

还行还行

马黑黑 发表于 2022-9-27 12:29

红影 发表于 2022-9-27 09:55
图片选得很有趣,这个制作虽然是用于测试的,倒很漂亮呢

过得去

小辣椒 发表于 2022-9-27 12:31

马黑黑 发表于 2022-9-27 12:29
还行还行

就是就是{:4_170:}

马黑黑 发表于 2022-9-27 12:38

小辣椒 发表于 2022-9-27 12:31
就是就是

自我安慰一级棒{:4_173:}

小辣椒 发表于 2022-9-27 12:44

马黑黑 发表于 2022-9-27 12:38
自我安慰一级棒

绝对的,特级棒{:4_177:}

马黑黑 发表于 2022-9-27 12:46

小辣椒 发表于 2022-9-27 12:44
绝对的,特级棒

{:4_196:}

你的歌词问题没去看看?

5.2];

5.2 表示唱完这句歌词的用时,用时掐的准,就不会出现你说的问题

小辣椒 发表于 2022-9-27 12:54

马黑黑 发表于 2022-9-27 12:46
你的歌词问题没去看看?

;


我试了掐准了,那后面的过门怎么掐?不算这句,后面一句也是会提早出来,

加林森 发表于 2022-9-27 13:11

好听好看。制作棒棒的。{:4_199:}

马黑黑 发表于 2022-9-27 13:14

本帖最后由 马黑黑 于 2022-9-27 13:16 编辑

小辣椒 发表于 2022-9-27 12:54
我试了掐准了,那后面的过门怎么掐?不算这句,后面一句也是会提早出来,
下一句歌词提早出来?那是头掐不准。这个结构,你懂了,什么都能解释了:

26.00,"歌词", 5.3

起唱时间, "歌词", 歌词唱完所用秒数
页: [1] 2 3 4 5 6
查看完整版本: 测试有分隔符的英文歌曲 love story