2011-08-15 50 views
0

(Android) 我正在製作一個帶有幾個按鈕的應用程序,每個按鈕都有一個與它們相關的短聲音片段。他們有自己的OnClick語句。下面的代碼從起着如我期望的SD卡上的文件...從原始文件夾(而不是流或SD卡)創建沒有MediaPlayer.Create的聲音片段

public void Hello (View view) { 
    ///FuckYouseButtonClick Main Body. 
    //MediaPlayer mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.hello); 
    //mediaPlayer.start(); 

SoundPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer mp) 
     //TODO Auto-generated Method stub 
     { 
      SoundPlayer.start(); 
     } 
    }); 

    String file = "/sdcard/Music/Hello.mp3"; 

    SoundPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    try { 
     SoundPlayer.setDataSource(file); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     SoundPlayer.prepareAsync(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

...但是,我怎麼能設置源R.raw.hello(聲音文件),而不引起錯誤?當前的錯誤消息是「媒體播放器類型中的方法SetDataSource(String)不適用於參數(int)」。如果你沒有推測,我使用Eclipse。

謝謝。

回答

-1

嘗試使用此代碼:

MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1); 
mediaPlayer.start(); 
+0

這正是我不想做的事。這會每次創建一個新的MediaPlayer,因此最終系統資源被堵塞。該應用程序會很快停止播放音頻。此外,我使用一個在OnClick函數外聲明的MediaPlayer,因此只需創建一次。 – Adro947

+0

然後使用'SoundPool'對象使用加載函數加載所需的所有聲音。保存'load'函數返回的所有soundID,然後只是'play'你需要的那個soundID。 –

相關問題