Musikvisualisierung - Oszilloskop

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Musikvisualisierung - Oszilloskop

    Hallo,

    ich möchte eine Oszilloskop-ähnliche Visualisierung von abgespielter Musik erzeugen (vgl. vb-paradise.de/index.php/Attachment/5710-Unbenannt-jpg/). Hier im Forum habe ich zwar einen zutreffenden Beitrag gefunden, aber der Thread endet mit der netten Angabe

    VB.NET-Quellcode

    1. PictureBox1.Image = Spectrum.CreateSpectrumWave(stream, PictureBox1.Width, PictureBox1.Height, Color.Lavender, Color.Lavender, Color.Transparent, 1, False, False, True)
    und das hilft mir nicht viel weiter - ich verwende weder die Bass.net-DLL (sondern CSCore von thefiloe), noch kenn ich die genaue Funktionsweise (Sourcecode ;-)) von CreateSpectrumWave aus der bass-API.
    Visualisierungen, die Gebrauch von der FFT machen habe ich bereits mit CSCore erfolgreich zum Laufen gebracht; aber für ein solches Spektrum (wie es oben verlinkt ist) fehlt mir leider ein Ansatz. Ist es überhaupt richtig, hier was mit der FFT machen zu wollen? Wie kommt dieses Aussehen der Kurve zustande? Welche Art von Algorythmik steckt dahinter?

    Danke schon mal für die Hilfe;

    Gruß,
    Dralnaw
    Alles was da gemacht wird ist, dass die WaveForm visualisiert wird und dann extrem vergrößert (oder genauer - wie mans nimmt) wird. Ein gleiches Ergebnis könnte man auch bspw. bei Audacity erzielen, wenn man eine Datei öffnet und dann extrem reinzoomt.

    Also musst du einfach nur die Frequenz jeder Position im Lied herausfinden, dann einen Maßstab erstellen und dann Punkt für Punkt, oder für schnellere aber ungenauere Ergebnisse bspw. jeden fünften Punkt zeichen und dann verbinden.
    Hallo,

    danke erstmal für die Antworten.

    ichduersie schrieb:

    Alles was da gemacht wird ist, dass die WaveForm visualisiert wird und dann extrem vergrößert (oder genauer - wie mans nimmt) wird. Ein gleiches Ergebnis könnte man auch bspw. bei Audacity erzielen, wenn man eine Datei öffnet und dann extrem reinzoomt.
    Also musst du einfach nur die Frequenz jeder Position im Lied herausfinden, dann einen Maßstab erstellen und dann Punkt für Punkt, oder für schnellere aber ungenauere Ergebnisse bspw. jeden fünften Punkt zeichen und dann verbinden.

    Thunderbolt schrieb:

    Das ist die (Momentan-)Amplitudendarstellung.

    D.h. ich habe jetzt prinzipiell zwei Möglichkeiten: Entweder die Amplituden oder die Frequenz an periodischen Punkten ermitteln (ggf. skalieren) und verbinden.
    Wie kann ich am geschicktesten die Amplituden ermitteln? Spontan würde mir einfallen, die Blockgröße der FFT auf 2 festzulegen und damit weiter zu zeichnen. Gibt es dafür auch performantere Herangehensweisen?

    Für die zweite Möglichkeit: Wie könnte ich relativ exakt und rechen-unintensiv "die Frequenz jeder Position im Lied" ermitteln? Wenn ich auch hier die FFT verwende (und die prägnantesten Frequenzen heranziehe) muss ich etwas größere Blöcke verwenden, um eine einigermaßen akzeptable Auflösung der Frequenzen zu erreichen. Dadurch steigt allerdings die Rechenleistung und die Position im Lied ist natürlich viel ungenauer - gibt es einen besseren Weg?

    Ich denke, ich teste erstmal die Methode mit der Amplitudendarstellung, mal schauen wie das dann aussieht.

    Danke und viele Grüße,
    Dralnaw

    Edit: Ach es ist einfach schon zu spät zum klar Denken ;)

    Dralnaw schrieb:

    Wie kann ich am geschicktesten die Amplituden ermitteln? Spontan würde mir einfallen, die Blockgröße der FFT auf 2 festzulegen und damit weiter zu zeichnen. Gibt es dafür auch performantere Herangehensweisen?

    Wozu brauch ich eine FFT? In den Samples ist ja bereits der Peak gespeichert; der Umweg über die FFT ist sinnlos und überflüssig! ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dralnaw“ ()

    Dralnaw schrieb:

    In den Samples ist ja bereits der Peak gespeichert; der Umweg über die FFT ist sinnlos und überflüssig!

    Dralnaw schrieb:

    Ach es ist einfach schon zu spät zum klar Denken
    Jou.
    In der Wave-Darstellung (Elongation) bekommst Du eine Kurve, die der Auslenkung der Membran des Lautsprechers entspricht.
    Die FFT generiert Dir aus den Elongationswerten das Frequenzspektrum, das sagt Dir, welche tiefen und hohen Töne Dir gerade wie laut gespielt werden.
    Diese beiden Darstellungen haben visuell nix miteinander zu tun.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!