Wave ausgeben und zeichnen
-
Guten Abend,
ich lese die PCM-Daten aus einer Wave-Datei aus und möchte mit diesen nun folgendes anstellen.
- Ausgeben (DirectShow dachte ich?)
- Als Graph "live" dastellen. Dazu dachte ich, ich lese vor dem Abspielen einmal die ganzen Samples durch um den Max/Min Wert zu finden. Zur Laufzeit (z.B. alle 100ms) ermittel ich das aktuelle Sample und zeichne dementsprechend den Graph.
Nun müsste ich also am besten eine Funktion haben, mit der ich die Daten in "100ms-Paketen" abspielen kann um danach den Graph zu zeichen - ich hoffe ihr könnt mir folgen?Nun habe ich aber keinen Anhaltspunkt, wie (bzw. womit) ich das ganze realisieren kann. Ist DirectShow die richtige Wahl? Auch vom "Windows Core Audio Interfaces" habe ich etwas gelesen. Allerdings habe ich mit beidem noch nicht wirklich gearbeitet.
Kann mir jemand Tipps/Links/Ideen zur Umsetzung geben?
Danke im Voraus
-
Ich persönlich würd zu XAudio2 raten.
-
Seit wann kann man Musik zeichnen?
-
dot schrieb:
Ich persönlich würd zu XAudio2 raten.
Hast du evtl. weiterführende Links?
wtf?? schrieb:
Seit wann kann man Musik zeichnen?
Seitdem man möglichst passende Überschriften sucht
Gruß
-
WaVeSoUnD schrieb:
dot schrieb:
Ich persönlich würd zu XAudio2 raten.
Hast du evtl. weiterführende Links?
http://msdn.microsoft.com/en-us/library/windows/desktop/ee415813.aspx
-
Wieso wusste ich dass so etwas kommt
Habe nur gefragt, weil man ja manchmal "den einen perfekten lieblings Link" hat, den man via. Suchmaschine vielleicht nicht sofort findetAber danke.
-
Hallo, muss mich nochmal melden.
Läuft soweit alles wie es soll, jetzt habe ich aber noch ein theoretisches Problem. Ich suche zunächst aus dem Stream die Extremwerte um sozusagen das Gerüst für die Visualisierung darzustellen. Nun render ich den Stream stückchenweise (z.B. 1000 Pakete) und zeichne nach jedem Durchgang ein Stück weiter.
Dazu würde ich nun die Samples des nächsten Paketes addieren um dann anschließend einen Mittelwert zu errechnen und diesen zu zeichnen (Das zeichnen würde ich dann asynchron machen, da es wahrscheinlich sonst zu zu langen Pause kommt).Ist das ein "guter" Ansatz, oder habt ihr bessere Ideen?
Gruß!