从 res/raw 播放声音 [英] Play a sound from res/raw

查看:40
本文介绍了从 res/raw 播放声音的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在制作一个应用程序,它应该用 mediaPlayer 播放一些声音.这是我使用的代码:

I m making an app which is supposed to play a few sounds with the mediaPlayer. This is the code i use :

String[] name = {"sonar_slow","sonar_medium","sonar_fast"};
    String link = "/res/raw/" + name[state-1] + ".mp3";

    try {
        player.setDataSource(link);
        player.prepare();
        player.start();
    } catch(Exception e) {
        e.printStackTrace();
    }

我也试过这个:

        if(state==1){
            player.create(this, R.raw.sonar_slow);
        }else if(state==2){
            player.create(this, R.raw.sonar_medium);
        }else if(state==3){
            player.create(this, R.raw.sonar_fast);
        }
        player.start();

但是以上都没有奏效.我的应用程序没有崩溃,但没有播放声音.有什么想法吗?

But none of the above is working. My app is not crashing but the sound is not playing. Any ideas ?

推荐答案

有两个问题.

您不能以这种方式引用项目/res/raw 目录中的资源.您项目目录中的文件/res/raw/sonar_slow.mp3"未存储在您的apk中的/res/raw/sonar_slow.mp3"中.而不是以下内容:

You cannot reference resources inside your projects /res/raw directory in this fashion. The file "/res/raw/sonar_slow.mp3" in your project directory is not stored in "/res/raw/sonar_slow.mp3" in your apk. Instead of the following:

MediaPlayer mp = MediaPlayer.create(this);  
mp.setSource("sonar_slow");

你需要使用

MediaPlayer mp = MediaPlayer.create(this, R.raw.sonar_slow); 

问题 2

以下是错误的:它调用了一个不修改player的静态方法.

player.create(this, R.raw.sonar_slow); 

你应该打电话

player = MediaPlayer.create(this, R.raw.sonar_slow);

完整解决方案

下面是一个可重用的AudioPlayer 类,它封装了MediaPlayer.这是从Android 编程:大书呆子牧场指南"稍作修改的.一定要记得清理资源

Full solution

Below is a reusable AudioPlayer class that encapsulates MediaPlayer. This is slightly modified from "Android Programming: The Big Nerd Ranch Guide". It makes sure to remember to clean up resources

package com.example.hellomoon;

import android.content.Context;
import android.media.MediaPlayer;

public class AudioPlayer {

    private MediaPlayer mMediaPlayer;

    public void stop() {
        if (mMediaPlayer != null) {
            mMediaPlayer.release();
            mMediaPlayer = null;
        }
    }

    public void play(Context c, int rid) {
        stop();

        mMediaPlayer = MediaPlayer.create(c, rid);
        mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                stop();
            }
        });

        mMediaPlayer.start();
    }

}

这篇关于从 res/raw 播放声音的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