2012-05-04 8 views
14

Ich bin auf der Suche nach einem sehr einfachen Stück Code, der einen Sound-Effekt spielt. Bisher habe ich diesen Code:So spielen Sie einen Sound-Effekt in 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); 
} 

Doch aus irgendeinem Grund, wenn ich die playSound() Methode, passiert nichts. Die Audiodatei befindet sich am richtigen Ort.

+0

Verwenden Sie für einzelne Sounds 'MediaPlayer' und für die Hochleistungswiedergabe (z. B. in Spielen mit vielen Sounds)' SoundPool'. Für eine effiziente Speicherverwaltung sollten Sie eine Bibliothek verwenden, um mit diesen Klassen zu arbeiten: https://github.com/delight-im/Android-Audio – caw

Antwort

49

Gibt es einen bestimmten Grund, warum Sie SoundManager verwenden? Ich würde MediaPlayer stattdessen verwenden, hier ist ein Link zu dem Android Docs

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

dann ist es so einfach wie

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

Machen Sie ein Verzeichnis mit dem Namen "raw /" unter dem „res /" Verzeichnis. Ziehen Sie WAV- oder MP3-Dateien in das row/-Verzeichnis. Spiele sie von überall wie oben.

4

Ich habe auch versucht, die Top-Antwort zu verwenden, aber es führte zu NullPointerExceptions vom MediaPlayer, als ich versuchte, einen Ton viele Male hintereinander zu spielen, also habe ich den Code etwas erweitert.

FXPlayer ist mein globaler MediaPlayer.

public void playSound(int _id) 
{ 
    if(FXPlayer != null) 
    { 
     FXPlayer.stop(); 
     FXPlayer.release(); 
    } 
    FXPlayer = MediaPlayer.create(this, _id); 
    if(FXPlayer != null) 
     FXPlayer.start(); 
}