2011-06-18 217 views
11

我需要在應用程序中播放短暫的聲音。我寫了下面的代碼,但我的三星手機上沒有出現聲音和奇怪的振動。但在同一時間,這段代碼在我的android模擬器上運行良好。我的代碼是:使用SoundPool播放聲音

package com.samplers; 

import android.app.Activity; 
import android.media.SoundPool; 
import android.media.AudioManager; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class FixVibroActivity extends Activity { 
    /** Called when the activity is first created. */ 

    private Button white; 
    private SoundPool spool; 
    private int soundID; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 
     spool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 
     soundID = spool.load(this, R.raw.error, 1); 

     white = (Button)findViewById(R.id.whiteBtn); 
     white.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Sound(); 
      } 
     }); 
    } 

    public void Sound(){ 
     AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
     float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
     spool.play(soundID, volume, volume, 1, 0, 1f); 
    }; 
} 

請幫我解決這個問題,請!先謝謝你! :)

+1

你可以檢查logcat是否打印任何有趣的錯誤? – FeatureCreep

回答

7

有可能是您的音量控制或您的聲音文件正確播放的問題:如果您將Sound()函數更改爲此,它有什麼作用?如果您的手機沒有正確處理R.raw.error文件格式,但仿真器正確地做到了這一點,那將非常奇怪。

public void Sound(){ 
     AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
     float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
     android.util.Log.v("SOUND","["+volume+"]["+spool.play(soundID, volume, volume, 1, 0, 1f)+"]"); 
    }; 
+2

謝謝您的回覆!問題已經解決了! :)我將文件格式從* .ogg更改爲* .wav和賓果!!!! :) 感謝幫助! :) – lubart

+4

啊,手機不支持ogg,但模擬器。很高興知道。認爲它可能是文件格式。 – Femi

+0

手機支持這種格式。這個文件是用MediaPlayer播放的,但只有一次,之後是沉默。無論如何對我來說都是好消息:)再次感謝! :) – lubart