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 ettWave_read
-objekt, medan en mode av'wb'
returnerar ettWave_write
-objekt. Om mode utelämnas och ett filliknande objekt skickas som file, användsfile.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 enwith
-sats. Närwith
-blocket är färdigt anropas metodenWave_read.close()
ellerWave_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 metodernaget*()
.
- 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 anropasetnframes()
ellersetparams()
med det antal bildrutor som ska skrivas innanclose()
anropas och sedan användawriteframesraw()
för att skriva bildrutorna, eller genom att anropawriteframes()
med alla bildrutor som ska skrivas. I det senare fallet kommerwriteframes()
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 metodernaset*()
. Ställer in alla parametrar.
- tell()¶
Returnerar aktuell position i filen, med samma ansvarsfriskrivning som för metoderna
Wave_read.tell()
ochWave_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()
ellerwriteframesraw()
, och alla försök att göra det kommer att ge upphov tillwave.Error
.