Commit Graph

71 Commits

Author SHA1 Message Date
Michiel W. Beijen ca064d9b99 gh-117716: Fix wave RIFF padding for data chunks (GH-145237)
wave.Wave_write now writes the required RIFF pad byte when the data chunk
size is odd.

Update RIFF chunk size calculations in both header writing and header
patching so they include the alignment pad byte when present.

Add a regression test in test_wave.py that verifies
odd-sized writes are padded, RIFF size is correct, and roundtrip reads
preserve frame data.
2026-04-15 14:21:43 +02:00
Michiel W. Beijen d42a04c045 GH-60729: Add IEEE format wave audio support (GH-145931)
(this re-applies reverted commit 61f2a1a599,
with a test fix)

Co-authored-by: Lionel Koenig <lionelk@google.com>
2026-03-18 12:46:26 +00:00
Michiel W. Beijen ff287a72de gh-144975: Fix wave.Wave_write.setframerate() validation order (GH-144976)
Validate the frame rate after rounding to an integer, not before.
This prevents values like 0.5 from passing validation (0.5 > 0)
but then rounding to 0, which would cause a confusing delayed error
"sampling rate not specified" when writing frames.

With this fix, setframerate(0.5) immediately raises "bad frame rate",
providing clear feedback at the point of the error.
2026-03-17 18:01:18 +01:00
Petr Viktorin 747ef70faa GH-60729: Revert "Add IEEE format wave audio support (GH-145384)" (GH-145928)
Revert "GH-60729: Add IEEE format wave audio support (GH-145384)"

