0

我有一个非常大的数据结构,其中一部分如下所示。

var Data =
    {
        MIDISource          : {id: 0, val: 1, harm: 0},         

        MIDIChannel         : {id: 1, val: 1, harm: 1},         
        MIDISplit           : {id: 2, val: 0, harm: 1},
        MultiTouch          : {id: 3, val: 1, harm: 1},
        TouchFreq           : {id: 4, val: 0, harm: 1},
        TouchLevel          : {id: 5, val: 0, harm: 1},
        TouchAttack         : {id: 6, val: 0, harm: 1},
        PitchWheelSens      : {id: 7, val: 0, harm: 1},
        ModWheelTarg        : {id: 8, val: 0, harm: 1},
        ModWheelSens        : {id: 9, val: 0, harm: 1},

        Fundamental         : {id: 21, val: 1, harm: 2},
        EvenHarmonics       : {id: 22, val: 1, harm: 2},
        
       // etc for about 5000 more datapoints


    };

例如,所有数据点都被访问

Data.EvenHarmonics[harm].val

id 可以是 0 到 127 之间的任何值,也可以是有害的,对于每个数据点都是固定的。Val 可以是 0 到 2047 之间的任何值。目前我假设每个 id、harm 和 val 都被存储,但是普通的 Javascript 变量被存储,并且运行良好。

但是,我也有一些大型音频数据数组,并发现将它们更改为使用 Float32 肯定会加快速度,例如

const _SineTableMax = 2047;
var SineLevels = new Float32Array(128 * (_SineTableMax + 1));

因此,我想知道是否可以将每个数据点存储在一个 32 位位置,id 和harm 为 Int8,val 为 Int16。但是我看不到以这种方式映射数据的明显方式。

有什么建议么 ?

4

0 回答 0