#5024: whichhdr now returns the frame count for WAV files.

Patch by Ned Jackson Lovely based on a suggestion by Robert Pyle.
This commit is contained in:
R David Murray 2013-03-18 17:42:42 -04:00
parent 052ddb01b3
commit 1a48b9dd7d
4 changed files with 13 additions and 6 deletions

View File

@ -137,14 +137,17 @@ tests.append(test_voc)
def test_wav(h, f): def test_wav(h, f):
import wave
# 'RIFF' <len> 'WAVE' 'fmt ' <len> # 'RIFF' <len> 'WAVE' 'fmt ' <len>
if not h.startswith(b'RIFF') or h[8:12] != b'WAVE' or h[12:16] != b'fmt ': if not h.startswith(b'RIFF') or h[8:12] != b'WAVE' or h[12:16] != b'fmt ':
return None return None
style = get_short_le(h[20:22]) f.seek(0)
nchannels = get_short_le(h[22:24]) try:
rate = get_long_le(h[24:28]) w = wave.openfp(f, 'r')
sample_bits = get_short_le(h[34:36]) except (EOFError, wave.Error):
return 'wav', rate, nchannels, -1, sample_bits return None
return ('wav', w.getframerate(), w.getnchannels(),
w.getnframes(), 8*w.getsampwidth())
tests.append(test_wav) tests.append(test_wav)

View File

@ -12,7 +12,7 @@ class TestFormats(unittest.TestCase):
('sndhdr.hcom', ('hcom', 22050.0, 1, -1, 8)), ('sndhdr.hcom', ('hcom', 22050.0, 1, -1, 8)),
('sndhdr.sndt', ('sndt', 44100, 1, 5, 8)), ('sndhdr.sndt', ('sndt', 44100, 1, 5, 8)),
('sndhdr.voc', ('voc', 0, 1, -1, 8)), ('sndhdr.voc', ('voc', 0, 1, -1, 8)),
('sndhdr.wav', ('wav', 44100, 2, -1, 16)), ('sndhdr.wav', ('wav', 44100, 2, 5, 16)),
): ):
filename = findfile(filename, subdir="sndhdrdata") filename = findfile(filename, subdir="sndhdrdata")
what = sndhdr.what(filename) what = sndhdr.what(filename)

View File

@ -746,6 +746,7 @@ Hugo Lopes Tavares
Anne Lord Anne Lord
Tom Loredo Tom Loredo
Justin Love Justin Love
Ned Jackson Lovely
Jason Lowe Jason Lowe
Tony Lownds Tony Lownds
Ray Loyzaga Ray Loyzaga

View File

@ -287,6 +287,9 @@ Core and Builtins
Library Library
------- -------
- Issue #5024: sndhdr.whichhdr now returns the frame count for WAV files
rather than -1.
- Issue #17460: Remove the strict argument of HTTPConnection and removing the - Issue #17460: Remove the strict argument of HTTPConnection and removing the
DeprecationWarning being issued from 3.2 onwards. DeprecationWarning being issued from 3.2 onwards.