2017-05-12 6 views
0

私はこの単純なコードを持っています。私は配列の配列を保持しようとしています。これはFFTオーディオデータだけです。私はこれがjavascriptの問題だと思うが、何が間違っているのか分からない。 fft.analyze()は数値の配列を返します。配列を配列スペクトルにプッシュした後、スペクトル内のすべての値は実際の値ではなく0です。 array.splice(0)を使用するとディープコピーとみなされます。誰でもここで間違っていることを教えてもらえますか?javascript/p5jsで配列をコピーすると、すべての値が0になりますか?

var fft,mic; 
function setup(){ 
    var myCanvas = createCanvas(800,800); 
    fft = new p5.FFT(); 
    ellipse(400,400,50,50) 
    colorMode(HSB,100) 
    spectrums=[] 
    mic = new p5.AudioIn(); 
    mic.start(); 
    fft = new p5.FFT(); 
    fft.setInput(mic); 
} 

function draw() { 
    background(255) 
    s = fft.analyze(16) 
for(si=0;si<s.length;si++){ 
    fill(s[si]%100,100,100) 
    rect(si*10,0,si*10,s[si]) 
} 
spectrums.push(s.splice(0)) 
    if(spectrums.length > 5){ 
    spectrums.splice(-1,1) 
    } 
    console.log(spectrums[0][0]) //this prints 0 always 
for(si=0;si<spectrums[0].length;si++){ 
    fill(spectrums[0][si]%100,100,100) 
    rect(si*10,400,si*10,spectrums[0][si]) 
} 
} 
+0

あなたがゼロに配列のすべての値を変えたい場合は、arr.mapを行うことができ、あなたが投稿した場合(C => 0) – user93

+0

あなたはより良い運を持っていますこのコードの代わりに[mcve]を使用します。これはハードウェア入力に依存し、実行するのが非常に難しくなります。ハードコーディングされた配列を使って、実行しようとしていることを正確に示す小さなサンプルプログラムを作成してみてください。 –

+0

'splice'!=' slice' – WilomGfx

答えて

0

私のせいでした。問題はpopの代わりにunshiftを使用していました。 最初の配列は0でいっぱいです。 ここでは、私が作るしようとしていたものを見ることができます:https://www.pushpopchallenge.com/submissions/22

+0

が意味を持ちます。あなたの答えを受け入れて、それを解決させてください。 – WilomGfx

0

あなたはslice()

なく splice()

を使用したいので、あなたが

spectrums.push(s.splice(0)) 

sをやっているところスタート(インデックス)から空に取得し

あなたが何をしたいか

spectrums.push(s.slice(0)) 

slice()はそのまま元の配列を残し、ちょうどコピーを作成しています。一方、要素を挿入または削除することによって、元の配列を変更するだけです。

+0

私はslice()で試したところ、まったく同じ問題が発生します。以前はJSON.parse(JSON.stringify(myArray))などのさまざまなコピーメカニズムを試していましたが、何も動作しません。私は何をすべきかについて迷っています。 – jas

+0

と私は確かにfft.analyze()は、通常の配列を返します:https://github.com/processing/p5.js/blob/master/lib/addons/p5.sound.js#L2708私は確かにそのjavascriptの問題、しかし、私はそれを修正する方法を知らない。 – jas

+0

意味がありません... 'スライス'の前後に配列 ''がまだ残っているはずです。 – WilomGfx

関連する問題