comparison js/loudness.js @ 2672:0b1c48849b4f

#192. Actually must be at least 1 frame, even partial
author Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk>
date Wed, 29 Mar 2017 15:56:22 +0100
parents f734e5fa2065
children 549e2f97a401
comparison
equal deleted inserted replaced
2671:f734e5fa2065 2672:0b1c48849b4f
78 78
79 function calculateMeanSquared(buffer, frame_dur, frame_overlap) { 79 function calculateMeanSquared(buffer, frame_dur, frame_overlap) {
80 frame_size = Math.floor(buffer.sampleRate * frame_dur); 80 frame_size = Math.floor(buffer.sampleRate * frame_dur);
81 step_size = Math.floor(frame_size * (1.0 - frame_overlap)); 81 step_size = Math.floor(frame_size * (1.0 - frame_overlap));
82 num_frames = Math.floor((buffer.length - frame_size) / step_size); 82 num_frames = Math.floor((buffer.length - frame_size) / step_size);
83 num_frames = Math.max(num_frames, 0); 83 num_frames = Math.max(num_frames, 1);
84 84
85 MS = Array(buffer.numberOfChannels); 85 MS = Array(buffer.numberOfChannels);
86 for (var c = 0; c < buffer.numberOfChannels; c++) { 86 for (var c = 0; c < buffer.numberOfChannels; c++) {
87 MS[c] = new Float32Array(num_frames); 87 MS[c] = new Float32Array(num_frames);
88 var data = buffer.getChannelData(c); 88 var data = buffer.getChannelData(c);
89 for (var no = 0; no < num_frames; no++) { 89 for (var no = 0; no < num_frames; no++) {
90 MS[c][no] = 0.0; 90 MS[c][no] = 0.0;
91 for (var ptr = 0; ptr < frame_size; ptr++) { 91 for (var ptr = 0; ptr < frame_size; ptr++) {
92 var sample = data[no * step_size + ptr]; 92 var i = no * step_size + ptr;
93 if (i >= buffer.length) {
94 break;
95 }
96 var sample = data[i];
93 MS[c][no] += sample * sample; 97 MS[c][no] += sample * sample;
94 } 98 }
95 MS[c][no] /= frame_size; 99 MS[c][no] /= frame_size;
96 } 100 }
97 } 101 }