このブログを検索

mediaplayerを作ってみる(3)

2010年11月25日木曜日

|
前回のまま続けると、また同じ事になりそうなので新しくclassを作って分離。
MusicPlayer class。見たままです。貼っときます。

package net.asasvata.sdmediaplayer;

import java.util.ArrayList;

import android.media.MediaPlayer;
import android.os.Environment;

public class MusicPlayer extends MediaPlayer
                implements MediaPlayer.OnCompletionListener {
   
    private MediaPlayer mediaPlayer;
    private ArrayList<String> musicList;
    private int musicNum;
   
    public MusicPlayer(ArrayList<String> list) {
       
        this.musicList = list;
        musicNum = 0;
       
        //mediaPlayerの生成と曲が終わったときの処理の準備
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setOnCompletionListener(this);
    }
   
    public int getMusicNum() {
        return musicNum;
    }
   
    public void setMusicNum(int num) {
        musicNum = num;
    }
   
    //音楽ファイルのパスを取得してスタート。
    public void playMusic() {
       
        mediaPlayer.reset();//これが要る様だ。
       
        try{
            mediaPlayer.setDataSource(Environment.getExternalStorageDirectory().getPath()
                    + "/" + musicList.get(musicNum));
           
            mediaPlayer.prepare();
            mediaPlayer.seekTo(0);
            mediaPlayer.start();
           
        } catch (Exception e) {
            System.exit(-1);
        }
    }
   
    public void stopMusic() {
       
        mediaPlayer.stop();
       
        try {
               mediaPlayer.prepare();
              
        } catch (Exception e) {
            System.exit(-1);
        }
    }
   
    //残り3秒まで飛びます。
    public void skipMusic() {
       
        int duration = mediaPlayer.getDuration();
        mediaPlayer.seekTo(duration - 3000);
    }
   
    //getterを作ってもいいんですが、何となく。
    public boolean isPlayMusic() {
       
        return mediaPlayer.isPlaying();
    }
   
    //曲が終わったときの処理
    public void onCompletion(MediaPlayer mp) {
        if (++musicNum < musicList.size()) {
           
            playMusic();
           
        } else {
           
            musicNum = 0;
            playMusic();
        }   
    }
}



SDMediaPlayerActivityの方は
//mpの生成以下の3行削除で、

  //musicPlayerの生成とmusicNumの取得
  musicPlayer = new MusicPlayer(musicList);
  musicNum = musicPlayer.getMusicNum();

↑を追加。後は、onClickを

public void onClick(View view) {
      
        musicNum = musicPlayer.getMusicNum();
      
        if (musicPlayer.isPlayMusic()) {
          
            if (view == btnStart) {
                if (++musicNum < musicList.size()) {
                  
                    musicPlayer.setMusicNum(musicNum);
                    musicPlayer.playMusic();
                } else {
                  
                    musicPlayer.setMusicNum(0);
                    musicPlayer.playMusic();
                }
            }
            else if (view == btnStop) musicPlayer.stopMusic();
          
            else if (view == btnSkip) musicPlayer.skipMusic();
      
        } else {
            if (view == btnStart) musicPlayer.playMusic();
        }
    }

んな感じに変更。 動きに変化はありません。が、何となくすっきり。
したと思いたい。

次は、またちょっとだけ変更予定。

0 コメント:

コメントを投稿

 

Lorem

ページビューの合計