(原创)两个播放音频的工具类

最近做了两个用来播放视频文件的工具类

一个是用来播放背景音或者较大文件的工具类

另外一个是播放普通音频的工具类

下面贴代码

/**
 * 播放背景音等较长或者较大的文件
 */
public class MusicBackPlayerUtil {

    private MediaPlayer bgPlayer, btPlayer, soundPlayer;

    public MusicBackPlayerUtil() {
        bgPlayer = new MediaPlayer();
        btPlayer = new MediaPlayer();
    }

    /**
     * 判断背景音乐是否在播放
     * @return
     */
    public boolean isBGPlaying() {
        if(bgPlayer != null && bgPlayer.isPlaying()) {
            return true;
        }
        return false;
    }
    /**
     * 播放背景音
     */
    public void playBgSound(Context context, int ResID) {
        try {
            if(ResID != 0) {
                if(bgPlayer != null) {
                    if (bgPlayer.isPlaying()) {
                        bgPlayer.stop();
                    }
                    bgPlayer.release();
                    bgPlayer = null;
                }
                bgPlayer = MediaPlayer.create(context, ResID);
            }
            //mPlayer.setDataSource(resPath);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
        bgPlayer.setLooping(true);
        try {
            bgPlayer.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        bgPlayer.start();
    }

    //背景声音大小
    public void setBgVolume(float leftVolume, float RightVolume) {
        if(bgPlayer != null) {
            bgPlayer.setVolume(leftVolume, RightVolume);
        }
    }

    /**
     * 播放按钮音
     */
    public void playSound(String path) throws Exception {
        if (btPlayer == null) {
            btPlayer = new MediaPlayer();
        }
        btPlayer.reset();
        btPlayer.setDataSource(path);
        btPlayer.prepare();
        btPlayer.setLooping(false);
        btPlayer.start();
    }


    public void playSound(Context context, int ResID, boolean isLoop) {
        try {
            if(ResID != 0) {
                if(soundPlayer != null) {
                    if (soundPlayer.isPlaying()) {
                        soundPlayer.stop();
                    }
                    soundPlayer.release();
                    soundPlayer = null;
                }
                soundPlayer = MediaPlayer.create(context, ResID);
            }
            //mPlayer.setDataSource(resPath);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
        soundPlayer.setLooping(isLoop);
        try {
            soundPlayer.prepareAsync();
//			soundPlayer.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
        soundPlayer.start();
    }


    public MediaPlayer getBgPlayer() {
        return this.bgPlayer;
    }

    public MediaPlayer getBtPlayer() {
        return this.btPlayer;
    }
    public MediaPlayer getPlayer() {
        return this.soundPlayer;
    }

    /**
     * 停止播放背景音乐
     */
    public void stopBgSound() {
        if (bgPlayer == null)
            return;
        if (bgPlayer.isPlaying())
            bgPlayer.stop();
    }

    /**
     * 停止按钮声音播放
     */
    public void stopBtSound() {
        if (btPlayer == null)
            return;
        try {
            if (btPlayer.isPlaying()) {
                btPlayer.stop();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 停止声音播放
     */
    public void stopSound() {
        if (soundPlayer == null)
            return;
        try {
            if (soundPlayer.isPlaying()) {
                soundPlayer.stop();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 释放设备
     */
    public void releaseMedia() {
        if (bgPlayer != null) {
            try {
                if (bgPlayer.isPlaying())
                    bgPlayer.stop();
                bgPlayer.release();
            } catch (Exception e) {
                e.printStackTrace();
            }
            bgPlayer = null;
        }
        if (btPlayer != null) {
            try {
                if (btPlayer.isPlaying())
                    btPlayer.stop();
                btPlayer.release();
            } catch (Exception e) {
                e.printStackTrace();
            }
            btPlayer = null;
        }
        if (soundPlayer != null) {
            try {
                if (soundPlayer.isPlaying())
                    soundPlayer.stop();
                soundPlayer.release();
            } catch (Exception e) {
                e.printStackTrace();
            }
            soundPlayer = null;
        }
    }
}

使用方法也很简单,创建MusicBackPlayerUtil对象

调用playBgSound方法即可

在生命周期方法里可以这样设置

    @Override
    protected void onResume() {
        super.onResume();
        if (musicPlayerUtil != null && !musicPlayerUtil.isBGPlaying()) {
            musicPlayerUtil.playBgSound(this, R.raw.backmusic);//停止背景音乐播放
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (musicPlayerUtil != null) {
            musicPlayerUtil.stopBgSound();//停止背景音乐播放
        }
    }

接下来是第二个工具类

/**
 * 声音控制类
 */
public class SoundManager {
    private static MediaPlayer mPlayer = new MediaPlayer();
    private static SoundManager mInstance;

    private SoundManager() {
        mPlayer = new MediaPlayer();
        mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                return true;
            }
        });
    }

    public static SoundManager getInstance() {
        if (mInstance == null) {
            synchronized (SoundManager.class) {
                if (mInstance == null) {
                    mInstance = new SoundManager();
                }
            }
        }
        return mInstance;
    }

    public void playSound(AssetFileDescriptor file) {
        if (file == null) {
            return;
        }
        if (mPlayer==null){
            mPlayer = new MediaPlayer();
            mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    return true;
                }
            });
        }
        mPlayer.reset();
        try {
            mPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(),
                    file.getLength());
            mPlayer.setLooping(false);
            mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mPlayer.prepare();
            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {

                }
            });
            mPlayer.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 播放两段发音
     * @param file
     */
    public void playSoundTwo(AssetFileDescriptor file, final AssetFileDescriptor file2) {
        if (file == null) {
            return;
        }
        if (mPlayer==null){
            mPlayer = new MediaPlayer();
            mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    return true;
                }
            });
        }
        mPlayer.reset();
        try {
            mPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(),
                    file.getLength());
            mPlayer.setLooping(false);
            mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mPlayer.prepare();
            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    playSound(file2);
                }
            });
            mPlayer.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public void stopSound() {
        if (mPlayer == null) {
            return;
        }
        try {
            mPlayer.stop();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void playOrstop() {
        if (mPlayer == null) {
            return;
        }
        try {
            if (mPlayer.isPlaying()) {
                mPlayer.pause();//暂停
            } else {
                mPlayer.start();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void mediaDestory() {
        if (mPlayer != null) {
            //重置
            mPlayer.reset();
            //释放资源
            mPlayer.release();
            //回收
            mPlayer = null;
        }
    }
}

这个使用方法也很简单

例子如下:

        SoundManager.getInstance().playSound(getResources().openRawResourceFd(R.raw.backmusic));

猜你喜欢

转载自blog.csdn.net/Android_xiong_st/article/details/109307143