Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Indicate supported sound header formats
  • Loading branch information
nanjekyejoannah committed Jul 21, 2020
commit c5224866831864f85a0c5c59ad8f0467201a5833
48 changes: 48 additions & 0 deletions Doc/library/sndhdr.rst
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,51 @@ be the sample size in bits or ``'A'`` for A-LAW or ``'U'`` for u-LAW.
.. versionchanged:: 3.5
Result changed from a tuple to a namedtuple.

The following sound header types are recognized, as listed below with the return value
from :func:`whathdr`: and :func:`what`:

+------------+------------------------------------+
| Value | Sound header format |
+============+====================================+
| ``'aifc'`` | Compressed Audio Interchange Files |
+------------+------------------------------------+
| ``'aiff'`` | Audio Interchange Files |
Comment thread
nanjekyejoannah marked this conversation as resolved.
+------------+------------------------------------+
| ``'au'`` | AU Files |
+------------+------------------------------------+
| ``'hcom'`` | HCOM Files |
+------------+------------------------------------+
| ``'sndr'`` | SNDR Files |
+------------+------------------------------------+
Comment thread
nanjekyejoannah marked this conversation as resolved.
| ``'sndt'`` | SNDT Files |
+------------+------------------------------------+
| ``'voc'`` | VOC Files |
+------------+------------------------------------+
| ``'wav'`` | WAV Files |
+------------+------------------------------------+
| ``'8svx'`` | 8SVX Files |
+------------+------------------------------------+
| ``'sb'`` | SB Files |
+------------+------------------------------------+
| ``'ub'`` | UB Files |
+------------+------------------------------------+
| ``'ul'`` | uLAW Audio Files |
+------------+------------------------------------+

.. data:: tests
Comment thread
nanjekyejoannah marked this conversation as resolved.

A list of functions performing the individual tests. Each function takes two
arguments: the byte-stream and an open file-like object. When :func:`what` is
called with a byte-stream, the file-like object will be ``None``.

The test function should return a string describing the image type if the test
succeeded, or ``None`` if it failed.

Example::

>>> import sndhdr
>>> imghdr.what('bass.wav')
'wav'
>>> imghdr.whathdr('bass.wav')
'wav'
Comment thread
nanjekyejoannah marked this conversation as resolved.
Outdated

8 changes: 8 additions & 0 deletions Lib/sndhdr.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ def whathdr(filename):
tests = []

def test_aifc(h, f):
"""AIFC and AIFF files"""
import aifc
if not h.startswith(b'FORM'):
return None
Expand All @@ -94,6 +95,7 @@ def test_aifc(h, f):


def test_au(h, f):
"""AU and SND files"""
if h.startswith(b'.snd'):
func = get_long_be
elif h[:4] in (b'\0ds.', b'dns.'):
Expand Down Expand Up @@ -127,6 +129,7 @@ def test_au(h, f):


def test_hcom(h, f):
"""HCOM file"""
if h[65:69] != b'FSSD' or h[128:132] != b'HCOM':
return None
divisor = get_long_be(h[144:148])
Expand All @@ -140,6 +143,7 @@ def test_hcom(h, f):


def test_voc(h, f):
"""VOC file"""
if not h.startswith(b'Creative Voice File\032'):
return None
sbseek = get_short_le(h[20:22])
Expand All @@ -154,6 +158,7 @@ def test_voc(h, f):


def test_wav(h, f):
"""WAV file"""
import wave
# 'RIFF' <len> 'WAVE' 'fmt ' <len>
if not h.startswith(b'RIFF') or h[8:12] != b'WAVE' or h[12:16] != b'fmt ':
Expand All @@ -170,6 +175,7 @@ def test_wav(h, f):


def test_8svx(h, f):
"""8SVX file"""
if not h.startswith(b'FORM') or h[8:12] != b'8SVX':
return None
# Should decode it to get #channels -- assume always 1
Expand All @@ -179,6 +185,7 @@ def test_8svx(h, f):


def test_sndt(h, f):
"""SNDT file"""
if h.startswith(b'SOUND'):
nsamples = get_long_le(h[8:12])
rate = get_short_le(h[20:22])
Expand All @@ -188,6 +195,7 @@ def test_sndt(h, f):


def test_sndr(h, f):
"""SNDR file"""
if h.startswith(b'\0\0'):
rate = get_short_le(h[2:4])
if 4000 <= rate <= 25000:
Expand Down