Entwickler-Ecke
Multimedia / Grafik - Audio-Signal auswerten
Andreas Pfau - Mo 07.07.03 20:09
Titel: Audio-Signal auswerten
Hallo,
ich habe ein Prog geschreiben, dass mit WaveIn...() kleine Blöcke mit Audiodaten aufnimmt und anzeigt. Jeder Block besteht aus 512 Samples, deses Sample ein Float-Wert (0..1). Jeder Block soll auf EINEN EINZIGEN Wert reduziert werden (Augenblickswert). Ich mache das momentan so, dass ich den höchsten Wert im Block nehme, aber da kommen natürlich relativ hohe Werte raus. Wenn ich immer den Durchschnitt nehme, ist das Signal recht zappelig und bei Beats zu klein.
Also: Welchen Algo würdet ihr dazu anwenden? Mir langt ein kleiner Pseudocode, will nur ein paar Ideen sammeln.
Tweafis - Mo 07.07.03 20:38
Du kannst ja mal ungefähr so machen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| function getDurchschnitt(Block -> array[0..512] of Float): Float; var x: integer; i: integer; einschritt: integer; drschnitt: float; begin x := 10; einschritt := 512 div x; drschnitt := 0;
for i := 0 to x do drschnitt := drschnitt+Block[i*einschritt]; result := drschnitt/x; end; |
Und dann mal mit x rumprobieren... Mir fällt halt grad nix besseres ein...
Andreas Pfau - Mo 07.07.03 20:49
Hallo,
wenn ich das richtig verstehe, willst du also (bei X=10) nur 10 von 512 Pegeln auswerten. Habe es versucht. Sehr, schnell, wenig Fehlerrate (wenn jetzt halt zufällig nur 10 kleine Pegel erwischt werden, ist das Ergebnis halt auch kleiner als in echt). Habe mal mehr als 10 genommen, damit das ganze doch etwas genauer wird.
Und danke für deine Mitarbeit :D ! Habe schon befürchtet, bei so 'nem Topic muss ich ewig warten.
Matthias - Di 08.07.03 17:51
Hallo,
in der Messtechnik wird sehr häufig mit dem Median Filter gearbeitet. Das heißt, du nimmst die einen Ringpuffer mit einer x - Werten und füllst diesen z.B. mit deinen Mittelwerten oder Maximas. Aus diesen Puffer nimmst Du den Wert, der nach dem sortieren in der Mitte liegt.
Hierdurch werden z.B. Knackser oder kurze Löcher herausgefiltert.
Eine andere alternative ist es einen gleitenden Mittelwert zu berechnen.
ciao
Matthias
Andreas Pfau - Di 08.07.03 17:55
Hallo,
Ich weiß zwar nicht, was ein Ringpuffer ist, aber... wenn ich das richtig verstehe, soll ich alle Werte in einen Array schreiben, diesen sortieren, und danach den Wert anzeigen, der in der Mitte des Arrays liegt?
Nun, ich werde es versuchen. Mal schauen, da brauche ich eine verflucht schnelle Sortiermethode... QuickSort... ich melde mich, wenns klappt!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!