ich will ein Oszilloskop(-Display) im x-y Modus mit python und opengl simulieren zwecks analyse von (Stereo ) wav Dateien.
Die Datenpunkte die ich anzeigen möchte liegen in einem numpy Array vor ( die wav Datei wurde mittels scipy.io.wavfile.read ) eingelesen. Das Array sieht so aus:
Code: Alles auswählen
>>> data
array([[0, 0],
[0, 0],
[0, 0],
...,
[0, 0],
[0, 0],
[0, 0]], dtype=int16)
Nun hat diese Datei eine samplerate von 44,1 kHz also entsprechen 44100 Array Einträge einer Sekunde Sound.
Da es kaum möglich sein wird 44100 Einträge pro Sekunde zu plotten ( oder doch ?) hatte ich mir gedacht ich Plotte erstmal immer nur 100 Punkte in jedem Frame. Dazu hole ich mir jeden Fünfhundertsten Eintrag aus dem Array und schreibe diesen in einen Ringpuffer ( 100 Einträge; die Zahlen hier sind willkürlich festgelegt worden ) und verwende dann folgendes Konstrukt um den Ringpuffer zu zeichnen
( Ich zeichne kleine Vierecke statt einfach nur ein Punkt zu Zeichnen ):
Code: Alles auswählen
size=0.5
scale=500
b = rbuffer.get()
for t in b:
glColor4f(255,0,0,1)
glRectd(t[0]/scale-size,t[1]/scale-size,t[0]/scale+size,t[1]/scale+size)
pygame.display.flip()
Das Funktioniert auch halbwegs.
Aber eben nur halbwegs weil:
1. Das ganze ist seeeehr langsam bei der Anzeige ( ich weiß ich sollte keine Wunder von einer Skriptsprache erwarten; Aber es gibt doch sicher eine Möglichkeit das ganze zu Beschleunigen; Benutze ich eventuell OpenGL falsch bzw. nicht optimal ? )
2. Weiß ich nicht ob einfach nur Punkte zeichnen der Richtige weg ist um ein Oszilloskop ( im x-y Modus ) zu simulieren
( man sieht die erwarteten Muster teilweise jedoch sieht das ganze mehr aus nach Game of Life wobei das vielleicht auf die langsame Darstellung zurückzuführen ist )
3. Habe ich keine Idee wie ich es hinbekomme soll, dass die Anzeige genauso schnell läuft wie wenn ich die Sounddatei abspielen würde.
Weiß jemand was ich besser machen könnte?
P.S.: Ich möchte noch anmerken, dass ich bis jetzt so gut wie nie etwas mit openGL gemacht habe.
Python ist außerdem auch nicht meine "Hauptsprache" ( Hat aber gute Chancen zur selbigen zu werden; speziell wegen
Paketen wie scipy und matplotlib )