From 40237ce34f0754495e5ac6a7b291fa96508160fd Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期五, 06 十二月 2024 13:55:00 +0800
Subject: [PATCH] save

---
 app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java |  123 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 111 insertions(+), 12 deletions(-)

diff --git a/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java b/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java
index 53ed751..8dd777c 100644
--- a/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java
+++ b/app/src/main/java/com/sinata/xqmuse/utils/AudioUtils.java
@@ -1,6 +1,7 @@
 package com.sinata.xqmuse.utils;
 
 import android.content.Context;
+import android.media.AudioManager;
 import android.media.MediaPlayer;
 import android.media.MediaRecorder;
 import android.net.Uri;
@@ -8,8 +9,16 @@
 import android.os.Handler;
 import android.util.Log;
 
+import com.google.android.exoplayer2.ExoPlayer;
+import com.google.android.exoplayer2.MediaItem;
+import com.sinata.xqmuse.utils.exo.ExoMediaPlayer;
+
 import java.io.File;
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import xyz.doikki.videoplayer.player.AbstractPlayer;
 
 public class AudioUtils {
 
@@ -26,6 +35,10 @@
     private MediaPlayer mMediaPlayer;
 
     private float volume = 0.5f; //播放音量
+
+    private String audio = "";//音源
+
+    private boolean isPause = false; //是否暂停,解决循环播放时资源文件prepare异步产生的暂停失败问题
 
     /**
      * 文件存储默认sdcard/record
@@ -204,17 +217,70 @@
         public void onStartPlay();
 
         public void onFinishPlay();
+
+        public void onGetDuration(int duration);
     }
 
-    //开始播放录音
+
+    /**
+     * 开始播放音频
+     * @param context
+     * @param filePath
+     */
     public void startPlayMusic(Context context, String filePath) {
         if (mMediaPlayer != null) {
-            stopPlayMusic();
+            stopPlayMusic(false);
         }
         mMediaPlayer = new MediaPlayer();
         mMediaPlayer.setVolume(volume,volume);
+        isPause = false;
         try {
-            Log.e("mmp", "path:" + filePath);
+            Log.e("mmp", "开始播放 path:" + filePath);
+
+            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+            mMediaPlayer.setDataSource(context, Uri.parse(filePath));
+            mMediaPlayer.prepareAsync();
+            mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
+                @Override
+                public void onPrepared(MediaPlayer mp) {
+                    // 装载完毕回调
+                    mMediaPlayer.start();
+                    if (audioStatusUpdateListener != null){
+                        audioStatusUpdateListener.onGetDuration(mMediaPlayer.getDuration());
+                        audioStatusUpdateListener.onStartPlay();
+                    }
+                }
+
+
+            });
+            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+                @Override
+                public void onCompletion(MediaPlayer mp) {
+                    stopPlayMusic(true);
+//                    baseEvent.setMsg(filePath);
+//                    EventBus.getDefault().post(baseEvent);
+                }
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 循环播放音频
+     * @param context
+     * @param filePath
+     */
+    public void loopPlayMusic(Context context, String filePath) {
+        if (mMediaPlayer != null) {
+            stopPlayMusic(false);
+        }
+        mMediaPlayer = new MediaPlayer();
+        mMediaPlayer.setVolume(volume,volume);
+        isPause = false;
+        try {
+            Log.e("mmp", "循环播放 path:" + filePath);
             mMediaPlayer.setDataSource(context, Uri.parse(filePath));
             mMediaPlayer.prepareAsync();
             mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@@ -229,15 +295,37 @@
             mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                 @Override
                 public void onCompletion(MediaPlayer mp) {
-                    stopPlayMusic();
-//                    BaseEvent baseEvent = new BaseEvent(BaseEvent.SEND_AODIO_PLAY_OVER);
-//                    baseEvent.setMsg(filePath);
-//                    EventBus.getDefault().post(baseEvent);
+//                    Log.e("mmp", "播放完成 从新循环 path:" + filePath);
+                    mMediaPlayer.start();
+                    if (isPause){
+//                        Log.e("mmp", "循环播放异步暂停");
+                        mMediaPlayer.pause();
+                    }
                 }
             });
 
         } catch (Exception e) {
             e.printStackTrace();
+        }
+    }
+
+    public void pause(){
+        if (mMediaPlayer != null) {
+            mMediaPlayer.pause();
+            isPause = true;
+        }
+    }
+
+    public void resume(){
+        if (mMediaPlayer != null) {
+            mMediaPlayer.start();
+            isPause = false;
+        }
+    }
+
+    public void seekTo(int now){
+        if (mMediaPlayer != null) {
+            mMediaPlayer.seekTo(now*1000);
         }
     }
 
@@ -248,16 +336,27 @@
         }
     }
 
-    //结束录音播放
-    public void stopPlayMusic() {
+    public int getCurrentPosition(){
+        if (mMediaPlayer!=null){
+            return mMediaPlayer.getCurrentPosition();
+        }
+        return 0;
+    }
+
+
+    /**
+     * 结束录音播放
+     * @param needCallback  true真实结束 才走结束回调,为了切换下一首而结束的 不调结束回调
+     */
+    public void stopPlayMusic(boolean needCallback) {
         if (mMediaPlayer == null)
             return;
         try {
             mMediaPlayer.stop();
             mMediaPlayer.release();
-            if (audioStatusUpdateListener != null)
-                audioStatusUpdateListener.onFinishPlay();
             mMediaPlayer = null;
+            if (audioStatusUpdateListener != null&&needCallback)
+                audioStatusUpdateListener.onFinishPlay();
         } catch (IllegalStateException e) {
             e.printStackTrace();
         }
@@ -272,7 +371,7 @@
      */
     public int getMusicTime(Context context, String filePath) {
         if (mMediaPlayer != null) {
-            stopPlayMusic();
+            stopPlayMusic(false);
         }
         mMediaPlayer = new MediaPlayer();
         try {

--
Gitblit v1.7.1