SoundPool 停止功能未停止

Posted

技术标签:

【中文标题】SoundPool 停止功能未停止【英文标题】:SoundPool stop function not stopping 【发布时间】:2012-08-31 17:58:02 【问题描述】:

我正在制作一个应用程序,您可以在其中选择 1 到 4 种不同的声音并同时播放它们。一切正常,直到我想停止声音,停止功能只能同时用于一种声音,这是代码(仅适用于声音池)

sound = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
        s1 = sound.load(Main.this, R.raw.mosq1, 1);
        s2 = sound.load(Main.this, R.raw.mosq2, 1);
        s3 = sound.load(Main.this, R.raw.mosq3, 1);
        s4 = sound.load(Main.this, R.raw.mosq4, 1);
.
.
.
.
        case R.id.play:
            if (l1==true)sound.play(s1, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(4500);
            if (l2==true)sound.play(s2, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(6500);
            if (l3==true)sound.play(s3, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(2500);
            if (l4==true)sound.play(s4, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(4500);
            break;
        case R.id.stop:
            sound.stop(s1);
            sound.stop(s2);
            sound.stop(s3);
            sound.stop(s4);
            wibracja.cancel();
            break;

如何正确使用停止功能?感谢您的帮助

【问题讨论】:

【参考方案1】:

对于使用 soundpool 的用户来说,这是一个常见问题 第一次。如果您仔细查看 soundpool 的文档,play 使用参数“soundID”,而 stop 使用参数“streamID”。很容易忽略这一点,并使用从 load 函数返回的 soundID 用于两个命令,就像您的代码一样。我什至见过 android 教程示例弄错了。而是使用这些命令:

s1 = sound.load(Main.this, R.raw.mosq1, 1);  
if (l1==true)p1=sound.play(s1, 1, 1, 0, rep, 1);     
sound.stop(p1);// NOT s1

【讨论】:

以上是关于SoundPool 停止功能未停止的主要内容,如果未能解决你的问题,请参考以下文章

如何停止通过 Soundpool 播放声音?

如何停止 SoundPool 中的所有声音?

Seekbar 控制 Soundpool,停止工作

SoundPool 和 MediaPlayer 在一段时间后循环播放的哔声停止

如何从动作栏上的soundpool中停止声音

在android soundpool中播放新声音时如何停止所有其他以前的声音?