2011-04-07 56 views
2

我已经创建了实现媒体播放器类来播放背景音乐的服务。但是现在我想要转换为声音池,以便可以播放多个声音。 可以帮助任何可以提供我一些源代码的链接?Android:声音池和服务

在此先感谢。

回答

9

只是我已经实现与背景音服务,我从http://android-er.blogspot.com/2010/11/play-audio-resources-using-soundpool.htmlhttp://developer.android.com/guide/topics/fundamentals/bound-services.html

public class LocalService extends Service { 
    // Binder given to clients 
    private final IBinder mBinder = new LocalBinder(); 
    // Random number generator 
    private final Random mGenerator = new Random(); 

    private SoundPool soundPool; 
    private HashMap<Integer, Integer> soundsMap; 
    int SOUND1=1; 
    int SOUND2=2; 
    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 

     soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); 
     soundsMap = new HashMap<Integer, Integer>(); 
     soundsMap.put(SOUND1, soundPool.load(this, R.raw.baby_laugh, 1)); 
     soundsMap.put(SOUND2, soundPool.load(this, R.raw.touchdown, 1)); 
    } 
    public void playSound(int sound, float fSpeed) { 
     AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
     float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); 
     float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
     float volume = streamVolumeCurrent/streamVolumeMax; 


     soundPool.play(soundsMap.get(sound), volume, volume, 1, 0, fSpeed); 
     } 


    /** 
    * Class used for the client Binder. Because we know this service always 
    * runs in the same process as its clients, we don't need to deal with IPC. 
    */ 
    public class LocalBinder extends Binder { 
     LocalService getService() { 
      // Return this instance of LocalService so clients can call public methods 
      return LocalService.this; 
     } 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return mBinder; 
    } 

    /** method for clients */ 
    public int getRandomNumber() { 
     return mGenerator.nextInt(100); 
    } 

    public void soundPlay(int index){ 

     playSound(index, 1.0f); 
     Log.d("SOUND1","hi1"); 

    } } 

检查你的代码从活动中使用

public class Test extends Activity implements OnClickListener { 
    LocalService mService; 
    boolean mBound = false; 

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

     Button btn=(Button)findViewById(R.id.a_button); 
     btn.setOnClickListener(this); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     // Bind to LocalService 
     Intent intent = new Intent(this, LocalService.class); 
     bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     // Unbind from the service 

     if (mBound) { 
      unbindService(mConnection); 
      mBound = false; 
     } 
    } 

    /** Called when a button is clicked (the button in the layout file attaches to 
     * this method with the android:onClick attribute) */ 
    public void onButtonClick(View v) { 
     if (mBound) { 
      // Call a method from the LocalService. 
      // However, if this call were something that might hang, then this request should 
      // occur in a separate thread to avoid slowing down the activity performance. 
      int num = mService.getRandomNumber(); 
      Toast.makeText(this, "number: " + num, Toast.LENGTH_SHORT).show(); 
     } 
    } 

    /** Defines callbacks for service binding, passed to bindService() */ 
    private ServiceConnection mConnection = new ServiceConnection() { 


     public void onServiceConnected(ComponentName className, 
       IBinder service) { 
      // We've bound to LocalService, cast the IBinder and get LocalService instance 
      LocalBinder binder = (LocalBinder) service; 
      mService = binder.getService(); 
      mBound = true; 
     } 


     public void onServiceDisconnected(ComponentName arg0) { 
      mBound = false; 
     } 
    }; 

    public void onClick(View arg0) { 
     if (mBound) { 
      // Call a method from the LocalService. 
      // However, if this call were something that might hang, then this request should 
      // occur in a separate thread to avoid slowing down the activity performance. 
       mService.soundPlay(1); 
      int num = mService.getRandomNumber(); 
      Toast.makeText(this, "number: " + num, Toast.LENGTH_SHORT).show(); 
     } 

    } 
} 

谢谢所有谁帮我打电话。特别是谁写博客。