Browse Source

bpo-30077: Add support for Apple aifc/sowt pseudo-compression (GH-24449)

Co-authored-by: Toby Thurston <thurston@eml.cc>
pull/27761/head
dnknth 5 years ago
committed by GitHub
parent
commit
e4ed9d2153
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      Lib/aifc.py
  2. 1
      Misc/NEWS.d/next/Library/2021-02-04-23-16-03.bpo-30077.v6TqAi.rst

23
Lib/aifc.py

@ -462,6 +462,10 @@ class Aifc_read:
data, self._adpcmstate = audioop.adpcm2lin(data, 2, self._adpcmstate) data, self._adpcmstate = audioop.adpcm2lin(data, 2, self._adpcmstate)
return data return data
def _sowt2lin(self, data):
import audioop
return audioop.byteswap(data, 2)
def _read_comm_chunk(self, chunk): def _read_comm_chunk(self, chunk):
self._nchannels = _read_short(chunk) self._nchannels = _read_short(chunk)
self._nframes = _read_long(chunk) self._nframes = _read_long(chunk)
@ -497,6 +501,8 @@ class Aifc_read:
self._convert = self._ulaw2lin self._convert = self._ulaw2lin
elif self._comptype in (b'alaw', b'ALAW'): elif self._comptype in (b'alaw', b'ALAW'):
self._convert = self._alaw2lin self._convert = self._alaw2lin
elif self._comptype in (b'sowt', b'SOWT'):
self._convert = self._sowt2lin
else: else:
raise Error('unsupported compression type') raise Error('unsupported compression type')
self._sampwidth = 2 self._sampwidth = 2
@ -659,7 +665,7 @@ class Aifc_write:
if self._nframeswritten: if self._nframeswritten:
raise Error('cannot change parameters after starting to write') raise Error('cannot change parameters after starting to write')
if comptype not in (b'NONE', b'ulaw', b'ULAW', if comptype not in (b'NONE', b'ulaw', b'ULAW',
b'alaw', b'ALAW', b'G722'):
b'alaw', b'ALAW', b'G722', b'sowt', b'SOWT'):
raise Error('unsupported compression type') raise Error('unsupported compression type')
self._comptype = comptype self._comptype = comptype
self._compname = compname self._compname = compname
@ -680,7 +686,7 @@ class Aifc_write:
if self._nframeswritten: if self._nframeswritten:
raise Error('cannot change parameters after starting to write') raise Error('cannot change parameters after starting to write')
if comptype not in (b'NONE', b'ulaw', b'ULAW', if comptype not in (b'NONE', b'ulaw', b'ULAW',
b'alaw', b'ALAW', b'G722'):
b'alaw', b'ALAW', b'G722', b'sowt', b'SOWT'):
raise Error('unsupported compression type') raise Error('unsupported compression type')
self.setnchannels(nchannels) self.setnchannels(nchannels)
self.setsampwidth(sampwidth) self.setsampwidth(sampwidth)
@ -778,14 +784,21 @@ class Aifc_write:
data, self._adpcmstate = audioop.lin2adpcm(data, 2, self._adpcmstate) data, self._adpcmstate = audioop.lin2adpcm(data, 2, self._adpcmstate)
return data return data
def _lin2sowt(self, data):
import audioop
return audioop.byteswap(data, 2)
def _ensure_header_written(self, datasize): def _ensure_header_written(self, datasize):
if not self._nframeswritten: if not self._nframeswritten:
if self._comptype in (b'ULAW', b'ulaw', b'ALAW', b'alaw', b'G722'):
if self._comptype in (b'ULAW', b'ulaw',
b'ALAW', b'alaw', b'G722',
b'sowt', b'SOWT'):
if not self._sampwidth: if not self._sampwidth:
self._sampwidth = 2 self._sampwidth = 2
if self._sampwidth != 2: if self._sampwidth != 2:
raise Error('sample width must be 2 when compressing ' raise Error('sample width must be 2 when compressing '
'with ulaw/ULAW, alaw/ALAW or G7.22 (ADPCM)')
'with ulaw/ULAW, alaw/ALAW, sowt/SOWT '
'or G7.22 (ADPCM)')
if not self._nchannels: if not self._nchannels:
raise Error('# channels not specified') raise Error('# channels not specified')
if not self._sampwidth: if not self._sampwidth:
@ -801,6 +814,8 @@ class Aifc_write:
self._convert = self._lin2ulaw self._convert = self._lin2ulaw
elif self._comptype in (b'alaw', b'ALAW'): elif self._comptype in (b'alaw', b'ALAW'):
self._convert = self._lin2alaw self._convert = self._lin2alaw
elif self._comptype in (b'sowt', b'SOWT'):
self._convert = self._lin2sowt
def _write_header(self, initlength): def _write_header(self, initlength):
if self._aifc and self._comptype != b'NONE': if self._aifc and self._comptype != b'NONE':

1
Misc/NEWS.d/next/Library/2021-02-04-23-16-03.bpo-30077.v6TqAi.rst

@ -0,0 +1 @@
Added support for Apple's aifc/sowt pseudo-compression
Loading…
Cancel
Save