Wave Datei auslesen und anzeigen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Hallo,

eigentlich eine ganz simple Aufgabe. Wave Datei einlesen und anzeigen. Leider kommt bei mir sowas raus:
Bild
Das fällt höchstwahrscheinlich nicht unter Quantisierungsrauschen :)
Das Sinuswelle ganz unten ist das was rauskommen sollte, wurde von mir vorher berechnet.

Hier die ursprüngliche Datei https://rapidshare.com/files/893409802/output.wav . Diese hat, wenn man sie in einem richitgen Editor betrachtet, nicht die dargestellten Probleme.
Das ganze ist mit 16 Bit pro Sample gespeichert, ich les aber nur 8 Bit aus. Wenn ich das ganze jetzt mit 16 Bit auslese bekomm ich folgenden Fehler, weil readframe mit nur ein 8 Bit wert zurück gibt, muss ich zwei aufeinanderfolgende Frames kombinieren? Wenn ja, wie?

Code: Alles auswählen

struct.error: unpack requires a string argument of length 2

Code: Alles auswählen

ref = wave.open("output.wav"). 

print ref.getparams() 

amount = 900
r = []
for frame in ref.readframes(amount):
    print repr(frame)
    r.append(struct.unpack("b", frame)[0])
Grüße,
anogayales
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Bei mir klappt folgendes:

Code: Alles auswählen

n = 900
frames = wave.open('output.wav').readframes(n)
data = struct.unpack('<{0}h'.format(n), frames)
plt.plot(data)
Grüße
Gerrit
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Vielen Dank! Klappt! Werde mir später mal angucken, warum das klappt :)
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Mach ich irgendwas falsch oder warum hat eine diese Sinuskurve (in der output.wav Datei) eine Amplitude die von [-13930,11694] geht. Sollte die nicht symmetrich sein? Es sieht fast danach aus, als hätte die Aufnahme Anlaufschwierigkeiten. Am Anfang geht sie langsam hoch, gegen Ende krieg ich sie ins Intervall [-12779,12747], also immernoch leicht nach Unten orientiert. Hat da jemand ne Ahnung :) ?

Könnte natürlich an meiner Soundkarte liegen. Ich werds mal mit meinem Zweitrechner probieren.

Grüße,
anogayales
Antworten