2010-03-16 122 views
3

我正在製作一個應用程序,並且我希望它在打開活動時發出聲音,聲音文件位於R.raw.sound_file,如果有人可以做一些示例代碼以使我的應用程序播放出的聲音非常好。我如何獲得.wav聲音播放?

回答

11

不是android.media.MediaPlayer這個班嗎?

參考:http://developer.android.com/reference/android/media/MediaPlayer.html

實施例:http://developer.android.com/guide/topics/media/index.html

的例子的步驟2中表示:

MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1); 
mp.start(); 

在你的情況,我使用onStart()您的活動類中:

public class MyActivity extends Activity { 
    ... 
    protected void onStart() { 
     super.onStart(); 
     MediaPlayer mp = MediaPlayer.create(this, R.raw.sound_file_1); 
     mp.start(); 
    } 
    ... 
} 
+0

我不知道該用什麼作爲背景下,香港專業教育學院試圖把它作爲空,但應用程序只是強制關閉 – Dan 2010-03-17 07:05:14

+0

上下文應該是你的Activity(或Service,BroadcastReceiver,...),你可以從中調用它。 但是在你的情況下:當你想在應用程序第一次啓動時播放聲音,你可以從Application.onCreate()啓動MediaPlayer(如上所述),這樣我就可以更早地播放音頻了。但是,不要,這會始終播放音頻,並且如果其他任務啓動了其他任何活動(如果可能的話)。 – MrSnowflake 2010-03-17 09:16:47

+0

好的,如果我想要執行.onCreate()方法,我會使用什麼代碼... – Dan 2010-03-17 16:45:58

0

我有同樣的問題。 這個工作對我來說,通過使用應用程序上下文如下:

public class MyActivity extends Activity { 
    ... 
    protected void onStart() { 
     super.onStart(); 
     Context appContext = getApplicationContext(); 
     MediaPlayer mp = MediaPlayer.create(appContext , R.raw.sound_file_1); 
     mp.start(); 
    } 
    ... 
} 

另外,不要忘記調用mp.release()一旦你完成

另外,最佳選擇是使用的Soundpool類

2

我有使用MediaPlayer對象爲Android應用我創建的經驗,我發現了以下內容:

  • 的Wav文件H如果MediaPlayer有一個32kbps的比特率問題,但是較高比特率的wav文件似乎可以正常播放,即使它是一個大的wav文件,只要具有較高的比特率就可以播放。

  • 如果可能的話,使用MP3文件音頻,我遇到任何與使用MediaPlayer對象的mp3音頻文件沒有問題,這樣是最好的方式,使用谷歌有很多不同類型的MP3的聽起來可以免費聽到鈴聲和叮叮聲,可以聽到樹皮,貓咪的喵聲,或者任何你想要的聲音。

+0

我在使用MediaPlayer閱讀WAV文件時也遇到問題。有問題的文件上的Linux命令'file'說:* RIFF(little-endian)數據,WAVE音頻,MPEG Layer 3,mono 44100 Hz * – 2013-02-15 02:06:33

0

嘗試使用我的代碼,它完美地工作。你也需要有聲音文件.WAV帶RES /生

public class PianoActivity extends Activity { 

private MediaPlayer mediaPlayer = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_piano); 
    setupUI(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if (mediaPlayer != null) { 
     mediaPlayer.release(); 
     mediaPlayer = null; 
    } 
} 

private void setupUI() { 
    findViewById(R.id.doo).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      managerOfSound(); 
     } 
    }); 
} 

private void managerOfSound() { 
    mediaPlayer = MediaPlayer.create(this, R.raw.doo); 
    if (!mediaPlayer.isPlaying()) { 
     mediaPlayer.start(); 
    } else { 
     mediaPlayer.stop(); 
    } 
    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mp) { 
      mp.reset(); 
      mp.release(); 
     } 
    }); 
} 

}