Teilen Sie Ihre taks in Teilaufgaben:
- get FFT-Daten (und 4 Frequenzen)
- Speichern/Laden Float-Werte auf der Festplatte
- Setzen Sie die 1 und 2 zusammen
Es sieht aus wie Sie bereits die erste p haben Kunst gemacht. Es ist unklar, was die 4 Frequenzen sind, aber Sie können das selbst herausfinden.
Der Teil, der verwirrend ist, ist, dass Sie die Get-FFT-Daten einmal aufrufen und dann versuchen, es direkt auf die Festplatte zu speichern. Ich bin nicht 100% das ist was du vorhast. Überprüfen Sie, ob Sie zuerst einige wenige Sekunden FFT-Daten speichern müssen.
Ich würde ein allgemeineres Szenario wie folgt vorstellen:
- Last FFT-Daten zuvor gespeichert (falls vorhanden)
- Prozess FFT-Daten (so lange wie erforderlich - könnte einen Start benötigen/Stopp boolean) und fügen Sie
- speichern aktuellen FFT-Daten
bewegen Sie sich auf Speichern und Laden von Daten. Sie haben ein paar Optionen in Verarbeitung bauen zum Speichern von Daten:
- Strings über saveStrings()/loadStrings()
- CSV Tabelle über saveTable()/loadTable()/Table
- JSON über JSONObject/JSONArray und verfügbar Last/speichern Funktionen
- XML
Ich empfehle allein, hier ist ein Grund Proof of Concept-Schnipsel mit Strings Daniel Shiffman's Data Tutorial
Umgang mit Speichern/Laden Gleitkommazahlen auf der Festplatte zu lesen:
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);
}
zusätzlich ist hier eine Tabelle Beispiel zu:
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();
}
Probieren Sie den Code, sehen Sie die Ausgabe, lesen Sie die Kommentare, lesen Sie die Referenz, zwicken/wiederholen/verstehen und an Ihr Problem anzupassen.
Ich hatte vorgehabt, die ersten vier oder fünf Frequenzen nach fft zu bekommen. Das ist alles.Aber um das zu tun, musste ich eine Umschreibung in eine TXT-Datei schreiben und dann den Scanner verwenden, da der Scanner nur eine Zeichenkette oder Datei nimmt. Wenn ich renne, zeichnet die TXT-Datei die Frequenzen in int, und fast die ersten 800 bis 1000 Nummern sind 0 und dann nur andere Zahlen wie 1 oder 11 oder 14 oder was auch immer die Echtzeit-Eingabe von Mic-Rekorder bekommt. –
Pl Überprüfen Sie auch meinen zweiten Post, der nach meinem ersten Post selbst angezeigt wird. Ich dachte, es wird nach deinem angezeigt werden. –
Versuchte Ihren Code. Auf der ersten Instanz funktioniert es und ich denke, liest/speichert die ersten zehn Frequenzen. Ich werde es besser verstehen und mich meinem Problem anpassen, wie du es erwähnt hast. –