2015-10-29 3 views
0
public class AndroidSound implements Sound { 
int soundId; 
SoundPool soundPool; 

public AndroidSound(SoundPool soundPool, int soundId) { 
    this.soundId = soundId; 
    this.soundPool = soundPool; 
} 

@Override 
public void play(float volume) { 
    soundPool.play(soundId, volume, volume, 0, 0, 1); 
} 

@Override 
public void dispose() { 
    soundPool.unload(soundId); 
}} 





public class Assets{ 

public Music theme; 
public static Sound sound; 

public static void load(Game game) { 
     theme = game.getAudio().createMusic("theme.mp3"); 
     theme.setLooping(true); 
     theme.setVolume(0.85f); 
     theme.play(); 

     sound = game.getAudio().createSound("death.wav"); 
    } 
} 

Затем я воспроизвожу этот звук в разных классах, вызывая игру() на нем, но он играет с действительно огромной задержкой, что-то около 500 мс. Почему это? Я попытался найти решение, но есть много людей с этой проблемой, и я не нашел ответа, который действительно сработал. Большинство тем было немного старым, возможно, для этого уже есть простое решение, рассчитывающее на вашу помощь.Задержка звука Android при использовании SoundPool

public class AndroidAudio implements Audio { 
 
    AssetManager assets; 
 
    SoundPool soundPool; 
 

 
    public AndroidAudio(Activity activity) { 
 
     activity.setVolumeControlStream(AudioManager.STREAM_MUSIC); 
 
     this.assets = activity.getAssets(); 
 
     this.soundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0); 
 
    } 
 

 
    @Override 
 
    public Sound createSound(String filename) { 
 
     try { 
 
      AssetFileDescriptor assetDescriptor = assets.openFd(filename); 
 
      int soundId = soundPool.load(assetDescriptor, 0); 
 
      return new AndroidSound(soundPool, soundId); 
 
     } catch (IOException e) { 
 
      throw new RuntimeException("Couldn't load sound '" + filename + "'"); 
 
     } 
 
    } 
 
}

+0

как вы создаете 'AndroidSound' экземпляра объекта? – pskink

+0

Почему он играет с задержкой? Я так расстроен этим, не могу найти никаких хороших решений. Должен ли я использовать что-то другое, кроме SoundPool? Или есть ли вероятность, что это мои устройства? (У меня нет возможности проверить какой-либо другой) – Shadov

+0

, поэтому вы вызываете 'play' внутри' onLoadComplete (SoundPool soundPool, int sampleId, int status) 'метод и после того, как вы вызываете' play', вы замечаете задержку в полсекунды? – pskink

ответ

0

Я не знаю, если это будет полезно в настоящее время, но и отвечать.

Использование Soundpool

1) Сначала загрузите аудио в соответствии с требованиями уровней в начале применения initialization.Suppose вам нужно 5 звук на уровне загрузки их в начале и сохранить soundID Это удобно.

2) Теперь в любом случае просто вызовите игру с помощью soundID.

3) Это играет с очень малой задержкой, пока я отлаживаю игру SoundPool до уровня HAL. Около 10-15 мс на моем устройстве.

Для получения дополнительной информации о реализации Soundpool следовать моему GitHub нити: https://github.com/sauravpradhan/Basic-Audio-Routing

 Смежные вопросы

  • Нет связанных вопросов^_^