changeset 2643:52e51b15f808

Revert "#3: Added resampler from JS-xtract into resampler.js. Automatically use to match sample rates" This reverts commit 094db4c7aad651e6585839337c9b21fc628604ae.
author Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk>
date Thu, 19 Jan 2017 15:00:15 +0000
parents 77204f78386a
children 9c84c368f4a8
files index.html js/core.js js/resample.js test.html
diffstat 4 files changed, 0 insertions(+), 175 deletions(-) [+]
line wrap: on
line diff
--- a/index.html	Thu Jan 19 14:48:02 2017 +0000
+++ b/index.html	Thu Jan 19 15:00:15 2017 +0000
@@ -18,7 +18,6 @@
     <!-- Use jQuery hosted from Google CDN -->
     <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>-->
     <script type="text/javascript" src="js/jquery-2.1.4.js"></script>
-    <script type="text/javascript" src="js/resample.js"></script>
     <script type="text/javascript" src="js/loader.js"></script>
 </head>
 
--- a/js/core.js	Thu Jan 19 14:48:02 2017 +0000
+++ b/js/core.js	Thu Jan 19 15:00:15 2017 +0000
@@ -1507,22 +1507,6 @@
             function processAudio(response) {
                 var self = this;
                 return audioContext.decodeAudioData(response, function (decodedData) {
-                    if (decodedData.sampleRate !== audioContext.sampleRate) {
-                        // Resample
-                        var num_channels = decodedData.numberOfChannels,
-                            num_samples = decodedData.length,
-                            r = audioContext.sampleRate / decodedData.sampleRate,
-                            new_buffer = audioContext.createBuffer(num_channels, Math.floor(num_samples * r), audioContext.sampleRate),
-                            channel;
-                        for (channel = 0; channel < num_channels; channel++) {
-                            var buffer = new Float32Array(decodedData.length);
-                            decodedData.copyFromChannel(buffer, channel);
-                            buffer = xtract_resample(buffer, audioContext.sampleRate, decodedData.sampleRate);
-                            new_buffer.copyToChannel(buffer, channel);
-                        }
-                        decodedData = new_buffer;
-                        buffer = new_buffer = undefined;
-                    }
                     self.buffer = decodedData;
                     self.status = 2;
                     calculateLoudness(self, "I");
--- a/js/resample.js	Thu Jan 19 14:48:02 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-// Taken for JS-Xtract
-// https://github.com/nickjillings/js-xtract
-
-function xtract_resample(data, p, q, n) {
-    // Same function call as matlab:
-    // data is the array
-    // p is the target sample rate
-    // q is the source sample rate
-    // n is the desired filter order, n==1024 if undefined
-
-    function filter(N, c) {
-        var c_b, Re, Im, b;
-        c_b = Math.floor(c * N);
-        Re = new Float64Array(N);
-        Im = new Float64Array(N);
-        var i, j;
-        for (i = 0; i < c_b; i++) {
-            Re[i] = 1;
-        }
-        for (i = N - c_b + 1; i < N; i++) {
-            Re[i] = 1;
-        }
-        inverseTransform(Re, Im);
-        // Scale and shift into Im
-        for (i = 0; i < N; i++) {
-            j = (i + (N >> 1)) % N;
-            Im[i] = Re[j] / N;
-            // Apply compute blackman-harris to Im
-            var rad = (Math.PI * i) / (N);
-            Im[i] *= 0.35875 - 0.48829 * Math.cos(2 * rad) + 0.14128 * Math.cos(4 * rad) - 0.01168 * Math.cos(6 * rad);
-        }
-        return Im;
-    }
-
-    function polyn(data, K) {
-        var N = data.length;
-        var x = [0, data[0], data[1]];
-        var dst = new Float64Array(K);
-        var ratio = K / N;
-        var tinc = 1 / ratio;
-        var n = 0,
-            t = 0,
-            k;
-        for (k = 0; k < K; k++) {
-            if (t == n) {
-                // Points lie on same time
-                dst[k] = data[n];
-            } else {
-                var y = (t - n - 1) * (t - n) * x[0] - 2 * (t - n - 1) * (t - n + 1) * x[1] + (t - n) * (t - n + 1) * x[2];
-                dst[k] = y / 2;
-            }
-            t += tinc;
-            if (t >= n + 1) {
-                n = Math.floor(t);
-                x[0] = data[n - 1];
-                x[1] = data[n];
-                if (n + 1 < N) {
-                    x[2] = data[n + 1];
-                } else {
-                    x[2] = 0.0;
-                }
-            }
-        }
-        return dst;
-    }
-
-    function zp(a) {
-        var b = new Float64Array(a.length * 2);
-        for (var n = 0; n < a.length; n++) {
-            b[n] = a[n];
-        }
-        return b;
-    }
-
-    function overlap(X, b) {
-        var i, f;
-        var Y = new Float64Array(X.length);
-        var N = b.length;
-        var N2 = 2 * N;
-        var B = {
-            real: zp(b),
-            imag: new Float64Array(N * 2)
-        }
-        transform(B.real, B.imag);
-        var Xi = X.xtract_get_data_frames(N, N, false);
-        var Yi = Y.xtract_get_data_frames(N, N, false);
-        var x_last = new Float64Array(N);
-        var y_last = new Float64Array(N);
-        var w = new Float64Array(N2);
-        for (i = 0; i < N2; i++) {
-            var rad = (Math.PI * i) / (N2);
-            w[i] = 0.35875 - 0.48829 * Math.cos(2 * rad) + 0.14128 * Math.cos(4 * rad) - 0.01168 * Math.cos(6 * rad);
-        }
-        var xF = {
-            real: new Float64Array(N2),
-            imag: new Float64Array(N2)
-        }
-        var yF = {
-            real: new Float64Array(N2),
-            imag: new Float64Array(N2)
-        }
-        for (f = 0; f < Xi.length; f++) {
-            for (i = 0; i < N; i++) {
-                xF.real[i] = x_last[i] * w[i];
-                xF.real[i + N] = Xi[f][i] * w[i + N];
-                x_last[i] = Xi[f][i];
-                xF.imag[i] = 0;
-                xF.imag[i + N] = 0;
-            }
-            transform(xF.real, xF.imag);
-            for (i = 0; i < N2; i++) {
-                yF.real[i] = xF.real[i] * B.real[i] - xF.imag[i] * B.imag[i];
-                yF.imag[i] = xF.imag[i] * B.real[i] + xF.real[i] * B.imag[i];
-            }
-            transform(yF.imag, yF.real);
-            // Perform fft_shift and scale
-            for (i = 0; i < N; i++) {
-                var h = yF.real[i + N] / N;
-                yF.real[i + N] = yF.real[i] / N;
-                yF.real[i] = h;
-            }
-            for (i = 0; i < N; i++) {
-                Yi[f][i] = (yF.real[i] + y_last[i]);
-                y_last[i] = yF.real[i + N];
-            }
-        }
-        return Y;
-    }
-
-    // Determine which way to go
-    var b, N = data.length;
-    if (typeof n != "number" || n <= 0) {
-        n = 512;
-    }
-    if (p == q) {
-        return data;
-    }
-    var ratio = (p / q);
-    var K = Math.floor(N * ratio);
-    var dst;
-    if (p > q) {
-        // Upsampling
-        // 1. Expand Data range
-        dst = polyn(data, K);
-        // 2. Filter out spurious energy above q
-        var b = filter(n, 1 / ratio);
-        overlap(data, b);
-    } else {
-        // Downsampling
-        // 1. Filter out energy above p
-        var b = filter(n, ratio / 2);
-        var ds1 = overlap(data, b);
-        // 2. Decrease data range
-        dst = polyn(ds1, K);
-    }
-    return dst;
-}
--- a/test.html	Thu Jan 19 14:48:02 2017 +0000
+++ b/test.html	Thu Jan 19 15:00:15 2017 +0000
@@ -18,7 +18,6 @@
     <!-- Use jQuery hosted from Google CDN -->
     <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>-->
     <script type="text/javascript" src="js/jquery-2.1.4.js"></script>
-    <script type="text/javascript" src="js/resample.js"></script>
     <script type="text/javascript" src="js/loader.js"></script>
 </head>