Seite 1 von 1

Audiosignal Visualisieren (qwt)

Verfasst: 4. Mai 2007 11:44
von Parcivall
Hallo!

Hat schon jemand versucht ein Audiosignal z.B. als .wav zu visualisieren?
Leider fehlt mir ein wenig die Programmiererfahrung!
Das Ziel soll es sein Daten die ich von meiner Soundkarte einlese direkt zu visualisieren....

Ich habe denke ich (wenn belehrt mich eines besseren) die passenden Bibliotheken gefunden.

FMOD-> zur Soundaufnahme (.wav )

QWT -> Zur Visualisierung

Was mir nicht ganz klar ist die eigentliche Schnittstelle...
Wie kann ich letztendlich qwt dazu bringen mein Audiosignal als solches darzustellen?

Die bisherigen Beispiele bezogen sich darauf die jeweiligen geploteten Signale abhängig von der X-Achsen position zu berechnen.
Da ja Funktion in diesen Beispielen bekannt ist.
Ein Audiosignal hingegen hatt kein festes muster also muss ich ja Punkt für Punkt darstellen..?

Vieeelen Dank für die Untestützung

Verfasst: 5. Mai 2007 10:03
von Uwe
Eventuell hilft: http://ccrma-www.stanford.edu/~dkc/gape ?

Für Qwt ist eine Kurve die Representation einer Menge von Punkten. Wenn Du Dein Audiosignal als Kurve darstellen willst, muß Deine Anwendung also in jedem Fall Punkte zur Verfügung stellen.

Um Dir zu helfen, wie Du das handwerklich am Besten hinbekommst, müsste ich mehr über Deine Anwendung wissen. Also z.B. wie liegen die Daten, die Du visualisieren willst vor ?

Uwe

Verfasst: 8. Mai 2007 08:17
von Parcivall
Vielen Dank für Deine Antwort Uwe!

Ich messe mein audiosignal über eine bereits vorhandenen Hardware.
Diese multiplext je 8 Audioeingänge und berechnet jeden davon als RMS Wert.
Versendet wird das gesammte Packet in kontinuierlichen Zeitabständen über die RS232 Schnittstelle.
Ich habe mir die Daten entsprechend der Zeit darstellen lassen...(Excel Tabellengraph)
Nun würde ich das ganze natürlich gerne 1:1 in QT bzw. QWT darstellen wollen.
Ich nehme an ich muss daher ein 2-D Feld anlegen mit entsprechenden Werten (später wird dieses automatisch mit neuen Werten gefült).
Wenn ich das jetzt plotten würde müsste es ja mehrere einzelne Punkte geben.
Als nächstes müsste man diese einzelnen Punkte ich nähme an durch stylesheets verbinden und somit den Graph erzeugen oder?

Verfasst: 8. Mai 2007 19:38
von Uwe
Ok, Du willst also 8 Kurven darstellen, mit der Zeit auf der x-Achse und dem RMS Wert auf der y-Achse. Ich gehe mal davon aus, daß Du die Daten von der RS232 Schnittstelle in irgendeiner Art von Datenstruktur (vermutlich als Ringpuffer) abspeicherst.

1) Schnittstelle zu Deinen Daten

Als erstes mußt Du eine Klasse YourData von QwtData ableiten, die Qwt eine Schnittstelle zu Deiner Datenstruktur zur Verfügung stellt:

Code: Alles auswählen

class YourData: public QwtData
{
public:
    virtual size_t size() const;
    virtual double x(size_t i) const;
    virtual double y(size_t i) const;
    virtual QwtData *copy() const;
};
Beachte daß Du bei copy nur die Schnittstelle (nicht die Daten) kopieren mußt. Die anderen Methoden sind denke ich selbsterklärend.
Für jede Kurve benötigst Du genau ein solches Objekt.

Schau Dir eventuell das simple_plot Beispiel an. Dort wird zwar ein QwtData Objekt ohne Datenhaltung angelegt, aber das Prinzip sollte klar werden.

2) Kurven

Danach legst Du für jede Kurve ein QwtPlotCurve Objekt an und stellst die gewünschten Darstellungsattributen ein. Anschliessend verknüpfst Du jede Kurve mit einem Deiner Datenobjekte.

3) Plot Widget

Anschliessend verknüpst Du die Kurven mit einem QwtPlot Widget. Mit QwtPlot::replot werden dann die aktuellen Werte aus Deiner Datenstruktur visualisiert.

Beispiele für die Schritte 2+3 findest Du in den Qwt Examples zur Genüge.

HTH,
Uwe