Issue #16685: Added support for writing any bytes-like objects in the aifc,
sunau, and wave modules.
This commit is contained in:
parent
7714ebbe0e
commit
452bab4acf
|
@ -225,12 +225,18 @@ number of frames must be filled in.
|
|||
Write data to the output file. This method can only be called after the audio
|
||||
file parameters have been set.
|
||||
|
||||
.. versionchanged:: 3.4
|
||||
Any :term:`bytes-like object`\ s are now accepted.
|
||||
|
||||
|
||||
.. method:: aifc.writeframesraw(data)
|
||||
|
||||
Like :meth:`writeframes`, except that the header of the audio file is not
|
||||
updated.
|
||||
|
||||
.. versionchanged:: 3.4
|
||||
Any :term:`bytes-like object`\ s are now accepted.
|
||||
|
||||
|
||||
.. method:: aifc.close()
|
||||
|
||||
|
|
|
@ -250,11 +250,17 @@ AU_write objects, as returned by :func:`.open` above, have the following methods
|
|||
|
||||
Write audio frames, without correcting *nframes*.
|
||||
|
||||
.. versionchanged:: 3.4
|
||||
Any :term:`bytes-like object`\ s are now accepted.
|
||||
|
||||
|
||||
.. method:: AU_write.writeframes(data)
|
||||
|
||||
Write audio frames and make sure *nframes* is correct.
|
||||
|
||||
.. versionchanged:: 3.4
|
||||
Any :term:`bytes-like object`\ s are now accepted.
|
||||
|
||||
|
||||
.. method:: AU_write.close()
|
||||
|
||||
|
|
|
@ -208,12 +208,18 @@ Wave_write objects, as returned by :func:`.open`, have the following methods:
|
|||
|
||||
Write audio frames, without correcting *nframes*.
|
||||
|
||||
.. versionchanged:: 3.4
|
||||
Any :term:`bytes-like object`\ s are now accepted.
|
||||
|
||||
|
||||
.. method:: Wave_write.writeframes(data)
|
||||
|
||||
Write audio frames and make sure *nframes* is correct. Can raise an
|
||||
exception if a file is not seekable.
|
||||
|
||||
.. versionchanged:: 3.4
|
||||
Any :term:`bytes-like object`\ s are now accepted.
|
||||
|
||||
|
||||
Note that it is invalid to set any parameters after calling :meth:`writeframes`
|
||||
or :meth:`writeframesraw`, and any attempt to do so will raise
|
||||
|
|
|
@ -692,6 +692,8 @@ class Aifc_write:
|
|||
return self._nframeswritten
|
||||
|
||||
def writeframesraw(self, data):
|
||||
if not isinstance(data, (bytes, bytearray)):
|
||||
data = memoryview(data).cast('B')
|
||||
self._ensure_header_written(len(data))
|
||||
nframes = len(data) // (self._sampwidth * self._nchannels)
|
||||
if self._convert:
|
||||
|
|
|
@ -415,6 +415,8 @@ class Au_write:
|
|||
return self._nframeswritten
|
||||
|
||||
def writeframesraw(self, data):
|
||||
if not isinstance(data, (bytes, bytearray)):
|
||||
data = memoryview(data).cast('B')
|
||||
self._ensure_header_written()
|
||||
if self._comptype == 'ULAW':
|
||||
import audioop
|
||||
|
|
|
@ -146,6 +146,30 @@ class AudioWriteTests(AudioTests):
|
|||
|
||||
self.check_file(TESTFN, self.nframes, self.frames)
|
||||
|
||||
def test_write_bytearray(self):
|
||||
f = self.create_file(TESTFN)
|
||||
f.setnframes(self.nframes)
|
||||
f.writeframes(bytearray(self.frames))
|
||||
f.close()
|
||||
|
||||
self.check_file(TESTFN, self.nframes, self.frames)
|
||||
|
||||
def test_write_array(self):
|
||||
f = self.create_file(TESTFN)
|
||||
f.setnframes(self.nframes)
|
||||
f.writeframes(array.array('h', self.frames))
|
||||
f.close()
|
||||
|
||||
self.check_file(TESTFN, self.nframes, self.frames)
|
||||
|
||||
def test_write_memoryview(self):
|
||||
f = self.create_file(TESTFN)
|
||||
f.setnframes(self.nframes)
|
||||
f.writeframes(memoryview(self.frames))
|
||||
f.close()
|
||||
|
||||
self.check_file(TESTFN, self.nframes, self.frames)
|
||||
|
||||
def test_incompleted_write(self):
|
||||
with open(TESTFN, 'wb') as testfile:
|
||||
testfile.write(b'ababagalamaga')
|
||||
|
|
|
@ -435,6 +435,8 @@ class Wave_write:
|
|||
return self._nframeswritten
|
||||
|
||||
def writeframesraw(self, data):
|
||||
if not isinstance(data, (bytes, bytearray)):
|
||||
data = memoryview(data).cast('B')
|
||||
self._ensure_header_written(len(data))
|
||||
nframes = len(data) // (self._sampwidth * self._nchannels)
|
||||
if self._convert:
|
||||
|
|
|
@ -47,6 +47,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #16685: Added support for writing any bytes-like objects in the aifc,
|
||||
sunau, and wave modules.
|
||||
|
||||
- Issue #5202: Added support for unseekable files in the wave module.
|
||||
|
||||
- Issue #19544 and Issue #1180: Restore global option to ignore
|
||||
|
|
Loading…
Reference in New Issue