2013-04-15 4 views
1

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

Вот код:

var index = 0; 
var i = 0; 

// Filename 
var wordSoundArray = []; 

wordSoundArray.push('audio/the.mp3'); 
wordSoundArray.push('audio/of.mp3'); 
wordSoundArray.push('audio/and.mp3'); 
wordSoundArray.push('audio/a.mp3'); 
wordSoundArray.push('audio/to.mp3'); 
wordSoundArray.push('audio/in.mp3'); 
wordSoundArray.push('audio/is.mp3'); 
wordSoundArray.push('audio/you.mp3'); 
wordSoundArray.push('audio/that.mp3'); 
wordSoundArray.push('audio/it.mp3'); 
wordSoundArray.push('audio/he.mp3'); 
wordSoundArray.push('audio/was.mp3'); 
wordSoundArray.push('audio/for.mp3'); 
wordSoundArray.push('audio/on.mp3'); 
wordSoundArray.push('audio/are.mp3'); 

newWordBtn.addEventListener("click", function(e){ 
    wordLabel.text = newWordArray[i++]; 
    if (i === newWordArray.length) 
      i = 0; 

    var snd = Titanium.Media.createSound({url:wordSoundArray[index++]}); 
    if (index === wordSoundArray.length) 
      index = 0; 
    if (snd.isPlaying()) { 
     snd.stop(); 
     snd.play(); 
    } else { 
     snd.play(); 
    } 


}); 

Когда пользователь нажимает на кнопку, они получают новое слово и звук, который идет с этим словом. Однако, если пользователь нажимает кнопку до завершения звука, он просто запускает новый звук, и они перекрывают друг друга. Вот где входит snd.isPlaying часть кода кода. Я почти уверен, что моя ошибка там.

+0

код кажется неполным, где переменная 'i' исходит? Это в цикле? –

+0

Я обновил код для включения операторов переменных и массива, с которым у меня возникла проблема. –

ответ

1

Так что вы на самом деле есть мертвый код здесь:

var snd = Titanium.Media.createSound({url:wordSoundArray[index++]})); 
... 
// You just created the sound, so it will never be playing right off the bat 
if (snd.isPlaying()) { 
    // This will never be called 
    snd.stop(); 
    snd.play(); 
} else { 
    // This will happen every time the user clicks the button 
    snd.play(); 
} 

Я думаю, что это хорошая практика, чтобы предварительно загрузить все ваши звуковые активы, прежде чем приступить к исполнению, поэтому, возможно, попробуйте заменить свой wordSoundArray с записями вида:

wordSoundArray.push(Titanium.Media.createSound({url:'audio/the.mp3'}); 

После того, как вы сделали это (все наши звуковые активы поджаты, это будет хорошо для памяти тоже), мы можем изменить слушатель что-то вроде этого:

newWordBtn.addEventListener("click", function(e){ 
    wordLabel.text = newWordArray[i++]; 
    if (i === newWordArray.length) 
      i = 0; 

    // Instead of creating the sound, just fetch it! 
    var snd = wordSoundArray[index++]; 

    if (index === wordSoundArray.length) 
      index = 0; 
    // Now this will work, but maybe you want to make sure all the sounds are off instead? 
    if (snd.isPlaying()) { 
     snd.stop(); 
     snd.play(); 
    } else { 
     snd.play(); 
    } 
}); 

Глядя на ваш код, хотя, кажется, что Вы хотите, чтобы остановить предыдущую воспроизведение звука, а затем начать следующий, так что вам нужно будет изменить слушателя к этому:

newWordBtn.addEventListener("click", function(e){ 
    wordLabel.text = newWordArray[i++]; 
    if (i === newWordArray.length) 
      i = 0; 
    // Stop the last sound from playing 
    if(index > 0) { 
      var lastSound = wordSoundArray[index-1]; 
      lastSound.stop(); 
    } 

    // Instead of creating the sound, just fetch it! 
    var nextSound = wordSoundArray[index++]; 

    if (index === wordSoundArray.length) 
      index = 0; 
    // Play the next sound 
    nextSound.play(); 
}); 
+0

Спасибо, спасибо, спасибо! Я работаю над этим весь день. Я просматривал все, но только части помогали здесь и там. Узнал еще больше, хотя. :) –

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