如何在Android中播放音效

22

我想编写一段非常简单的代码来播放声音效果。到目前为止,我有这段代码:

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);
}

但是,由于某些原因,当我使用 playSound() 方法时,什么也没有发生。音频文件位于正确的位置。


1
对于单个声音,请使用 MediaPlayer,对于高性能播放(例如在具有大量声音的游戏中),请使用 SoundPool。为了有效地管理内存,您应该使用一个库来处理这些类:https://github.com/delight-im/Android-Audio - caw
2个回答

69

你使用 SoundManager 有特别的原因吗?我建议你使用 MediaPlayer,这是 Android 文档的链接:

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

然后只需要:

    MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.combo);
    mp.start();
在 "res/" 目录下创建一个名为 "raw/" 的文件夹。将 wav 或 mp3 文件拖放到 raw/ 文件夹中。像上面那样从任何地方播放它们。

1
而不是使用R.raw.combo,可以简单地使用RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION) - Zon
导入 android.media.MediaPlayer; - Iman

7

我也尝试使用排名靠前的答案,但当我连续多次尝试播放声音时,它导致MediaPlayer出现NullPointerExceptions,因此我稍微修改了代码。

FXPlayer是我的全局MediaPlayer。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接