android - 只播放一个声音安卓

标签 android audio media-player

我正在开发一个小测验应用程序,我想根据用户是否正确回答问题来播放声音。

我在“assets/”中有很多声音文件。

我想做的是只播放其中一种声音。 我已经能够播放声音,但不仅是一个,两个声音(正确的和不正确的)都一个接一个地播放。

我怎么能只玩一个? 这是我的来源:

public void audioPlayer(){
    //set up MediaPlayer    
    mp = new MediaPlayer();

    try {
        String mp3File = "correct.mp3";
        AssetManager assetMan = getAssets();
        FileInputStream mp3Stream = assetMan.openFd(mp3File).createInputStream();

        mp.setDataSource(mp3Stream.getFD());
        mp.prepare();
        mp.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

最佳答案

将你的声音文件,即 fail 和 applause 放在 raw 文件夹中,并使用以下代码:

private AssetFileDescriptor sPlaySoundDescriptor = null;
private AssetFileDescriptor sFailSoundDescriptor = null;
private MediaPlayer mp = null;
public static final int FAIL_SOUND = 1;
public static final int APPLAUSE_SOUND = 2;

public void audioPlayer(int soundType){
    //set up MediaPlayer    
    mp = new MediaPlayer();
    AssetFileDescriptor soundFileDescriptor = null;
    try {
        if (sFailSoundDescriptor == null) {
            sFailSoundDescriptor = context.getResources().
                    openRawResourceFd(R.raw.fail);
        }
        if (sApplauseSoundDescriptor == null) {
            sApplauseSoundDescriptor = context.getResources().
                    openRawResourceFd(R.raw.applause);
        }
        switch (soundType) {
            case FAIL_SOUND:
                soundFileDescriptor = sFailSoundDescriptor;
                break;
            case APPLAUSE_SOUND:
                soundFileDescriptor = sApplauseSoundDescriptor;
                break;
        }
        mp.reset();
        mp.setDataSource(soundFileDescriptor.getFileDescriptor(),
                        soundFileDescriptor.getStartOffset(),
                        soundFileDescriptor.getDeclaredLength());
        mp.prepare();
        mp.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer player) {
                player.seekTo(0);
                player.start();
            }
        });  
    } catch (Exception e) {
        e.printStackTrace();
    }
}

关于android - 只播放一个声音安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16379166/

相关文章:

android - facebook-androidk-sdk 3.0.1 作为 maven android 中的库项目

android - 无法在 Samsung 4.2 及更高版本的手机中启动 "Wireless Display devices"列表屏幕

ios - AVPlayer 加载缓慢

python - 在Windows上的Python 2.7中将标签应用于WAV文件

Android - 同时将两个或多个 WAV 文件合并(合并)为一个(混合)

java - 异常 : java. lang.RuntimeException 在 android.app.ActivityThread.handleReceiver

python - 在 python 中使用 org.mpris.mediaplayer2.player PlaybackStatus 属性

android - 广播 protected Intent 时出现 SecurityException

android - 我应该使用什么作为 setOnClickListener() 方法的参数?

objective-c - AVPlayerLayer - 重新编程轮子?