kapier ich nicht, ich verstehe den Code nicht.
also nochmal:
wenn es einzelne byte-(8bit-)Werte sind, die vom Micro kommen, wo ist die linke Spur, wo ist die rechte Spur, und was steht sonst noch wo im input Puffer?
kapier ich nicht, ich verstehe den Code nicht.
also nochmal:
wenn es einzelne byte-(8bit-)Werte sind, die vom Micro kommen, wo ist die linke Spur, wo ist die rechte Spur, und was steht sonst noch wo im input Puffer?
Das kann ich dir nicht sagen. Ich sehe im Puffer genau so viel wie du, denn das csv ist exakt das was ich vom puffer aus kopiere.
Ich stelle es mal aus Spas auf zwei Kanäle um und schaue was sich da ändert.
- - - Aktualisiert - - -
Okay das sieht dann völlig komisch aus
http://www.kipperei.de/test.csv
Geändert von hirnfrei (04.06.2016 um 20:01 Uhr)
nein, mach mal folgendes:
for(int i=0; i<SHRT_MAX, ++i) input[i]=input[i] & 0x00ff;
und dann guck, ob du es immer noch abspielen kannst!
(ps, dein letzter Link ist kaputt)
Habe ich gemacht, ja kann ich noch problemlos abspielen!
und der Link geht jetzt auch. Hatte mich vertippt.
- - - Aktualisiert - - -
Nachdem was ich bis jetzt so gelesen habe kommen bei Stereo die Daten immer abwechselnd. Erst Links dann Rechts.
- - - Aktualisiert - - -
Hast du das schon gesehen? http://www.fftw.org/
ja, das mit Stereo weiß ich, die Frage ist: alle in derselben int32 Zelle oder in 2 aufeinanderfolgenden?
aber das ist jetzt nicht mehr wichtig.
Wir wissen jetzt:
die Sound-Daten im Input-Array entsprechen ganz exakt den Micro-sound(wav)-Schwingungsdaten, die wir weiterverarbeiten können.
also speichern wir jetzt am besten input in einem wavbuffer (um input zu schonen):
int32_t wavbuffer[SHRT_MAX];
memcpy(wavbuffer, input, sizeof(input) );
for(int i=0; i<SHRT_MAX, ++i) wavbuffer[i] &= 0x00ff;
wav buffer müssen wir jetzt analysieren:
Bandbreite der Werte/Dynamik:
min-Wert=?
max-Wert=?
bis wo geht der Vorspann,Code:
d.h. wo fängt das eigentliche Wort an,
und wo beginnt der Nachspann, d.h. wo hört das Wort auf.
dann:
wie groß ist die Schwingungsbreite (Dynamik) im Vor/Nachspann?
126-130? oder größer?
Geändert von HaWe (04.06.2016 um 20:23 Uhr)
Warum ein neues Array anlegen? Können wir nicht das nutzen was wir schon haben?
min-Wert ist 0
max-Wert ist 255
Ja die Schwinungsbreite von vor und nach müsste so zwischen 120 und 132 liegen.
Wo nun vor und nachspann anfangen, wie ich das kläre weiss ich nicht.
Mist, der blöde Editor hat mich rausgeschmissen...
nein, ich will das Original behalten, zur Sicherheit, deshalb zusätzlicher wavbuffer.
max-Wert und Minwert htte ich grade gepostet, wurde aber von dem blöden editor gelöscht weil mich das Forum ausgeloggt hat. Abrer das kannst du selber....
- - - Aktualisiert - - -
hierfür eine Funktion mit Rückgabewert anlegen:
Minimum analogCode:maximum = wavbuffer[0]; int32_t maxpos; for (i = 1; i < size; i++) { if (wavbuffer[i] > maximum) { maximum = wavbuffer[i]; maxpos= i+1; } }
- - - Aktualisiert - - -
wir müssten für Vorspann und Nachspann wissen, ob wirklich immer einer existiert, oder ob alles der komplette aufgenommene Sound ist.
Nur wenn künftig überall Vor-oder Nachspann vorkommen, kann man das also analysieren und verwenden
- - - Aktualisiert - - -
wenn wir aufpassen, dass unsere Kommandos immer kürzer sind als die etwa 3 sec., kann man die Dynamik der letzten 100 Zellen verwenden (~10 ms):
minr = minimum der letzten 100 zellen (optimiert: ebenfalls zu heftige Spikes nach unten rausschneiden)
maxr = maximum der letzten 100 zellen (optimiert: ebenfalls zu heftige Spikes nach oben rausschneiden)
baseline = arithmet. Mittel der letzten 100 zellen (baseline)
bias = min(baseline-minr, maxr-baseline); // <=== Bandbreite um Mittelwert
- - - Aktualisiert - - -
wenn wir dann die Ober- und Untergrenzen des Grundrauschens kennen, können wir das bias abschneiden:
oh mann, wenn wir doch nur IMMER codetags im Editor hätten....!Code:for(int i=0; i<SHRT_MAX; ++i) { if( (wavbuffer[i]>baseline ) && (wavbuffer[i]< baseline + bias)) wavbuffer[i] = baseline ; // kleine Schwankung => auf Baseline else if( (wavbuffer[i]<baseline ) && (wavbuffer[i]> baseline - bias)) wavbuffer[i] = baseline ; // kleine Schwankung => auf Baseline
(ich hoffe, ich habe mich jetzt nicht verkalkuliert mit dem "Entrauschen"...)
Geändert von HaWe (05.06.2016 um 12:11 Uhr)
Lesezeichen