Zwiększenie rozdzielczości widma w Web API

0

Cześć!

Dziś walczę z nowym dla mnie cudeńkiem w JS dla przeglądarek:
https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode

Potrzebuję zwiększyć rozdzielczość widma nie zmniejszając częstotliwości jego odświeżania.

	var audioContext = new AudioContext();
	var webaudio_tooling_obj = function () {
		
		console.log("audio is starting up ...");
		
		var audioInput = null,
			microphone_stream = null,
			script_processor_fft_node = null,
			analyserNode = null;

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

		if (navigator.getUserMedia){
			navigator.getUserMedia(
				{audio:true}, 
				function(stream) {
					start_microphone(stream);
				},
				function(e) {
					alert('Error capturing audio.');
				}
			);
		} else {
			alert('getUserMedia not supported in this browser.');
		}

		function start_microphone(stream){

			microphone_stream = audioContext.createMediaStreamSource(stream);


			analyserNode = audioContext.createAnalyser();
			analyserNode.smoothingTimeConstant = 0;
			analyserNode.fftSize = 2048;
			microphone_stream.connect(analyserNode);

			script_processor_fft_node = audioContext.createScriptProcessor(2048, 1, 1);
			script_processor_fft_node.connect(audioContext.destination);
			analyserNode.connect(script_processor_fft_node);

			script_processor_fft_node.onaudioprocess = function() {

				var array = new Uint8Array(analyserNode.frequencyBinCount);
				analyserNode.getByteFrequencyData(array);

				// draw the spectrogram
				if (microphone_stream.playbackState == microphone_stream.PLAYING_STATE) {
					draw(array); // canvas - show!
				}
			};
		}
	}(); 

Powyższy kod zbiera dane z mikrofonu i w zmiennej array mamy widmo, niestety dla mnie ma zbyt małą rozdzielczość.
Potrzebowałbym sygnał z mikrofonu przemnożyć przez okno hanna a następnie dopisać trochę zer (żeby zrobić z 2048 próbek, np. 16384) i po tych operacjach wrzucić na FFT.
Muszę użyć jak najwięcej natywnych funkcji, żeby miało szansę to działać.
Dopiero wgłębiam się w te api i ciężko mi coś poskładać.

Może ktoś już coś podobnego zrobił?
Żeby temat nie był bez konkretnego pytania( :] ): jak przemnożyć przez okno hanna i dodać zera?

P.S. (przemyślenia 1s przed wrzuceniem tematu)
Mogę dane z mikrofonu wrzucić do tablicy, pomnożyć, dodać zera i wrzucić na FFT, lecz taka pętla lecąca po elementach i mnożąca zbyt obciąży przeglądarkę :(
Chyba że zrobić FIRa (chyba widziałem w Web Api) w postaci okna i jakoś dokleić zera.

0

Niestety, maksymalna wielkość fft to 2048 :(
https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/fftSize

1 użytkowników online, w tym zalogowanych: 0, gości: 1