2013-06-02 4 views
1

У меня есть звук, загруженный в метод onCreateResources.Звук Andengine работает только иногда

try { 
    shield = MusicFactory.createMusicFromAsset(this.getMusicManager(), this, "shield.ogg"); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

shield.setVolume(1.0f); 
shield.setLooping(true); 

Когда я воспроизводить звук в первый раз, он прекрасно работает, однако, следующее время я играть это кажется случайным, если он работает или нет.

Я использую shield.play(); для воспроизведения звука и shield.stop();, чтобы остановить его снова. Когда он не работает, я получаю следующее в журнале.

AudioFlinger не смог создать трек, статус: -12

Ошибка создания аудиодорожки

+0

Если установить зацикливание ложь, то он играет каждый раз. – Flexo

ответ

0

Вы не используете MusicFactory для звуковых эффектов. Это строго для музыки.
Предполагается использовать SoundFactory.

Вот пример:

Sound sound = SoundFactory.createSoundFromAsset(getSoundManager(), this, "sound.wav"); 
+0

У меня создалось впечатление, что MusicFactory сделал то же самое, что и SoundFactory. Это просто позволило звучать более 5 секунд. В любом случае, это дало мне тот же результат. Я все еще получаю случайные ошибки, когда звук не воспроизводится – Flexo

2

Использование музыки при воспроизведении фоновой музыки, она будет контролировать долго играть, повторить .. Использование звука при воспроизведении короткий звук, например, при нажатии кнопки, или shoot..etc Здесь мой же код, используя оба из них:

public static void controlBgAudio(boolean play, boolean repeat) { 
    Music ms = ResourceManager.getInstance().audioBgMusic; 
    if (play) { 
     if (ms.isReleased()) { 
      ms.resume(); 
     } else { 
      ms.play(); 
     } 
    } else { 
     if (ms.isPlaying()) { 
      ms.pause(); 
     } else { 
      ms.stop(); 
     } 
    } 

    if (repeat) { 
     ms.setLooping(true); 
    } else { 
     ms.setLooping(false); 
    } 
} 

public static void controlShootAudio(boolean play, boolean repeat) { 
    Sound ms = ResourceManager.getInstance().audioShoot; 
    if (play) { 
     if (ms.isReleased()) { 
      ms.resume(); 
     } else { 
      ms.play(); 
     } 
    } else { 
     if (ms.isLoaded()) { 
      ms.pause(); 
     } else { 
      ms.stop(); 
     } 
    } 

    if (repeat) { 
     ms.setLooping(true); 
    } else { 
     ms.setLooping(false); 
    } 
} 
Смежные вопросы