如何使用千千静听歌词秀编辑歌词
千千静听的歌词文件有其特定的格式,每句歌词前面都必须有类似[00:1600]这样的时间标签,否则歌词无法正常显示。歌词可以用各种文本编辑工具进行编辑,最后保存成lrc或txt扩展名即可。不过,用其他文本编辑工具编辑歌词时需要自己手动输入时间标签,比较麻烦,您可以选择千千歌词秀编辑,轻点鼠标即可插入时间标签,轻松完成歌词编辑。
编辑方法如下:
1、在播放列表中选中您想要编辑歌词的曲目
2、在千千歌词秀显示窗口单击鼠标右键,在菜单中选择“编辑歌词”,进入歌词编辑模式。
3、点击编辑模式下歌词秀窗口中的播放键;在听到歌声的瞬间,点击暂停。
4、点击鼠标右键,在d出菜单中选择插入时间标签,再次点击播放键。
5、在本句歌词演唱结束时点击“暂停”,在刚插入的时间标签后输入歌词内容,并将光标下移一行。
6、点击“播放”,在听到第二句歌词演唱开始的瞬间,点击“暂停”。重复4-6的步骤,直到歌词完全输入。
7、在歌词头部输入歌词[ti:]、[ar:]、[al:]、[by:]等信息增加歌词的完整性,这一步也可以在步骤3之前做,也可以不写。
8、编辑完毕,右键菜单选择“返回显示”,重新播放歌曲检查歌词编辑是否有误。
9、若检查后没有发现错误或者遗漏,则可以保存并进入时间校正;否则请返回编辑模式修改。
提示:
·不用过分在意点击“暂停”的时间是否精确,输入完毕后可以进行时间校正。
·遇到需要重复输入的歌词,点击“暂停”后,将光标移至已输入的歌词处插入时间标签即可,无需重新输入。您可以在右键菜单中选择“排列方式-〉全部展开”,即可按时间标签顺序浏览歌词。lrc可以通过如下util工具类进行转换,如果想知道结果是否读取的有问题,可以直接用记事本打开lrc文件的,之后和输出结果比对一下就行。
package comroutonutils;
import javaioBufferedReader;
import javaioFileInputStream;
import javaioIOException;
import javaioInputStreamReader;
import javautilArrayList;
import javautilList;
import javautilregexMatcher;
import javautilregexPattern;
import androidutilLog;
/
parse lrc file tool
eg:
utilLrc lrc = new utilLrc("/sdcard/testlrc");
get song name : String title = lrcgetTitle();
get performer name : String artist = lrcgetArtist();
get album name: String album = lrcgetAlbum();
get lrcmaker name: String lrcMaker = lrcgetLrcMaker();
get song list: List<Statement> list = lrcgetLrcList();
@author xuweilin
/
public class utilLrc {
private static String TAG = "utilLrc";
public class Statement {
private double time = 00; //time, 001s
private String lyric = ""; //song word
/
get time
/
public double getTime() {
return time;
}
/
set time
/
public void setTime(double time) {
thistime = time;
}
/
set timeformat:mm:ssms
/
public void setTime(String time) {
String str[] = timesplit(":|\\");
thistime = IntegerparseInt(str[0])60+IntegerparseInt(str[1])+IntegerparseInt(str[2])001;
}
/
get lrc word
/
public String getLyric() {
return lyric;
}
/
set lrc word
/
public void setLyric(String lyric) {
thislyric = lyric;
}
}
private BufferedReader bufferReader = null;
private String title = "";
private String artist = "";
private String album = "";
private String lrcMaker = "";
private List<Statement> statements = new ArrayList<Statement>();
/
fileName
/
public utilLrc(String fileName) throws IOException{
FileInputStream file = new FileInputStream(fileName);
bufferReader = new BufferedReader(new InputStreamReader(file, "utf-8"));
readData();
}
/
read the file
/
private void readData() throws IOException{
statementsclear();
String strLine;
while(null != (strLine = bufferReaderreadLine()))
{
if(""equals(strLinetrim()))
{
continue;
}
if(null == title || ""equals(titletrim()))
{
Pattern pattern = Patterncompile("\\[ti:(+)\\]");
Matcher matcher = patternmatcher(strLine);
if(matcherfind())
{
title=matchergroup(1);
continue;
}
}
if(null == artist || ""equals(artisttrim()))
{
Pattern pattern = Patterncompile("\\[ar:(+)\\]");
Matcher matcher = patternmatcher(strLine);
if(matcherfind())
{
artist=matchergroup(1);
continue;
}
}
if(null == album || ""equals(albumtrim()))
{
Pattern pattern = Patterncompile("\\[al:(+)\\]");
Matcher matcher = patternmatcher(strLine);
if(matcherfind())
{
album=matchergroup(1);
continue;
}
}
if(null == lrcMaker || ""equals(lrcMakertrim()))
{
Pattern pattern = Patterncompile("\\[by:(+)\\]");
Matcher matcher = patternmatcher(strLine);
if(matcherfind())
{
lrcMaker=matchergroup(1);
continue;
}
}
int timeNum=0;
String str[] = strLinesplit("\\]");
for(int i=0; i<strlength; ++i)
{
String str2[] = str[i]split("\\[");
str[i] = str2[str2length-1];
if(isTime(str[i])){
++timeNum;
}
}
for(int i=0; i<timeNum;++i)
{
Statement sm = new Statement();
smsetTime(str[i]);
if(timeNum<strlength)
{
smsetLyric(str[strlength-1]);
}
statementsadd(sm);
}
}
sortLyric();
}
/
judge the string is or not date format
/
private boolean isTime(String string)
{
String str[] = stringsplit(":|\\");
if(3!=strlength)
{
return false;
}
try{
for(int i=0;i<strlength;++i)
{
IntegerparseInt(str[i]);
}
}
catch(NumberFormatException e)
{
Loge(TAG, "isTime exception:"+egetMessage());
return false;
}
return true;
}
/
sort the word by time
/
private void sortLyric()
{
for(int i=0;i<statementssize()-1;++i)
{
int index=i;
double delta=DoubleMAX_VALUE;
boolean moveFlag = false;
for(int j=i+1;j<statementssize();++j)
{
double sub;
if(0>=(sub=statementsget(i)getTime()-statementsget(j)getTime()))
{
continue;
}
moveFlag=true;
if(sub<delta)
{
delta=sub;
index=j+1;
}
}
if(moveFlag)
{
statementsadd(index, statementsget(i));
statementsremove(i);
--i;
}
}
}
/
get title
@return
/
public String getTitle(){
return title;
}
/
get artist
@return
/
public String getArtist(){
return artist;
}
/
get album
@return
/
public String getAlbum(){
return album;
}
/
get lrc maker
@return
/
public String getLrcMaker(){
return lrcMaker;
}
/
get song list
@return
/
public List<Statement> getLrcList(){
return statements;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)