问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2024-10-23 22:17

我来回答

3个回答

热心网友 时间:2024-11-06 03:46

这没办法

热心网友 时间:2024-11-06 03:45

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

  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(); // 更新视图
  }
  };
  }

热心网友 时间:2024-11-06 03:41

应该下载什么呀
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
豆瓣酱放多了怎么补救 鑫创sssbd量产工具 为了了解某校1500名学生的体质状况,随机调查了这个学校内一定数量学生... 564÷85的竖式如何列? 上海房屋过户 要准备什么资料 个人卖房要提供哪些资料 房屋交易资料需要哪些 房子买卖要哪些资料 房产交易需要什么资料 ...让重锤自由下落,打出的一条纸带如图所示,图中 明基的 joybooks52 重装怎样才能从光驱启动? 战双帕弥什渡边夙星隐藏剧情怎么触发_渡边夙星隐藏剧情触发方法_百度... 战双帕弥什机体图鉴-战双帕弥什全机体图鉴大全 滴滴顺风车司机在独享订单中带了其他人吗 winform怎么实现滚动字幕,像动感歌词那样 欠建设银行2张信用卡1.5万,接到建行电话说是要起诉,请问怎么办?因家中... 捡到东西不还是好习惯吗? 捡到的东西该不该归还? 大江山鬼族之王酒吞童子被谁所击杀(大江山鬼族之王酒吞童子被谁所伤... 如何快速将彩色图片变成黑白色 渴求一款java手机能在线下歌词的音乐播放器(支持oppoa100最好)大仙们... 招标人如何合理终止招标? 天天动听Java通用版 无法下载歌词 女的27岁还没拍拖结婚被工厂的人说是不正常? 笔记本怎样设置键盘密码 长时间不动 自己锁键盘的那种 主机还开着该... 带孩子旅游文案短句干净治愈 为什么男人喜欢细腰女人? tnb还原最美的你瓶子上的二维码扫不出来,药是不是假的 一个长13米,宽9米,高2米的长方体水池,如果要使水深0·5米,应注入水多... ...冷藏箱长3m,宽25dm,高15dm喷漆的面积是多少平方米 请各位朋友推荐一款笔记本电脑,最好是国产的,想支持一下咱们国产产品... 为什么说猫咪会乱咬东西 广西玉林事业单位考试中关于填有何从业资格证和专长是说什么?_百度知 ... 德国自然保护联盟联盟简介 进技校我想说的作文 陕西理工学院在那个市? 汉中陕西理工学院北区在汉中什么地方???急急急 陕西理工学院是否在汉中的褒河 给陕西理工学院北校区的同学写信地址该怎么写??? 大宝眼霜和眼袋霜哪个好 我今年20岁 有眼袋 大宝眼袋霜好还是 接骨木花眼较好啊? 顺风独享可以带人吗 德国自然保护联盟历史 我姓王,我老婆姓刘,我宝宝的辈分义字辈,应该起个什么样的四个字的名字... 试管打针期打哪个部位 肩膀变宽后还能长高么 猫咪为什么老是乱咬东西 端午节祝福领导语短句 我女儿2007年4月21日13点40分出生不知道名字如何取请各位老师朋友帮忙取... ...我侄女按五行安名,我侄女是2009年正月十七日早上8点45分出生的...