lmw
2025-04-24 718f31c92e2029d05260810435a2c70cef6e6ce5
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,24 @@
import android.os.Handler;
import android.util.Log;
import com.danikula.videocache.HttpProxyCacheServer;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.MediaSource;
import com.sinata.xqmuse.utils.cache.PreloadManager;
import com.sinata.xqmuse.utils.cache.ProxyVideoCacheManager;
import com.sinata.xqmuse.utils.exo.ExoMediaPlayer;
import com.sinata.xqmuse.utils.exo.ExoMediaPlayerFactory;
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 {
@@ -23,7 +40,7 @@
    public static final int MAX_LENGTH = 1000 * 600;// 最大录音时长十分钟,实际行程设置为5分钟上传一次
    private OnAudioStatusUpdateListener audioStatusUpdateListener;
    private MediaPlayer mMediaPlayer;
    private SimpleExoPlayer mMediaPlayer;
    private float volume = 0.5f; //播放音量
@@ -222,33 +239,36 @@
        if (mMediaPlayer != null) {
            stopPlayMusic(false);
        }
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setVolume(volume,volume);
        mMediaPlayer = new SimpleExoPlayer.Builder(context).build();
        mMediaPlayer.setVolume(volume);
        isPause = false;
        try {
            Log.e("mmp", "开始播放 path:" + filePath);
            mMediaPlayer.setDataSource(context, Uri.parse(filePath));
            mMediaPlayer.prepareAsync();
            mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            HttpProxyCacheServer cacheServer = ProxyVideoCacheManager.getProxy(context);
            String proxyUrl = cacheServer.getProxyUrl(filePath);
            MediaItem mediaItem = MediaItem.fromUri(Uri.parse(proxyUrl));
            mMediaPlayer.setMediaItem(mediaItem);
            mMediaPlayer.prepare();
            mMediaPlayer.play();
            mMediaPlayer.addListener(new Player.Listener(){
                @Override
                public void onPrepared(MediaPlayer mp) {
                    // 装载完毕回调
                    mMediaPlayer.start();
                    if (audioStatusUpdateListener != null){
                        audioStatusUpdateListener.onGetDuration(mMediaPlayer.getDuration());
                        audioStatusUpdateListener.onStartPlay();
                    }
                public void onPlayerError(PlaybackException error) {
                    Log.e("mmp","播放错误:"+error.getMessage());
                }
            });
            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    stopPlayMusic(true);
//                    BaseEvent baseEvent = new BaseEvent(BaseEvent.SEND_AODIO_PLAY_OVER);
//                    baseEvent.setMsg(filePath);
//                    EventBus.getDefault().post(baseEvent);
                public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
                    if (playbackState == Player.STATE_BUFFERING)
                        Log.e("mmp","缓冲中...STATE_BUFFERING");
                    else if (playbackState == Player.STATE_READY){
                        Log.e("mmp","缓冲完成,音频准备就绪:STATE_READY");
                    } else if (playbackState == Player.STATE_ENDED){
                        Log.e("mmp","播放完成:STATE_ENDED");
                        stopPlayMusic(true);
                    } else if (playbackState == Player.STATE_IDLE){
                        Log.e("mmp","播放器空闲:STATE_IDLE");
                    }
                }
            });
        } catch (Exception e) {
@@ -266,34 +286,18 @@
        if (mMediaPlayer != null) {
            stopPlayMusic(false);
        }
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setVolume(volume,volume);
        mMediaPlayer = new SimpleExoPlayer.Builder(context).build();
        mMediaPlayer.setVolume(volume);
        isPause = false;
        try {
            Log.e("mmp", "循环播放 path:" + filePath);
            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.onStartPlay();
                }
            });
            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    Log.e("mmp", "播放完成 从新循环 path:" + filePath);
                    mMediaPlayer.start();
                    if (isPause){
                        Log.e("mmp", "循环播放异步暂停");
                        mMediaPlayer.pause();
                    }
                }
            });
            HttpProxyCacheServer cacheServer = ProxyVideoCacheManager.getProxy(context);
            String proxyUrl = cacheServer.getProxyUrl(filePath);
            MediaItem mediaItem = MediaItem.fromUri(Uri.parse(proxyUrl));
            mMediaPlayer.setMediaItem(mediaItem);
            mMediaPlayer.prepare();
            mMediaPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
            mMediaPlayer.play();
        } catch (Exception e) {
            e.printStackTrace();
        }
@@ -308,7 +312,7 @@
    public void resume(){
        if (mMediaPlayer != null) {
            mMediaPlayer.start();
            mMediaPlayer.play();
            isPause = false;
        }
    }
@@ -322,11 +326,11 @@
    public void setVolume(float volume){
        this.volume = volume;
        if (mMediaPlayer!=null){
            mMediaPlayer.setVolume(volume,volume);
            mMediaPlayer.setVolume(volume);
        }
    }
    public int getCurrentPosition(){
    public long getCurrentPosition(){
        if (mMediaPlayer!=null){
            return mMediaPlayer.getCurrentPosition();
        }
@@ -359,23 +363,23 @@
     * @param filePath
     * @return
     */
    public int getMusicTime(Context context, String filePath) {
        if (mMediaPlayer != null) {
            stopPlayMusic(false);
        }
        mMediaPlayer = new MediaPlayer();
        try {
            mMediaPlayer.setDataSource(context, Uri.parse(filePath));
            mMediaPlayer.prepare();
            int duration = mMediaPlayer.getDuration();
            if (0 != duration) {
                mMediaPlayer.release();
                return duration / 1000;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 0;
    }
//    public int getMusicTime(Context context, String filePath) {
//        if (mMediaPlayer != null) {
//            stopPlayMusic(false);
//        }
//        mMediaPlayer = new MediaPlayer();
//        try {
//            mMediaPlayer.setDataSource(context, Uri.parse(filePath));
//            mMediaPlayer.prepare();
//            int duration = mMediaPlayer.getDuration();
//            if (0 != duration) {
//                mMediaPlayer.release();
//                return duration / 1000;
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return 0;
//    }
}