Pegeldarstellung bei Wavewiedergabe
-
Guten Tag
Ich bin dabei einen kleinen zierlichen Waveplayer zu programmieren. Das wiedergeben is kein Problem, also über winMM oder dsound. (Gibst hier jemanden der sich mit Asio auskennt, da häng ich irgendwie, beim Buffer-createn ..)
Aber zum eigentlichen Problem, ich möchte eine Echtzeit-Pegelanzeige einbauen, so wie es jeder übliche Medienplayer hat. Nunja, klappt aber nicht so wie ich mir das vorstell und nun weiß ich nicht so genau wie ich da vorgehen soll. Zb will ich meine Pegelanzeige mit 20 frames/pro sec anzeigen lassen. Also muss ich bei der Wave-wiedergabe alle 50ms einen aussagekräftigen Pegelwert ermitteln. Aber wie??? nimmt an 44,1 khz; dann habe ich 2205 sampleabstastwerte pro angezeigtem Pegelwert, was aber zeig ich jetzt an?
Nimmt man den Momentanwert, dann zuckt die Pegelanzeige unkontrolliert durch die gegend. Wenn man immer den Spitzenwert anzeigt, dann hängt die Anzeige fast immer bei 0 dB, und wenn man den(Gleichricht) mittelwert nimmt zuckt die anzeige schwach um die mitte.So ich muss sagen jetzt weiß ich nicht so genau weiter, was ich dafür hernehmen soll, kann mir hier jemand ein paar tipps geben?? (rms.., oder was noch? Muss man über Dft/fft was ermitteln(wäre dafür zu rechenintensiv)???)
Vielen Dank für alle Tipps
-
Envelopefollower?
Attack von 0..10ms, Release von 1000..2000ms, und siehe da, du hast brauchbare Werte, unabhängig davon, wie oft du pro Sekunde updatest.
-
Danke soweit, werds mal damit versuchen.
-
Flow_cplus schrieb:
Guten Tag
...nimmt an 44,1 khz; dann habe ich 2205 sampleabstastwerte pro angezeigtem Pegelwert...
da hab ich gleich mal eine frage: wie viel bytes haben wave-roh-daten bei 16Bit und 44,1 Khz?? gibt 44,1 KhZ an, dass dass dann 44100*2 Bytes sind??
-
a hab ich gleich mal eine frage: wie viel bytes haben wave-roh-daten bei 16Bit und 44,1 Khz?? gibt 44,1 KhZ an, dass dass dann 44100*2 Bytes sind??
Die Samplerate gibt an, wieviele Werte pro Sekunde vorhanden sind. In einer Sekunde hast du bei 16Bit 44,1KHz '44100*2 Bytes', richtig.
-
@Helium
hast du vielleicht gute Links generell zu dem Thema Audio und DSP? Ich such nämlich zufällig auch gerade nach so etwas. Vorallem um die Frequenzen aus den Samples zu gewinnen.
-
Im Kopf habe ich gerade nur http://www.musicdsp.org/ und http://www.dspdimension.com/ . Andere Links kann ich dir erst geben, wenn ich nach Hause komme.
Vorallem um die Frequenzen aus den Samples zu gewinnen.
Also einfach 'ne FFT?
-
die erste seite ist wirklich gut! die zweite irgendwie sinnlos... habsch aber gleich haufen material für mein LMMS (Linux MultiMedia Studio) bekommen...
-
Helium schrieb:
Also einfach 'ne FFT?
ja, ich versuch mich nur in das Thema besser einzuarbeiten, vorallem auch in die unterschiedlichen FFT-Algorithmen. musicdsp.org kannte ich zwar schon
Folgende Link Sammlung habe ich gerade gefunden, die sehr interessant aussieht
-
Ach ja, quasi kostenlos ein ganzes Buch zum Thema DSP: http://www.dspguide.com/
die zweite irgendwie sinnlos
Wieso?
Ich fand beispielswiese http://www.dspdimension.com/html/pshiftstft.html ganz interessant.
-
hmmm, stimmt, da war ja noch dien such-funktion...
-
hmmm, stimmt, da war ja noch dien such-funktion...
Falls das auf mich bezogen war: Klick einfach auf Articles oben in der Leiste.
-
Hi
Also die Links sammlung is ganz gut, das dsp buch hatte ich schon gezogen.
Ich bin auch grad dabei ne fft zu programmieren. Da ichs aber auch verstehen will, werd ich erstmal ne normale dft schreiben (also ohne die fft zerstückleung).
Is eigetnlich auch net schwer nur versteh ich net, wie man die frequenz der 1. Harmonischen ermittelt?? der Frequenzabstand zwischen den einzeln spektrallinien is klar, aber wie erhalte ich die absolute frequenz der 1.?Gruß Flow
-
@Flow_cplus
ich würde an deiner Stelle die FFTW-Library mal anschauen, da diese dir FFT-Funktionen zu verfügung stellt, die auch SIMD optimiert sind (ua. für MMX,3DNOW,SSE,Altivec) und somit extrem schnell sein sollten.(btw: wenn mir jemand an kingruedi@c-plusplus.net eine WAV-Datei schicken könnte, die nur eine bestimmte Frequenz enthält zum testen meiner versuche, wäre ich sehr erfreut :))
-
Die meisten Audioeditoren bieten die Möglichkeit einen Sinus zu generieren. Aber meinetwegen kann ich dir auch eine basteln.
-
@kingruedi,
FFTW kan ich nur empfehlen. Ich benutze die dür 2D FFTW von Bilddaten. Die Library schlägt von der Performance her alles andere, was ich getestet habe. Die Doku ist auch top.
Wußte gar nicht, das so viele hier auch im Bereich DSP rumprobieren. Privat code ich auch gerade an einem kleinen Soundproggi.
-
Wußte gar nicht, das so viele hier auch im Bereich DSP rumprobieren.
Ja, die beliebtesten Sachen, die ich bis jetzt rausgebracht habe sind mein Guitifier (virtueller Gitarrenverstärker) und Bass Punch (Der Name beschreibts ganz gut). Beides VSTs, momentan nur Windows, OSX geplant.
-
jo, FFTW sieht ganz nett aus, auch wenn es mich um die Erfahrung bringt selber einen FFT Algorithmus zu programmieren und den mit SIMD zu optimieren
@Helium
danke, hab schon eine sinus-wav datei bekommen.Das Tutorial hat mir auch sehr geholfen. Nur leider schaffe ich es nicht wirklich die Analyse Funktion nachzubauen (meine Werte sind leider nicht gleich den Werten des Tutorials. Ich muss mal schauen, ob das vielleicht an der verwendeten FFT liegt (ich nutze natürlich FFTW3 :)))
-
kingruedi schrieb:
(btw: wenn mir jemand an kingruedi@c-plusplus.net eine WAV-Datei schicken könnte, die nur eine bestimmte Frequenz enthält zum testen meiner versuche, wäre ich sehr erfreut :))
wo liegt da das problem, das selber zu machen??
int bigbuffer[1048576]; for (int i = 0; i < 1048576; ++i) bigbuffer[i] = (int) (sin((i%360)*3.14159265/180)) * 32000);
danach musst du bigbuffer nur noch in eine wav schreiben (+header - hab ich jetzt keinen bock, das zu schreiben...) bzw. an /dev/dsp, wobei du hier vorher die richtigen parameter (in diesem fall z.b. 16-Bit-Wave-Daten) setzen solltest.