wave — WAV-Dateien lesen und schreiben¶
Quellcode: Lib/wave.py
Das Modul wave bietet eine bequeme Schnittstelle zum Waveform Audio „WAVE“ (oder „WAV“)-Dateiformat. Nur unkomprimierte PCM-kodierte Wave-Dateien werden unterstützt.
Geändert in Version 3.12: Unterstützung für WAVE_FORMAT_EXTENSIBLE-Header wurde hinzugefügt, vorausgesetzt, das erweiterte Format ist KSDATAFORMAT_SUBTYPE_PCM.
Das Modul wave definiert die folgenden Funktion und Ausnahme
- wave.open(file, mode=None)¶
Wenn file ein String ist, wird die Datei unter diesem Namen geöffnet, andernfalls wird sie als dateiähnliches Objekt behandelt. mode kann sein
'rb'Nur-Lese-Modus.
'wb'Nur-Schreib-Modus.
Beachten Sie, dass dies keine Lese-/Schreibzugriffe auf WAV-Dateien erlaubt.
Ein mode von
'rb'gibt einWave_read-Objekt zurück, während ein mode von'wb'einWave_write-Objekt zurückgibt. Wenn mode weggelassen wird und ein dateiähnliches Objekt als file übergeben wird, wirdfile.modeals Standardwert für mode verwendet.Wenn Sie ein dateiähnliches Objekt übergeben, wird das Wave-Objekt es nicht schließen, wenn seine
close()-Methode aufgerufen wird; es liegt in der Verantwortung des Aufrufers, das Dateiobjekt zu schließen.Die Funktion
open()kann in einerwith-Anweisung verwendet werden. Wenn derwith-Block beendet wird, wird die MethodeWave_read.close()oderWave_write.close()aufgerufen.Geändert in Version 3.4: Unterstützung für nicht durchsuchbare Dateien hinzugefügt.
- exception wave.Error¶
Eine Ausnahme, die ausgelöst wird, wenn etwas unmöglich ist, weil es gegen die WAV-Spezifikation verstößt oder auf eine Implementierungsschwäche stößt.
Wave_read-Objekte¶
- class wave.Wave_read¶
Liest eine WAV-Datei.
Wave_read-Objekte, wie sie von
open()zurückgegeben werden, haben die folgenden Methoden- close()¶
Schließt den Stream, wenn er von
wavegeöffnet wurde, und macht die Instanz unbenutzbar. Dies wird beim Sammeln von Objekten automatisch aufgerufen.
- getnchannels()¶
Gibt die Anzahl der Audiokanäle zurück (
1für Mono,2für Stereo).
- getsampwidth()¶
Gibt die Abtastbreite in Bytes zurück.
- getframerate()¶
Gibt die Abtastfrequenz zurück.
- getnframes()¶
Gibt die Anzahl der Audiolayer zurück.
- getcomptype()¶
Gibt den Kompressionstyp zurück (
'NONE'ist der einzige unterstützte Typ).
- getcompname()¶
Menschenlesbare Version von
getcomptype(). Normalerweise entspricht'nicht komprimiert''NONE'.
- getparams()¶
Gibt ein
namedtuple()(nchannels, sampwidth, framerate, nframes, comptype, compname)zurück, äquivalent zur Ausgabe derget*()-Methoden.
- rewind()¶
Setzt den Dateizeiger auf den Anfang des Audiostreams zurück.
Die folgenden beiden Methoden sind zur Kompatibilität mit dem alten
aifc-Modul definiert und tun nichts Interessantes.- getmarkers()¶
Gibt
Nonezurück.Veraltet seit Version 3.13, wird in Version 3.15 entfernt: Die Methode existierte nur zur Kompatibilität mit dem
aifc-Modul, das in Python 3.13 entfernt wurde.
- getmark(id)¶
Löst eine Ausnahme aus.
Veraltet seit Version 3.13, wird in Version 3.15 entfernt: Die Methode existierte nur zur Kompatibilität mit dem
aifc-Modul, das in Python 3.13 entfernt wurde.
Die folgenden beiden Methoden definieren einen Begriff „Position“, der zwischen ihnen kompatibel ist und ansonsten implementierungsabhängig ist.
- setpos(pos)¶
Setzt den Dateizeiger auf die angegebene Position.
- tell()¶
Gibt die aktuelle Position des Dateizeigers zurück.
Wave_write-Objekte¶
- class wave.Wave_write¶
Schreibt eine WAV-Datei.
Wave_write-Objekte, wie sie von
open()zurückgegeben werden.Für durchsuchbare Ausgabestreams wird der
wave-Header automatisch aktualisiert, um die tatsächlich geschriebene Anzahl von Frames widerzuspiegeln. Für nicht durchsuchbare Streams muss der Wert nframes korrekt sein, wenn die ersten Frame-Daten geschrieben werden. Ein korrekter nframes-Wert kann entweder durch Aufrufen vonsetnframes()odersetparams()mit der Anzahl der Frames, die geschrieben werden, bevorclose()aufgerufen wird, und dann die Verwendung vonwriteframesraw()zum Schreiben der Frame-Daten erreicht werden, oder durch Aufrufen vonwriteframes()mit allen zu schreibenden Frame-Daten. Im letzteren Fall berechnetwriteframes()die Anzahl der Frames in den Daten und setzt nframes entsprechend, bevor die Frame-Daten geschrieben werden.Geändert in Version 3.4: Unterstützung für nicht durchsuchbare Dateien hinzugefügt.
Wave_write-Objekte haben die folgenden Methoden
- close()¶
Stellt sicher, dass nframes korrekt ist, und schließt die Datei, wenn sie von
wavegeöffnet wurde. Diese Methode wird beim Sammeln von Objekten aufgerufen. Sie löst eine Ausnahme aus, wenn der Ausgabestream nicht durchsuchbar ist und nframes nicht mit der Anzahl der tatsächlich geschriebenen Frames übereinstimmt.
- setnchannels(n)¶
Setzt die Anzahl der Kanäle.
- setsampwidth(n)¶
Setzt die Abtastbreite auf n Bytes.
- setframerate(n)¶
Setzt die Bildrate auf n.
Geändert in Version 3.2: Eine nicht-ganzzahlige Eingabe für diese Methode wird auf die nächste Ganzzahl gerundet.
- setnframes(n)¶
Setzt die Anzahl der Frames auf n. Dies wird später geändert, wenn die tatsächlich geschriebene Anzahl von Frames abweicht (dieser Update-Versuch löst einen Fehler aus, wenn der Ausgabestream nicht durchsuchbar ist).
- setcomptype(type, name)¶
Setzt den Kompressionstyp und die Beschreibung. Derzeit wird nur der Kompressionstyp
NONEunterstützt, was bedeutet, keine Kompression.
- setparams(tuple)¶
Das tuple sollte
(nchannels, sampwidth, framerate, nframes, comptype, compname)sein, mit Werten, die für dieset*()-Methoden gültig sind. Setzt alle Parameter.
- tell()¶
Gibt die aktuelle Position in der Datei zurück, mit demselben Hinweis wie für die Methoden
Wave_read.tell()undWave_read.setpos().
- writeframesraw(data)¶
Schreibt Audio-Frames, ohne nframes zu korrigieren.
Geändert in Version 3.4: Jedes bytes-ähnliche Objekt wird jetzt akzeptiert.
- writeframes(data)¶
Schreibt Audio-Frames und stellt sicher, dass nframes korrekt ist. Es wird ein Fehler ausgelöst, wenn der Ausgabestream nicht durchsuchbar ist und die Gesamtzahl der Frames, die nach dem Schreiben von data geschrieben wurden, nicht mit dem zuvor für nframes gesetzten Wert übereinstimmt.
Geändert in Version 3.4: Jedes bytes-ähnliche Objekt wird jetzt akzeptiert.
Beachten Sie, dass es ungültig ist, Parameter nach dem Aufrufen von
writeframes()oderwriteframesraw()zu setzen, und jeder Versuch, dies zu tun, wirdwave.Errorauslösen.