From c58de243631cf0b65411a8e87477875c5e662525 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Fri, 28 Jan 2022 11:22:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A1=8C=E9=9D=A2=E6=AD=8C?= =?UTF-8?q?=E8=AF=8D=E6=92=AD=E6=94=BE=E5=99=A8=E4=BC=9A=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=B4=A9=E6=BA=83=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../music/mobile/lyric/LyricPlayer.java | 38 +++++++++++++------ publish/changeLog.md | 2 +- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/android/app/src/main/java/cn/toside/music/mobile/lyric/LyricPlayer.java b/android/app/src/main/java/cn/toside/music/mobile/lyric/LyricPlayer.java index 2c19d14..bac1ff4 100644 --- a/android/app/src/main/java/cn/toside/music/mobile/lyric/LyricPlayer.java +++ b/android/app/src/main/java/cn/toside/music/mobile/lyric/LyricPlayer.java @@ -25,7 +25,8 @@ public class LyricPlayer { int maxLine = 0; int offset = 150; boolean isOffered = false; - long performanceTime = 0; + int performanceTime = 0; + int startPlayTime = 0; int delay = 0; Object tid = null; boolean tempPause = false; @@ -76,12 +77,12 @@ public class LyricPlayer { tid = null; } - private long getNow() { - return System.nanoTime() / 1000000; + private int getNow() { + return (int)(System.nanoTime() / 1000000); } private int getCurrentTime() { - return (int)(getNow() - this.performanceTime); + return getNow() - this.performanceTime + startPlayTime; } private void initLines() { @@ -195,21 +196,27 @@ public class LyricPlayer { pause(); isPlay = true; - performanceTime = getNow() - (long)curTime; + performanceTime = getNow(); + startPlayTime = curTime; curLineNum = findCurLineNum(curTime) - 1; refresh(); } - private int findCurLineNum(int curTime) { + private int findCurLineNum(int curTime, int startIndex) { + // Log.d("Lyric", "findCurLineNum: " + startIndex); int length = lines.size(); - for (int index = 0; index < length; index++) { - if (curTime <= (int) ((HashMap)lines.get(index)).get("time")) return index == 0 ? 0 : index - 1; + for (int index = startIndex; index < length; index++) { + if (curTime < (int) ((HashMap)lines.get(index)).get("time")) return index == 0 ? 0 : index - 1; } return length - 1; } + private int findCurLineNum(int curTime) { + return findCurLineNum(curTime, 0); + } + private void handleMaxLine() { this.onPlay(this.curLineNum); this.pause(); @@ -217,9 +224,10 @@ public class LyricPlayer { private void refresh() { if (tempPaused) tempPaused = false; - // Log.d("Lyric", "refresh: " + curLineNum); curLineNum++; + // Log.d("Lyric", "refresh: " + curLineNum); + if (curLineNum >= maxLine) { handleMaxLine(); return; @@ -227,8 +235,8 @@ public class LyricPlayer { HashMap curLine = lines.get(curLineNum); int currentTime = getCurrentTime(); - int driftTime = currentTime - (int) curLine.get("time"); - // Log.d("Lyric", "driftTime: " + driftTime); + int driftTime = currentTime - (int)curLine.get("time"); + // Log.d("Lyric", "driftTime: " + driftTime + " time: " + curLine.get("time") + " currentTime: " + currentTime); if (driftTime >= 0 || curLineNum == 0) { HashMap nextLine = lines.get(curLineNum + 1); @@ -250,10 +258,16 @@ public class LyricPlayer { } onPlay(curLineNum); return; + } else { + int newCurLineNum = this.findCurLineNum(currentTime, curLineNum + 1); + if (newCurLineNum > curLineNum) curLineNum = newCurLineNum - 1; + // Log.d("Lyric", "refresh--: " + curLineNum + " newCurLineNum: " + newCurLineNum); + refresh(); + return; } } - curLineNum = this.findCurLineNum(currentTime) - 1; + curLineNum = this.findCurLineNum(currentTime, curLineNum) - 1; refresh(); } diff --git a/publish/changeLog.md b/publish/changeLog.md index cc573a8..a24029f 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -4,4 +4,4 @@ ### 修复 -- 修复包名不一致导致的莫名其妙的崩溃问题 +- 修复桌面歌词播放器会导致应用崩溃的问题