Можно ли получить данные из постоянно обновляемого файла?

Здравствуйте! Смотрите, есть файл, например, вот этот - "nashe1.hostingradio.ru/ultra-128.mp3". Как вы могли понять, это интернет-радио - т.е, этот файл "динамический". Так вот, можно ли как-то получить его бинарные данные? Задача состоит в том, что мне необходимо получить его данные и обработать их при помощи WebAudioAPI - получить "arraybuffer" и выполнить "decodeAudioData", а дальше уже воспроизвести этот файл. Я умею работать, со статическими аудио-файлами, а вот с такими - нет. Если попытаться получить данные этого, файла - они "загружаются" постоянно и без конечного результата, т.е - бесконечная и безрезультатная загрузка. Возможно ли реализовать получение этих данных в реальном времени на JS или на PHP? Как бы понятнее это объяснить:
1) Пользователь заходит на страницу и нажимает, допустим, кнопку "Play"
2) Происходит запрос к "nashe1.hostingradio.ru/ultra-128.mp3", сервер получает данные от этого источника и возвращает их назад(ajax) на страницу
3) JS получает эти данные(arraybuffer) и отправляет их в WebAudioAPI, который обрабатывает их(decodeAudioData), получает "getByteFrequencyData" и уже потом воспроизводит этот файл.

У меня всё сделано уже - получение "getByteFrequencyData" и воспроизведение файла, но только это только для "завершенных" файлов - статических. Я надеюсь, что всё понятно объяснил. Буду очень признателен за ваши советы! Спасибо!

*nashe1.hostingradio.ru/ultra-128.mp3 - для примера. У меня есть аудио-поток на моем сервере.
Опишу полностью то, для чего мне это нужно - визуализации интернет-радио при помощи three.js. Всё сделано и работает, как надо. Однако только со статикой, с потоком другая история, в которой я не могу разобраться - поэтому и написал сюда от безысходности.
  • Вопрос задан
  • 430 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Можно не заморачиваться с низким уровнем, использовать <audio> и createAnalyser

Демо: https://codepen.io/anon/pen/zZqqrW (пришлось подправить чуток)
Оригинал (не работающий): https://codepen.io/AfroDev/pen/MYOrvP

В сети десятки визуализаторов, если что.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@MMMYIWW Автор вопроса
Для тех, кому нужно решение:
var context = new (window.AudioContext || window.webkitAudioContext)();
var analyser = context.createAnalyser();
var audio  = document.querySelector('audio'); //Ваш аудио-элемент
var source = context.createMediaElementSource(audio);
source.connect(analyser);
source.connect(context.destination);
analyser.fftSize = 512;
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);
// 
var update = function(){
	analyser.getByteFrequencyData(dataArray);
  	boost = 0;
   	for(var i = 0; i < bufferLength; i++){
    	     boost += dataArray[i];
  	}
  	boost = boost / dataArray.length;
  	return boost; //boost, нужный мне для визуализации в three.js
};
update(); //Вызывайте update с нужным вам интервалом, при помощи SetInterval().

Дальше уже я принимаю значение "boost" в three.js и взаимодействую с ним.
Stalker_RED, спасибо за ссылку на createAnalyser
Ответ написан
Комментировать
Cyl
@Cyl
HW Инженер
Пока РФ не заблокировала https://www.linkedin.com/ можно и даже нужно ;)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы