2016-09-21 116 views
1

我正在處理我的第一個Android項目。所以我喜歡新手。當我按下快速播放按鈕時,聲音播放出現故障

我有3個按鈕來播放聲音。同時這聽起來有循環..當按下播放/暫停按鈕(iv)一切正常,但當我按下快速播放/ puse按鈕名爲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); 
    } 
} 

回答

0

溶液:我用​​代替soundpool.stop(soundID)