Cupcake (API3) дружественный способ приостановить / остановить звуковые петли в SoundPool?Есть идеи? - PullRequest
1 голос
/ 29 августа 2010

Краткое примечание: я использую класс SoundPool

http://developer.android.com/reference/android/media/SoundPool.html

У меня есть простая кнопка, которая воспроизводит зацикленный звук, пока она нажата. Работает отлично. Тем не менее, sounds.autoPause(); не было введено до API 8, и мне действительно нужно что-то совместимое с Cupcake (API 3). Так что я просматривал ссылочный сайт dev, отфильтрованный по API 3, и увидел паузу, так что я решил попробовать sounds.pause(sound); но он не останавливает звук, когда я его выпускаю. (Может быть, я просто неправильно его использую?) Кто-нибудь знает, как кекс дружественный способ остановить этот звук? спасибо!

edit: также пробовал sounds.stop(sound);, который тоже не работал.

Код:

My onCreate:

sounds = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
sound = sounds.load(this.getApplicationContext(), R.raw.red_long_one, 1);

Тогда вот мое сенсорное событие

@Override public boolean onTouch(View arg0, MotionEvent event) {

            switch (event.getAction() ) { 
            case MotionEvent.ACTION_DOWN: 
                System.out.println("touch");
                sounds.play(sound, 1, 1, 1, -1, 1);
                break;
            case MotionEvent.ACTION_UP:
                System.out.println("up");
                //autoPause does not work on anything lower than sdk8
                sounds.autoPause();
                break; 
            }

            return false;
        }

Я не понимаю, почему sounds.stop(sound);, кажется, не работает, кажется, но какую-нибудь статью, которую я читаю, рекомендует делать

Думаю, стоит отметить, что если я использую sounds.stop(sound);, он работает ОДИН раз, после чего он не остановится после того, как я отпущу. но при первом нажатии и отпускании он работает как задумано.

Теперь я знаю, что на сайте andoird написано streamID, а не soundID, но я понятия не имею, как получить streamID

1 Ответ

1 голос
/ 04 ноября 2010

вам нужно использовать streamID, чтобы остановить звук. streamID возвращается play ():

что-то в этом роде:

// запись при воспроизведении звука streamIDSoundFX = soundPool.play (soundFXPoolMap.get (ctSoundFX), streamVolume, streamVolume, 1, 0, 1f);

// остановим, когда вам нужно soundPool.stop (streamIDSoundFX);

...