Mercurial > hg > webaudioevaluationtool
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 } |