2012-08-22 78 views
1

我試圖加載特定事件發生時播放的聲音效果。爲我的Android應用程序播放聲音

出於某種原因,我可以聽到聲音,但它不會播放整個文件,並且會在中間將其制動。

我的聲音代碼:

public class SoundManager { 

    private Context context; 
    private int nudgeSound = R.raw.nudge; 


    public SoundManager(Context context) 
    { 
     this.context = context; 
    } 

    public void playNudgeSound() 
    {   
     final MediaPlayer mediaPlayer = MediaPlayer.create(context, nudgeSound); 

      mediaPlayer.setOnCompletionListener(new OnCompletionListener() { 

       @Override 
       public void onCompletion(MediaPlayer mp) { 
        mediaPlayer.reset(); 
       } 

      }); 
      mediaPlayer.start(); 

    } 
} 

我的初始化:

SoundManager soundManager = new SoundManager(this); 
    soundManager.playNudgeSound(); 
+0

如果你不打電話reset(),在打孔文件之前是否剎車? –

+0

是的,它確實......我確實有振動在同一時間,但即使當我禁用它,我仍然得到相同的制動.. –

+0

有一個小的可能性,有音頻有問題文件。你可以嘗試另一種方式,例如使用示例應用程序或通過瀏覽器? –

回答

3

後在附近遊蕩的幾天,很多無奈的好,我發現我的問題是,MediaPlayer.create()沒有太多時間來加載文件存儲... 它發生的原因是幾乎在同一時間調用create()和start()。

我的建議是在加載應用程序時加載所有聲音文件,並在需要時調用start()。建立一些SoundManager類。

謝謝大家!希望它能幫助別人!

+0

很高興聽到您對它進行了整理 –

2

你有沒有想過使用的Soundpool代替?在我的應用程序中這工作正常。

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION); 

SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_NOTIFICATION, 0); 
int sound = soundPool.load(context, R.raw.beep, 1); 
soundPool.play(sound, maxVolume, maxVolume, 1, 0, 1f); 
相關問題