경우,이 작업을 수행하는 가장 쉬운 방법은 핸들러입니다.
기본적으로 비동기 프로세스 인 사운드 재생을 시작합니다. 그런 다음 핸들러를 사용하여 앞으로 언젠가는 다음 사운드를 재생하도록 메시지를 예약합니다. 시행 착오를 거쳐야 정상적으로 작동하지만, 모든 장치에서 이전 사운드가 출력 된 후 동일한 간격으로 사운드가 시작됩니다.
여기 내가 설명하는 것을 설명하는 코드가 있습니다.
private void playNextSound() {
if (mRunning) {
// Get the first item
SoundSequenceItem item = currentSequence.getNextSequenceItem();
if (item == null) {
Message msg = handler.obtainMessage(SEQUENCE_COMPLETE_MSG);
handler.sendMessage(msg);
return;
}
// Play the sound
int iSoundResId = item.getSoundResId();
if (iSoundResId != -1) {
player.playSoundNow(soundResId);
}
// schedule a message to advance to next item after duration
Message msg = handler.obtainMessage(NEXT_ITEM_MSG);
handler.sendMessageDelayed(msg, item.getDuration());
}
}
하고 SoundSequenceItem 그냥 사운드 파일 자원을 가진 간단한 클래스가 될 수 :
handler = new Handler() {
/* (non-Javadoc)
* @see android.os.Handler#handleMessage(android.os.Message)
*/
@Override
public void handleMessage(Message msg) {
if (msg.what == NEXT_ITEM_MSG) {
playNextSound();
}
else if (msg.what == SEQUENCE_COMPLETE_MSG) {
// notify a listener
listener.onSoundComplete()
}
}
};
그런 다음이 같은 playNextSound를 작성할 수 : 여기
당신이 사용할 수있는 핸들러 구현 이드와 기간.
public void onSoundComplete() {
if (character.isRunning()) {
currentSequence.addSequenceItem(new SoundSequenceItem(R.id.footsteps,500);
playNextSound();
}
}
을 또는 당신은 계속 같은 소리를 재생하는 playNextSound을 수정할 수 있습니다 : 당신이 소리를 계속 연주 할 경우 문자는이 같은 일을 할 수있는 이동된다. 광산은 다른 소리를 순차적으로 연주 할 수 있도록이 방법으로 작성되었습니다.
해결책을 찾았습니까? 그렇다면 공유하십시오! – lelloman
질문을 +1하면 어쩌면 더 많은 사람들이 그것에주의를 기울일 것입니다 ... –
두 번 이상 upvote 수 없습니다 – lelloman