2012-05-04 37 views
14

Tôi đang tìm cách tạo một đoạn mã rất đơn giản có hiệu ứng âm thanh. Cho đến nay tôi có mã này:Cách phát một hiệu ứng âm thanh trong Android

SoundManager snd; 
int combo; 

private void soundSetup() { 
    // Create an instance of the sound manger 
    snd = new SoundManager(getApplicationContext()); 

    // Set volume rocker mode to media volume 
    this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 

    // Load the samples from res/raw 
    combo = snd.load(R.raw.combo); 
} 

private void playSound() { 
    soundSetup(); 
    snd.play(combo); 
} 

Tuy nhiên, vì lý do nào đó khi tôi sử dụng phương pháp playSound(), không có gì xảy ra. Tệp âm thanh ở đúng vị trí.

+0

Đối với âm thanh đơn lẻ sử dụng 'MediaPlayer' và để phát lại hiệu suất cao (ví dụ: trong trò chơi có nhiều âm thanh), hãy sử dụng' SoundPool'. Để quản lý bộ nhớ hiệu quả, bạn nên sử dụng thư viện để làm việc với các lớp đó: https://github.com/delight-im/Android-Audio – caw

Trả lời

49

Có lý do cụ thể nào bạn đang sử dụng SoundManager không? Tôi sẽ sử dụng MediaPlayer thay vào đó, đây là một liên kết đến Documents dành cho Android

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

sau đó nó đơn giản như

MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.combo); 
    mp.start(); 

Tạo một thư mục gọi là "thô /" trong mục "res /" danh mục. Kéo tệp wav hoặc mp3 vào thư mục/thư mục thô. Chơi chúng từ bất cứ nơi nào như trên.

4

tôi cũng đã cố gắng sử dụng câu trả lời hàng đầu, nhưng nó dẫn đến NullPointerExceptions từ MediaPlayer khi tôi thử phát âm thanh nhiều lần liên tiếp, vì vậy tôi đã mở rộng mã một chút.

FXPlayer là MediaPlayer toàn cầu của tôi.

public void playSound(int _id) 
{ 
    if(FXPlayer != null) 
    { 
     FXPlayer.stop(); 
     FXPlayer.release(); 
    } 
    FXPlayer = MediaPlayer.create(this, _id); 
    if(FXPlayer != null) 
     FXPlayer.start(); 
} 
Các vấn đề liên quan