/ / Web Audio API Stream: prečo sa dataArray nemení? - html5-audio, audio-streaming, web-audio, live-streaming, audiokontext

Web Audio API Stream: prečo nie je zmena údajovArray? - html5-audio, audio streaming, web-audio, živé vysielanie, audiokontext

EDIT 2: vyriešený. Pozri odpoveď nižšie.

EDIT 1:

Zmenil som svoj kód trochu, pridal uzol zisku, presunul funkciu. Tiež som zistil, že ak použijem mikrofón, bude to fungovať. Stále nefunguje s audio vstupom usb. Akýkoľvek nápad? Toto je môj aktuálny kód:

window.AudioContext = window.AudioContext || window.webkitAudioContext;

window.onload = function(){

var audioContext = new AudioContext();
var analyser = audioContext.createAnalyser();
var gainNode = audioContext.createGain();

navigator.mediaDevices.getUserMedia({ audio:true, video:false }).then(function(stream){ //MediaStream

var source = audioContext.createMediaStreamSource(stream);
source.connect(analyser);
analyser.connect(gainNode);
gainNode.connect(audioContext.destination);

listen();

});

function listen(){

analyser.fftSize = 256;
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);
var index = 0;

function write(){
requestAnimationFrame(listen);
analyser.getByteTimeDomainData(dataArray);
$(".monitor").html(JSON.stringify(dataArray) + " -- " + (index++));
}

write();
}

}

STARÉ / ORIGINÁLNE POSTY:

môj súčasný kód je to, a ja som v súčasnosti pripojený kewboard cez USB audio rozhranie: "Mám signál, už sa snažil s inými programami .. Takže:

window.AudioContext = window.AudioContext || window.webkitAudioContext;

window.onload = function(){

var audioContext = new AudioContext();
var analyser = audioContext.createAnalyser();

navigator.mediaDevices.getUserMedia({ audio:true, video:false }).then(function(stream){ //MediaStream

var source = audioContext.createMediaStreamSource(stream);
source.connect(analyser);
analyser.connect(audioContext.destination);

analyser.fftSize = 2048;
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);

function listen(){
requestAnimationFrame(listen);
analyser.getByteTimeDomainData(dataArray);
$(".monitor").html(JSON.stringify(dataArray));
}

listen();

});
}

Kým ja hrám klávesnicu, dataArray sa vôbec nemení. Prečo? "V tejto veci som nová, takže pravdepodobne robím niečo zlé ...

odpovede:

0 pre odpoveď č. 1

Ok teraz to funguje. Môj základný testovací kód je nasledujúci. Html nemá nič iné ako div.monitor, ktorý má napísať. V súčasnej dobe testovanie na firefox. Môj hardvér je klávesnica> mixer> behringer UCA222> počítač (usb). Dostávam dáta pri hraní na klávesnicu a ja som teraz šťastný.

Existuje niekoľko rozdielov oproti pôvodnému kódu, ale myslím si, že najdôležitejšie je, aby som "uložil zdroj médií globálne (window.audiosource). Existujú aj ďalšie príspevky týkajúce sa súvisiaceho problému, napríklad: Chrome: onaudioproces prestane byť po chvíli volaný a to HTML5 Nahrávanie mikrofónu sa zastaví po 5 sekundách vo Firefoxe.

window.AudioContext = window.AudioContext || window.webkitAudioContext;

navigator.getUserMedia = (navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);

var audioContext = new (window.AudioContext || window.webkitAudioContext)();
var analyser = audioContext.createAnalyser();

if(navigator.getUserMedia){
navigator.getUserMedia(
{ audio: true }
,function(stream){
window.audiosource = audioContext.createMediaStreamSource(stream);
audiosource.connect(analyser);
listen();
}
,function(err){ console.log("The following gUM error occured: " + err); }
);
}

function listen(){
requestAnimationFrame(listen);

analyser.fftSize = 256;
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);
analyser.getByteTimeDomainData(dataArray);
$(".monitor").html(JSON.stringify(dataArray));
}