mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
parent
aad627f2f9
commit
4487dd0ed5
5 changed files with 39 additions and 5 deletions
|
@ -16,8 +16,9 @@
|
||||||
|
|
||||||
The :mod:`sndhdr` provides utility functions which attempt to determine the type
|
The :mod:`sndhdr` provides utility functions which attempt to determine the type
|
||||||
of sound data which is in a file. When these functions are able to determine
|
of sound data which is in a file. When these functions are able to determine
|
||||||
what type of sound data is stored in a file, they return a tuple ``(type,
|
what type of sound data is stored in a file, they return a
|
||||||
sampling_rate, channels, frames, bits_per_sample)``. The value for *type*
|
:func:`~collections.namedtuple`, containing five attributes: (``filetype``,
|
||||||
|
``framerate``, ``nchannels``, ``nframes``, ``sampwidth``). The value for *type*
|
||||||
indicates the data type and will be one of the strings ``'aifc'``, ``'aiff'``,
|
indicates the data type and will be one of the strings ``'aifc'``, ``'aiff'``,
|
||||||
``'au'``, ``'hcom'``, ``'sndr'``, ``'sndt'``, ``'voc'``, ``'wav'``, ``'8svx'``,
|
``'au'``, ``'hcom'``, ``'sndr'``, ``'sndt'``, ``'voc'``, ``'wav'``, ``'8svx'``,
|
||||||
``'sb'``, ``'ub'``, or ``'ul'``. The *sampling_rate* will be either the actual
|
``'sb'``, ``'ub'``, or ``'ul'``. The *sampling_rate* will be either the actual
|
||||||
|
@ -31,13 +32,19 @@ be the sample size in bits or ``'A'`` for A-LAW or ``'U'`` for u-LAW.
|
||||||
.. function:: what(filename)
|
.. function:: what(filename)
|
||||||
|
|
||||||
Determines the type of sound data stored in the file *filename* using
|
Determines the type of sound data stored in the file *filename* using
|
||||||
:func:`whathdr`. If it succeeds, returns a tuple as described above, otherwise
|
:func:`whathdr`. If it succeeds, returns a namedtuple as described above, otherwise
|
||||||
``None`` is returned.
|
``None`` is returned.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
Result changed from a tuple to a namedtuple.
|
||||||
|
|
||||||
|
|
||||||
.. function:: whathdr(filename)
|
.. function:: whathdr(filename)
|
||||||
|
|
||||||
Determines the type of sound data stored in a file based on the file header.
|
Determines the type of sound data stored in a file based on the file header.
|
||||||
The name of the file is given by *filename*. This function returns a tuple as
|
The name of the file is given by *filename*. This function returns a namedtuple as
|
||||||
described above on success, or ``None``.
|
described above on success, or ``None``.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
Result changed from a tuple to a namedtuple.
|
||||||
|
|
||||||
|
|
|
@ -264,6 +264,13 @@ smtplib
|
||||||
implement custom authentication mechanisms (contributed by Milan Oberkirch in
|
implement custom authentication mechanisms (contributed by Milan Oberkirch in
|
||||||
:issue:`15014`).
|
:issue:`15014`).
|
||||||
|
|
||||||
|
sndhdr
|
||||||
|
------
|
||||||
|
|
||||||
|
* :func:`~sndhdr.what` and :func:`~sndhdr.whathdr` now return
|
||||||
|
:func:`~collections.namedtuple` \s (contributed by Claudiu Popa in
|
||||||
|
:issue:`18615`).
|
||||||
|
|
||||||
socket
|
socket
|
||||||
------
|
------
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,11 @@ explicitly given directories.
|
||||||
|
|
||||||
__all__ = ['what', 'whathdr']
|
__all__ = ['what', 'whathdr']
|
||||||
|
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
|
SndHeaders = namedtuple('SndHeaders',
|
||||||
|
'filetype framerate nchannels nframes sampwidth')
|
||||||
|
|
||||||
def what(filename):
|
def what(filename):
|
||||||
"""Guess the type of a sound file."""
|
"""Guess the type of a sound file."""
|
||||||
res = whathdr(filename)
|
res = whathdr(filename)
|
||||||
|
@ -45,7 +50,7 @@ def whathdr(filename):
|
||||||
for tf in tests:
|
for tf in tests:
|
||||||
res = tf(h, f)
|
res = tf(h, f)
|
||||||
if res:
|
if res:
|
||||||
return res
|
return SndHeaders(*res)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import sndhdr
|
import sndhdr
|
||||||
|
import pickle
|
||||||
import unittest
|
import unittest
|
||||||
from test.support import findfile
|
from test.support import findfile
|
||||||
|
|
||||||
|
@ -18,6 +19,18 @@ class TestFormats(unittest.TestCase):
|
||||||
what = sndhdr.what(filename)
|
what = sndhdr.what(filename)
|
||||||
self.assertNotEqual(what, None, filename)
|
self.assertNotEqual(what, None, filename)
|
||||||
self.assertSequenceEqual(what, expected)
|
self.assertSequenceEqual(what, expected)
|
||||||
|
self.assertEqual(what.filetype, expected[0])
|
||||||
|
self.assertEqual(what.framerate, expected[1])
|
||||||
|
self.assertEqual(what.nchannels, expected[2])
|
||||||
|
self.assertEqual(what.nframes, expected[3])
|
||||||
|
self.assertEqual(what.sampwidth, expected[4])
|
||||||
|
|
||||||
|
def test_pickleable(self):
|
||||||
|
filename = findfile('sndhdr.aifc', subdir="sndhdrdata")
|
||||||
|
what = sndhdr.what(filename)
|
||||||
|
dump = pickle.dumps(what)
|
||||||
|
self.assertEqual(pickle.loads(dump), what)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -166,6 +166,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue $18615: sndhdr.what/whathdr now return a namedtuple.
|
||||||
|
|
||||||
- Issue #22462: Fix pyexpat's creation of a dummy frame to make it
|
- Issue #22462: Fix pyexpat's creation of a dummy frame to make it
|
||||||
appear in exception tracebacks.
|
appear in exception tracebacks.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue