• Почему mediaRecorder работает некорректно?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Хочу ещё другой код предложить:
    <center>
    <button id="startButton"> запись </button>
    <button id="stopButton"> стоп </button><br /><br />
    <video id="preview" width="320" height="240" style="border-style: solid" autoplay muted></video>
    <video id="recording" width="320" height="240" controls hidden></video><br /><br />
    <a id="downloadButton" hidden>скачать</a>
    </center>
    <script>
    function startRecording(stream, lengthInMS) {
    	let recorder = new MediaRecorder(stream);
    	let data = [];
    	recorder.ondataavailable = event => data.push(event.data);
    	recorder.start();
    	let stopped = new Promise((resolve, reject) => {
    		recorder.onstop = resolve;
    		recorder.onerror = event => reject(event.name);
    	});
    	return Promise.all([stopped, new Promise(resolve => setTimeout(resolve, lengthInMS)).then(() => recorder.state == "съёмка" && recorder.stop())]).then(() => data);
    }
    startButton.addEventListener("click", function() {
    	navigator.mediaDevices.getUserMedia({
    		video: true,
    		audio: true
    	}).then(stream => {
    		preview.srcObject = stream;
    		preview.captureStream = preview.captureStream;
    		return new Promise(resolve => preview.onplaying = resolve);
    	}).then(() => startRecording(preview.captureStream(), 5000)).then (recordedChunks => {
    		recording.hidden = false;
    		preview.hidden = true;
    		recording.src = downloadButton.href = URL.createObjectURL(new Blob(recordedChunks, { type: "video/webm" }));
    		recording.play();
    		downloadButton.hidden = false;
    		downloadButton.download = "RecordedVideo.webm";
    	});
    }, false);
    stopButton.addEventListener("click", function() {preview.srcObject.getTracks().forEach(track => track.stop())}, false);
    recording.onended = () => recording.currentTime = 0;
    </script>

    Перематывается, воспроизводится в MPC-HC, время записи не ограничивается.
    Ответ написан
    Комментировать
  • Как сделать корректную прокрутку видео в моем длеер?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Тут такая ошибка: строку
    progress.oninput = () => currentTime = progress.value;

    следует переписать так:
    progress.oninput = () => video.currentTime = progress.value;

    И всё будет работать.
    Ответ написан
  • Как в input type='range’ сделать прокрутку видео?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Если сразу после объявления элемента видео пытаться прочитать продолжительность видео, то браузер не успевает извлечь из видеофайла эту информацию. Чтобы обойти эту ситуацию, достаточно чтение video.duration обернуть функцией onloadeddata или onloadedmetadata. Т. е., строку
    range.setAttribute('max', video.duration);
    переписать так:
    video.onloadeddata = () => range.setAttribute('max', video.duration);
    Ответ написан
    Комментировать
  • Нахождение через ссылку на песню. (их 4 но я показал вам 1 для примера)?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    files.fm - это облачное хранилище файлов, используйте обычный хостинг. Ссылка на файл должна быть типа www.mysite.com/audio/sound.mp3, то бишь полный путь должен заканчиваться на .mp3, Проверьте ещё раз хостинг, на котором плеер, обычно все (если) бесплатные хостинги поддерживают загрузку аудиофайлов не превышающих 5 мегабайт по размеру.

    Ещё если открыть меню этого файла на этом сервере files.fm и выбрать пункт Links и подпункт Direct link including full path, то там будет такая ссылка:
    https://files.fm/pa/andrejkulacenko1/audio/0.mp3
    Но к сожалению она для Вашего плеера не годится, в консоли та же ошибка.

    Ещё есть хороший вариант в этом же меню выбрать подпункт For embedding on websites, там находится ссылка для вставки на сайт музыки вместе с плеером:
    <script type="text/javascript" src="https://files.fm/embed/player?hash=vdp2sbxg3&w=100%&h=auto" id="filesfm_embed_js__vdp2sbxg3"></script>

    Работает железно. Так что если это использовать, то можно дальше двигаться по такому пути: выести на страницу один ихний плеер и при каждом обновлении страницы случайно подставлять в его код эдэнтификаторы vdp2sbxg3, jvzg6fkxz, ku6jfqz39 или sxde4aycm.
    Ответ написан
    Комментировать
  • Как сделать круговое расположение букв в словах?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    <h1 id=h1></h1>
    <script>
    let radius = 70;
    let text = "corporate*service*";
    let step = Math.PI * 2 / text.length;
    for(i = 0; i < text.length; i ++){
    	let x = radius + radius * Math.sin(i * step);
    	let y = radius + radius * Math.cos(i * step);
    	let myspan = document.createElement("span");
    	myspan.innerText = text[i];
    	myspan.style.position = "absolute";
    	myspan.style.left = x + "px";
    	myspan.style.bottom = y + "px";
    	myspan.style.transform = "rotateZ(" + i * 360 / text.length + "deg)";
    	h1.appendChild(myspan);
    }
    </script>
    Ответ написан
    Комментировать
  • Вывод контента на страницу средствами JS. Как лучше реализовать?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Целесообразно, ссылку на portfolio.html формируем так: portfolio.html?id=1&name=mytovar, а вот метод location.search устарел, в этом случае сейчас извлекают так:
    var url = new URL(location.href);
    var id = url.searchParams.get("id");
    var name = url.searchParams.get("name");
    console.log(id + ", " + name);
    Ответ написан
    Комментировать
  • Как не дублировать контент?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Добавьте ко второму HTML-коду такой JS-код:
    for(i = 0; i < 2; i ++){
    	document.querySelector('.marquee').innerText += document.querySelector('.marquee').innerText;
    }
    Ответ написан
    Комментировать
  • Как с JS узнать продолжительность видео-файла mp4?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Если пытаться прочитать продолжительность видеофайла сразу после объявления элемента видео, то браузер не успевает прочитать из файла эту информацию. Есть 4 способа это поправить. Можно обернуть функциями onloadeddata или onloadedmetadata:
    video.onloadeddata = () => alert(video.duration);
    В Вашем случае, когда нужно дёргать чем-то другим, это можно сделать кнопкой:
    <button onclick='console.log(video.duration)'> жми </button>
    Ответ написан
    Комментировать
  • Какая js-библиотека для звука с эхом и реверберацией?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Это можно сделать без библиотек с помощью WebAudio Api:
    <audio id=audio src="sound.mp3" controls></audio>
    <script>
    audio.onplay = () => {
    	let a = new AudioContext(),
    	pt = [a.createMediaElementSource(audio), a.createDelay(5.0), a.createGain(), a.destination];
    	pt[1].delayTime.setValueAtTime(0.5, a.currentTime);
    	pt[2].gain.setValueAtTime(0.7, a.currentTime);
    	for(i = 0; i < 2; i ++) for(j = 2; j < 4; j ++) pt[i].connect(pt[j]);
    	pt[2].connect(pt[1]);
    }
    </script>

    Жмите на воспроизведение и потом на паузу, чтобы ощутить эффект.
    Ответ написан
    Комментировать
  • Как посдавить несколько ссылок на 1 кнопку?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    После каждого перехода по ссылке придётся покинуть страницу, поэтому требуется сохранение текущей ссылки в куки или localStorage. В этом примере используется localStorage.
    <a id=mya href=#>Ссылка</a>
    <script>
    let linx = ['http://site.ru', 'http://mysite.ru', 'http://site.com', 'http://mysite.com', 'http://meineliebesite.ru']; // список сайтов
    if(!localStorage.getItem('siteNumber')){
    	localStorage.setItem('siteNumber', '0');
    }
    mya.href = linx[localStorage.getItem('siteNumber')];
    mya.onclick = () => {
    	let a = localStorage.getItem('siteNumber');
    	a ++;
    	if(a >= linx.length) a = 0;
    	localStorage.setItem('siteNumber', a);
    }
    </script>
    Ответ написан
    Комментировать
  • Как скопировать сайт?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    По одному общему сообщению трудно что либо сказать, нужно в консоли каждую ошибку исправлять по отдельности, обращая особое внимание на несуществующие пути к графическим и другим файлам, необъявленные переменные и функции и др.
    Ответ написан
    Комментировать
  • Как сделать функцию которая отключает/включает звук со всех видео в разных местах?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Если нужно, чтобы через один раз включался/выключался звук, то можно третью строку кода Сергея Соколова переписать так:
    if(video.muted == true){ video.muted = false } else { video.muted = true };
     // или так:
    video.muted = video.muted ? false : true;
    Ответ написан
    Комментировать
  • Как сохранить введённые input с первой страницы, чтобы они выводились на другой странице?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Для тго, чтобы передать данные с одной страницы на другую, их можно не сохранять вовсе. Допустим есть 2 HTML-файла:
    index.html:
    <input type=text id=txt /><br />
    <button onclick="location.href='result.html?'+txt.value"> отправить в result.html </button>

    result.html:
    <script>
    var result = location.search.substring(1);
    alert(result);
    </script>

    Если на странице в первом файле ввести текст и нажать на кнопку, то во втором файле алерт на странице во втором файле выведет этот текст. Взято от сюда: Передача и обработка данных в html-файле
    Ответ написан
    Комментировать