Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.10.2019, 21:51
Аватар для VeliaR
Интересующийся
Отправить личное сообщение для VeliaR Посмотреть профиль Найти все сообщения от VeliaR
 
Регистрация: 26.05.2009
Сообщений: 12

Как проиграть рандомный отрезок аудио?
Нужно выбрать рандомное аудио из папки и затем проиграть рандомный отрезок из этого аудио (допустим, 3-5 секунд).
Каким образом это можно сделать?
Заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 21.10.2019, 09:52
Аватар для Опан1
Аспирант
Отправить личное сообщение для Опан1 Посмотреть профиль Найти все сообщения от Опан1
 
Регистрация: 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);
	}
}
Ответить с цитированием
  #3 (permalink)  
Старый 21.10.2019, 11:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Опан1,
таймер тут лишний, есть событие timeupdate.
Ответить с цитированием
  #4 (permalink)  
Старый 21.10.2019, 12:21
Аватар для Опан1
Аспирант
Отправить личное сообщение для Опан1 Посмотреть профиль Найти все сообщения от Опан1
 
Регистрация: 10.09.2019
Сообщений: 35

Как бы там ни было, но если ничего не предпринять, то сразу после объявления src свойство duration не успеет прочитаться из файла и выдаст NaN.
Ответить с цитированием
  #5 (permalink)  
Старый 21.10.2019, 12:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Опан1
Как бы там ни было, но если ничего не предпринять, то сразу после объявления src свойство duration
Ну для этого и есть событие onloadeddata, а далее нужно обрабатывать изменение иного события. Странно другое, ведь кость может выпасть и на все, и уж коли случайно, то по идее не более T.
Ответить с цитированием
  #6 (permalink)  
Старый 21.10.2019, 13:02
Аватар для Опан1
Аспирант
Отправить личное сообщение для Опан1 Посмотреть профиль Найти все сообщения от Опан1
 
Регистрация: 10.09.2019
Сообщений: 35

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

Последний раз редактировалось Опан1, 21.10.2019 в 14:01.
Ответить с цитированием
  #7 (permalink)  
Старый 21.10.2019, 13:51
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Опан1
Не совсем понял, о чём Вы?
Не обращать внимания, просто автоматом да не о том. )
Ответить с цитированием
  #8 (permalink)  
Старый 21.10.2019, 14:26
Аватар для Опан1
Аспирант
Отправить личное сообщение для Опан1 Посмотреть профиль Найти все сообщения от Опан1
 
Регистрация: 10.09.2019
Сообщений: 35

Ещё второй вариант я вижу - сравнивать с currentTime, который будет через 3-5 сек, тогда будет без таймера, но чем это лучше, не знаю.
Ответить с цитированием
  #9 (permalink)  
Старый 21.10.2019, 14:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Опан1
тогда будет без таймера, но чем это лучше, не знаю.
Но а зачем он нужен, если через каждую секунду (приблизительно) у проигрывателя срабатывает событие timeupdate, в котором и нужно сравнивать текущее положение с заданным?
Ответить с цитированием
  #10 (permalink)  
Старый 21.10.2019, 15:35
Аватар для Опан1
Аспирант
Отправить личное сообщение для Опан1 Посмотреть профиль Найти все сообщения от Опан1
 
Регистрация: 10.09.2019
Сообщений: 35

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

Последний раз редактировалось Опан1, 21.10.2019 в 15:41.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как организовать RichEdit arma Элементы интерфейса 2 18.02.2010 14:57
О наследовании событий, или как корректно его отменить. JCShen Events/DOM/Window 8 09.02.2010 00:00
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20