2012-04-15 19 views
0

私が現在書いているアプリケーションでは、ユーザーはデータベースからエントリを選択し、そのエントリのコンテンツを再生することができます。エントリにはいくつかのサウンドファイル制限なし)。私のアプリケーションでは、リスト(自分のデータベースに格納されている)のサウンドファイルのURIの場所をリストに返します。コードは以下の通りである:Android:一度に再生するサウンドファイルを停止する

public void audioPlayer() { 
    // set up MediaPlayer 
    MediaPlayer mp = new MediaPlayer(); 
    DatabaseHandler db = new DatabaseHandler(this); 
    Entry retrieveEntry = new Entry(); 

    retrieveEntry = db.getEntry(); 

    List<String> path = retrieveEntry.getAudioUri(); 

    path.size(); 

    System.out.println("PATH SIZE: " +path.size()); 

    System.out.println("FILEZ: " + path); 

    Iterator<String> i = path.iterator(); 
    String myAudio; 
    int count = 0; 

    while (i.hasNext()) { 
     System.out.println(count); 
      myAudio = i.next(); 
      System.out.println("MY AUDIO: " + myAudio); 

      MediaPlayer player = MediaPlayer.create(this, Uri.parse(myAudio)); 
      player.start(); 
      player.stop(); 
      player = MediaPlayer.create(this, Uri.parse(myAudio)); 
      player.start(); 

      count++; 
     } 
} 

私のユーザーがファイルを再生するため、ユーザの入力があることが必要です - 秒を果たし、その後、ボタンを押して、ユーザを待ち、その後、最初のファイルを再生する方法がありますファイルを開き、ユーザーがボタンなどを押すのを待ちますか?現時点では、再生ボタンが押されると、返されたすべてのサウンドファイルが順番に再生されるのではなく、同時に再生されます。

ご協力いただきありがとうございます!

答えて

2

このクラスを使用すると、プレイリストを再生できます。 1つのオーディオが開始され、そのオーディオが終了すると、リストの最後まで次のオーディオの再生が開始されます。が クラスは、以下のリストを受け取る:あなたはすなわち、ループエンドに達した後の最初のオーディオを開始してプレイリストを再生したい場合は、

public class AudioPlayer{ 
    MediaPlayer player = null; 
    ArrayList<String> playlist = null; 
    int position = 0; 

    public AudioPlayer() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 
    public void startPlayingPlaylist(ArrayList<String> list, boolean looping){ 
     playlist = list; 
     if(player!=null){ 
      player.release(); 
     } 
     if(playlist!=null && playlist.size()>0){ 
      player = MediaPlayer.create(LMApplicaton.getInstance(),Uri.parse(playlist.get(position))); 
      player.setWakeMode(LMApplicaton.getInstance(), PowerManager.PARTIAL_WAKE_LOCK); 
      player.setLooping(looping); 
      player.start(); 
      // Set onCompletion listener 
      player.setOnCompletionListener(new OnCompletionListener() { 

       @Override 
       public void onCompletion(MediaPlayer mp) { 
        position = position+1; 
        if(position<playlist.size()){ 
         try { 
          player.reset(); 
          player.setDataSource(playlist.get(position)); 
          player.prepareAsync(); 
         } catch (IllegalArgumentException e) { 
          e.printStackTrace(); 
         } catch (IllegalStateException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 

        } else if(player.isLooping()==true){ 
         position = position%playlist.size(); 
         try { 
          player.reset(); 
          player.setDataSource(playlist.get(position)); 
          player.prepareAsync(); 
         } catch (IllegalArgumentException e) { 
          e.printStackTrace(); 
         } catch (IllegalStateException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } 
        else if(player.isLooping()==false){ 
         player.release(); 
         player = null; 
        } 
       } 
      }); 
      player.setOnPreparedListener(new OnPreparedListener() { 

       @Override 
       public void onPrepared(MediaPlayer mp) { 
        player.start(); 
       } 
      }); 
     } 
    } 
    public void pause(){ 
     if(player!=null && player.isPlaying()){ 
      player.pause(); 
     } 
    } 
    public void play(){ 
     if(player!=null && player.isPlaying()==false){ 
      player.start(); 
     } 
    } 
    public boolean isPlaying(){ 
     return player.isPlaying(); 
    } 
    public void release(){ 
     if(player!=null){ 
      player.release(); 
     } 
    } 

} 

を編集

startPlayingPlaylist(list,looping)

AudioPlayer player = new AudioPlayer(); 
    player.startPlayingPlaylist(list, false); 

クラスにisLooping = trueを渡します最初のオーディオを再生します。ユーザーがstartNextAudio()を呼び出すと、次のオーディオが再生されます。必要に応じてこれらのいずれかを使用できます。

public class AudioPlayer { MediaPlayer player = null; ArrayListプレイリスト= null; int position = 0;

public AudioPlayer() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 
public void startPlayingPlaylist(ArrayList<String> list){ 
    playlist = list; 
    if(player!=null){ 
     player.release(); 
    } 
    if(playlist!=null && playlist.size()>0){ 
     player = MediaPlayer.create(LMApplicaton.getInstance(),Uri.parse(playlist.get(position))); 
     player.setWakeMode(LMApplicaton.getInstance(), PowerManager.PARTIAL_WAKE_LOCK); 
     player.start(); 
     // Set onCompletion listener 
     player.setOnPreparedListener(new OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer mp) { 
       player.start(); 
      } 
     }); 
    } 
} 
public void startNextAudio(){ 
    position = position+1; 
    if(position<playlist.size()){ 
     try { 
      player.reset(); 
      player.setDataSource(playlist.get(position)); 
      player.prepareAsync(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } else if(player.isLooping()==true){ 
     position = position%playlist.size(); 
     try { 
      player.reset(); 
      player.setDataSource(playlist.get(position)); 
      player.prepareAsync(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    }else{ 
     Log.i("AudioPlayer","Playlist reached at the end"); 
    } 
} 
public void pause(){ 
    if(player!=null && player.isPlaying()){ 
     player.pause(); 
    } 
} 
public void play(){ 
    if(player!=null && player.isPlaying()==false){ 
     player.start(); 
    } 
} 
public boolean isPlaying(){ 
    return player.isPlaying(); 
} 
public void release(){ 
    if(player!=null){ 
     player.release(); 
    } 
} 

}

+0

ファーストクラス – Innocent

1

一つのアプローチは、MediaPlayer.OnCompletionListenerインタフェースを実装することであろう。これは、あなたがそうのように使用することができMediaPlayer.onCompletion()コールバックメソッドを提供します:

@Override 
public void onCompletion(MediaPlayer mp) { 
    if (i.hasNext) { 
    // ...hand mp the next file 
    // ...show the user the 'play next' button 
    } 
} 

はあなたにも、あなたのセットアップでMediaPlayer.setOnCompletionListener()メソッドを呼び出す必要があります注意してください。

関連する問題