2011-08-13 71 views
0

嘿傢伙,所以當我運行我的應用程序它會進入主屏幕。從那裏我擊中了我的兩個圖像按鈕之一,併發出聲音。我遇到的問題是,當我第一次按下按鈕時,聲音正常而響亮,按鈕活動將我帶到下一個佈局。如果我從佈局返回主屏幕並嘗試再次點擊按鈕,我仍然可以聽到聲音,但幾乎沒有。它有時幾乎聽不到。我怎樣才能讓聲音始終保持一致?謝謝!按鈕音量變化?

DragonFruitActivity.java

package com.Dragon_Fruit; 

import java.io.IOException; 

import android.app.Activity; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.ImageButton; 

public class DragonFruitActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // ***BUTTON SOUND***// 
     final MediaPlayer buttonSound = MediaPlayer.create(
       DragonFruitActivity.this, R.raw.button_click); 

     ImageButton playbutton = (ImageButton) findViewById(R.id.playbutton); 
     playbutton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       arg0.setBackgroundResource(R.drawable.playbuttonselected); 
       // TODO Auto-generated method stub 
       if(buttonSound.isPlaying()) { 
        buttonSound.stop(); 
       } 

       try { 
        buttonSound.prepare(); 
       } catch (IllegalStateException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       buttonSound.start(); 

       startActivity(new Intent(DragonFruitActivity.this, 
         playbutton.class)); 
      } 

     }); 
     ImageButton settingsbutton = (ImageButton) findViewById(R.id.settingsbutton); 
     settingsbutton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       if(buttonSound.isPlaying()) { 
        buttonSound.stop(); 
       } 

       try { 
        buttonSound.prepare(); 
       } catch (IllegalStateException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       buttonSound.start(); 

       startActivity(new Intent(DragonFruitActivity.this, 
         settingsbutton.class)); 
      } 

     }); 
    } 
} 

回答

0

多久的聲音?如果真的很短(< 250毫秒),我在某些手機(摩托羅拉Atrix)上看到了一個問題,如果音頻驅動程序暫時沒有播放,音頻驅動程序會進入睡眠狀態。在這種情況下,由於音頻驅動程序仍在喚醒,所以在第一次播放它們時真的很短的聲音要麼不播放,要麼非常安靜。

我對此的解決方法,我一點也不高興,就是用幾毫秒的低頻聲音(〜20Hz)來填充聲音的前部。

您可以通過按下按鈕快速連續播放2-3次來驗證這是否是您所看到的問題。如果後來更響,那麼這可能是問題所在。

您可能還想考慮使用SoundPool來播放小聲音。它將聲音加載到內存中,以便更快地播放聲音。

+0

好的,這是有道理的。我會怎麼做呢? – Zach

+0

我使用Adobe Audition編輯聲音文件。我想你可以在這裏得到一個免費的試用版:http://www.adobe.com/products/audition.html –

+0

等待我如何使用soundpool? – Zach