здравствуйте еще раз.
вопрос поповоду примера снят.
я попробовал, но ксожалению, это тоже не тот эффект, когда мы без ajax даем
объекту audio source ввиде ссылки с стримом и он начинает играть, как только
поступит какая-та часть в буффер.
тутже пока аджакс полностью не загрузит файл, он играть не начинает.
хотя может быть я что-то делаю не так.
вот мой код в качестве примера что я делаю.
var audio = document.createElement('audio');
var form = document.getElementById("form_sound");
form.addEventListener("submit", e => {
e.preventDefault();
var fd = new FormData(form);
var xhr = new XMLHttpRequest();
var audioCtx = new AudioContext();
source = audioCtx.createBufferSource();
var scriptNode = audioCtx.createScriptProcessor(1024, 1, 1);
xhr.addEventListener("load", e => {
var audioData = xhr.response;
audioCtx.decodeAudioData(audioData, function(buffer) {
myBuffer = buffer;
source.buffer = myBuffer;
},
function(e){"Error with decoding audio data" + e.err});
});
xhr.addEventListener("error", e => {
console.log(e);
});
xhr.open("POST", '/');
xhr.responseType = 'arraybuffer';
xhr.send(fd);
scriptNode.onaudioprocess = function(audioProcessingEvent) {
var inputBuffer = audioProcessingEvent.inputBuffer;
var outputBuffer = audioProcessingEvent.outputBuffer;
for (var channel = 0; channel < outputBuffer.numberOfChannels; channel++) {
var inputData = inputBuffer.getChannelData(channel);
var outputData = outputBuffer.getChannelData(channel);
for (var sample = 0; sample < inputBuffer.length; sample++) {
outputData[sample] = inputData[sample];
}
}
}
source.connect(scriptNode);
scriptNode.connect(audioCtx.destination);
source.start();
source.onended = function() {
source.disconnect(scriptNode);
scriptNode.disconnect(audioCtx.destination);
}
});