安卓:我点击按钮来播放声音 [英] Android: I click on the button to play the sound

查看:365
本文介绍了安卓:我点击按钮来播放声音的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建的钢琴应用程序,但是当我在按钮上点击播放很多时候我听不到声音当我再次点击按钮我有问题。之后,我点击按钮多次所有的声音都没有听到怎么解决这个问题呢?

 公共类Music_piano延伸活动{
按钮btn_s_ddo,btn_s_re,btn_s_mi,btn_s_fa,btn_s_so,btn_s_la,btn_s_si,btn_ldo;
MediaPlayer的熔点为新的MediaPlayer();
MediaPlayer的MP1,MP2;
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow()。setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    的setContentView(R.layout.activity_music_piano);
}
    公共无效btn_sound_ddo(视图v){
      MP = MediaPlayer.create(这一点,R.raw.ddo);
      mp.start();
}
公共无效btn_sound_re(视图v){
      MP = MediaPlayer.create(这一点,R.raw.re);
      mp.start();
}
公共无效btn_sound_mi(视图v){
      MP = MediaPlayer.create(这一点,R.raw.mi);
      mp.start();
}
公共无效btn_sound_fa(视图v){
      MP = MediaPlayer.create(这一点,R.raw.fa);
      mp.start();
}
公共无效btn_sound_so(视图v){
      MP = MediaPlayer.create(这一点,R.raw.sol);
      mp.start();
}
公共无效btn_sound_la(视图v){
      MP = MediaPlayer.create(这一点,R.raw.la);
      mp.start();
}
公共无效btn_sound_si(视图v){
      MP = MediaPlayer.create(这一点,R.raw.si);
      mp.start();
}
公共无效btn_sound_ldo(视图v){
      MP = MediaPlayer.create(这一点,R.raw.ddo_last);
      mp.start();
}
}


解决方案

我写了一个简单SoundManager类中的类与演示活动。没有任何评论,因为我觉得它的pretty易于阅读。请参阅的Soundpool 了解详情。

SoundManager类

 包com.makeez.sfx;进口android.content.Context;
进口android.media.SoundPool;进口的java.util.HashMap;
进口的java.util.Map;公共类SoundManager类{
    私人最终地图<整数,整数GT; sfxId =新的HashMap<>();
    私人的Soundpool SFX;    公共SoundManager类(INT maxStreams,诠释流类型,诠释srcQuality){
        SFX =新的Soundpool(maxStreams,流类型,srcQuality);
    }    公共无效负载(上下文的背景下,INT ...资源){
        如果(上下文== NULL){
            抛出新的NullPointerException(上下文不能为空);
        }        如果(资源== NULL){
            返回;
        }        对于(INT资源:资源){
            INT soundId = sfx.load(上下文,资源,1);
            sfxId.put(资源,soundId);
        }
    }    公共无效播放(INT渣油){
        整数soundId = sfxId.get(渣油);
        如果(soundId!= NULL){
            sfx.play(soundId,1.0F,1.0F,0,0,1.0F);
        }
    }    公共无效发行(){
        如果(SFX!= NULL){
            sfx.autoPause();
            sfx.release();
            SFX = NULL;
        }
    }
}

示范活动

 包com.makeez.sfx;进口android.media.AudioManager;
进口android.support.v7.app.AppCompatActivity;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.Button;公共类MainActivity扩展AppCompatActivity {
    私人SoundManager类经理;
    私人INT位置= 0;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);        经理=新SoundManager类(1,AudioManager.STREAM_MUSIC,0);
        manager.load(这一点,R.raw.sfx_0001,R.raw.sfx_0002,R.raw.sfx_0003,R.raw.sfx_0004,R.raw.sfx_0005);        Button按钮=(按钮)findViewById(R.id.play);
        button.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                开关(位置){
                    情况下0:manager.play(R.raw.sfx_0001);打破;
                    案例1:manager.play(R.raw.sfx_0002);打破;
                    案例2:manager.play(R.raw.sfx_0003);打破;
                    案例3:manager.play(R.raw.sfx_0004);打破;
                    情况4:manager.play(R.raw.sfx_0005);打破;
                }                如果(++位置> = 5){
                    位置= 0;
                }
            }
        });
    }    @覆盖
    保护无效的onDestroy(){
        manager.release();
        super.onDestroy();
    }
}

