/ API на Web Audio API: защо dataArray не се променя? - html5-аудио, аудио-стрийминг, уеб-аудио, живо предаване, аудиоконтекст

Изходен поток от API за уеб аудио: защо не се променя dataArray? - html5-аудио, аудио-стрийминг, уеб-аудио, стрийминг на живо, аудиоконтекст

EDIT 2: решен. Вижте отговора по-долу.

EDIT 1:

Промених кода си малко, добавих възел за печалба, преместих функция. Аз също открих, че ако използвам микрофона, той ще работи. Все още не работи с usb аудио вход. Някаква идея? Това е настоящият ми код:

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();
}

}

OLD / ORIGINAL POST:

сегашният ми код е този и в момента свързвам kewboard чрез USB аудио интерфейс: Имам сигнал, вече опитах с други програми.

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();

});
}

Докато играя клавиатурата, dataArray не се променя. Защо? Аз съм нов в това, така че вероятно правя нещо нередно ...

Отговори:

0 за отговор № 1

Добре, сега работи. Моят основен текущ тестов код е следният. Html няма нищо друго освен div.monitor да пише отвътре. В момента тествате на firefox. Моят хардуер е клавиатура> миксер> behringer UCA222> компютър (usb). Получавам данни, когато играя на клавиатурата и съм щастлив сега.

Има няколко разлики от оригиналния код, но мисля, че най-важното е, че запазвам медийния източник в световен мащаб (window.audiosource). Тук има и други публикации за свързан проблем, например: Chrome: Onaudioprocess спира да се обажда след известно време и този Заснемането на HTML5 микрофона спира след 5 секунди във Firefox.

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));
}