This reverts commit 61f2a1a599 for now;
as tests fail on big-endian machines.
2026-03-13 17:51:23 +00:00
Michiel W. Beijen 61f2a1a599 GH-60729: Add IEEE format wave audio support (GH-145384)
Co-authored-by: Lionel Koenig <lionelk@google.com>
2026-03-13 14:10:48 +01:00
Cody Maloney 9dbf77beb6 gh-141968: use bytearray.take_bytes in wave._byteswap (#141973) 2025-11-26 21:15:12 +05:30
Mark Byrne 35908265b0 gh-75593: Add support of bytes and path-like paths in wave.open() (GH-140951) 2025-11-12 10:20:55 +02:00
Sachin Shah 171de05b48 gh-136523: Fix wave.Wave_write emitting an unraisable when open raises (GH-136529) 2025-07-13 08:49:12 +03:00
Bénédikt Tran 3f61ea3add gh-133873: remove deprecated mark interface for wave.Wave_{read,write} objects (#133874) 2025-05-15 14:52:07 +00:00
Victor Stinner 03ad6624c2 gh-105096: Deprecate wave getmarkers() method (#105098)
wave: Deprecate the getmark(), setmark() and getmarkers() methods of
the Wave_read and Wave_write classes. They will be removed in Python
3.15.
2023-05-31 12:09:41 +00:00
Victor Stinner 85e5d03163 gh-105096: Reformat wave documentation (#105136)
Add ".. class::" markups in the wave documentation.

* Reformat also wave.py (minor PEP 8 changes).
* Remove redundant "import struct": it's already imported at top
  level.
* Remove wave.rst from .nitignore
2023-05-31 11:29:10 +00:00
Victor Stinner 036da3bd43 gh-104773: PEP 594: Remove the aifc module (#104933)
* Remove .aifc and .aiff test files of Lib/test/audiodata/
* Remove Lib/test/Sine-1000Hz-300ms.aif test file
2023-05-25 17:20:48 +02:00
Steve Dower a4ac14faa5 gh-77171: Fixes SubFormat check to compare the entire value. Add docs (GH-97509) 2022-09-23 16:08:21 +01:00
Yusuke Kadowaki 92338f8f19 gh-77171 Support WAVE_FORMAT_EXTENSIBLE in the wave module (GH-96777)
The test file, a modified version of Lib/test/audiodata/pluck-pcm24.wav, was provided by Andrea Celletti on the bug tracker.

Co-authored-by: Zackery Spytz <zspytz@gmail.com>
2022-09-14 14:34:40 +01:00
Brett Cannon 3869a839d5 gh-47061: Deprecate chunk (GH-91419) 2022-04-11 15:02:41 -07:00
Brett Cannon 87eec70d97 Deprecate audioop (GH-32392) 2022-04-07 12:27:35 -07:00
Michael Haas 25fa3ecb98 Fix a typo in wave module docstring (GH-17009)
s/pathing/patching/
2019-11-04 22:32:10 -06:00
Victor Stinner ac7b1a3f32 bpo-37320: Remove openfp() of aifc, sunau and wave (GH-14169)
aifc.openfp() alias to aifc.open(), sunau.openfp() alias to
sunau.open(), and wave.openfp() alias to wave.open() have been
removed. They were deprecated since Python 3.7.
2019-06-18 00:00:24 +02:00
Serhiy Storchaka 134cb01cda bpo-32056: Improve exceptions in aifc, wave and sunau. (GH-5951) 2018-03-18 09:55:53 +02:00
Brian Curtin 9f914a01af bpo-31985: Deprecate openfp in aifc, sunau, and wave (#4344)
The openfp functions of aifp, sunau, and wave had pointed to the open
function of each module since 1993 as a matter of backwards
compatibility. In the case of aifc.openfp, it was both undocumented
and untested. This change begins the formal deprecation of those
openfp functions, with their removal coming in 3.9.

This additionally adds a TODO in test_pyclbr around using aifc.openfp,
though it shouldn't be changed until removal in 3.9.
2017-11-10 11:38:25 -05:00
Martin Panter 19e69c5a20 Issue #23883: Add missing APIs to __all__; patch by Jacek Kołodziej 2015-11-14 12:46:42 +00:00
Serhiy Storchaka e0fd7ef6bb Corrected docstrings of audio modules. writeframes() accepts bytes, not str. 2015-07-10 22:13:40 +03:00
Serhiy Storchaka 7e7a3dba5f Issue #23865: close() methods in multiple modules now are idempotent and more
robust at shutdown. If needs to release multiple resources, they are released
even if errors are occured.
2015-04-10 13:24:41 +03:00
Serhiy Storchaka 3062c9a6c8 Issue #19641: Added the audioop.byteswap() function to convert big-endian
samples to little-endian and vice versa.
2013-11-23 22:26:01 +02:00
Serhiy Storchaka f4fd257a02 Issue #19633: Fixed writing not compressed 16- and 32-bit wave files on
big-endian platforms.

Temporary forbidden test_unseekable_incompleted_write fornot compressed 16-
and 32-bit wave file  on big-endian platforms.
2013-11-21 11:04:22 +02:00
Serhiy Storchaka d9a018222f Issue #19633: Fixed writing not compressed 16- and 32-bit wave files on
big-endian platforms.

Temporary forbidden test_unseekable_incompleted_write fornot compressed 16-
and 32-bit wave file  on big-endian platforms.
2013-11-21 11:02:30 +02:00
Serhiy Storchaka 452bab4acf Issue #16685: Added support for writing any bytes-like objects in the aifc,
sunau, and wave modules.
2013-11-16 14:01:31 +02:00
Serhiy Storchaka 7714ebbe0e Issue #5202: Added support for unseekable files in the wave module. 2013-11-16 13:04:00 +02:00
Serhiy Storchaka 29828a6fa9 Issue #1575020: Fixed support of 24-bit wave files on big-endian platforms. 2013-11-09 23:15:52 +02:00
Serhiy Storchaka a44372fd0b Issue #1575020: Fixed support of 24-bit wave files on big-endian platforms. 2013-11-09 23:12:06 +02:00
Serhiy Storchaka 5b37f97ea5 Issue #19276: Fixed the wave module on 64-bit big-endian platforms. 2013-10-17 23:05:19 +03:00
Serhiy Storchaka d3b750516f Issue #19276: Fixed the wave module on 64-bit big-endian platforms. 2013-10-17 23:04:04 +03:00
Serhiy Storchaka e23b2d06c7 Issue #18919: If the close() method of a writer in the sunau or wave module
failed, second invocation of close() and destructor no more raise an
exception.
2013-10-12 21:36:10 +03:00
Serhiy Storchaka 4c6a020a2d Issue #17487: The result of the wave getparams method now is pickleable again.
Patch by Claudiu Popa.
2013-09-04 00:28:43 +03:00
R David Murray 536ffe161c #17616: Improve context manager tests, fix bugs in close method and mode docs.
'mode' docs fix: the file must always be opened in binary in Python3.

Bug in Wave_write.close: when the close method calls the check that the header
exists and it raises an error, the _file attribute never gets set to None, so
the next close tries to close the file again and we get an ignored traceback
in the __del__ method.  The fix is to set _file to None in a finally clause.
This represents a behavior change...in theory a program could be checking for
the error on close and then doing a recovery action on the still open file and
closing it again.  But this change will only go into 3.4, so I think that
behavior change is acceptable given that it would be pretty weird and unlikely
logic to begin with.
2013-07-31 20:48:26 -04:00
R David Murray c91d5eea10 #17616: wave.open now supports the 'with' statement.
Feature and tests by ClClaudiu.Popa, I added the doc changes.
2013-07-31 13:46:08 -04:00
Serhiy Storchaka d739bda6b2 Issue #18084: Use sys.byteorder in wave.py.
Original patch by Hideaki Takahashi.
2013-05-29 23:38:00 +03:00
R David Murray 671cd3290b #17487: wave.getparams now returns a namedtuple.
Patch by Claudiu Popa.
2013-04-10 12:31:43 -04:00
Jesus Cea e4b863982c Closes #16461: Wave library should be able to deal with 4GB wav files, and sample rate of 44100 Hz. 2012-11-17 03:41:54 +01:00
Victor Stinner da9ec995f6 Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
* Replace "bytes" by "bytes object" in struct error messages
 * Document the API change in What's new in Python 3.2
 * Fix test_wave
 * Remove also ugly implicit conversions in test_struct
2010-12-28 13:26:42 +00:00
Georg Brandl cc2adbc693 #10198: fix duplicate header when writeframes() is called with an empty string. 2010-10-30 08:29:28 +00:00
Antoine Pitrou 1ce3eb5c5b Issue #8990: array.fromstring() and array.tostring() get renamed to
frombytes() and tobytes(), respectively, to avoid confusion.  Furthermore,
array.frombytes(), array.extend() as well as the array.array()
constructor now accept bytearray objects.  Patch by Thomas Jollans.
2010-09-01 20:29:34 +00:00
Mark Dickinson 64a38c0eb5 Issue #1512791: In setframerate method of Wave_write, round non-integral
inputs to the nearest integer.  Thanks Neil Tallim for the patch.
2010-08-28 17:22:16 +00:00
Benjamin Peterson 5efea0430c use floor division where needed #7681 2010-01-13 03:49:50 +00:00
Georg Brandl 1a3284ed69 #1535: rename __builtin__ module to builtins. 2007-12-02 09:40:06 +00:00
Guido van Rossum 3172c5d263 Patch# 1258 by Christian Heimes: kill basestring.
I like this because it makes the code shorter! :-)
2007-10-16 18:12:55 +00:00
Collin Winter ce36ad8a46 Raise statement normalization in Lib/. 2007-08-30 01:19:48 +00:00
Jeremy Hylton da3f228740 Convert various string literals to bytes. 2007-08-29 17:26:34 +00:00
Guido van Rossum 09549f4407 Changes in anticipation of stricter str vs. bytes enforcement. 2007-08-27 20:40:10 +00:00
Guido van Rossum 51a883bf87 Make test_wave.py pass.
I have no illusion that this fixes all issues with this module.
2007-07-23 21:28:30 +00:00