mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-11 07:14:04 +09:00
mp3 test
This commit is contained in:
95
assets/disk0/tvdos/include/js-mp3/imdct.js
Normal file
95
assets/disk0/tvdos/include/js-mp3/imdct.js
Normal file
@@ -0,0 +1,95 @@
|
||||
var imdctWinData = [new Float32Array(36), new Float32Array(36), new Float32Array(36), new Float32Array(36)];
|
||||
|
||||
var cosN12 = [];
|
||||
for (var i = 0; i < 6; i++) {
|
||||
cosN12.push(new Float32Array(12));
|
||||
}
|
||||
|
||||
var cosN36 = [];
|
||||
for (var i = 0; i < 18; i++) {
|
||||
cosN36.push(new Float32Array(36));
|
||||
}
|
||||
|
||||
var init = function () {
|
||||
for (var i = 0; i < 36; i++) {
|
||||
imdctWinData[0][i] = Math.sin(Math.PI / 36 * (i + 0.5));
|
||||
}
|
||||
for (var i = 0; i < 18; i++) {
|
||||
imdctWinData[1][i] = Math.sin(Math.PI / 36 * (i + 0.5));
|
||||
}
|
||||
for (var i = 18; i < 24; i++) {
|
||||
imdctWinData[1][i] = 1.0;
|
||||
}
|
||||
for (var i = 24; i < 30; i++) {
|
||||
imdctWinData[1][i] = Math.sin(Math.PI / 12 * (i + 0.5 - 18.0));
|
||||
}
|
||||
for (var i = 30; i < 36; i++) {
|
||||
imdctWinData[1][i] = 0.0;
|
||||
}
|
||||
for (var i = 0; i < 12; i++) {
|
||||
imdctWinData[2][i] = Math.sin(Math.PI / 12 * (i + 0.5));
|
||||
}
|
||||
for (var i = 12; i < 36; i++) {
|
||||
imdctWinData[2][i] = 0.0;
|
||||
}
|
||||
for (var i = 0; i < 6; i++) {
|
||||
imdctWinData[3][i] = 0.0;
|
||||
}
|
||||
for (var i = 6; i < 12; i++) {
|
||||
imdctWinData[3][i] = Math.sin(Math.PI / 12 * (i + 0.5 - 6.0));
|
||||
}
|
||||
for (var i = 12; i < 18; i++) {
|
||||
imdctWinData[3][i] = 1.0;
|
||||
}
|
||||
for (var i = 18; i < 36; i++) {
|
||||
imdctWinData[3][i] = Math.sin(Math.PI / 36 * (i + 0.5));
|
||||
}
|
||||
|
||||
const cosN12_N = 12
|
||||
for (var i = 0; i < 6; i++) {
|
||||
for (var j = 0; j < 12; j++) {
|
||||
cosN12[i][j] = Math.cos(Math.PI / (2 * cosN12_N) * (2*j + 1 + cosN12_N/2) * (2*i + 1));
|
||||
}
|
||||
}
|
||||
|
||||
const cosN36_N = 36;
|
||||
for (var i = 0; i < 18; i++) {
|
||||
for (var j = 0; j < 36; j++) {
|
||||
cosN36[i][j] = Math.cos(Math.PI / (2 * cosN36_N) * (2*j + 1 + cosN36_N/2) * (2*i + 1));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
init();
|
||||
|
||||
var Imdct = {
|
||||
Win: function (inData, blockType) {
|
||||
var out = new Float32Array(36);
|
||||
if (blockType === 2) {
|
||||
var iwd = imdctWinData[blockType];
|
||||
const N = 12;
|
||||
for (var i = 0; i < 3; i++) {
|
||||
for (var p = 0; p < N; p++) {
|
||||
var sum = 0.0;
|
||||
for (var m = 0; m < N/2; m++) {
|
||||
sum += inData[i+3*m] * cosN12[m][p];
|
||||
}
|
||||
out[6*i+p+6] += sum * iwd[p];
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
const N = 36;
|
||||
var iwd = imdctWinData[blockType];
|
||||
for (var p = 0; p < N; p++) {
|
||||
var sum = 0.0;
|
||||
for (var m = 0; m < N/2; m++) {
|
||||
sum += inData[m] * cosN36[m][p];
|
||||
}
|
||||
out[p] = sum * iwd[p];
|
||||
}
|
||||
return out;
|
||||
}
|
||||
};
|
||||
|
||||
exports = Imdct;
|
||||
Reference in New Issue
Block a user