本帖最后由 879792799 于 2023-8-19 13:23 编辑
坐等大神出手 占楼备用!
======================================================
求大神写一小段MediaPlayer类 播放代码!!
https://blog.csdn.net/nanoage/article/details/127363147
【非整套代码】音频播放器代码框架已经搭好了
自带MediaPlayer代码是从头播放到尾然后播放下一个音频【下面是常见调用代码】
MediaPlayer的工作流程是这样的:1、首先创建MediaPlaer对象; 2、然后调用setDataSource()方法来设置音频文件的路径; 3 、再调用prepare()方法使MediaPlayer进入到准备状态; 4 、调用start方法就可以播放音频。 mPlayer = new MediaPlayer(); 实例化
mPlayer.setDataSource(mAudioFileName); 设置需要播放mp3的路径
mPlayer.prepare(); 准备
mPlayer.start(); 开始播放
mPlayer.setLooping(true); 设置循环模式
MediaPlayer其相关方法有:
void seekTo(int msec):从指定位置播放,参数为用毫秒定义的位置
int getDuration():得到音频长度,即总的毫秒数
void setVolume(float leftVolume, float rightVolume):设置音量
==================以下搜索得来 仅供参考==================
MediaPlayer其主要方法有:
void setDataSource(String path):设置要播放的音频文件位置,参数path为文件路径或Uri
void prepare():setDataSource并不载入资源,需要调用此方法准备资源
void start():开始/恢复播放
void stop():停止播放,调用后无法再播放
void pause():暂停播放,可以再用start恢复播放
void reset():重置到刚刚创建后的状态
void release():释放掉相关的资源
void seekTo(int msec):从指定位置播放,参数为用毫秒定义的位置
int getCurrentPosition():得到当前播放位置,即播放的毫秒数
int getDuration():得到音频长度,即总的毫秒数
boolean isPlaying():得到当前音频是否正在播放
void setLooping(boolean looping) / boolean isLooping():循环播放
void setVolume(float leftVolume, float rightVolume):设置音量
https://www.iteye.com/blog/deyum-1459255
https://blog.csdn.net/speedpower/article/details/84172071
近日在做一个的小应用,被MP3AB段复读的功能困扰了很久,最后终于在网上找到一个解决方法,
就是使用CountDownTimer让MediaPlayer只播放MP3的某个区段,轻松解决了AB段复读的功能。详细代码如下:
// 复读第10秒到第20秒这个区间的音频
int startPos = 10000;
int endPos = 20000;
mMediaPlayer.seekTo(startPos);
mMediaPlayer.start();
CountDownTimer cntr_aCounter = new CountDownTimer(/* millisInFuture= */endPos - startPos, /* countDownInterval= */1000) {
public void onTick(long millisUntilFinished) {
}
- public void play(final String filePath) throws Exception {
- try {
- if (mMediaPlayer == null) {
- // 创建MediaPlayer对象并设置Listener
- mMediaPlayer = new MediaPlayer();
- } else {
- // 复用MediaPlayer对象
- mMediaPlayer.reset();
- }
- mMediaPlayer.setDataSource(filePath);
- mMediaPlayer.prepare();
- mMediaPlayer.setVolume(10.f, 1.0f);
-
- // 复读第10秒到第20秒这个区间的音频
- int startPos = 10000;
- int endPos = 20000;
- // Try to play three times
- repeatAToB(startPos, endPos, 3);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- private void repeatAToB(final int startPos, final int endPos, final int repeatTimes)throws Exception {
-
- mMediaPlayer.seekTo(startPos);
- mMediaPlayer.start();
- CountDownTimer cntr_aCounter = new CountDownTimer(/* millisInFuture= */endPos - startPos, /* countDownInterval= */1000) {
- public void onTick(long millisUntilFinished) {
- // DO SOMETHING
- }
-
- public void onFinish() {
- // Code fire after finish
- if((repeatTimes - 1) > 0){
- try {
- repeatAToB(startPos, endPos, repeatTimes - 1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }else{
- mMediaPlayer.stop();
- }
- }
- };
- cntr_aCounter.start();
- }
复制代码
==================以上搜索得来 仅供参考==================
一下备份一下阿星大神的原帖 防止修改后看不懂
|