我有这个简单的代码,我试图保持数组数组,这只是FFT音频数据。我认为这是一个javascript问题,但我不知道哪里出了问题。fft.analyze()只返回一个数字数组。当我将数组推入阵列谱后,所有谱内的值都是0,而不是实际值。使用array.splice(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])
}
}发布于 2017-05-12 05:21:49
都是我的错。问题是用unshift代替pop。它得到的第一个数组充满了0。在这里你可以看到我想做什么:https://www.pushpopchallenge.com/submissions/22
https://stackoverflow.com/questions/43928013
复制相似问题