2011-12-29 6 views
1

AndroidとJavaで数週間はプログラミングしていますが、ギターチューナーを使ってギターを耳で調整しようとしています。シンプルなリファレンスチューナー。私はこのウェブサイトのコードの多くを使って構築しました。AndroidはマルチアクティビティでSoundPoolループを停止します。またはページを変更するときにすべての再生音を停止する

他のページ/アクティビティをクリックしたときにサウンドプールを停止させる方法を教えてください。

現在、私は2つのページがあり、それぞれに7つのサウンドボタンがあります。任意のボタンをクリックすると、別のボタンをクリックするまで無期限にループしてループします。次のページのボタンをクリックして新しいボタンをクリックすると、最後のページのサウンドが再生されます。あなたのギターを耳で調整しようとしているときに、むしろ迷惑になります!

SoundPool全体を停止するための単純なストップボタンが良いアイデアだろうか?

ここは私のSoundManagerコード パッケージorg.gtdb.guitar_tunersです。ここで

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

    public class SoundManager 
    { 
     private Context pContext; 
     private SoundPool sndPool; 
     private float rate = 1.0f; 
     private float masterVolume = 1.0f; 
     private float leftVolume = 1.0f; 
     private float rightVolume = 1.0f; 
     private float balance = 0.5f; 

     // Constructor, setup the audio manager and store the app context 
     public SoundManager(Context appContext) 
     { 
      sndPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 100); 
      pContext = appContext; 
     } 

     // Load up a sound and return the id 
     public int load(int sound_id) 
     { 
      return sndPool.load(pContext, sound_id, 1); 
     } 

     // Play a sound 
     public void play(int sound_id) 
     { 
      sndPool.play(sound_id, leftVolume, rightVolume, 100, -1, rate);  
     } 


     // Set volume values based on existing balance value 
     public void setVolume(float vol) 
     { 
      masterVolume = vol; 

      if(balance < 1.0f) 
      { 
       leftVolume = masterVolume; 
       rightVolume = masterVolume * balance; 
      } 
      else 
      { 
       rightVolume = masterVolume; 
       leftVolume = masterVolume * (2.0f - balance); 
      } 

     } 

     public void setSpeed(float speed) 
     { 
      rate = speed; 

      // Speed of zero is invalid 
      if(rate < 0.01f) 
       rate = 0.01f; 

      // Speed has a maximum of 2.0 
      if(rate > 2.0f) 
       rate = 2.0f; 
     } 

     public void setBalance(float balVal) 
     { 
      balance = balVal; 

      // Recalculate volume levels 
      setVolume(masterVolume); 
     } 



     // Free ALL the things! 
     public void unloadAll() 
     { 
      sndPool.release();  
     } 

    } 

は、私の活動のコードMain.java パッケージorg.gtdb.guitar_tunersです。

import android.app.Activity; 
    import android.content.Intent; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.MenuInflater; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.view.Window; 
    import android.view.WindowManager; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    import android.widget.ImageButton; 
    import android.widget.ImageView; 
    import android.widget.Toast;   
    import com.google.ads.AdRequest; 
    import com.google.ads.AdSize; 
    import com.google.ads.AdView; 

    import android.widget.LinearLayout; 

    public class Main extends Activity { 

     SoundManager snd; 
     int string1, string2, string3, string4, string5, string6, string7; 
     OnClickListener buttZonClick; 

     @Override 
     public 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.main); 

      LinearLayout layout = (LinearLayout) findViewById(R.id.adMobUnit); 

      // Create the adView 
      // Please replace MY_BANNER_UNIT_ID with your AdMob Publisher ID 
      AdView adView = new AdView(this, AdSize.IAB_MRECT, "aaaaaaaaaaaaa"); 

      // Add the adView to it 
      layout.addView(adView); 

      // Initiate a generic request to load it with an ad 
      AdRequest request = new AdRequest(); 
      request.setTesting(true); 

      adView.loadAd(request); 

      // Create an instance of our sound manger 
      snd = new SoundManager(getApplicationContext()); 

      // Load the samples from res/raw 
      string1 = snd.load(R.raw.eadgbe1); 
      string2 = snd.load(R.raw.eadgbe2); 
      string3 = snd.load(R.raw.eadgbe3); 
      string4 = snd.load(R.raw.eadgbe4); 
      string5 = snd.load(R.raw.eadgbe5); 
      string6 = snd.load(R.raw.eadgbe6); 
      string7 = snd.load(R.raw.eadgbestrum); 

      /** Tuner Link **/ 
      Button b1 = (Button) findViewById(R.id.tuner1); 
      b1.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        startActivity(new Intent(Main.this, Dadgad.class)); 
       } 
      }); 
      /** Tuner Link **/ 
      Button b2 = (Button) findViewById(R.id.tuner2); 
      b2.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        startActivity(new Intent(Main.this, Daefce.class)); 


       } 
      }); 

      /** gtdb.org Link **/ 
      ImageButton b7 = (ImageButton) findViewById(R.id.imageButton1); 
      b7.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 
        Intent i = new Intent(Intent.ACTION_VIEW, Uri 
          .parse("http://www.gtdb.org/stats/click.php?id=17")); 
        startActivity(i); 
       } 
      }); 

     } 

     public int count = 0; 
     // Button listener assigned in XML layout 
     public void clickHandler(View v) { 
      int id = v.getId(); // Use the button id to determine which sample 
           // should be played 

      switch (id) { 
      case R.id.button1: 
        snd.play(1); 
       break; 

      case R.id.button2: 
       snd.play(2); 
       break; 

      case R.id.button3: 
       snd.play(3); 
       break; 

      case R.id.button4: 
       snd.play(4); 
       break; 

      case R.id.button5: 
       snd.play(5); 
       break; 

      case R.id.button6: 
       snd.play(6); 
       break; 

      case R.id.button7: 
       snd.play(7); 
       break; 
      } 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      MenuInflater inflater = getMenuInflater(); 
      inflater.inflate(R.menu.menu, menu); 
      return true; 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      if (item.getItemId() == R.id.item1) { 
       Toast.makeText(Main.this, 
         "Android Guitar Tuner App from Guitar Tunings Database - www.gtdb.org", 
         Toast.LENGTH_LONG).show(); 
      } 
      return super.onOptionsItemSelected(item); 
     } 

    } 

コードのおかげで、私は基本的にはJavaとAndroidの初心者だと思うかもしれません。私は他の人々のコードから一緒につながり、lynda.comの動画を見ました。

私のチューナーの現在のバージョンは市販されていますが、サウンドにはループがないので、ページを見て聞くことができます。ループを使わずに、ギターをチューンするためにボタンを押し続ける必要があります!あなたはそれが分かりますhere

答えて

0

Soundpool.stop(int)はあなたのために働くのですか?もしそうなら、単にActivity.onPause()メソッドをオーバーライドしてそこに置くのはなぜですか?

+0

返信いただきありがとうございますが、私は質問をして以来、ページ要素を隠して表示するための可視性を使用して、すべてのページを1ページに格納するレイアウトを書き直しました。 私はちょうど完成し、バージョン2のアプリを公開しました。新しい書き換えをもう一度考えています。 Soundpool.stop(int)をその時点で試してみます。 お返事ありがとうございます。 – warmwhisky

関連する問題