wave — Läsa och skriva WAV-filer

Källkod: Lib/wave.py


Modulen wave ger ett bekvämt gränssnitt till filformatet Waveform Audio ”WAVE” (eller ”WAV”). Endast okomprimerade PCM-kodade wave-filer stöds.

Ändrad i version 3.12: Stöd för rubrikerna WAVE_FORMAT_EXTENSIBLE har lagts till, förutsatt att det utökade formatet är KSDATAFORMAT_SUBTYPE_PCM.

Modulen wave definierar följande funktion och undantag:

wave.open(file, mode=None)

Om file är en sträng öppnas filen med det namnet, annars behandlas den som ett filliknande objekt. mode kan vara:

'rb'

Endast läsläge.

'wb'

Endast skrivläge.

Observera att den inte tillåter läsning/skrivning av WAV-filer.

En mode av 'rb' returnerar ett Wave_read-objekt, medan en mode av 'wb' returnerar ett Wave_write-objekt. Om mode utelämnas och ett filliknande objekt skickas som file, används file.mode som standardvärde för mode.

Om du skickar in ett filliknande objekt kommer wave-objektet inte att stänga det när dess close()-metod anropas; det är anroparens ansvar att stänga filobjektet.

Funktionen open() kan användas i en with-sats. När with-blocket är färdigt anropas metoden Wave_read.close() eller Wave_write.close().

Ändrad i version 3.4: Lagt till stöd för filer som inte kan sökas.

exception wave.Error

Ett fel som uppstår när något är omöjligt eftersom det strider mot WAV-specifikationen eller har en implementeringsbrist.

Wave_read-objekt

class wave.Wave_read

Läs en WAV-fil.

Wave_read-objekt, som returneras av open(), har följande metoder:

close()

Stäng strömmen om den öppnades av wave, och gör instansen oanvändbar. Detta anropas automatiskt vid insamling av objekt.

getnchannels()

Returnerar antalet ljudkanaler (1 för mono, 2 för stereo).

getsampwidth()

Returnerar samplingsbredd i bytes.

getframerate()

Returnerar samplingsfrekvens.

getnframes()

Returnerar antalet ljudrutor.

getcomptype()

Returnerar komprimeringstyp ('NONE' är den enda typ som stöds).

getcompname()

Mänskligt läsbar version av getcomptype(). Vanligtvis är 'not compressed' parallell med 'NONE'.

getparams()

Returnerar en namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname), motsvarande utdata från metoderna get*().

readframes(n)

Läser och returnerar högst n bildrutor av ljud, som ett bytes-objekt.

rewind()

Spola tillbaka filpekaren till början av ljudströmmen.

Följande två metoder är definierade för kompatibilitet med den gamla aifc-modulen, och gör inget intressant.

getmarkers()

Returnerar None.

Deprecated since version 3.13, will be removed in version 3.15: Metoden fanns bara för kompatibilitet med modulen aifc som har tagits bort i Python 3.13.

getmark(id)

Upprätta ett fel.

Deprecated since version 3.13, will be removed in version 3.15: Metoden fanns bara för kompatibilitet med modulen aifc som har tagits bort i Python 3.13.

Följande två metoder definierar en term ”position” som är kompatibel mellan dem och i övrigt är beroende av implementeringen.

setpos(pos)

Ställ in filpekaren på den angivna positionen.

tell()

Returnerar aktuell position för filpekaren.

Wave_write Objekt

class wave.Wave_write

Skriv en WAV-fil.

Wave_write-objekt, som returneras av open().

För sökbara utdataströmmar kommer wave-headern automatiskt att uppdateras för att återspegla det antal bildrutor som faktiskt skrivs. För osökbara strömmar måste nframes-värdet vara korrekt när den första bildrutan skrivs. Ett korrekt nframes-värde kan uppnås antingen genom att anropa setnframes() eller setparams() med det antal bildrutor som ska skrivas innan close() anropas och sedan använda writeframesraw() för att skriva bildrutorna, eller genom att anropa writeframes() med alla bildrutor som ska skrivas. I det senare fallet kommer writeframes() att beräkna antalet bildrutor i data och sätta nframes i enlighet med detta innan bildrutorna skrivs.

Ändrad i version 3.4: Lagt till stöd för filer som inte kan sökas.

Wave_write-objekt har följande metoder:

close()

Kontrollera att nframes är korrekt, och stäng filen om den öppnades av wave. Denna metod anropas vid insamling av objekt. Den kommer att ge upphov till ett undantag om utdataströmmen inte är sökbar och nframes inte stämmer överens med antalet bildrutor som faktiskt skrivs.

setnchannels(n)

Ställ in antalet kanaler.

setsampwidth(n)

Ställ in samplingsbredden till n bytes.

setframerate(n)

Ställ in bildfrekvensen till n.

Ändrad i version 3.2: En icke-integral indata till denna metod avrundas till närmaste heltal.

setnframes(n)

Ställ in antalet bildrutor till n. Detta kommer att ändras senare om antalet bilder som faktiskt skrivs är annorlunda (detta uppdateringsförsök kommer att ge upphov till ett fel om utdataströmmen inte är sökbar).

setcomptype(type, name)

Ange komprimeringstyp och beskrivning. För närvarande stöds endast komprimeringstypen NONE, vilket innebär ingen komprimering.

setparams(tuple)

tupeln bör vara (nchannels, sampwidth, framerate, nframes, comptype, compname), med värden som är giltiga för metoderna set*(). Ställer in alla parametrar.

tell()

Returnerar aktuell position i filen, med samma ansvarsfriskrivning som för metoderna Wave_read.tell() och Wave_read.setpos().

writeframesraw(data)

Skriv ljudramar utan att korrigera nframes.

Ändrad i version 3.4: Alla bytesliknande objekt accepteras nu.

writeframes(data)

Skriv ljudrutor och kontrollera att nframes är korrekt. Ett fel kommer att uppstå om utdataströmmen inte är sökbar och det totala antalet bildrutor som har skrivits efter att data har skrivits inte överensstämmer med det tidigare inställda värdet för nframes.

Ändrad i version 3.4: Alla bytesliknande objekt accepteras nu.

Observera att det är ogiltigt att ange några parametrar efter anrop av writeframes() eller writeframesraw(), och alla försök att göra det kommer att ge upphov till wave.Error.