当我快速按下播放按钮时,声音播放失败

时间:2016-09-21 17:55:52

标签: android button playback soundpool

我正在处理我的第一个Android项目。所以我新手。

我有3个按钮用于播放声音。同时这个声音已经循环播放..当按下播放/暂停按钮(iv)时一切正常但是当我快速按下播放/按下按钮时,名为soundID,soundID2,soundID3的声音不会暂停,继续播放..有时全部声音正在同时播放..我的代码如下。如何清楚地设置此代码并稳定执行。

package com.bebekuyutucu;

import android.graphics.Typeface;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

public class MainActivity extends AppCompatActivity {

    private SoundPool soundPool, soundPool2, soundPool3;
    private int soundID, soundID2, soundID3;
    boolean plays,  loaded, loaded2, loaded3 = false;
    float actVolume, maxVolume, volume;
    AudioManager audioManager;
    int counter,counter2, counter3;
    String voice = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ImageView iv, anne, muzik, supurge, fon, ninni;
        final SeekBar seekBar;
        final TextView tv = (TextView) findViewById(R.id.textView);


        // AudioManager audio settings for adjusting the volume
        audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        actVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        volume = actVolume / maxVolume;

        //Hardware buttons setting to adjust the media sound
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);

        // the counter will help us recognize the stream id of the sound played  now
        counter = 0;
        counter2 = 0;
        counter3 = 0;

        rekamYukle ();

        // Load the sounds
        soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 1);
        soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                loaded = true;
            }
        });
        soundID = soundPool.load(this, R.raw.fon_sesi,1);

        soundPool2 = new SoundPool(5, AudioManager.STREAM_MUSIC, 1);
        soundPool2.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                loaded2 = true;
            }
        });
        soundID2 = soundPool2.load(this, R.raw.annekarni,1);

        soundPool3 = new SoundPool(5, AudioManager.STREAM_MUSIC, 1);
        soundPool3.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                loaded3 = true;
            }
        });
        soundID3 = soundPool3.load(this, R.raw.annekarni,1);

        Typeface cocoFont = Typeface.createFromAsset(getAssets(), "fonts/Cocogoose_trial.otf");
        tv.setTypeface(cocoFont);
        seekBar = (SeekBar) findViewById(R.id.seekBar);
        iv = (ImageView) findViewById(R.id.imageView3);
        ninni = (ImageView) findViewById(R.id.imageView4);
        anne = (ImageView) findViewById(R.id.imageView5);
        supurge = (ImageView) findViewById(R.id.imageView6);
        fon = (ImageView) findViewById(R.id.imageView7);
        muzik = (ImageView) findViewById(R.id.imageView8);

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                tv.setText(progress + " dk");
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

        anne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                anne.setImageResource(R.mipmap.annex);
                fon.setImageResource(R.mipmap.fon);
                muzik.setImageResource(R.mipmap.muzik);
                supurge.setImageResource(R.mipmap.supurge);
                ninni.setImageResource(R.mipmap.ninni);
                voice = "annekarni";

                if (voice != "annekarni") {
                    soundPool.stop(soundID);
                    soundPool2.stop(soundID2);
                    soundPool3.stop(soundID3);
                    iv.setImageResource(R.mipmap.butonbaslat);
                }

            }
        });

        muzik.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                anne.setImageResource(R.mipmap.anne);
                fon.setImageResource(R.mipmap.fon);
                muzik.setImageResource(R.mipmap.muzikx);
                supurge.setImageResource(R.mipmap.supurge);
                ninni.setImageResource(R.mipmap.ninni);
                voice = "muzikkutusu";

                if (voice != "muzikkutusu" ) {
                    soundPool.stop(soundID);
                    soundPool2.stop(soundID2);
                    soundPool3.stop(soundID3);
                    iv.setImageResource(R.mipmap.butonbaslat);
                }
            }
        });

        supurge.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                muzik.setImageResource(R.mipmap.muzik);
                fon.setImageResource(R.mipmap.fon);
                anne.setImageResource(R.mipmap.anne);
                supurge.setImageResource(R.mipmap.supurgex);
                ninni.setImageResource(R.mipmap.ninni);
                voice = "supurgesesi";

                if (voice != "supurgesesi") {
                    soundPool.stop(soundID);
                    soundPool2.stop(soundID2);
                    soundPool3.stop(soundID3);
                    iv.setImageResource(R.mipmap.butonbaslat);
                }
            }
        });
        fon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                anne.setImageResource(R.mipmap.anne);
                fon.setImageResource(R.mipmap.fonx);
                muzik.setImageResource(R.mipmap.muzik);
                supurge.setImageResource(R.mipmap.supurge);
                ninni.setImageResource(R.mipmap.ninni);
                voice = "fonsesi";

                if (voice != "fonsesi") {
                    soundPool.stop(soundID);
                    soundPool2.stop(soundID2);
                    soundPool3.stop(soundID3);
                    iv.setImageResource(R.mipmap.butonbaslat);
                };
            }
        });
        ninni.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                muzik.setImageResource(R.mipmap.muzik);
                fon.setImageResource(R.mipmap.fon);
                anne.setImageResource(R.mipmap.anne);
                supurge.setImageResource(R.mipmap.supurge);
                ninni.setImageResource(R.mipmap.ninnix);
                voice = "ninnisesi";

                if (voice != "ninnisesi") {
                    soundPool.stop(soundID);
                    soundPool2.stop(soundID2);
                    soundPool3.stop(soundID3);
                    iv.setImageResource(R.mipmap.butonbaslat);
                }
            }
        });

        iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (tv.getText().toString().equals("0 dk")) {
                    Toast.makeText(MainActivity.this, "Lütfen sesi seçip, süreyi ayarlayınız.", Toast.LENGTH_SHORT).show();
                } else if (voice == null) {
                    Toast.makeText(MainActivity.this, "Lütfen sesi seçiniz.", Toast.LENGTH_SHORT).show();
                }else {
                    try {
                        if (voice.equals("fonsesi")){
                            if (loaded && !plays) {
                                soundPool.play(soundID, volume, volume, 1, seekBar.getProgress() * 12, 1f);
                                counter = counter++;
                                plays = true;
                                iv.setImageResource(R.mipmap.butondurdur);
                            }else if (plays) {
                                soundPool.stop(soundID);
                                soundPool2.stop(soundID2);
                                soundPool3.stop(soundID3);
                                soundPool.autoPause();
                                soundPool2.autoPause();
                                soundPool3.autoPause();

                                soundID = soundPool.load(getApplicationContext(), R.raw.fon_sesi, counter);
                                plays = false;
                                iv.setImageResource(R.mipmap.butonbaslat);
                            }

                        }else if (voice.equals("annekarni")) {
                            if (loaded2 && !plays) {

                                soundPool2.play(soundID2, volume, volume, 1, seekBar.getProgress() * 12, 1f);
                                counter2 = counter2++;
                                plays = true;
                                iv.setImageResource(R.mipmap.butondurdur);
                            } else if (plays) {
                                soundPool.stop(soundID);
                                soundPool2.stop(soundID2);
                                soundPool3.stop(soundID3);
                                soundID2 = soundPool2.load(getApplicationContext(), R.raw.annekarni, counter2);
                                plays = false;
                                iv.setImageResource(R.mipmap.butonbaslat);
                            }
                        }else if (voice.equals("supurgesesi")) {
                            if (loaded3 && !plays) {
                                soundPool3.play(soundID3, volume, volume, 1, seekBar.getProgress() * 12, 1f);
                                counter3 = counter3++;
                                plays = true;
                                iv.setImageResource(R.mipmap.butondurdur);
                            } else if (plays) {
                                soundPool.stop(soundID);
                                soundPool2.stop(soundID2);
                                soundPool3.stop(soundID3);
                                soundID3 = soundPool3.load(getApplicationContext(), R.raw.supurge, counter3);
                                plays = false;
                                iv.setImageResource(R.mipmap.butonbaslat);
                            }
                        }

                        }catch (Exception hata){
                     Toast.makeText(MainActivity.this, "Hata :"+hata, Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }

    private void rekamYukle() {
        AdView adView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder()
                .setRequestAgent("android_studio:ad_template").build();
        adView.loadAd(adRequest);
    }
}

1 个答案:

答案 0 :(得分:0)

解决方案:我使用soundPool.autoPause();代替soundpool.stop(soundID)