I'm creating piano app but I got problem when i click on the button to play many times i can't hear sound when i click on the button again. After i click on the button many times all the sounds are not heard how to solve this problem?

public class Music_piano extends Activity {
Button btn_s_ddo,btn_s_re,btn_s_mi,btn_s_fa,btn_s_so,btn_s_la,btn_s_si,btn_ldo;
MediaPlayer mp = new MediaPlayer();
MediaPlayer mp1,mp2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_music_piano);
}
    public void btn_sound_ddo(View v){
      mp = MediaPlayer.create(this, R.raw.ddo);
      mp.start();
}
public void btn_sound_re(View v){
      mp = MediaPlayer.create(this, R.raw.re);
      mp.start();
}
public void btn_sound_mi(View v){
      mp = MediaPlayer.create(this, R.raw.mi);
      mp.start();
}
public void btn_sound_fa(View v){
      mp = MediaPlayer.create(this, R.raw.fa);
      mp.start();
}
public void btn_sound_so(View v){
      mp = MediaPlayer.create(this, R.raw.sol);
      mp.start();
}
public void btn_sound_la(View v){
      mp = MediaPlayer.create(this, R.raw.la);
      mp.start();
}
public void btn_sound_si(View v){
      mp = MediaPlayer.create(this, R.raw.si);
      mp.start();
}
public void btn_sound_ldo(View v){
      mp = MediaPlayer.create(this, R.raw.ddo_last);
      mp.start();
}
}

解决方案

I wrote a simple SoundManager class with a demo activity. No comment whatsoever as I think its pretty easy to read. Refer to SoundPool for details.

SoundManager class

package com.makeez.sfx;

import android.content.Context;
import android.media.SoundPool;

import java.util.HashMap;
import java.util.Map;

public class SoundManager {
    private final Map<Integer, Integer> sfxId = new HashMap<>();
    private SoundPool sfx;

    public SoundManager(int maxStreams, int streamType, int srcQuality) {
        sfx = new SoundPool(maxStreams, streamType, srcQuality);
    }

    public void load(Context context, int... resources) {
        if (context == null) {
            throw new NullPointerException("Context must not be null.");
        }

        if (resources == null) {
            return;
        }

        for (int resource : resources) {
            int soundId = sfx.load(context, resource, 1);
            sfxId.put(resource, soundId);
        }
    }

    public void play(int resId) {
        Integer soundId = sfxId.get(resId);
        if (soundId != null) {
            sfx.play(soundId, 1.0f, 1.0f, 0, 0, 1.0f);
        }
    }

    public void release() {
        if (sfx != null) {
            sfx.autoPause();
            sfx.release();
            sfx = null;
        }
    }
}

Demo activity

package com.makeez.sfx;

import android.media.AudioManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private SoundManager manager;
    private int position = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        manager = new SoundManager(1, AudioManager.STREAM_MUSIC, 0);
        manager.load(this, R.raw.sfx_0001, R.raw.sfx_0002, R.raw.sfx_0003, R.raw.sfx_0004, R.raw.sfx_0005);

        Button button = (Button) findViewById(R.id.play);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (position) {
                    case 0: manager.play(R.raw.sfx_0001); break;
                    case 1: manager.play(R.raw.sfx_0002); break;
                    case 2: manager.play(R.raw.sfx_0003); break;
                    case 3: manager.play(R.raw.sfx_0004); break;
                    case 4: manager.play(R.raw.sfx_0005); break;
                }

                if (++position >= 5) {
                    position = 0;
                }
            }
        });
    }

    @Override
    protected void onDestroy() {
        manager.release();
        super.onDestroy();
    }
}

这篇关于安卓:我点击按钮来播放声音的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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