Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как проиграть рандомный отрезок аудио? (https://javascript.ru/forum/misc/78688-kak-proigrat-randomnyjj-otrezok-audio.html)

VeliaR 20.10.2019 21:51

Как проиграть рандомный отрезок аудио?
 
Нужно выбрать рандомное аудио из папки и затем проиграть рандомный отрезок из этого аудио (допустим, 3-5 секунд).
Каким образом это можно сделать?
Заранее спасибо!

Опан1 21.10.2019 09:52

Допустим, в папке 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);
	}
}

laimas 21.10.2019 11:12

Опан1,
таймер тут лишний, есть событие timeupdate.

Опан1 21.10.2019 12:21

Как бы там ни было, но если ничего не предпринять, то сразу после объявления src свойство duration не успеет прочитаться из файла и выдаст NaN.

laimas 21.10.2019 12:30

Цитата:

Сообщение от Опан1
Как бы там ни было, но если ничего не предпринять, то сразу после объявления src свойство duration

Ну для этого и есть событие onloadeddata, а далее нужно обрабатывать изменение иного события. Странно другое, ведь кость может выпасть и на все, и уж коли случайно, то по идее не более T.

Опан1 21.10.2019 13:02

Не совсем понял, о чём Вы? А перед этим ещё хотел спросить, как тут можно применить timeupdate?
...
Да, я не сразу сориентировался, но всё равно, разве удобней будет с помощью timeupdate задать рандомное время 3-5 сек, чем таймером?

laimas 21.10.2019 13:51

Цитата:

Сообщение от Опан1
Не совсем понял, о чём Вы?

Не обращать внимания, просто автоматом да не о том. )

Опан1 21.10.2019 14:26

Ещё второй вариант я вижу - сравнивать с currentTime, который будет через 3-5 сек, тогда будет без таймера, но чем это лучше, не знаю.

laimas 21.10.2019 14:44

Цитата:

Сообщение от Опан1
тогда будет без таймера, но чем это лучше, не знаю.

Но а зачем он нужен, если через каждую секунду (приблизительно) у проигрывателя срабатывает событие timeupdate, в котором и нужно сравнивать текущее положение с заданным?

Опан1 21.10.2019 15:35

Тут похоже, что оно выполняетя где-то 4 раза в секунду. Это ещё ничего, я сначала думал, что оно срабатывает чаще - с каждым новым семплом или что-то в этом роде. Вот бы грузило браузер. Фактически currentTime меняется с каждым семплом.


Часовой пояс GMT +3, время: 20:19.