0

これは、bank[a][b] ([a] は「bank」、[b] は"クリップ"。残念ながら、このコードはいくつかの外部ファイルを見て、それらのプロパティを確認するためのものです。これらのファイルは、いくつかのプロパティに基づいて、すでに「配列」に編成されています。当初、これは 8x8 配列になると言われていましたが、現在は 16x32 配列であり、要件では配列からの 4x2 選択で構成されるバンクが指定されていることがわかりました。

言い換えると、

banks[0][0].track = 0
banks[0][0].slot = 0
banks[0][3].track = 3

banks[0][3].slot = 0
banks[0][4].track = 0
banks[0][4].slot = 1

banks[0][7].track = 3
banks[0][7].slot = 1
banks[15][0].track = 0

banks[15][0].slot = 31
banks[15][3].track = 3
banks[15][3].slot = 31

banks[16][0].track = 3
banks[16][0].slot = 0
banks[16][4].track = 3

banks[16][4].slot = 1
banks[63][0].track = 11
banks[63][0].slot = 30

banks[63][4].track = 11
banks[63][4].slot = 31

「クリップ」の 64x8 2D 配列を繰り返し作成する必要がありますが、同時に、それらのクリップの上記のプロパティを示されているように設定します。関連する数学がクリップ オブジェクトに属していることは明らかです。しかし、私はまだ数学を見ることができません。どんな提案でも大歓迎です。

4

1 に答える 1

0

これが必要なようですね:

var theirBanks = [[...], [...], ...]; // 16*32 array of Clip objects

var x = 2; // reduce outer array to one of half length
var y = 4; // reduce inner arrays to one of fourth length
function reduce(sel) {
/* gets: a 2*4 selection of clips from theirBanks
returns: a new clip for banks */
   ... // not sure how you want this to be done
}

var banks = new Array(theirBanks.length / x);
for (var i=0; i<banks.length; i++) {
    banks[i] = [];
    for (var j=0; j<theirBanks.length/y; j++) {
        var selection = [];
        for (var k=i*x; k<(i+1)*x; k++)
            selection.push(theirBanks[k].slice(j*y, (j+1)*y));

        banks[i][j] = reduce(selection);
    }
}
// banks is now a 8*8 array

スクリプトは、(2次元)配列から2 * 4の選択を構築し、それらを新しいオブジェクトに縮小して、新しい、より小さな(2次元)配列を返します。

于 2012-07-08T17:49:52.467 に答える