如何在 Android 中播放音效

Posted

技术标签:

【中文标题】如何在 Android 中播放音效【英文标题】:How to play a Sound Effect in Android 【发布时间】:2012-05-04 14:46:10 【问题描述】:

我正在寻找一段非常简单的代码来播放声音效果。到目前为止,我有这个代码:

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() 方法时,什么也没有发生。音频文件的位置正确。

【问题讨论】:

对于单一声音使用MediaPlayer,对于高性能播放(例如在有大量声音的游戏中)使用SoundPool。为了有效的内存管理,您应该使用库来处理这些类:github.com/delight-im/android-Audio 【参考方案1】:

您使用SoundManager 是否有特定原因?我会改用 MediaPlayer,这里是 Android Docs 的链接

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

那么就这么简单

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

在“res/”目录下创建一个名为“raw/”的目录。将 wav 或 mp3 文件拖到 raw/ 目录中。如上所述从任何地方播放它们。

【讨论】:

或者只是RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION)而不是R.raw.combo 导入android.media.MediaPlayer;【参考方案2】:

我也尝试使用最佳答案,但当我尝试连续多次播放声音时,它导致 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();

【讨论】:

以上是关于如何在 Android 中播放音效的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AVAudioPlayer 中播放 0.5 秒的 1 秒音效?

如何播放/停止背景音乐和音效?

在 Xcode 中播放音效

OpenAL - 如何播放未衰减的音效?

OPENGL相关 音效

使用 OpenSL ES Android 同时播放多个音效