Tworzę aplikację, która będzie miała wiele obrazów na ekranie, obrazy te będą przyciskami, a po stuknięciu będą odtwarzać krótki dźwięk. Zbadałem to i mogłem znaleźć tylko obecną metodę, której używam do odtwarzania dźwięków, która w ogóle nie reaguje. Chcę, żeby dźwięk grał szybko i reagował na wiele szybkich kranów. Nie byłem pewien, czy było to możliwe w Androidzie.Prawidłowy sposób odtwarzania krótkich dźwięków Androida?
Kod używam grać mój dźwięk jest taka:
Button sound1;
MediaPlayer firstSound;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
firstSound = MediaPlayer.create(SoundActivity.this, R.raw.click);
sound1 = (Button) findViewById(R.id.Sound1);
beaver.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
firstSound.start();
}
});
}
Moja lag problem może także być może w dół do drogi Używam obiekt odtwarzacza multimedialnego? Uważam, że powinno to być bardziej płynne w moim telefonie, wszelkie sugestie dotyczące tego, jak odtwarzać dźwięki w systemie Android, są doceniane.
Dzięki.
Od odkrycia dźwięku Pool, mam edytowane mój kod do korzystania z tego i działa idealnie, nowy kod wygląda następująco:
SoundPool soundPool;
HashMap<Integer, Integer> soundPoolMap;
int soundID = 1;
Button sound1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(soundID, soundPool.load(this, R.raw.click, 1));
sound1 = (Button) findViewById(R.id.bBeaver);
sound1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
float curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float leftVolume = curVolume/maxVolume;
float rightVolume = curVolume/maxVolume;
int priority = 1;
int no_loop = 0;
float normal_playback_rate = 1f;
soundPool.play(soundID, leftVolume, rightVolume, priority, no_loop, normal_playback_rate);
}
});
}
Dzięki
Wygląda na to, że nie używasz soundPoolMap? – Moberg
Uwielbiam sposób w jaki zaimplementowałeś, zadziałał od razu – desgraci
Dziękuję bardzo. Działa świetnie ...! –