/** * 最重要的一个方法,它根据读到的歌词内容 进行初始化,比如把歌词一句一句分开并计算好时间 * * @param content * 歌词内容 */ private void init(String content) { // 如果歌词的内容为空,则后面就不用执行了 // 直接显示歌曲名就可以了 if (content == null || content.trim().equals("")) { list.add(new Sentence(info.getFormattedName(), Integer.MIN_VALUE, Integer.MAX_VALUE)); return; } try { BufferedReader br = new BufferedReader(new StringReader(content)); String temp = null; while ((temp = br.readLine()) != null) { parseLine(temp.trim()); } br.close(); // 读进来以后就排序了 Collections.sort(list, new Comparator<Sentence>() { public int compare(Sentence o1, Sentence o2) { return (int) (o1.getFromTime() - o2.getFromTime()); } }); // 处理第一句歌词的起始情况,无论怎么样,加上歌名做为第一句歌词,并把它的 // 结尾为真正第一句歌词的开始 if (list.size() == 0) { list.add(new Sentence(info.getFormattedName(), 0, Integer.MAX_VALUE)); return; } else { Sentence first = list.get(0); list.add( 0, new Sentence(info.getFormattedName(), 0, first .getFromTime())); } int size = list.size(); for (int i = 0; i < size; i++) { Sentence next = null; if (i + 1 < size) { next = list.get(i + 1); } Sentence now = list.get(i); if (next != null) { now.setToTime(next.getFromTime() - 1); } } // 如果就是没有怎么办,那就只显示一句歌名了 if (list.size() == 1) { list.get(0).setToTime(Integer.MAX_VALUE); } else { Sentence last = list.get(list.size() - 1); last.setToTime(info == null ? Integer.MAX_VALUE : info .getLength() * 1000 + 1000); } } catch (Exception ex) { Logger.getLogger(Lyric.class.getName()).log(Level.SEVERE, null, ex); } }
/** * 是否完全匹配,完全匹配是指直接对应到ID3V1的标签, 如果一样,则完全匹配了,完全匹配的LRC的文件格式是: 阿木 - 有一种爱叫放手.lrc * * @param info * 歌曲信息 * @param file * 侯选文件 * @return 是否合格 */ private boolean matchAll(PlayListItem info, File file) { String name = info.getFormattedName(); String fn = file.getName() .substring(0, file.getName().lastIndexOf(".")); if (name.equals(fn)) { return true; } else { return false; } }
/** * 是否匹配了歌曲名 * * @param info * 歌曲信息 * @param file * 侯选文件 * @return 是否合格 */ private boolean matchSongName(PlayListItem info, File file) { String name = info.getFormattedName(); String rn = file.getName() .substring(0, file.getName().lastIndexOf(".")); if (name.equalsIgnoreCase(rn) || info.getTitle().equalsIgnoreCase(rn)) { return true; } else { return false; } }
/** * 把下载到的歌词保存起来,免得下次再去找 * * @param lyric * 歌词内容 * @param info * 歌的信息 */ private void saveLyric(String lyric, PlayListItem info) { try { // 如果歌手不为空,则以歌手名+歌曲名为最好组合 String name = info.getFormattedName() + ".lrc"; File dir = new File(HOME, "Lyrics" + File.separator); // File dir = Config.getConfig().getSaveLyricDir(); dir.mkdirs(); file = new File(dir, name); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file), "GBK")); bw.write(lyric); bw.close(); info.setLyricFile(file); log.info("保存完毕,保存在:" + file); } catch (Exception exe) { log.log(Level.SEVERE, "保存歌词出错", exe); } }