当前位置:首页 » 安卓系统 » android同步歌词

android同步歌词

发布时间: 2024-10-21 13:45:45

Ⅰ 如何实现android音乐播放器歌词同步

先从最基本的读取歌词文件开始:
Public class LrcHandle {
private List mWords = new ArrayList();
private List mTimeList = new ArrayList();
//处理歌词文件
public void readLRC(String path) {
File file = new File(path);
try {
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(
fileInputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String s = "";
while ((s = bufferedReader.readLine()) != null) {
addTimeToList(s);
if ((s.indexOf("[ar:") != -1) || (s.indexOf("[ti:") != -1)
|| (s.indexOf("[by:") != -1)) {
s = s.substring(s.indexOf(":") + 1, s.indexOf("]"));
} else {
String ss = s.substring(s.indexOf("["), s.indexOf("]") + 1);
s = s.replace(ss, "");
}
mWords.add(s);
}
bufferedReader.close();
inputStreamReader.close();
fileInputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
mWords.add("没有歌词文件,赶紧去下载");
} catch (IOException e) {
e.printStackTrace();
mWords.add("没有读取到歌词");
}
}
public List getWords() {
return mWords;
}
public List getTime() {
return mTimeList;
}
// 分离出时间
private int timeHandler(String string) {
string = string.replace(".", ":");
String timeData[] = string.split(":");
// 分离出分、秒并转换为整型
int minute = Integer.parseInt(timeData[0]);
int second = Integer.parseInt(timeData[1]);
int millisecond = Integer.parseInt(timeData[2]);
// 计算上一行与下一行的时间转换为毫秒数
int currentTime = (minute * 60 + second) * 1000 + millisecond * 10;
return currentTime;
}
private void addTimeToList(String string) {
Matcher matcher = Pattern.compile(
"[d{1,2}:d{1,2}([.:]d{1,2})?]").matcher(string);
if (matcher.find()) {
String str = matcher.group();
mTimeList.add(new LrcHandle().timeHandler(str.substring(1,
str.length() - 1)));
}
}
}
一般歌词文件的格式大概如下:
[ar:艺人名]
[ti:曲名]
[al:专辑名]
[by:编者(指编辑LRC歌词的人)]
[offset:时间补偿值] 其单位是毫秒,正值表示整体提前,负值相反。这是用于总体调整显示快慢的。
但也不一定,有时候并没有前面那些ar:等标识符,所以我们这里也提供了另一种解析方式。
歌词文件中的时间格式则比较统一:[00:00.50]等等,00:表示分钟,00.表示秒数,.50表示毫秒数,当然,我们最后是要将它们转化为毫秒数处理才比较方便。

Ⅱ 东方神起的《Android》 歌词

Android
作词:H.U.B. 作曲:Emil Carlin
演唱:东方神起
君は谁?心を抜かれ
右にならえ 思考停止の果て
监视続け 何の为追い诘め
苦労かさんで 不実の底へと
If wanna goIf wanna show
If wanna goIf wanna go
for your mind
爱からも梦からも
敌からも自分にも
Let's break it through
we can do
决して恐れず 挑む自由 光求めて
make it true make it soul
照らしだせ Oh Oh Oh Oh Oh Oh Oh Oh
never give up for my life
命がけのlove
伤も毒も受けてたつのさ
followもsparrowもはねつけろ
Oh Oh Oh Oh Oh Oh Oh Oh
emptyに痩せた
支配された世界に情热なんか
もうどこにもない
Androidは嫌 胜利しても孤独
それでいいの?まだ间に合うのなら
If wanna goIf wanna show
If wanna goIf wanna go
for your mind
壊れても无谋でも
どうしても何度でも前にchance
Let's break it through we can do
决して恐れず 挑む自由 热い身体で
make it true make it soul
照らしだせ Oh Oh Oh Oh Oh Oh Oh Oh
never give up for my life
命がけのlove
伤も毒も受けてたつのさ
followもsparrowもはねつけろ
Oh Oh Oh Oh Oh Oh Oh Oh
ただ自分を信じればいい
屈せずに忘れずに
そこに道はできる
get down down down down
目指している
次の场所に辿り着くためには
覚悟なら决めた
get down down down down
ANDROID
Let's break it through
we can do
决して恐れず 挑む自由 光求めて
make it true make it soul
照らしだせ Oh Oh…
never give up for my life
命がけのlove
伤も毒も受けてたつのさ
followもsparrowもはねつけろ
Oh Oh Oh Oh Oh Oh Oh Oh
Let's break it through
we can do
决して恐れず 挑む自由 热い身体で
make it true make it soul
照らしだせ Oh Oh Oh Oh Oh Oh Oh Oh
Oh Oh Oh Oh Oh Oh Oh Oh

http://music..com/song/35265422

Ⅲ android 如何实现 边录音 同时显示 歌词评分有原理,代码就好了。。

歌曲播放时歌词同步显示,我们需要读取以上歌词文件的每一行转换成成一个个歌词实体,可根据当前播放器的播放进度与每句歌词的开始时间,得到当前屏幕中央高亮显示的那句歌词
我们需要读取以上歌词文件的每一行转换成成一个个歌词实体:
代码如下:

public class LyricObject {
public int begintime; // 开始时间
public int endtime; // 结束时间
public int timeline; // 单句歌词用时
public String lrc; // 单句歌词
}

可根据当前播放器的播放进度与每句歌词的开始时间,得到当前屏幕中央高亮显示的那句歌词。在UI线程中另起线程,通过回调函数 onDraw() 每隔100ms重新绘制屏幕,实现歌词平滑滚动的动画效果。MainActivity代码如下:
代码如下:

import java.io.IOException;
import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private LyricView lyricView;
private MediaPlayer mediaPlayer;
private Button button;
private SeekBar seekBar;
private String mp3Path;
private int INTERVAL=45;//歌词每行的间隔
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
mp3Path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/LyricSync/1.mp3";
lyricView = (LyricView) findViewById(R.id.mylrc);
mediaPlayer = new MediaPlayer();
// this.requestWindowFeature(Window.FEATURE_NO_TITLE);
ResetMusic(mp3Path);
SerchLrc();
lyricView.SetTextSize();
button = (Button) findViewById(R.id.button);
button.setText("播放");
seekBar = (SeekBar) findViewById(R.id.seekbarmusic);
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
if (fromUser) {
mediaPlayer.seekTo(progress);
lyricView.setOffsetY(220 - lyricView.SelectIndex(progress)
* (lyricView.getSIZEWORD() + INTERVAL-1));
}
}
});
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (mediaPlayer.isPlaying()) {
button.setText("播放");
mediaPlayer.pause();
} else {
button.setText("暂停");
mediaPlayer.start();
lyricView.setOffsetY(220 - lyricView.SelectIndex(mediaPlayer.getCurrentPosition())
* (lyricView.getSIZEWORD() + INTERVAL-1));
}
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
ResetMusic(mp3Path);
lyricView.SetTextSize();
lyricView.setOffsetY(200);
mediaPlayer.start();
}
});
seekBar.setMax(mediaPlayer.getDuration());
new Thread(new runable()).start();
}
public void SerchLrc() {
String lrc = mp3Path;
lrc = lrc.substring(0, lrc.length() - 4).trim() + ".lrc".trim();
LyricView.read(lrc);
lyricView.SetTextSize();
lyricView.setOffsetY(350);
}
public void ResetMusic(String path) {
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(mp3Path);
mediaPlayer.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class runable implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(100);
if (mediaPlayer.isPlaying()) {
lyricView.setOffsetY(lyricView.getOffsetY() - lyricView.SpeedLrc());
lyricView.SelectIndex(mediaPlayer.getCurrentPosition());
seekBar.setProgress(mediaPlayer.getCurrentPosition());
mHandler.post(mUpdateResults);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Handler mHandler = new Handler();
Runnable mUpdateResults = new Runnable() {
public void run() {
lyricView.invalidate(); // 更新视图
}
};
}

Ⅳ android 东方神起日文片假名或平假名歌词、、别的我都看不懂、、拜托了、、

“ANDROID”
作词∶H.U.B.
作曲∶Emil Carlin
歌∶东方神起
君(きみ)は谁(だれ)?心(こころ)を抜(ぬ)かれ
右(みぎ)にならえ 思考(しこう)停止(ていし)の果(は)て
监视(かんし)続(つづ)け 何(なん)の为(ため)追(お)い诘(つ)め
苦労(くろう)かさんで 不実(ふじつ)の底(そこ)へと
If wanna goIf wanna show
If wanna goIf wanna go
for your mind
爱(あい)からも梦(ゆめ)からも
敌(てき)からも自分(じぶん)にも
Let's break it through
we can do
决(けっ)して恐(おそ)れず 挑(いど)む自由(じゆう) 光(ひかり)求(もと)めて
make it true make it soul
照(て)らしだせ Oh Oh Oh Oh Oh Oh Oh Oh
never give up for my life
命(いのち)がけのlove
伤(きず)も毒(どく)も受(う)けてたつのさ
followもsparrowもはねつけろ
Oh Oh Oh Oh Oh Oh Oh Oh
emptyに痩(や)せた
支配(しはい)された世界(せかい)に情热(じょうねつ)なんか
もうどこにもない
Androidは嫌(いや) 胜利(しょうり)しても孤独(こどく)
それでいいの?まだ间(ま)に合(あ)うのなら
If wanna goIf wanna show
If wanna goIf wanna go
for your mind
壊(こわ)れても无谋(むぼう)でも
どうしても何度(なんど)でも前(まえ)にchance
Let's break it through we can do
决(けっ)して恐(おそ)れず 挑(いど)む自由(じゆう) 热(あつ)い身体(からだ)で
make it true make it soul
照(て)らしだせ Oh Oh Oh Oh Oh Oh Oh Oh
never give up for my life
命(いのち)がけのlove
伤(きず)も毒(どく)も受(う)けてたつのさ
followもsparrowもはねつけろ
Oh Oh Oh Oh Oh Oh Oh Oh
ただ自分(じぶん)を信(しん)じればいい
屈(く)せずに忘(わす)れずに
そこに道(みち)はできる
get down down down down
目指(めざ)している
次(つぎ)の场所(ばしょう)に辿(たど)り着(つ)くためには
覚悟(かくご)なら决(き)めた
get down down down down
ANDROID
Let's break it through
we can do
决(けっ)して恐(おそ)れず 挑(いど)む自由(じゆう) 光(ひかり)求(もと)めて
make it true make it soul
照(て)らしだせ Oh Oh…
never give up for my life
命(いのち)がけのlove
伤(きず)も毒(どく)も受(う)けてたつのさ
followもsparrowもはねつけろ
Oh Oh Oh Oh Oh Oh Oh Oh
Let's break it through
we can do
决(けっ)して恐(おそ)れず 挑(いど)む自由(じゆう) 热(あつ)い身体(からだ)でmake it true make it soul
照(て)らしだせ Oh Oh Oh Oh Oh Oh Oh Oh
Oh Oh Oh Oh Oh Oh Oh Oh

END

打得好辛苦。。。亲~~满意的话,记得给分哦^ ^

热点内容
linux邮件服务器sendmail 发布:2024-10-21 16:17:43 浏览:73
编译内核脚本 发布:2024-10-21 16:15:36 浏览:988
word2vec源码 发布:2024-10-21 16:09:43 浏览:179
脚本判断游戏被系统杀进程了 发布:2024-10-21 16:09:35 浏览:152
我的世界egc服务器推荐 发布:2024-10-21 15:55:04 浏览:964
保单如何上传 发布:2024-10-21 15:48:25 浏览:917
女性安全期计算法 发布:2024-10-21 15:33:16 浏览:159
河南网络服务器机柜云服务器 发布:2024-10-21 15:24:26 浏览:298
64g存储卡价格 发布:2024-10-21 15:23:40 浏览:854
安卓怎么下ios 发布:2024-10-21 15:22:02 浏览:61