2011-12-09 12 views
0

sdカードから音を出す必要があります。私はこれをしなければならない方法がありますが、うまくいきません。android play sound from sd-card

私はこの方法を使用する場合:

public class AudioPlayService extends Service 

{ 
    MediaPlayer mMediaPlayer; 
.............. 
    public void soundplay(String adr) 
     { 
      mMediaPlayer = new MediaPlayer(); 
      try 
      { 
       if (mMediaPlayer.isPlaying()) 
       { 
        mMediaPlayer.reset(); 
       } 
       mMediaPlayer.setDataSource(adr); 
       mMediaPlayer.prepare(); 
      } catch (IOException e) 
      { 
      } 
      mMediaPlayer.start(); 
      mMediaPlayer.setOnCompletionListener(new OnCompletionListener() 
      { 
       @Override 
      public void onCompletion(MediaPlayer mp) 
      { 
       mp.release(); 
       mp = null; 
      } 
     }); 
    } 

どこ文字列ADR - それは、SD上のファイルへの絶対パスです。

AudioPlayService s = new AudioPlayService(); 
s.soundplay(iA.getSdDir() + "Files/Numbers/0.mp3"); 

と私はERRの取得:

は、その後、私はそれを呼び出すのtry、catchブロック内に置く

12-09 13:04:13.829: E/MediaPlayer(16997): error (1, -2147483648) 
12-09 13:04:13.829: E/MediaPlayer(16997): start called in state 0 
12-09 13:04:13.829: E/MediaPlayer(16997): error (-38, 0) 
12-09 13:04:13.839: E/MediaPlayer(16997): Error (-38,0) 
+0

あなたのパスが正しいことを確認してください – Abhi

+0

あなたが答えを得たら、plsはあなたが一番良いと感じる答えの1つを受け入れます。 – Karthik

答えて

0

私自身は、あなたのコードを試してみましたあなたのメソッドをsoundplayにして、前のオーディオを止めて新しいオーディオファイルを再生しようとしていたら、より良いでしょうnotは、コンストラクタでそのメソッド内

mMediaPlayer = new MediaPlayer(); 

置き、これをこれをperfomします。 それ以外の場合は、s.soundplay(path)を呼び出すたびに、前のオーディオと新しいオーディオが鳴ります。すなわち、前のものは停止しません

0

player.start()を。プレイヤーがあなたの曲を準備していない場合でも、startメソッドを呼び出すことができます。startメソッドは再生が完了した後にのみ呼び出されます。 は準備が成功することを意味します。プレイヤーがもういなくなったときにメディアプレーヤーを解放する必要があります。多くのプレーヤーオブジェクトがバックグラウンドで実行されています。

0

何らかの理由でsetDataSource()またはPrepare()が失敗しています。だから、例外の後に、プレーヤーがPrepared状態にないので、start()はエラーを出しています。例外であることを知るために、catchブロックにprintステートメントを追加します。 start()をtry catchブロックに移動します。あなたの場合は :

鉱山が

s.soundplay(iA.getSdDir() + "Files/Numbers/0.mp3"); 

注意を私はあなたがパスが正しいことを確認するだけで"sdcard/1.mp3"

入れたときにうまく働いたかどうか:

mMediaPlayer = new MediaPlayer(); 
try 
{ 
    if (mMediaPlayer.isPlaying()) 
    { 
    mMediaPlayer.reset(); 
    } 
    mMediaPlayer.setDataSource(adr); 
    mMediaPlayer.prepare(); 
    mMediaPlayer.start(); 
} catch (IOException e) 
{ 
    e.printStackTrace(); 
}