我正在做一个项目,我将输出频率从实时麦克风输入通过fft输出到txt文档,然后检索(或尝试检索)它们到4个频率的列表。我的列表数组是空的,即控制台打印[]并且没有数字。 Pl告诉我逻辑/代码有什么问题。这是在void draw()
中for (int i = 0; i<fft.specSize(); i++) {
float freq = fft.getFreq(i);
int freqint = (int) freq;
//println(freqint);
output.println(freqint);}
Scanner input = new Scanner("...\\list.txt");
while (input.hasNextInt()) {
list.get(input.nextInt(4));
}
println(list);
input.close();
答案 0 :(得分:0)
将您的目标拆分为子任务:
看起来你已经完成了第一部分。 目前还不清楚4个频率是什么,但你可以自己解决这个问题。
令人困惑的部分是您调用获取FFT数据一次然后尝试将其直接保存到磁盘。我不是100%这就是你的意思。 仔细检查是否需要先保存少量样本/秒的FFT数据。
我想象一个更通用的场景:
继续保存和加载数据。 你有一些选项可以构建到Processing中来存储数据:
我建议阅读Daniel Shiffman's Data Tutorial
单独将浮点值保存/加载到磁盘, 这是使用字符串的概念片段的基本证明:
int fftSpecSize = 10;//this will be fft.specSize() in your case
String values = "";
for(int i = 0 ; i < fftSpecSize; i++){
//random(1) is a placeholder for fft.getFreq(i);
values += random(1);
//if it's not the last value, add a separator character (in this case space)
if(i < fftSpecSize-1){
values += " ";
}
}
println("values to save:");
println(values);
println();
//save data
saveStrings("fftSingleRead.txt",values.split(" "));
//load data
String[] readValues = loadStrings("fftSingleRead.txt");
//print raw loaded data
println("readValues from .txt file:");
println(readValues);
println();
//parse values:
for(int i = 0 ; i < readValues.length; i++){
float value = float(readValues[i]);
println("readValues[",i,"] = ",value);
}
另外这里也是一个Table例子:
Table fftValues;
int specSize = 10;
//create a new table
fftValues = new Table();
//add columns - one per FFT bin
for(int i = 0 ; i < specSize; i++){
fftValues.addColumn();
}
//add some data, a row per reading
//create a new row
TableRow newRow = fftValues.addRow();
//add each fft value to the row
for(int fftCount = 0 ; fftCount < specSize; fftCount++){
//placeholder for newRow.setFloat(fftCount,fft.getFreq(fftCount));
newRow.setFloat(fftCount,random(1));
}
//add the row to the table
fftValues.addRow(newRow);
//save to disk
saveTable(fftValues,"fftValues.csv","csv");
//load from disk
Table readValues = loadTable("fftValues.csv","csv");
//access the data that has been saved in the table
for(int rowCount = 0; rowCount < readValues.getRowCount(); rowCount++){
TableRow currentRow = readValues.getRow(rowCount);
print("row[",rowCount,"] = ");
for(int columnCount = 0; columnCount < currentRow.getColumnCount(); columnCount++){
float value = currentRow.getFloat(columnCount);
print(value);
if(columnCount < currentRow.getColumnCount() - 1){
print(",");
}
}
println();
}
尝试代码,查看输出,阅读评论,阅读参考资料,调整/重试/理解并适应您的问题。