Звуки SoundPool не меняются

У меня есть объект звукового пула и несколько звуков, но после создания я все равно не могу изменить воспроизведение звуков, например, количество циклов, громкость, остановку и т. Д.

Код декларации:

public SoundPool sounds;
public HashMap<Integer, Integer> soundmap = new HashMap<Integer, Integer>();
static final public int UFO=3;
static final public int PlayerDeath=3;
static final public int InvaderDeath=2;
static final public int PlayerFire=1;

Код назначения звука:

sounds = new SoundPool(10,AudioManager.STREAM_MUSIC,0);
soundmap.put(PlayerDeath,sounds.load(getContext(), R.raw.explosion, 1));
soundmap.put(InvaderDeath,sounds.load(getContext(), R.raw.invaderkilled, 1));
soundmap.put(PlayerFire,sounds.load(getContext(),R.raw.shoot, 1));
soundmap.put(UFO,sounds.load(getContext(),R.raw.ufo, 1));

Старт/стоп код:

public void PlayUFOMusic()
{
    sounds.play(soundmap.get(UFO),0.8F,0.8F,1,2000,1);      
}

public void StopUFOMusic()
{
     sounds.stop(soundmap.get(UFO));
}

Я знаю, что эти функции вызываются, но в любом случае ничто не заставит их измениться. Я также пробовал setLoop, setVolume, pause и unload, но ничего из этого не сработало.

Любые идеи?


person Ray Britton    schedule 29.08.2010    source источник


Ответы (1)


Вот синтаксис play():

public final int  play  (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

Так не должно быть:

 sounds.play(soundmap.get(UFO),0.8F,0.8F,1,-1, 1);

сделать звуковой цикл навсегда?

Изменить: прочитайте вопрос слишком быстро, но если вы используете эту функцию воспроизведения, она зацикливается?

person softarn    schedule 29.08.2010
comment
Ах, извините, изначально это было -1, но я изменил на 2000, чтобы увидеть, не было ли проблемой вечный цикл. Зацикливается, это не проблема. - person Ray Britton; 30.08.2010
comment
Значит проблема в том, что нельзя менять звуки ВО ВРЕМЯ воспроизведения? Если это так, вы не сохраняете ссылку на streamID, возвращаемый функцией play(). Это идентификатор, для которого вы запускаете setLoop() и другие методы. Если это не поможет вам, пожалуйста, объясните свою проблему лучше. - person softarn; 30.08.2010
comment
Ах, спасибо, я думал, что идентификатор, возвращаемый load, использовался для управления им, но задним числом понял, что это явно не сработает. - person Ray Britton; 30.08.2010
comment
Это soundID, он просто необходим для воспроизведения. Не забудьте отметить этот ответ как правильный и удачи с НЛО! - person softarn; 30.08.2010