Sound graphisch darstellen
Hi,
ich suche eine komponente mit der man eine sounddatei graphisch darstellen kann, ka wie sich das nennt, wie z.b. die anzeige im nero waveeditor falls den einer kennt, also wo die höhen und tiefen in einer art diagramm angezeigt werden. *leiderkeineahnunghabwiedasheisst* *MFG* |
Re: Sound graphisch darstellen
Das hab ich irgendwie mal mit der bass.dll hinbekommen, frag mich aber bitte nicht wie. ;)
|
Re: Sound graphisch darstellen
mir würds ja schon helfen wenn jemand wüsst wie sich das nennt, dann könnt ich nämlich bei torry googeln ( ;-) )
|
Re: Sound graphisch darstellen
Zitat:
Zuerst wie aus den Sounddaten eine Stichprobe mit 256, 512 oder 1024 Samples entnommen. Mit diesen Samples wird eine FFT (Fast Fourier Transformation) durchgeführt. Als Ergebnis erhält man die Amplitude und Phase des Signals für 256, 512 oder 1024 Frequenzen. Die Phase kann man wegschmeisen; es interessiert nur die Amplitude. (Eigentlich erhält man der Real- & Imaginärteil der Frequenzen, aber man kann diese Werte in Amplitude und Phase umrechnen.) Diese Amplitudenwerte kann man nun als Balkendiagramm visualisieren, wie dies Spektrumanalyser tun. Ein Problem an der Sache ist, dass man oben eine Stichprobe von Samples anstatt einem periodischen Signal verwendet hat. (Stichwort: Faltung mit Rechtecksignal) Dies führt zu einer Verzerrung der Amplituden im Frequenzbereich. Um dies auszugleichen gibt es diverse Vorfilter (z.B. Hamming-Filter) Wenn man mal soweit ist, kann man auch über eine "schönere" Visualisierung nachdenken: Die X-Achse entspricht der Zeit, der Y-Achse entspricht der Frequenz und die Amplitude im Frequenzbereich wird durch versch. Farben dargestellt. Stichwörter: FFT & Delphi Hammingfilter digitale Signalverarbeitung |
Re: Sound graphisch darstellen
thx
|
Re: Sound graphisch darstellen
|
Re: Sound graphisch darstellen
Ich glaube er will einfach nur die Waveform darstellen, oder? Noch keine Frequenzanalyse via FFT und Histogramme und den ganzen Kram. Einfach nur X-Achse = Zeit, Y-Achse = Amplitude -> fertig ;)
\\edit: Und die Skala für die Amplitude kann man wenn man will auch logarithmisch anlegen. Üblicher ist hier glaube ich linear. Log. sind idR. VU-Meter in Balkenform (zumindest ist's bei Steinberg WaveLab so). |
Re: Sound graphisch darstellen
gut möglich letzendlich weis ich ja net so genau wie sich des nennt. und wie ginge das dann?
|
Re: Sound graphisch darstellen
nochmal push: kennt jemand ne kompo für dizzys beschreibung? das hört sich gut an. für fft hab ich nur eine für bcb gefunden :-(
|
Re: Sound graphisch darstellen
Eine Kompo kenne ich leider auch nicht. Aber gibt es evtl. eine Möglichkeit sich die reinen Audiodaten in einen Stream ausgeben zu lassen? Mit bass.dll oder fmod oder wie auch immer?
Dann könntest du diesen Stream byteweise (oder wortweise bei 16 Bit-Waves) durchgehen, und einfach zeichnen. Interessanter wird's bei stereo - da müsste man herausfinden, ob die ungeraden oder die geraden Bytes/Worte den linken Kanal darstellen. Komfortabler wäre es natürlich gleich 2 getrennte Streams zu haben ;) Ich kann mangels Erfahrung aber absolut nicht sagen mit welcher Methode du an den reinen Audiostream kommst. Bei unkomprimierten .wav's ists noch recht einfach: Den Header weglassen und der Rest sind die Audiodaten (genaueres dürfte sich auf www.wotsit.org finden). Bei komprimierten Files müsste man einen Decoder dazu veranlassen die Ausgabe nicht an die Soundkarte zu machen, sondern in ein Stream/File. gruss, dizzy |
Re: Sound graphisch darstellen
Zitat:
|
Re: Sound graphisch darstellen
Hallo,
ob du's logarithmisch darstellst oder linear ist zuerst mal vollkommen egal. Es kokmmt im wesentlichen auf den Verwendungszweck an! Willst du nur die Amplitude beobachten und hast sehr grosse Signaländerungen kann ein logarithmischer Masstab auf der Y-Achse sinnvoll sein. Willst du die Amplitude in dB über der Zeit darstellen nimmst du einen logarithmischen Masstab. Triffst du mit einem Akkustiker zusammen wirst Du ohne log. nur belächelt. Aber zunächst mal ist in der wav Datei alles linear kodiert. rainer |
Re: Sound graphisch darstellen
Grund: Die Musik die man hört ist immer "linear" (wenn man das jetzt mal so sagen darf), aber das menschliche Gehör arbeitet logarithmisch. Willst du also die echten Daten anzeigen, dann nimm lineare Skalen, willst du aber anzeigen, wie man den Ton empfindet :!:, dann wird eine log. Skala interessant.
Das Problem der log. Skala ist allerdings, dass die Amplituden dann recht stark angehoben würden, und man laute und leise Passagen optisch nicht mehr so sehr gut unterscheiden könnte. Deshalb nochmal: Bei Anzeige der Waveform linear, da für Bearbeitung und Schnitt geeigneter, und bei einem VU-Meter log. da den realen Höreindruck wiederspiegelnd (von -unendlich bis 0 dB, relativ zum maximalen Output sind hier gängig). |
Re: Sound graphisch darstellen
Zitat:
TMMWaveEditor und TMMWavePanel Bilder: http://www.swiftsoft.de/mmhdrecdemos.html Komponenten: http://www.swiftsoft.de/mmhdrec.html Leider ist das relativ teuer !!! Du bräuchtest folgende Komponenten Pakete: HD-Recording Pack 2999,00 EUR Requires: Basic Pack, Wave Pack, Visual Pack, Mixer Pack Basic Pack 99,00 EUR Wave Pack 99,00 EUR Visual Pack 399,00 EUR Mixer Pack 99,00 EUR -> zusammen: ca. 3700,00 EUR !!! Die Komponenten sind sehr gut, sehr flexibel und sehr schnell. Ich habe selbst schon damit gearbeitet. Aber ob die Komponenten Ihr Geld wert sind? Das muß jeder für sich selbst beantworten. 30 Tage Demo kann man dort runterladen. Das Produkt BPM Studio (http://www.bpmstudio.com/) ist damit programmiert. |
Re: Sound graphisch darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Und damit du dich nicht verschulden musst, und die o.g. Sammlung sicherlich ganz gewaltiger Overkill nur für zum Zeichnen ist, hab ich mal fix was gebastelt :)
Liest und zeichnet unkomprimierte Standard-PCM-Waves. Also nur die gaaanz einfachen. Komprimierte Files müsstest du also zunächst nach PCM-Wave wandeln. Weitere Infos in den Soßen (Unit2.pas). Unit2.pas enthält die eigentliche Klasse, und in Unit1 ein kleines Beispiel zum Zeichnen. Die Klasse aus Unit2 stellt lediglich 1 oder 2 Arrays mit den Wave-Daten zur Verfügung - das Zeichnen also nicht. Ich hoffe du kommst damit weiter. Hat viel Spaß gemacht! gruss, dizzy |
Re: Sound graphisch darstellen
thx, werd ich gleich mal austesten. ohne dich hätt ich glatt meinen ferrari verkauft um das teil zahlen zu können... ;-)
|
Re: Sound graphisch darstellen
geh mal auf www.un4seen.com und lade dir mal die BASS components für delphi runter. Da gibts GENUG Beispliele, support für winamp plugins und natürlich auch Visualizations. Ich benutze es privat, ist echt cool.
|
Re: Sound graphisch darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
hi, habe mal ein kleines prog geschrieben,
das ein wavefile einliest, und grafisch dartellt ist im anhang das ganze hat noch alphastatus aber funktioniert prog starten, der linke button laedt die datei, der rechte startet die grafik ausgabe, mit zoom in/out kannste die zeitachse der darstellung aendern, mit amp in/out die amplitude ganz wichtig ist, das programm erwartet eine wavedatei in "c:\windows\media" die datei sollte "ding.wav" heißen, sonst gibst ne fehlermeldung achso die datei muss unter 64 kb groß sein!!!! |
Re: Sound graphisch darstellen
schön :) aber an den enden hat die grafik grafik fehler ?! da geht es steil nach unten bzw oben je nach zoom
|
Re: Sound graphisch darstellen
@supermuckel, das ist weil ich schnell und schlampig programmiert hab, diese steilen flanken, gehoeren
nicht zur eigentlichen waveinformation, sondern zum iff bzw. waveheader, laesst sich aber leicht korrigieren ! :) :zwinker: |
Re: Sound graphisch darstellen
hab ich mir halb gedacht :) so fehlerchen hab ich auch oft bei diversen liniengrafiken
|
Re: Sound graphisch darstellen
@supermuckel, das ist weil ich schnell und schlampig programmiert hab, diese steilen flanken, gehoeren
nicht zur eigentlichen waveinformation, sondern zum iff bzw. waveheader, laesst sich aber leicht korrigieren ! :) :zwinker: |
Re: Sound graphisch darstellen
darf ich fragen wieso du dich wiederholst?
ich les schon jeden post aufmerksam durch :) |
Re: Sound graphisch darstellen
@richard: Das ist aber mal extem quick'n'dirty...
Codeformatierung := nil; Flexibilität := 0; Du zeigst ja sogar sämtliche Header mit an... und was ist wenn das File auf einmal nicht 16 Bit stereo ist :?:. Oder gar > 64k? :zwinker: Mein Proggie hat allerdings bei einigen Waves auch noch Probleme. Werd da nachher nochmal dran gehen, aber zumindest zeichnet es den RIFF-Header nicht ;) Macht Spaß binäre Files auseinander zu nehmen! (Aber nur mit guter Doku!!!) |
Re: Sound graphisch darstellen
Zitat:
|
Re: Sound graphisch darstellen
@supermukl
sorry, wollte mich nicht wiederholen, hab mal wieder den falschen button im IE gedrueckt :) |
Re: Sound graphisch darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
So, falls es noch von Interesse ist --- hab meinen Reader ausgebaut. Waren noch ein paar Bugs drin, und das Laden passiert jetzt in einem extra Thread. (Wegen Statusanzeige)
gruss, dizzy |
Re: Sound graphisch darstellen
Zitat:
irgendwie geht das bei mir nicht mit allen Wav's... wenn ich mir welche erstelle (unkomprimiert!) hängt das prog sich einfach auf (nix tut sich mehr) bei wp := TWaveProvider.Create(OpenDialog1.FileName); ... woran könnte das liegen? edit: bei der aktuellen Version zeigt er dann zwar die Infos an aber er macht mir keinen Graphen mehr :-/ edit2: jetzt gehts |
Re: Sound graphisch darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
hm neues Problem...
irgendwie ist der Graph so ganz und gar nicht wie ich mir das vorstelle... In einem Audioeditor (WavePad) sehe ich da schon anschaulich die Kurven aber bei "meinem", also dem auf deinem Script basierenden, Prog ist das alles ein Mischmasch aus verschieden hohen strichen... anbei mal zum vergleich 2 Bilder: das bunte ist dein Script, das schwarz-weisse ist WavePad (nich verwechseln...) Beides mal der selbe ausschnittt (ca. 3,5 Sek.) grüße flo |
Re: Sound graphisch darstellen
Es kann sehr gut sein, dass Wavepad für einen X-Wert den Durchschnitt aller Samples die auf diesem X-Wert (Pixel) liegen anzeigt. Bei mir wird einfach nur das Sample genommen, dass an dieser Stelle im Wave ist.
Lässt sich aber leicht anpassen, du müsstest nur in der Zeichenroutine je Schritt den Durchschnitt von z.B. Ch16BitMono[i] bis Ch16BitMono[i+scale-1] bilden, und das dann zeichnen. Bisher ists halt nur Ch16BitMono[i], und dann inc(i, scale); zum nächsten X-Wert. Dann sollte es ähnlich aussehen. Wenn nicht, dann isch da was faul. (Dürfte aber nicht) gruss, dizzy |
Re: Sound graphisch darstellen
Zitat:
Auch Bit-Exoten wie 12 Bit, 32 Bit o.ä. werden nicht erkannt - nur 8 und 16 Bit (die allerdings den größten Teil aller existierenden Waves ausmachen sollten...) Immer wenn der Typ nicht als bekannt ermittelt werden kann wird zwar die Header-Info soweit ausgegeben, aber die Daten zur Sicherheit nicht mehr eingelesen. In diesen Fällen handelt es sich dann aber um Wave-Exoten die sich nicht strikt an die Specs halten - sollte man eh löschen :mrgreen:. gruss, dizzy |
Re: Sound graphisch darstellen
Zu dem vorletzten Beitrag mit den Unterschiedlichen Kurven: Die Werte sind ja immer mal wieder negativ, was ist dann damit? Weil wenn ich die ganzen Werte dann addiere für einen Durchschnitt kommt z.T. schon da was recht niedriges raus, wenn ich dann auch noch /scale mache gibt das fast nix...
Den Betrag aller werte kann ich auch nicht nehmen weil da kommt dann jedesmal fast das gleiche raus als Durchschnit... was ich probiere: es ist entweder Wirrwar wie vorher oder ein nahezu immer gleichhohes dickes band... das gibt doch schon die Lautstärke oder so an?! |
Re: Sound graphisch darstellen
Zitat:
Zitat:
Zitat:
Werde mit aber gleich mal wieder mein WaveLab installieren und so lange frickeln bis die Waves ähnlich aussehen :lol:. Das Thema fuchst mich jetzt irgendwie... Zitat:
bis nachher, dizzy |
Re: Sound graphisch darstellen
OK danke dass du bissl mithilfst, ich hab mir schon den halben Sonntag um die Ohren geschlagen...
Kann man nicht das 16Bit-Dings aber 8Bit umrechnen (also nur das -32xxx bis +32xxx auf 0..255 umrechnen)? Ich versteh das halt net ganz mit Integral und so (10.-Klässler :) ) ... |
Re: Sound graphisch darstellen
Zitat:
Zitat:
Könnte ein Weg sein, müsste man prüfen. Ich fummel heut Abend auch noch etwas, jetzt muss ich erst kurz weg. Aber das will ich heute noch gelöst sehen :) Zitat:
Wenn man das jetzt auf unsere Wavefiles weiterspinnt, so addiert man für den Durchschnitt abwechselnd positive und negative Werte die, je länger das Intervall wird, im Schnitt immer gleicher werden. Somit wäre theoretisch der Durchschnitt eines unendlich langen Wavefiles = 0 (Vorausgesetzt es sind "natürliche" Kurven drin, und nicht eine ewig steigende Flanke oder so etwas). |
Re: Sound graphisch darstellen
Ah ok, das verstehe ich jetzt mit den Flächen... sinus kenne ich ja schon...
PS: ich will es auch heute noc gelöst haben :stupid: , mir gefällt sowas ja auch immer mit rumprobieren, zumindest wenn ich eine realistische Chance habe ;) |
Re: Sound graphisch darstellen
schon fortschritte? :drunken:
Irgendwie liegt der Fehler doch schon im Ausgangsmaterial also im Inhalt dieses Arrays, oder? Ich kann das doch nie so umformen dass da unterschiedliche Sachen mit bei rauskommen... Ich hab probeweise mal eine Sounddatei genommen und eine Stelle gaaanz leise gemacht und weiter hinten mal einen bereich komplett still. Das Prog hat mir die erste Stelle unverändert im vergleich zum rest angezeigt aber die zweite, ganz stille, als lücke (wies sein soll) |
Re: Sound graphisch darstellen
Ist es auch möglich den Sound in Echtzeit dazustellen? D.h. was gerade über den Wave kommt als Graph?
Wenn es geht z.b. bei 5.1 die Kanäle einzeln... Falls nicht, kennt jemand ein solches Prog? |
Re: Sound graphisch darstellen
Ich habs! Ich habs! :hello: :bounce1: :bouncing4:
In den Specs steht, dass bei 16 Bit Waves die Bytes vertauscht im Word stehen... Aber so ganz stimmte das scheinbar nicht, denn die Delphi-Funktion "Swap" macht den Rücktausch, und damit waren die Waves falsch behandelt! Nach kurzer Betrachtung der gezeichneten Rohdaten fiel es mir wie Schuppen von den Augen! Pack mal in die Unit2 folgende function:
Delphi-Quellcode:
Du musst dann nur noch in der Prozedur:
function SwapWord(val: Word): Word;
begin result := val xor $8000; end; // Diese Operation könnte auch verständlicher aussehen, aber ich vermute, dass das obige schneller ist. :) // Ich schreib mal die ersichtlichere Variante: if val > 32768 then result := val - 32768 else result := val + 32768; "procedure TLoadThread.readDataChunkData;" alle Vorkommen von "Swap" in "SwapWord" ändern (sollten 3 sein). Und die Variable "temp" in dieser Prozedur sollte vom Typ "Word" sein, nicht mehr Integer. Ist aber eigentlich nur Kosmetik. Des Weiteren solltest du die beiden Typen: TByteArray = array of ShortInt; TWordArray = array of SmallInt; in ihre Urpsrungsform: TByteArray = array of Byte; TWordArray = array of Word; ändern. Das hat dann allerdings zur Folge, dass alle in den arrays vorkommenden Werte positiv sind, also die Nulldurchgänge an 127 bzw. 32767 sind, und nicht mehr 0. Das müsste beim Zeichnen berücksichtigt werden! Der function.Name ist mit "SwapWord" zwar nicht mehr so ganz korrekt, aber es ist die Lösung! :cheers: Jetzt kann ich wieder gut schlafen :spin2:. |
Re: Sound graphisch darstellen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz