20.10.2019, 21:51
|
|
Интересующийся
|
|
Регистрация: 26.05.2009
Сообщений: 12
|
|
Как проиграть рандомный отрезок аудио?
Нужно выбрать рандомное аудио из папки и затем проиграть рандомный отрезок из этого аудио (допустим, 3-5 секунд).
Каким образом это можно сделать?
Заранее спасибо!
|
|
21.10.2019, 09:52
|
|
Аспирант
|
|
Регистрация: 10.09.2019
Сообщений: 35
|
|
Допустим, в папке 10 аудиофайлов с именнами 1.mp3, 2.mp3 и т. д.
<button onclick="myplay()"> play </button>
var audio = new Audio();
function myplay(){
audio.src = Math.ceil(Math.random() * 10) + ".mp3";
audio.onloadeddata = function(){
this.currentTime = Math.random() * this.duration;
this.play();
setTimeout(function(){audio.pause()}, 3 + Math.random() * 2);
}
}
|
|
21.10.2019, 11:12
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Опан1,
таймер тут лишний, есть событие timeupdate.
|
|
21.10.2019, 12:21
|
|
Аспирант
|
|
Регистрация: 10.09.2019
Сообщений: 35
|
|
Как бы там ни было, но если ничего не предпринять, то сразу после объявления src свойство duration не успеет прочитаться из файла и выдаст NaN.
|
|
21.10.2019, 12:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Опан1
|
Как бы там ни было, но если ничего не предпринять, то сразу после объявления src свойство duration
|
Ну для этого и есть событие onloadeddata, а далее нужно обрабатывать изменение иного события. Странно другое, ведь кость может выпасть и на все, и уж коли случайно, то по идее не более T.
|
|
21.10.2019, 13:02
|
|
Аспирант
|
|
Регистрация: 10.09.2019
Сообщений: 35
|
|
Не совсем понял, о чём Вы? А перед этим ещё хотел спросить, как тут можно применить timeupdate?
...
Да, я не сразу сориентировался, но всё равно, разве удобней будет с помощью timeupdate задать рандомное время 3-5 сек, чем таймером?
Последний раз редактировалось Опан1, 21.10.2019 в 14:01.
|
|
21.10.2019, 13:51
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Опан1
|
Не совсем понял, о чём Вы?
|
Не обращать внимания, просто автоматом да не о том. )
|
|
21.10.2019, 14:26
|
|
Аспирант
|
|
Регистрация: 10.09.2019
Сообщений: 35
|
|
Ещё второй вариант я вижу - сравнивать с currentTime, который будет через 3-5 сек, тогда будет без таймера, но чем это лучше, не знаю.
|
|
21.10.2019, 14:44
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Опан1
|
тогда будет без таймера, но чем это лучше, не знаю.
|
Но а зачем он нужен, если через каждую секунду (приблизительно) у проигрывателя срабатывает событие timeupdate, в котором и нужно сравнивать текущее положение с заданным?
|
|
21.10.2019, 15:35
|
|
Аспирант
|
|
Регистрация: 10.09.2019
Сообщений: 35
|
|
Тут похоже, что оно выполняетя где-то 4 раза в секунду. Это ещё ничего, я сначала думал, что оно срабатывает чаще - с каждым новым семплом или что-то в этом роде. Вот бы грузило браузер. Фактически currentTime меняется с каждым семплом.
Последний раз редактировалось Опан1, 21.10.2019 в 15:41.
|
|
|
|