【问题标题】:Audio [MediaPlayer] is not working for my Piano Apps音频 [MediaPlayer] 不适用于我的钢琴应用程序
【发布时间】:2011-08-24 09:41:16
【问题描述】:

现在,我尝试构建一个钢琴应用程序。这个概念是播放声音我必须触摸一个按钮。现在,我有 7 个按钮,每个按钮播放一个声音文件。这是代码。

package com.andikurnia.piano;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class IsaronActivity extends Activity {
    /** Called when the activity is first created. */

    ImageView button1;
    ImageView button2;
    ImageView button3;
    ImageView button4;
    ImageView button5;
    ImageView button6;
    ImageView button7;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final MediaPlayer sound_6 = MediaPlayer.create(this, R.raw.saron_6);
        final MediaPlayer sound1 = MediaPlayer.create(this, R.raw.saron1);
        final MediaPlayer sound2 = MediaPlayer.create(this, R.raw.saron2);
        final MediaPlayer sound3 = MediaPlayer.create(this, R.raw.saron3);
        final MediaPlayer sound5 = MediaPlayer.create(this, R.raw.saron5);
        final MediaPlayer sound6 = MediaPlayer.create(this, R.raw.saron6);
        final MediaPlayer sound11 = MediaPlayer.create(this, R.raw.saron11);

        button1 = (ImageView) findViewById(R.id.one);
        button1.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent touchEvent) {
                // TODO Auto-generated method stub
                if(sound_6.isPlaying()){
                    sound_6.stop();
                    sound_6.seekTo(0);
                }else{
                    sound6.start();
                }
                return true;
            }
        });

        button2 = (ImageView) findViewById(R.id.two);
        button2.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View two, MotionEvent touchEvent) {
                // TODO Auto-generated method stub
                if(sound1.isPlaying()){
                    sound1.stop();
                    sound1.seekTo(0);
                }else{
                    sound1.start();
                }
                return true;
            }
        });

        button3 = (ImageView) findViewById(R.id.three);
        button3.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View three, MotionEvent touchEvent) {
                // TODO Auto-generated method stub
                if(sound2.isPlaying()){
                    sound2.stop();
                    sound2.seekTo(0);
                }else{
                    sound2.start();
                }
                return true;
            }
        });

        button4 = (ImageView) findViewById(R.id.four);
        button4.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View four, MotionEvent touchEvent) {
                // TODO Auto-generated method stub
                if(sound3.isPlaying()){
                    sound3.stop();
                    sound3.seekTo(0);
                }else{
                    sound3.start();
                }
                return true;
            }
        });

        button5 = (ImageView) findViewById(R.id.five);
        button5.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View five, MotionEvent touchEvent) {
                // TODO Auto-generated method stub
                if(sound5.isPlaying()){
                    sound5.stop();
                    sound5.seekTo(0);
                }else{
                    sound5.start();
                }
                return true;
            }
        });

        button6 = (ImageView) findViewById(R.id.six);
        button6.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View six, MotionEvent touchEvent) {
                // TODO Auto-generated method stub
                if(sound6.isPlaying()){
                    sound6.stop();
                    sound6.seekTo(0);
                }else{
                    sound6.start();
                }
                return true;
            }
        });

        button7 = (ImageView) findViewById(R.id.seven);
        button7.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View seven, MotionEvent touchEvent) {
                // TODO Auto-generated method stub
                if(sound11.isPlaying()){
                    sound11.stop();
                    sound11.seekTo(0);
                }else{
                    sound11.start();
                }
                return true;
            }
        });
    }
}

问题是当我触摸一个按钮(例如 button1)时,音频文件被调用并正常播放。但是,当我移动手指触摸其他按钮时,该按钮上的声音只播放一半,当我回到之前的按钮时,它无法再次播放声音。任何人都可以帮助分析我的代码..? :(

【问题讨论】:

    标签: android


    【解决方案1】:

    您需要在完成后释放 MediaPlayer 实例..

    实现这一点的更好方法是(此代码可能无法编译..但它应该可以帮助您入门)

    private MediaPlayer mp;
    public boolean onTouch(View v, MotionEvent touchEvent) {
         switch(v.getId()) {
             case button1:
                 if(null == mp){
                     mp = MediaPlayer.create(this, R.raw.saron1);
                 } else {
                     //mediaplayer is already created so release it
                     //you may also want to consider stopping it..
                     mp.release();
                     mp = MediaPlayer.create(this, R.raw.saron1);                     
                 }
                 mp.start();
                 break;
                 //..
                 //..
                 //.. and so on
         }
    }
    

    【讨论】:

    • 所以,不建议在一个程序中创建多个MediaPlayer...?如果是这样,我必须创建一个数组来实现我的按钮。好的,我试试看。
    • 哦,我明白了。好吧,我刚开始开发一个android程序。感谢您的帮助。 :) 我也是博主,来我家 (blog.andikurnia.com)
    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多