【问题标题】:Soundpool play several times androidSoundpool 玩了几次 android
【发布时间】:2017-08-05 21:03:26
【问题描述】:

我在播放 soundpool 时遇到问题。 我是 Android 教育的新手,希望你能帮助我。 我创建了加载 soundpool 的类

 public class Suond {


    protected  static int suond1 ,suond2,suond3,suond4,suond5,suond6,suond7;
    protected  static  SoundPool sou;
    protected  static  AudioAttributes aa;


    @SuppressLint("NewApi") 
    @SuppressWarnings("deprecation")

    protected static void oi(Context Con ){


         if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){

             aa = new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_GAME)
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build();

 sou = new SoundPool.Builder().setMaxStreams(10)
.setAudioAttributes(aa).build();

                  suond1 = sou.load(Con,R.raw.Music1,1);
                  suond2 = sou.load(Con,R.raw.Music2,1);
                  suond3 = sou.load(Con,R.raw.Music3,1);
                  suond4 = sou.load(Con,R.raw.Music4,1);
                  suond5 = sou.load(Con,R.raw.Music5,1);
                  suond6 = sou.load(Con,R.raw.Music6,1);
                  suond7 = sou.load(Con,R.raw.Music7,1);
                           }

             else{ sou = new SoundPool(10,AudioManager.STREAM_MUSIC,1);

                  suond1 = sou.load(Con,R.raw.Music1,1);
                  suond2 = sou.load(Con,R.raw.Music2,1);
                  suond3 = sou.load(Con,R.raw.Music3,1);
                  suond4 = sou.load(Con,R.raw.Music4,1);
                  suond5 = sou.load(Con,R.raw.Music5,1);
                  suond6 = sou.load(Con,R.raw.Music6,1);
                  suond7 = sou.load(Con,R.raw.Music7,1);

                 }  

                }               

    }

我还有 10 个按钮代表游戏中的关卡 在每个按钮 textview 中包含一个用于每个文本视图的动画侦听器的值 在侦听器的末尾,使用 soundpool。

valueAnimator.addListener(new Animator.AnimatorListener() {
      @Override
      public void onAnimationStart(Animator animation) {


        suond.sou.play(Suond.suond1, 1, 1, 1, 0, 1);

      }

      @Override
      public void onAnimationEnd(Animator animation) {


          Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);






      }

      @Override
      public void onAnimationCancel(Animator animation) {

      }

      @Override
      public void onAnimationRepeat(Animator animation) {

      }
    });

 valueAnimator.setDuration(2000);
 valueAnimator.start();
 }

每个按钮都有一个相互连接的监听器,当监听器播放第一个按钮时,动画分别从第二个和第三个按钮开始到第十个按钮。一切都很顺利,但是当动画到达第八个按钮时,有时是第九个或第十个按钮,声音会消失,直到活动离开并返回两到三次声音活动重新播放。 在我的猜测中,我认为声音停止是因为连续播放了几次,但是当我读到 Soundpool 时,它专门用于播放短声音,并且可以同时播放多个声音,在我的电脑中最多可以同时播放 16 个声音应用程序声音没有同时播放,而是分别播放,并且他使用的声音不超过 30 KB。 我不知道出了什么问题。 为什么连续播放几次声音就会停止播放。 我使用安卓 4.0 非常感谢你,希望能帮助我解决任何问题。

【问题讨论】:

    标签: java android android-mediaplayer soundpool android-sound


    【解决方案1】:

    (1) 你的代码中有错字,你是如何编译的?

    Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);
    suond.sou.play(Suond.suond1, 1, 1, 1, 0, 1);
    

    无论如何应该是:

    Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);
    

    (2) MaxStreams 设置为 10,因此您只能有 10 个并发流(不是 16 个):

    sou = new SoundPool.Builder().setMaxStreams(10).setAudioAttributes(aa).build();
    else{ sou = new SoundPool(10,AudioManager.STREAM_MUSIC,1);
    

    (3) 跟踪您的活动声音(Suond.sou.play 返回一个整数):

    int streamID = Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);//streamID better as an integer array
    

    (4) 离开活动后记得收拾一下(活动结束后如果不打算使用,请在onDestroy()发布):

    //loop round your active sounds
    sou .stop(streamID) ;stop ONE active sound
    sou .release();
    

    【讨论】:

    • 感谢您的回答。正如我在答案中所说,我已经创建了 streamID 每个声音,但问题仍然存在并且使用时 sou .release();恢复活动声音不响了,如果你有解决方案,希望你给我更多的澄清,非常感谢。
    • Suond.suond2 是 soundID 而不是 streamID,不同的东西。当您 onPause() 和 onResume() 您的活动时,您需要停止并重新开始。请参阅本教程:- 101apps.co.za/articles/…
    • 是的,我以前读过这个教育计划,现在读了不止一次但我无法解决问题,可能是因为我的一些术语理解有问题,母语不是英语需要更多细节。
    • 我使用 valueAnimator 中的每个监听器都是这样。int streamID = Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);并且在 onPause() 内部使用 Suond。 sou.stop(streamID); Suond.sou.release(); Suond.sou = null;并且在 onResume() 里面使用 Suondaapp.sou.resume(streamID);这样好吗?谢谢
    • 你到了那里,我知道最好的方法,但没有什么可以替代你自己尝试的东西,所以你可以学习。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2014-04-29
    • 2011-02-12
    • 1970-01-01
    • 2013-10-20
    相关资源
    最近更新 更多