/ / титановий звук запуску та зупинки - javascript, titanium, titanium-mobile

титановий старт і зупинка звуку - javascript, титан, титан-мобільний

У мене це працює в Javascript, але, здається, не можна працювати над Titanium.

Ось код:

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. Я майже впевнений, що моя помилка там.

Відповіді:

1 для відповіді № 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();
});