播放短 .wav 文件 - Android

Posted

技术标签:

【中文标题】播放短 .wav 文件 - Android【英文标题】:Playing short .wav files - Android 【发布时间】:2012-12-02 18:16:51 【问题描述】:

我想在触摸按钮后播放声音。 MediaPlayer 工作正常,但我在某处读到这个库是长 .wav(如音​​乐)。

有没有更好的方式来播放短的.wav(2-3 秒)?

【问题讨论】:

是的,SoundPool 是要走的路。 【参考方案1】:

SoundPool 是正确的类。下面的代码是如何使用它的示例。这也是我在我的几个应用程序中用来管理声音的代码。您可以根据自己的喜好(或在记忆允许的情况下)使用尽可能多的声音。

public class SoundPoolPlayer 
    private SoundPool mShortPlayer= null;
    private HashMap mSounds = new HashMap();

    public SoundPoolPlayer(Context pContext)
    
        // setup Soundpool
        this.mShortPlayer = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);


        mSounds.put(R.raw.<sound_1_name>, this.mShortPlayer.load(pContext, R.raw.<sound_1_name>, 1));
        mSounds.put(R.raw.<sound_2_name>, this.mShortPlayer.load(pContext, R.raw.<sound_2_name>, 1));
    

    public void playShortResource(int piResource) 
        int iSoundId = (Integer) mSounds.get(piResource);
        this.mShortPlayer.play(iSoundId, 0.99f, 0.99f, 0, 0, 1);
    

    // Cleanup
    public void release() 
        // Cleanup
        this.mShortPlayer.release();
        this.mShortPlayer = null;
    

你可以通过调用来使用它:

SoundPoolPlayer sound = new SoundPoolPlayer(this); 

在您的 Activity 的 onCreate() 中(或之后的任何时间)。之后,播放一个简单的声音:

sound.playShortResource(R.raw.<sound_name>);

最后,一旦你完成了声音,调用:

sound.release();

释放资源。

【讨论】:

效果很好,但我有两个问题。 1. 我必须在每次使用后释放(比如 MediaPlayer)或者当我从应用程序//活动中退出时? 2.有什么方法可以停止采样? 只有在整个应用会话播放完任何声音后才应释放它(因此 onDestroy() 将是一个不错的选择)。您可以添加一个使用 SoundPools 的 pause() method 的 pause() 方法。 这非常简单。 FWIW,Eclipse 建议 SparseIntArray()mSounds 以获得更好的性能,所以这就是我所做的。 在我来自的未来,SoundPool 已被弃用。检查此以获取更多答案:***.com/questions/2458833/… Soundpool 没有被弃用,你只需要使用 Builder 来构造对象,而不是自己创建新的实例。

以上是关于播放短 .wav 文件 - Android的主要内容,如果未能解决你的问题,请参考以下文章

(Python/Linux) 通过 python 或 os.system 命令播放无延迟的 wav 文件

c ++和portaudio,输出严重失真

android : 使用 SoundPool 播放具有短演变周期的短声音

Windows 的声音管理器类

html如何播放wav文件?

.wav 文件格式的频道是啥?播放 wav 文件时是不是所有频道同时播放?