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 ein Wave_read-Objekt zurück, während ein mode von 'wb' ein Wave_write-Objekt zurückgibt. Wenn mode weggelassen wird und ein dateiähnliches Objekt als file übergeben wird, wird file.mode als 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 einer with-Anweisung verwendet werden. Wenn der with-Block beendet wird, wird die Methode Wave_read.close() oder Wave_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 wave geöffnet wurde, und macht die Instanz unbenutzbar. Dies wird beim Sammeln von Objekten automatisch aufgerufen.

getnchannels()

Gibt die Anzahl der Audiokanäle zurück (1 für Mono, 2 fü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 der get*()-Methoden.

readframes(n)

Liest und gibt maximal n Frames Audio zurück, als bytes-Objekt.

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 None zurü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 von setnframes() oder setparams() mit der Anzahl der Frames, die geschrieben werden, bevor close() aufgerufen wird, und dann die Verwendung von writeframesraw() zum Schreiben der Frame-Daten erreicht werden, oder durch Aufrufen von writeframes() mit allen zu schreibenden Frame-Daten. Im letzteren Fall berechnet writeframes() 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 wave geö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 NONE unterstützt, was bedeutet, keine Kompression.

setparams(tuple)

Das tuple sollte (nchannels, sampwidth, framerate, nframes, comptype, compname) sein, mit Werten, die für die set*()-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() und Wave_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() oder writeframesraw() zu setzen, und jeder Versuch, dies zu tun, wird wave.Error auslösen.