我有这个简单的代码,我试图保留一个数组数组,这只是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])
}
}
答案 0 :(得分:0)
您想使用slice()
而不是 splice()
所以你在做什么
spectrums.push(s.splice(0))
s
从一开始就被清空( 0 索引)
你想做的是
spectrums.push(s.slice(0))
slice()
保持原始数组不变,只创建一个副本。
splice()
只需通过插入或删除元素来修改原始数组。
答案 1 :(得分:0)
这是我的错。问题是使用unshift而不是pop。 它得到的第一个数组是0。 在这里,您可以看到我想要制作的内容:https://www.pushpopchallenge.com/submissions/22