Android SoundPool:再次播放已停止的声音

时间:2014-03-03 13:42:21

标签: android soundpool

我目前正在尝试使用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次......播放()播放声音。

这是一个错误吗?或者我使用它错了吗?

2 个答案:

答案 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);