当循环参数设置为0时,Android SoundPool有时会播放两次声音

时间:2011-04-06 18:51:17

标签: android audio

以下是我正在做的事情:

private SoundPool pool;
private int soundId;

@Override
public void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);

  // new SoundPool with three channels, STREAM_MUSIC, default quality
  pool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);

  // load sound with current context, click resource, priority 1
  soundId = pool.load(this, R.raw.click, 1);

  // originally I wasn't using this but it seemed to help a bit
  // set no loop for soundId
  pool.setLoop(soundId, 0);
}

private void play()
{
  Log.v(TAG, "Play the sound once!");

  // half volume L & R, priority 1, loop 0, rate 1
  pool.play(soundId, 0.5f, 0.5f, 1, 0, 1);
}

@Override
public void onDestroy()
{
  super.onDestroy();

  // release the pool
  pool.release();
}

最初我使用.wav文件获取咔嗒声,90%的时间都会出现问题。我添加了setLoop,它似乎减少了一点点。

我认为加载.wav文件可能会出现问题,所以我将文件转换为.mp3。现在问题发生在5%的时间,但它仍然会发生。我使用和不使用setLoop调用构建,看起来包含它有点帮助。

正如您所看到的,我添加了调试日志消息,以确保我不会无意中两次调用播放功能。根据日志输出,声音只播放一次,但我听到声音两次。

我还使用了几种不同的声音文件。有些文件似乎比其他文件更频繁地重复。除了使用.wav文件更频繁地发生之外,我没有看到任何相关性。

我发现三星Continuum运行2.1(最小和目标API:等级7)时出现问题。我没有经历任何与我在同一设备上下载的任何市场应用程序的额外循环。不幸的是,我没有其他设备可供测试。

我发现只有另外一个人遇到此问题,他或她也在使用三星设备。

以下是报告的其他问题的链接:

https://stackoverflow.com/q/4873995/695336

此时我想我会尝试制作一个发布版本,看它是否仍然发生,然后可能转换为.ogg格式。之后,我可能会尝试切换到MediaPlayer,看看我是否得到了相同的结果。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我在为XPeria 10 mini pro(Android 2.1)开发时遇到了同样的问题。这个问题的公认答案对我有用:

Issue with Soundpool and Samsung Galaxy S