2013-06-04 1 views
4

Я не могу понять это правильно. Итак, я делаю простой скрипт, который сообщает текущее время. audiocontainer - это аудио-элемент, а функция 0: mp3play() была предварительно решена. Идея состоит в том, чтобы сделать это:Воспроизведение двух файлов в строке в JavaScript

[play hourXX.mp3] -> когда заканчивается -> [play minutesXX.mp3] -> удалить слушатель, поэтому остановка.

  • Проблема заключается в том:

Без функция removeEventListener(), то minuteXX.mp3 петли до бесконечности ("Это 12 и 54 минут ... 54 минут ... 54 минут .. .), потому что он держит запуска слушателя в конце.

с removeEventListener() Функция аудио не запускается вообще. у вас есть какие-либо идеи, почему?

Или, может быть, есть ли более простой способ играть 2 mp3 подряд?

function telltime() { 
var d = new Date(); 
var h = d.getHours(); 
var m = d.getMinutes(); 

audiocontainer.addEventListener('ended', function() { 
mp3play('./time/minutes/minute'+m.toString()+'.mp3'); 

audiocontainer.removeEventListener('ended', function(), false); // stop! 

}, true); 

mp3play('./time/hours/hour'+h.toString()+'.mp3'); 

} 
+0

В этой строке есть синтаксическая ошибка. Вот почему. 'function()' не имеет ничего другого (и на самом деле не имеет смысла) – Roman

+0

Только для записи, вот моя логика (может быть, кто-то узнает из-за ошибки): Из того, что я знал, если бы вы хотели чтобы уничтожить EventListener, вам нужно было сослаться на него так же, как он был создан. Поэтому мне нужно было указать имя функции внутри removeEventListener. Поскольку я создал Listener с вложенной безымянной функцией (которая работала без проблем), я подумал, что буду ссылаться на нее только с помощью той же «name» - function(). – darekm

ответ

8

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

Как играть несколько mp3 файлов в строке

включать это в вашем контексте:

var Mp3Queue = function(container, files) { 
    var index = 1; 
    if(!container || !container.tagName || container.tagName !== 'AUDIO')throw 'Invalid container'; 
    if(!files || !files.length)throw 'Invalid files array';   

    var playNext = function() { 
     if(index < files.length) { 
      container.src = files[index]; 
      index += 1; 
     } else { 
      container.removeEventListener('ended', playNext, false); 
     } 
    }; 

    container.addEventListener('ended', playNext); 

    container.src = files[0]; 
}; 

использовать его как это:

//whatever is your audio element 
var container = document.getElementById('container'); 

//play files in a row 
new Mp3Queue(container, [ 
    'http://incompetech.com/music/royalty-free/mp3-royaltyfree/Sweeter%20Vermouth.mp3', 
    'http://incompetech.com/music/royalty-free/mp3-royaltyfree/Happy%20Boy%20Theme.mp3' 
]); 

здесь работает пример: http://jsfiddle.net/fYjLx/

В вашем конкретном случае это будет:

function telltime() { 
    var d = new Date(); 
    var h = d.getHours(); 
    var m = d.getMinutes(); 

    new Mp3Queue(container, [ 
     './time/hours/hour'+h.toString()+'.mp3', 
     './time/minutes/minute'+m.toString()+'.mp3' 
    ]); 
} 
+0

Ничего себе, спасибо. Поговорите о полезном ответе! Я проанализирую все это, чтобы понять, как это работает. – darekm

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

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