背景音乐实现功能

package com.liu.zhen.utils; 

 

import android.content.Context; 

import android.content.res.AssetFileDescriptor; 

import android.media.MediaPlayer; 

import android.util.Log; 

 

/**

*

* This class is used for controlling background music

*

*/ 

public class BackgroundMusic { 

    private static BackgroundMusic backgroundMusic = null

    private static final String TAG = "Bg_Music"

    private float mLeftVolume; 

    private float mRightVolume; 

    private Context mContext; 

    private MediaPlayer mBackgroundMediaPlayer; 

    private boolean mIsPaused; 

    private String mCurrentPath; 

 

   private BackgroundMusic(Context context) { 

        this.mContext = context; 

        initData(); 

    } 

 

    public static BackgroundMusic getInstance(Context context) { 

        if (backgroundMusic == null) { 

            backgroundMusic = new BackgroundMusic(context); 

        } 

        return backgroundMusic; 

    } 

 

    // 初始化一些数据 

    private void initData() { 

        mLeftVolume = 0.5f; 

        mRightVolume = 0.5f; 

        mBackgroundMediaPlayer = null

        mIsPaused = false

        mCurrentPath = null

    } 

 

    /**

     * 根据path路径播放背景音乐

     *

     * @param path

     *            :assets中的音频路径

     * @param isLoop

     *            :是否循环播放 

     */ 

    public void playBackgroundMusic(String path, boolean isLoop) { 

        if (mCurrentPath == null) { 

            // 这是第一次播放背景音乐--- it is the first time to play background music 

            // 或者是执行end()方法后,重新被叫---or end() was called 

           mBackgroundMediaPlayer = createMediaplayerFromAssets(path); 

            mCurrentPath = path; 

        } else

            if (!mCurrentPath.equals(path)) { 

                // 播放一个新的背景音乐--- play new background music 

                // 释放旧的资源并生成一个新的----release old resource and create a new one 

                if (mBackgroundMediaPlayer != null) { 

                    mBackgroundMediaPlayer.release(); 

                } 

                mBackgroundMediaPlayer = createMediaplayerFromAssets(path); 

                // 记录这个路径---record the path 

                mCurrentPath = path; 

            } 

        } 

 

        if (mBackgroundMediaPlayer == null) { 

            Log.e(TAG, "playBackgroundMusic: background media player is null"); 

        } else

            // 若果音乐正在播放或已近中断,停止它---if the music is playing or paused, stop it 

            mBackgroundMediaPlayer.stop(); 

            mBackgroundMediaPlayer.setLooping(isLoop); 

            try

                mBackgroundMediaPlayer.prepare(); 

                mBackgroundMediaPlayer.seekTo(0); 

                mBackgroundMediaPlayer.start(); 

                this.mIsPaused = false

            } catch (Exception e) { 

                Log.e(TAG, "playBackgroundMusic: error state"); 

            } 

        } 

    } 

 

    /**

     * 停止播放背景音乐

     */ 

    public void stopBackgroundMusic() { 

        if (mBackgroundMediaPlayer != null) { 

            mBackgroundMediaPlayer.stop(); 

            // should set the state, if not , the following sequence will be 

            // error 

            // play -> pause -> stop -> resume              this.mIsPaused = false

        } 

    } 

 

    /**

     * 暂停播放背景音乐

     */ 

    public void pauseBackgroundMusic() { 

        if (mBackgroundMediaPlayer != null 

                && mBackgroundMediaPlayer.isPlaying()) {  

           mBackgroundMediaPlayer.pause(); 

          this.mIsPaused = true

       } 

    } 

 

    /**

     * 继续播放背景音乐

     */ 

    public void resumeBackgroundMusic() { 

  1.         if (mBackgroundMediaPlayer != null && this.mIsPaused) {              mBackgroundMediaPlayer.start(); 

            this.mIsPaused = false

        } 

    } 

      /**

     * 重新播放背景音乐

     */ 

    public void rewindBackgroundMusic() { 

        if (mBackgroundMediaPlayer != null) { 

            mBackgroundMediaPlayer.stop(); 

            try

                mBackgroundMediaPlayer.prepare(); 

                mBackgroundMediaPlayer.seekTo(0); 

                mBackgroundMediaPlayer.start(); 

                this.mIsPaused = false

           } catch (Exception e) { 

                Log.e(TAG, "rewindBackgroundMusic: error state"); 

            } 

        } 

    } 

 

    /**

     * 判断背景音乐是否正在播放

     *

     * @return:返回的boolean值代表是否正在播放

     */ 

    public boolean isBackgroundMusicPlaying() {  

        boolean ret = false

       if (mBackgroundMediaPlayer == null) { 

            ret = false

        } else

            ret = mBackgroundMediaPlayer.isPlaying(); 

        } 

        return ret; 

    } 

 

    /**

     * 结束背景音乐,并释放资源

     */ 

    public void end() { 

        if (mBackgroundMediaPlayer != null) { 

            mBackgroundMediaPlayer.release(); 

        } 

        // 重新“初始化数据” 

        initData(); 

    } 

 

    /**

  1.      * 得到背景音乐的“音量”
  2.      *
  3.      * @return

     */ 

    public float getBackgroundVolume() { 

        if (this.mBackgroundMediaPlayer != null) { 

  1.             return (this.mLeftVolume + this.mRightVolume) / 2

        } else

            return 0.0f; 

        } 

    } 

      /**

     * 设置背景音乐的音量

     *

     * @param volume

     *            :设置播放的音量,float类型

     */ 

    public void setBackgroundVolume(float volume) { 

        this.mLeftVolume = this.mRightVolume = volume; 

        if (this.mBackgroundMediaPlayer != null) { 

            this.mBackgroundMediaPlayer.setVolume(this.mLeftVolume, 

                    this.mRightVolume); 

        } 

    } 

 

    /**

     * create mediaplayer for music

     *

     * @param path

     *            the path relative to assets

     * @return

     */ 

    private MediaPlayer createMediaplayerFromAssets(String path) { 

        MediaPlayer mediaPlayer = null

        try

            AssetFileDescriptor assetFileDescritor = mContext.getAssets() 

                    .openFd(path); 

           mediaPlayer = new MediaPlayer(); 

            mediaPlayer.setDataSource(assetFileDescritor.getFileDescriptor(), 

                    assetFileDescritor.getStartOffset(), 

                    assetFileDescritor.getLength()); 

            mediaPlayer.prepare(); 

            mediaPlayer.setVolume(mLeftVolume, mRightVolume); 

        } catch (Exception e) { 

            mediaPlayer = null

            Log.e(TAG, "error: " + e.getMessage(), e); 

        } 

        return mediaPlayer; 

    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值