我目前正在尝试使用SoundPool API在我的Android应用中播放声音。播放声音不是问题。现在我想停止声音,然后从头开始重新启动它。但是当我调用停止功能然后播放()时,声音不会播放。这是一些代码:
加载声音:
soundId = soundPool.load(context, fileId, 1);
播放声音:
streamId = soundPool.play(soundId, 1.0f, 1.0f, 1, -1, 1);
停止声音:
soundPool.stop(streamId);
我还尝试在第二次播放之前再次加载声音,但是没有修复它。
当我使用暂停/恢复时,声音从停止的位置播放(但我希望它始终从头开始)。
任何帮助将不胜感激
编辑:
我只是想出了一些奇怪的事情。当我使用soundpool.stop()时,它每秒都会调用soundpool.play()。所以play()的第一个调用播放声音,第二个调用play,#3,5th,7th ...调用播放声音。 当我使用soundpool.pause()然后play()时,它每三次都有效。所以第1次,第4次,第7次......播放()播放声音。
这是一个错误吗?或者我使用它错了吗?
答案 0 :(得分:1)
我创建了一个简单的项目来启动和停止声音,然后再次播放。这是代码
Button b1, b2;
private int streamId;
private int soundID;
private SoundPool sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
soundID = sp.load(this, R.raw.middle, 1);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.b1:
streamId = sp.play(soundID, 1, 1, 1, 0, 1f);
break;
case R.id.b2:
sp.stop(streamId);
break;
}
}
我在我的情况下正常工作,如果你做同样的事情,那么问题可能在其他地方。如果你能提供更多细节,那么我们可以找出问题所在。
答案 1 :(得分:0)
玩:
nowPlaying= soundPool.play(soundId, 1.0f, 1.0f, 1, -1, 1);
soundPool.stop(nowPlaying);
现在重新加载它:
soundId = soundPool.load(this, R.raw.yoursound, 0);