當前位置:首頁 » 安卓系統 » 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