android 如何实现 边录音 同时显示 歌词评分?有原理,代码就好了。。
作者&投稿:诗融 (若有异议请与网页底部的电邮联系)
Error deploying web application directory servlets-examples
你选把你的项目移除看一下TOMCAT好用不,这个怎么报servlets-examples
这是TOMCAT自带的例子啊。
如果好用,你看一下你的WEB.xml有没有写错的地方。
你在解析歌词的时候,把空行的时间戳与一个空字符对应起来分别加到队列里,不要在解析时碰到只有时间戳的行就跳过去
歌曲播放时歌词同步显示,我们需要读取以上歌词文件的每一行转换成成一个个歌词实体,可根据当前播放器的播放进度与每句歌词的开始时间,得到当前屏幕中央高亮显示的那句歌词我们需要读取以上歌词文件的每一行转换成成一个个歌词实体:
代码如下:
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(); // 更新视图
}
};
}
应该下载什么呀
这没办法
郭毓海捷: 歌曲播放时歌词同步显示,我们需要读取以上歌词文件的每一行转换成成一个个歌词实体,可根据当前播放器的播放进度与每句歌词的开始时间,得到当前屏幕中央高亮显示的那句歌词我们需要读取以上歌词文件的每一行转换成成一个个歌词...
刚察县13786283048: 手机如何一边电话一边录音 - ?
郭毓海捷: 这要看你是什么手机,苹果手机是肯定不可以的.安卓手机有些手机里面是有自带录音功能,但现在很多都是没有的.你想实现边电话边录音,你可以去下载软件.可以去下载移动公证,适合安卓机和苹果机.这样就可以实现边电话边录音了..
刚察县13786283048: 怎样才能一边通电话一边录音 - ?
郭毓海捷: 这个很简单呀,下载一个专门的通话录音软件,移动共振,有安卓版的;一般原版的外资品牌手机是没有通话录音功能的,他们讲究个人隐私保护;大陆装的手机则几乎都有录音功能,如果你的手机没有录音功能,八成是海外渠道的手机
刚察县13786283048: 谁可以告诉我安卓上有什么软件可以一边听歌一边录音的啊 - ?
郭毓海捷: 唱吧和移动练歌房都可以.
刚察县13786283048: android中怎么实现录音并且分段 - ?
郭毓海捷: 需要实时录得话,中间会有延迟的,就是录制完一段,再录另一段的时候中间会卡顿下,然后你把mediaRecorder设置上录制监听器setOnInfoListener,它会回调的,然后重新初始化录制器,再录制.对应录制中间一定会有延迟,但是延迟可以调节参数到最小的毫秒,这样底层文件存储自动保存,即可完成多个视频分段存储.
刚察县13786283048: 安卓手机有没有能边打电话边录音的软件?希望能看到下载地址! - ?
郭毓海捷: 你好,安卓的通话软件就有这个功能,你打电话的时候,点击菜单键,然后选择录音即可,有的手机在通话界面就直接可以看到录音的按钮偶
刚察县13786283048: 有人知道android怎么实现MediaRecorder边录边存么 - ?
郭毓海捷: 我想里面的原理如果是简单粗暴一点的话,就一帧一帧的进行截图,然后保存,拼接起来就是视频的样子了,不知道具体是怎么实现.
刚察县13786283048: 如何实现通话双向录音???? - ?
郭毓海捷: recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);//从麦克风采集声音也就是说你的声音跟对方的声音都可以录到
刚察县13786283048: android编程可以实现双向录音么? - ?
郭毓海捷: 现在已经有这种应用了,可以在通话的时候实现双向录音. 我的理解是,自己这边直接麦克风录音就好,然后对端则是通过读手机硬件上的声音处理设备中的数据流来实现.
刚察县13786283048: 有没有一种安卓手机软件,可以录手机自身播放的音乐,因为有些很棒的音乐不能下载,我想要存在本地里听 - ?
郭毓海捷: 网易云音乐、酷狗音乐播放器等这些比较有名的音乐播放器都是可以的.